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
- alpha-beta剪枝搜索
- 例析Alpha-Beta剪枝
- Alpha-Beta 剪枝算法
- alpha beta 剪枝算法
- alpha-beta剪枝
- Alpha-Beta剪枝算法
- Alpha-beta剪枝算法
- 例析Alpha-Beta剪枝
- Alpha-beta剪枝-井字棋
- Alpha-Beta剪枝(Alpha Beta Pruning)
- Alpha-Beta剪枝算法(Alpha Beta Pruning)
- 对抗博弈 alpha-beta剪枝
- 浅谈"对抗搜索"的alpha-beta 剪枝
- Alpha-beta剪枝算法实例分析
- alpha-beta剪枝的代码实现
- 五子棋(人机)-alpha-beta剪枝
- 极小极大值方法以及alpha-Beta剪枝
- Minimax算法及其剪枝优化Alpha-beta
- 1. Two Sum
- Storm源码浅析之topology的提交
- 干货!程序员需掌握的100个英语词汇
- Litepal开源数据库
- GN使用
- alpha-beta剪枝
- 33.TextView控件(界面上显示一段文本信息)
- iOS Runtime应用小例子 不引入类怎么创建这个类的对象和执行类的方法
- 解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
- 1488 Problem J-qwb又偷懒了
- 机器学习小分队练习题
- Ubuntu安装OpenSSL
- jsp 使用input标签 file 如何上传多个文件
- codeforces 812 B Sagheer, the Hausmeister(枚举)