zoukankan      html  css  js  c++  java
  • 棋盘游戏的人工智能(二)剪支

    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分支可以做类似的分析, 这样我们就可以剪掉大量的分支。

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

  • 相关阅读:
    CoreLocation
    通知(NSNotificationCenter)
    加载xib文件
    UITextField
    UIButton
    UILabel
    UIAlertController
    layoutSubviews
    Java AQS详解(转)
    Java中synchronized
  • 原文地址:https://www.cnblogs.com/liyonghelpme/p/4273762.html
Copyright © 2011-2022 走看看