实现人机博弈核心是搜索引擎,可适配不同的搜索算法。
1、Alpha-Beta搜索
剪枝可减少极大极小搜索的冗余。
Alpha剪枝,父节点取极大值,剪除已确认较小的子节点。
Beta剪枝,父节点取极小值,剪除已确认较大的节点。
实验数据表明负极大值算法不适合alpha-beta搜索。效率比极大极小值算法低。
2、Fail-soft alpha-beta
搜索失败依然返回分数,并未提高效率,而是为算法改进提供便利。
3、渴望搜索,Aspiration Search
搜索估值在一个目标区间内视作成功,否则视作失败。失败需要重新调整目标区间。
4、极小窗口搜索,PVS,Principal Variation Search
记录最佳节点值作为目标区间最小值,能提升效率。
5、置换表,Transposition Table,TT
如果搜索过的节点已有记录,直接利用记录的结果。需要良好的层次设计。
6、哈希表,Hash Table
利用散列提升内存数据的查找速度。
7、Zobrist哈希技术
一种快速求hash算法。但实际上现代编程语言集成的开发sdk中通常有优秀的hash结构可直接使用,不用重复造轮子。
8、迭代深化,Iterative Deepening
从低到高逐层搜索,不断求精,以控制搜索时间。
9、历史启发,History Heuristic
根据部分已搜索的结果对将要搜索的节点进行优先级排序,提高剪枝效率。
10、杀手启发,Killer Heuristic
记录引发剪枝最多的走法,下次搜索同样深度时优先搜索。
11、SSS*
最佳优先方式建立搜索树,节点较少,但难以理解,内存空间过大。
12、MTD(f)
通过极小窗口不断调整区间,并用置换表记录优化搜索,依赖估值函数精确度。