Minimax算法与α-β剪枝

 

Minimax算法与α-β剪枝


在局面确定的双人对弈里,常采用博弈树搜索。我方追求更大的赢面,而对方会设法降低我方的赢面。由于局面确定,因此可以对赢面进行评估。我方往较大赢面的方向走,同时考虑对方的走法。由于对方的走法不确定,就假设对方会选择最大程度降低我方赢面的方向走,我方应规避那些对方可以大幅降低我方赢面的走法。原文


Minimax算法

例如,对于如下的局势,假设从左往右搜索,根节点的数值为我方赢面(倒推值):

img

我方应选择中间的路线。因为,如果选择左边的路线,最差的赢面是3;如果选择中间的路线,最差的赢面是15;如果选择右边的路线,最差的赢面是1。虽然选择右边的路线可能有22的赢面,但对方也可能使我方只有1的赢面,假设对方会选择使得我方赢面最小的方向走,那么经过权衡,显然选择中间的路线更为稳妥。

img

实际上,在看右边的路线时,当发现赢面可能为1就不必再去看赢面为12、20、22的分支了,因为已经可以确定右边的路线不是最好的。这个过程就是剪枝,可以避免不必要的计算。


α−β 剪枝

若已知某节点的所有子节点的倒推值,则可以算出该节点的倒推值:对于MAX节点,取最大倒推值;对于MIN节点,取最小倒推值。

记 v 为节点的倒推值,且 α≤v≤β,即 α为最大下界, β 为最小上界。当 α ≥ β 时,该节点剩余的分支就不必继续搜索了(也就是可以进行剪枝了)。注意,当 α = β 时,也可以剪枝,这是因为不会有更好的结果了,但可能有更差的结果。


描述一下我的理解:

若在MIN节点处,MIN的子节点中有一个MAX小于MIN父节点MAX的α,也就是这个MIN节点更新β后的α>β,也就意味着该MIN会导致敌方选得比其他MIN更小的数,这是不希望看到的,也就是说这个MIN是被舍弃的,这个MIN节点下未被搜索的子节点就被遗弃了

若在MAX节点处,MAX的子节点中有一个MIN大于MAX父节点MIN的β,也就是这个MAX节点更新α后的α>β,也就意味着该MAX会导致我方选得比其他MAX更大的数,这是敌方不希望看到的,也就是说这个MAX是被舍弃的,这个MAX节点下未被搜索的子节点就被遗弃了

简化为一句话:剪枝是基于对结果的预估和每个棋手的求稳心理