📅  最后修改于: 2020-09-23 07:00:28             🧑  作者: Mango
function minimax(node, depth, maximizingPlayer) is
if depth ==0 or node is a terminal node then
return static evaluation of node
if MaximizingPlayer then // for Maximizer Player
maxEva= -infinity
for each child of node do
eva= minimax(child, depth-1, false)
maxEva= max(maxEva,eva) //gives Maximum of the values
return maxEva
else // for Minimizer player
minEva= +infinity
for each child of node do
eva= minimax(child, depth-1, true)
minEva= min(minEva, eva) //gives minimum of the values
return minEva
初始通话:
Minimax(node,3,true)
步骤1:第一步,算法生成整个游戏树,并应用效用函数以获取终端状态的效用值。在下面的树图中,让我们以A为树的初始状态。假设最大化器采取第一轮,其初始值为最坏情况= -infinity,而最小化器采取下一轮,其初始值为最坏情况++ infinity。
步骤2:现在,首先我们找到Maximizer的效用值,其初始值为-∞,因此我们将终端状态下的每个值与Maximizer的初始值进行比较,并确定较高的节点值。它将在所有中找到最大值。
步骤3:在下一步中,轮到最小化器,因此它将比较所有节点的值和+∞,并找到第三层节点的值。
步骤3:现在轮到Maximizer了,它将再次选择所有节点的最大值并找到根节点的最大值。在此游戏树中,只有4层,因此我们可以立即到达根节点,但在实际游戏中,将超过4层。
这就是minimax两人游戏的完整工作流程。
minimax算法的主要缺点是,对于复杂的游戏(如国际象棋,围棋等),它的运行速度非常慢。这种类型的游戏具有很大的分支因子,并且玩家可以选择很多选择。 minimax算法的这一局限性可以通过我们在下一个主题中讨论的alpha-beta修剪得到改善。