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

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

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

如何减少遍历的 节点数目? 如何 保持一定的正确性呢?

首先可以分析minimax树本身的特点。

                         X 下子9中可能

       1        2          3       4      5      6         7 。。。 9

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

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

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

同样对于O分支可以做类似的分析, 这样我们就可以剪掉大量的分支。

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

原文地址:https://www.cnblogs.com/liyonghelpme/p/4273762.html