棋盤遊戲的人工智能(二)------剪支

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分支能夠作相似的分析, 這樣咱們就能夠剪掉大量的分支。分支

 

固然還有控制樹的深度的方法來限制搜索空間, 不過會犧牲一些準確性。

相關文章
相關標籤/搜索