Minimax算法

Minimax算法被广泛应用在棋类游戏中,是一种找出失败的最大可能性中的最小值的算法(Wikipedia)。

博弈树(game tree)

以“tic tac toe”游戏为例。从当前状态或初始状态开始,根据可以采取的行动(actions)和可以到达的状态(s),绘制子节点,再对子节点绘制子节点。直到游戏结束的状态。如下图这种树称为game tree。

Minimax算法_第1张图片

Minimax算法

先从一个简单的场景入手,介绍Minimax的思想。

假设有一个游戏,只有两个玩家参与,两轮便定出胜负。我们称两个玩家为MAX和MIN。每个玩家在各自的回合中,都有2个到1个行动(actions)可选。MAX先手。下图中,圆形表示MAX的回合,方形表示MIN的回合,每条连线表示当前状态下可以采取的行动。因为假设游戏只有两轮,所以游戏进行到图中标号为4的层时,游戏的胜负就已经知道了,我们可以评估该层各个状态的效用值(utility),来表示玩家MAX的胜负多少,对于这一层的结果,MIN和MAX双方都是知道的。

Minimax算法_第2张图片

假设现在我们就是MAX,我们的对手就是MIN。MIN为了赢得游戏,一定会想办法让MAX的得分最低。游戏双方都会从游戏的结果开始回溯,来指导相应的状态下,自己该采取何种行动来最大化自己的目标。

假设现在处在标号为3的层,是MIN的回合。MIN在所有可选的actions中,一定会选择使得MAX的得分最少的行动。所以将子节点较小的效用值填写到第3层中,表示游戏进行到相应的状态,MAX能达到的最大效用。

接着回溯到第2层,这层是MAX的回合,MAX知道了第3层各种状态下自己的效用值,MAX当然会选择使自己效用最大的行动。所以选取子节点效用最大的填入第2层。

接着回溯第1层,是MIN的回合,与第3层同理。

最后回溯到第0层,MAX的回合,与第2层同理。

MAX从游戏结束的状态开始回溯,知道了自己能够达到的最大效用是-7。

上述过程就是Minimax算法的主要流程。

多玩家场景

前面考虑的都是只有两个玩家参与的场景。如果是多玩家场景,可以将单个的效用值扩展到向量的形式。

Minimax算法_第3张图片

总结

算法的实现可以通过递归的方式,从当前状态开始搜索,一直到游戏结束,然后回溯。但是当游戏的状态和可采取的步骤变多,game tree的深度变深时,博弈树的节点数量就会指数爆炸。所以根据minimax搜索整棵树的行为,对大多数游戏是不现实的。但是Minimax的思想是其他算法的基础。

你可能感兴趣的:(Minimax算法)