Minimax的伪代码

时间:2014-12-17 19:25:53

标签: algorithm minimax

我正在学习极小极大,并且想知道我对minimax的逻辑是正确的(粗糙伪代码)。:

fun minimax(tree, depth) { #assume the tree has already been built;
  if terminal node;   # if we reach a node with no children, return the score;
    return score;
  else;
    if max's turn then return min(minimax(tree,depth-1))  
    if min's turn then return max(minimax(tree,depth-1))   
}

我假设游戏树已经构建,只是想确认这个高级伪代码是正确的逻辑。

2 个答案:

答案 0 :(得分:2)

minimax(position,depth)
  ....
  if max's turn then return min(minimax(p,depth-1) for p in moves)  
  if min's turn then return max(minimax(p,depth-1) for p in moves) 

minimax(tree,depth)
  ....
  if max's turn then return min(minimax(node,depth-1) for node in nodes(tree))  
  if min's turn then return max(minimax(node,depth-1) for node in nodes(tree)) 

您需要使用当前树的节点(子树)树来调用minimax

答案 1 :(得分:0)

您必须递归调用您的函数,以便从该状态开始每次可能的移动,并根据当前一层中的玩家选择具有最大/最小分数的移动。一般来说,到目前为止我所见到的最佳伪代码实现的伪代码是在人工智能:一种现代方法中。 Peter Norvig的书。书中的所有伪代码都在它的github页面上,这里是极小极大代码 -

function MINIMAX-DECISION(state) returns an action
     return arg max a ∈ ACTIONS(s) MIN-VALUE(RESULT(state, a))

function MAX-VALUE(state) returns a utility value
    if TERMINAL-TEST(state) the return UTILITY(state)
    v ← −∞
    for each a in ACTIONS(state) do
        v ← MAX(v, MIN-VALUE(RESULT(state, a)))
    return v

function MIN-VALUE(state) returns a utility value
    if TERMINAL-TEST(state) the return UTILITY(state)
    v ← ∞
    for each a in ACTIONS(state) do
        v ← MIN(v, MAX-VALUE(RESULT(state, a)))
    return v

深度限制实施需要注意的几点:

  1. 确保减小深度并将其传递给MAX-VALUE和MIN-VALUE函数。
  2. 当达到深度= 0时,将UTILITY功能替换为启发式分数功能。