最小最大算法的伪代码

时间:2010-07-29 04:13:02

标签: algorithm pseudocode

我想获得minmax算法的伪代码。我必须创建2个函数,def maxAgent(gameState,depth)和minAgent。是否有任何身体拥有正确和容易的伪代码。

2 个答案:

答案 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选项!