极大极小及剪枝算法

极大极小

极大极小算法常用于二人博弈游戏,目的是寻找最优的方案使得自己能够利益最大化。

如下图(图中用到了剪枝,这个下面再讲),A和B博弈,假设A和B都足够聪明,会选择当前利益最大化的步子。A为了最大利益,选择最大值,B为了使A最小利益,选择最小值。

选择值的过程如下:

从下往上填值,左下角有如下图节点,在5、6中选择最小值,因此选到了5。

然后再继续到上一层,如下图,5、4中选择最大值,选中了5。

按照这个选择方式,填满了树。

Alpha-Beta 剪枝算法

剪枝是希望在搜索的时候,根据已搜索的结果,剔除超出最优解的分支,那么意味着这个分支下的所有节点都不需要考虑了,大大降低了搜索的次数。

对于每个节点值n,假设α为下界,β为上界,对于α ≤ n ≤ β:

若 α ≤ β 则n有解。

若 α > β 则n无解。

从左下角开始,节点选出最小值3

然后继续往上,取了3,那么得出如下结果:

B节点 上限β = 3 ,下限α = 负无穷。

A节点 上限β = 无穷 ,下限α = 3。

推到出C节点 上限β = 2 ,下限α = 3。

由于α > β,而C节点的12应该被剪枝,如下图:

同理,计算其他节点,如下图:

原文摘自 delevin