棋盘游戏的人工智能(二)------剪支

http://blog.csdn.net/lanphaday/article/details/6026315算法

简单的minimax算法遍历了全部的状态空间,耗时确定很长,谁都知道排列组合阶乘 之类的 数值巨大无比的。.net

如何减小遍历的 节点数目? 如何 保持必定的正确性呢?blog

首先能够分析minimax树自己的特色。get

                         X 下子9中可能搜索

       1        2          3       4      5      6         7 。。。 9遍历

要获得 X最大胜率的分支, max(child), 须要一个一个计算每一个子分支, 例如 第一个分支 值是1方法

那么对于第二个分支来说 其返回的值须要 >= 1才有意义, 也就是说 那能够利用这个信息 将1传递給2分支,im

当O在进行下子分析的时候,其子分支 返回的值 若是 有小于 1的那么就不用再分析2分支了, 由于2分支的返回值 确定就小于1,而2分支失去和1分支的抗衡的能力。tar

一样对于O分支能够作相似的分析, 这样咱们就能够剪掉大量的分支。分支

 

固然还有控制树的深度的方法来限制搜索空间, 不过会牺牲一些准确性。

相关文章
相关标签/搜索