1. Minimax 极小化极大算法
搜索策略中的一种(本质零和博弈),旨在让最差的情况得情况出现机会最小,比如让对手赢的机会。往往自身作为树中的max方,选择其子节点中含有value值最大的节点;而作为树中的min方则相反(对手),选择其子节点中含有value值最小的节点。下面上图说明会好理解一点
假设一个有限层数的搜索树如下,我们作为先手方max
max方一般用正方形表示,而min方一般用圆形表示,最底层叶子节点上的数字代表用评估函数计算出的所有可行路径的评估值(根据实际需求定义)

从根节点开始,每个非叶子节点继续递归调用到叶子节点或者存有评估值的节点
以左半边为例子(右同)

- 首先从根节点一直递归到A节点,此时为叶节点,发现其下有三条路径对应评估值10、12、15 ,由于A节点为Min节点,所以应选择三者中的最小值,即10。将此结果记录在A节点上并返回。
- 如果想要判断C节点对应的评估值需要A与B中取得极大值(C为Max节点),而递归调用B节点由于只有一条路径,所以直接记录返回。此时C节点的评估值更新为 max(10,9) = 10。
- 对G节点的右子树重复上述两步,得到D节点评估值 min(5, 15) = 5 ; 得到E节点评估值 min(51, 4, 22) = 4; 得到F节点评估值 max(5, 4) = 5 。
- 综上求得G节点的评估值为 min(10,5) = 5 。完成了左子树,如法炮制右子树就可以得出根节点的最终评估值,如下图所示(深色即为算法选择路径)

通过上述讲解我们发现当层数过多时,计算压力指数提升,所以我们需要通过一些方法提升效率。比如减少实际递归深度,规定到一定层数就不再继续递归,而是以近似的估计函数得到其子节点的估计值(这种做法会导致达不到最优解情况,比如我打一把3分钟的游戏,对手在1.5分钟就推掉了我两座公主塔,那能说明我一定会输吗?可能我在倒计时结束前推掉其国王塔拿下胜利…)
另一种做法就是剪枝,通过减少不必要的枝叶判断来提高搜索效率。一种最常见的算法就是α-β剪枝
2. α-β剪枝(Alpha-Beta Pruning)
α表示所有可行解

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



