在博弈游戏中,可以将游戏过程,用一棵博弈树进行存储,树上每个节点表示游戏状态,树枝表示动作。为了赢得游戏,需要有一定的前瞻性(即搜索深度要尽可能深一些),但是随着搜索深度的加深,需要考虑的状态数目成指数级别增长,所以为了提高效率,这里对搜索算法进行了剪枝,将一些明显不会采取的招法忽略,以此来减少状态数目,提高算法效率。
博弈游戏,采取的搜索算法是MaxMinSearch,剪枝策略采取的是AlphaBeta剪枝,将一些明显的劣招放弃搜索。
AlphaBeta剪枝的具体过程,参考博文:
CS 161 Recitation Notes - Minimax with Alpha Beta Pruning
地平线效应:
在很多搜索算法中,为了减少时间和空间消耗,常常采取限定探索深度的方式,来进行搜索。但是这种限定深度,是存在风险的,因为在当前决策中,没有考虑所限深度之外的情况,往往导致做出错误的决定。这就如同,战斗机飞行员在空战中,限于地球曲率的影响,往往看不到地平线以外(地球后侧的)战场,这就常常导致了做出错的决策,是自己限于被动的战场态势。
Alpha可作为MAX方可实现招法的下界值;
Beta可作为MAX方不可实现招法的上界值(到此为止,对方招法的钳制值)。
根据Alpha和Beata可形成一个MAX方招法的的窗口。
算法实现:
Domino游戏,棋盘是一个8*8的表格,有两种Domino牌,分别为2*1和1*2(即:第一个只能竖着放-H,第二个横着放-V),先手是操作H,后手操作V,轮流进行,直到某一方无处下牌为止。
以此为实验Alpha_Beta的对象,编写了一个裸的AI(算法比较糙,没进行什么优化,除了对alpha_beta剪枝外)。