我想获得minmax算法的伪代码。我必须创建2个函数,def maxAgent(gameState,depth)和minAgent。是否有任何身体拥有正确和容易的伪代码。
答案 0 :(得分:2)
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;
}
这是基本算法。一旦得分变为1,您就可以将评估短路,然后您就获得A的已知胜利。
B,getMinScore的算法相同,只有你使用min函数,如果短路,则查找-1。
答案 1 :(得分:2)
两名球员A和B轮流上场比赛。
我们给出了评估给定董事会职位的评分函数f,对于A,f(P)的较大值更好,而对B更差(即,f(P)是对“好”P的估计。是没有进一步前瞻的A。
考虑董事会职位P.
如果P是一个叶子节点(即P是一个获胜位置,或者我们看起来像我们想要的那样远),那么我们将f(P)作为该节点的得分返回。
否则P不是叶节点并且具有子C1,...,Cn。我们递归计算孩子的分数,给出S1,...,Sn。
如果A在P上播放,那么P的分数是最大值{S1,...,Sn},因为A将始终发挥作用以最大化其优势。
如果B在P上播放,则P的得分为min {S1,...,Sn},因为B将始终发挥作用以最小化A的优势。
这应该足以变成代码。
完成后,请查看alpha-beta修剪,这应该(大幅度)减少您需要执行的搜索量。 Alpha-beta修剪的基础是,如果A推断B可以发挥强制A的最大优势为M,那么考虑任何得分大于M的子树是没有意义的,因为B永远不会允许A选项!