alpha-beta剪枝

来源:互联网 发布:沃尔沃销售数据 编辑:程序博客网 时间:2024/06/11 20:55

alpha-beta剪枝


http://ajstar.blog.163.com/blog/static/1742348392011127361941/

α-β算法

“α-β算法”与“最小-最大”很类似,“最小-最大”的弊端是运行时要查找整个树,每次搜索一层,树的大小成指数级增长。
在一些棋类游戏中,用“最小-最大算法”来遍历所有的走法的话,棋类越复杂所需要考虑的局面越多,那么没增加一层,成指数级增长的“最小-最大算法”很快就不行了。所以“最小-最大算法”不可能做到很深的搜索,有效的分支太多了。

α-β算法的思想

假设你有了一个不太坏的选择A,当你要做别的选择时,你知道它没有A好,那么你就不必要知道它到底有多坏。有了一个当前最好的选择,那么只要没有这个选择好的都是坏的,不必要去追究它到底有多坏,可以直接抛弃它。
在搜索中传递两个值,第一个值是α,即搜索到的最好值,任何比它更小的值就没用了,因为策略就是知道α的值,任何小于或等于α的值都不会有所提高。 第二个值是β,即对于对手来说最坏的值。这是对手所能承受的最坏的结果,因为我们知道在对手看来,他总是会找到一个对策不比β更坏的。如果搜索过程中返回β或比β更好的值,那就够好的了,走棋的一方就没有机会使用这种策略了。

例子

比如,一个人有横多口袋,每个口袋里有好坏不一的各种东西。现在,你需要从这些口袋里选出最好的。规则是你选口袋,口袋拥有者选择口袋中的东西,当然他不希望你拿走好东西,他一定会给你你选择的口袋中最坏的东西。
那么现在的问题就成了,你要挑选“最好的最差的”口袋的东西。
很明显,“最小最大算法“可以做出正确的选择,如果你确切知道每个口袋中每个物品的价值(遍历了整棵树)。但前面已经说过了,这样做效率不高,你需要花很长时间。那么我们要着眼更高效。
我们从第一个口袋开始,第一个口袋中你发现有一块面包和一把小汽车的钥匙。很明显,小汽车钥匙比面包好,但是你不可能得到它,因为口袋的拥有者有选择物品的权利,按照游戏规则他会给你这块面包。那么现在汽车钥匙就无关紧要了,不需要为知道汽车钥匙有多好,而去比较所有东西。
现在看第二个口袋,发现里面有一百块钱和五十块钱,你发现都比你的好,最差的比当前最好的好,那么这个口袋就是你的选择,因为这是你可以得到五十块钱,而一百块是无关紧要的。
第三个口袋,发现第一件东西是一本书,你认为比面包好但比五十块钱差,那么继续往下一个东西看有没有比五十块钱好的,结果发现下一件是一块口香糖,那么果断放弃这个口袋。

算法总结

可以看出,α-β算法的效率更高。
如果某个着法的结果小于或等于α,那么它就是很差的着法,因此可以抛弃。因为我前面说过,在这个策略中,局面对走棋的一方来说是以α为评价的。
如果某个着法的结果大于或等于β,那么整个结点就作废了,因为对手不希望走到这个局面,而它有别的着法可以避免到达这个局面。因此如果我们找到的评价大于或等于β,就证明了这个结点是不会发生的,因此剩下的合理着法没有必要再搜索。
那么最后的结果会是一个大于α小于β的值,这个是双方都能接受的。


另一个极好的举例讲解:

http://blog.csdn.net/tangchenyi/article/details/22925957

原创粉丝点击