minimax静态树是如何构建的?

时间:2016-08-12 06:11:56

标签: algorithm machine-learning minimax

考虑我从头开始构建井字游戏,我目前正在尝试使用minimax算法,以便我可以将计算机作为播放器1而我自己作为播放器2.我认为我理解minimax算法(作为某种形式的深度第一次搜索)。

我的问题是,minimax算法最初的树是如何工作的?我看到的所有例子都有树已经在终端节点中用一些数值得出。

例如:

       max
  / \  
       min
 /\ /\
7 2 1 5 

我已经看到了这个更简单的树版本,以及如何选择终端节点中值为1的节点的路径。我们如何才能获得7,2,1和5的优势?让我们说井井有条......我的好奇心在这里徘徊。

1 个答案:

答案 0 :(得分:0)

你似乎在问两个问题。我先解决第二个问题。您问我们如何在终端节点中获取值。这取决于我们正在处理的游戏类型。对于tic-tac-toe,所有叶节点将等于-1,0或1. -1表示丢失,0表示平局,1表示胜利。必须评估每个节点以查看它是否是终端节点(即游戏是否已结束),如果是,则为其分配适当的值。您经常在搜索树中看到其他值的原因是因为在更复杂的游戏中,无法评估整个树,因此应用启发式评估函数,通常包含各种值。但对于井字游戏来说,这是无关紧要的。

你还问过这个极小极大树是如何制作的。标准的minimax树是使用递归生成的。为tictactoe简化的伪代码看起来像这样

function minimax(depth,maximizingPlayer)
      if(node is terminal)
            return value;
      if (maximizingPlayer)
            bestValue  = -infinity;
            for each possible legal move 
                  makeMove(move)
                  value = minimax(depth-1,false);
                  bestValue = max(bestValue,value);
                  unmakeMove(move);
            return bestValue
      else // minimizing player
            bestValue  = infinity;
            for each possible legal move 
                  makeMove(move)
                  value = minimax(depth-1,true);
                  bestValue = min(bestValue,value);
                  unmakeMove(move);
            return bestValue