python中的min max算法

时间:2010-07-31 20:01:20

标签: python algorithm artificial-intelligence

在minmax算法中,如何确定函数何时到达树的末尾并打破递归调用。

我做了一个max函数,我调用了min函数。在min函数中,我做了什么?对于最大功能,我只是返回bestscore。

def maxAgent(gameState, depth):
      if (gameState.isWin()):
        return gameState.getScore()
      actions = gameState.getLegalActions(0);
      bestScore = -99999
      bestAction = Directions.STOP

      for action in actions:
        if (action != Directions.STOP):
          score = minAgent(gameState.generateSuccessor(0, action), depth, 1)
          if (score > bestScore):
            bestScore = score
            bestAction = action
      return bestScore

def minvalue(gameState,depth,agentIndex):
       if (gameState.isLose()):
         return gameState.getScore()
       else:
         finalstage = False
         number = gameState.getNumAgents()
         if (agentIndex == number-1):
           finalstage = True
           bestScore = 9999
           for action in gameState.getLegalActions(agentIndex):
             if(action != Directions.STOP

我现在无法理解如何继续?我不允许设置树的深度限制。它必须是任意的。

4 个答案:

答案 0 :(得分:3)

通常你想搜索直到某个递归深度(例如n提前移动,下棋时)。因此,您应该将当前递归深度作为参数传递。如果您可以毫不费力地确定结果,那么当结果没有改善时,您可能会提前中止。

答案 1 :(得分:1)

  

在minmax算法中,如何   确定你的功能何时到达   树的尽头,打破了   递归调用。

基本上,当你到达叶子节点时,你会问。

当您达到搜索的最大深度或终端节点(即结束游戏的位置)时,会出现叶节点。

答案 2 :(得分:1)

我完全赞同relet。但您可能也想考虑这个问题:

有些时候,您可能也会认为您正在探索的当前分支值得深入探索。这将要求应用一些进一步的启发式方法。我不知道您的问题的解决方案需要多高级。这是因为我不知道问题出在哪里。

根据Amber的建议,尝试发布一些代码,以便我们知道您希望解决方案的复杂程度。此外,如果您解释了多少知道/ can_do,那么我们可能会建议更多有用的选项 - 您可能能够实际实现的内容,而不仅仅是您可能不知道如何或没有时间的惊人想法实施

答案 3 :(得分:0)

这个网站有minimax的帖子,即使它是基于IronPython: http://blogs.microsoft.co.il/blogs/dhelper/archive/2009/07/13/getting-started-with-ironpython-part-4-minimax-algorithm.aspx

它说:

  

Minimax算法本质上是递归的,因此它需要一个停止条件,在我们的例子中,游戏已经结束(不再移动)或达到了所需的深度(第3-8行)。

使用Negamax http://en.wikipedia.org/wiki/Negamax

可以避免使用两种不同的功能