我希望获得MinMax算法的伪代码。 我需要编写两个函数,def maxAgent(gameState,depth)和minAgent。 有没有人有正确且易于理解的伪代码。
我希望获得MinMax算法的伪代码。 我需要编写两个函数,def maxAgent(gameState,depth)和minAgent。 有没有人有正确且易于理解的伪代码。
MinMax算法旨在最大化玩家A的得分并最小化玩家B的得分。给定一个节点,您可以通过对后继节点的得分取最大值(对于A)或最小值(对于B)来找到最佳游戏的最终结果。
假设叶子节点已经分配了获胜者(A为1,B为-1),而所有其他节点的得分均为0。然后,您可以使用类似以下内容的方法计算A的最终获胜结果:
getMaxScore(node) {
score = node.score;
for each child node
score = max(score, getMaxScore(node))
next
return score;
}
两个玩家A和B轮流进行游戏。
给定一个评估棋盘局面P的计分函数f。f(P)越大对于A就越好,对于B就越差(即f(P)是在不考虑进一步预测的情况下评估P对于A有多“好”的估价)。
考虑一个棋盘局面P。
如果P是叶节点(即P是一个获胜的位置或者我们已经向前看了想要看的层数),那么我们返回f(P)作为此节点的得分。
否则,P不是一个叶节点,而是有子节点C1, ..., Cn,我们递归地计算其孩子的得分,得到S1, ..., Sn。
如果A在P处下棋,则P的得分为max{S1, ..., Sn},因为A将始终努力使自己的优势最大化。
如果B在P处下棋,则P的得分为min{S1, ..., Sn},因为B将始终努力使A的优势最小化。
这应该足以转化成代码。
完成后,请参阅alpha-beta剪枝,它可以(大幅)减少您需要执行的搜索量。Alpha-beta剪枝的基本思想是:如果A推断出B可以玩出让A最大优势为M的策略,那么考虑任何得分大于M的子树都是没有意义的,因为B永远不会允许A有这个选项!