python中的min-max算法

python中的min-max算法,python,algorithm,artificial-intelligence,Python,Algorithm,Artificial Intelligence,在minmax算法中,如何确定函数何时到达树的末尾并中断递归调用 我做了一个max函数,在这个函数中我调用了min函数。在min函数中,我应该做什么??对于max函数,我只是返回最佳分数 def maxAgent(gameState, depth): if (gameState.isWin()): return gameState.getScore() actions = gameState.getLegalActions(0); bestSc

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

我做了一个max函数,在这个函数中我调用了min函数。在min函数中,我应该做什么??对于max函数,我只是返回最佳分数

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

我不明白现在该怎么做?我不允许设置树的深度限制。它必须是任意的。

通常您希望搜索到某个递归深度(例如,下棋时n提前移动)。因此,应该将当前递归深度作为参数传递。如果您可以轻松确定结果没有改善,您可以提前中止。此站点有minimax帖子,即使它基于IronPython:

它说:

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

使用Negamax可以避免使用两种不同的函数

在minmax算法中,如何 确定函数何时到达 树的尽头,把树折断 递归调用

基本上,您是在询问何时到达叶节点


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

我完全同意RELT。但你也要考虑一下:

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


按照Amber的建议,尝试发布一些代码,以便我们知道您希望解决方案有多复杂。此外,如果您解释了您知道/可以做多少,那么我们可能会建议更多有用的选项-您可能能够实际实施的事情,与其只是一些你可能不知道如何实现或没有时间实现的惊人想法,不如展示一些实际的代码。你应该分享到目前为止你所拥有的。只是一个风格注释:where you have
else:finalstage=False
。。。您确实需要使用else子句,因为函数的整个剩余部分都在
else
中。我通常会写一些谎话,或者…(注释),然后继续写,没有额外的缩进。这不是问题。我需要知道我如何做最小函数,我需要通过评估函数找到最后阶段的分数。我该怎么做?我不允许设置深度的任何限制。我想,我可以在alpha-beta修剪算法中进行修改,但这不是高级算法。我们可以将negamax func用于简单的最小值。我以后需要做alpha-beta测试