也可以通过改变这个伪鳕鱼

2024-09-24 22:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法重写这个修改过的伪代码,让它返回一个移动和一个分数?找到here。这是Alpha-Beta算法,它是Minimax算法的一个优化版本,这两个算法都用于在完美的信息游戏中找到最佳移动,比如Tic-Tac-Toe。在

function alphabeta(node, α, β, maximizingPlayer)
      if node is a terminal node
          return the value of node
      if maximizingPlayer
          v = -∞
          for each child of node
              v = max(v, alphabeta(child, α, β, FALSE))
              α = max(α, v)
              if β ≤ α
                  break
          return v
      else
          v = ∞
          for each child of node
             v = min(v, alphabeta(child, α, β, TRUE))
              β = min(β, v)
              if β ≤ α
                  break 
          return v

Tags: of代码算法nodechildforreturnif
2条回答

“最小化”与“最大化”非常相似,因此只执行一个部分:

  function alphabeta(node, α, β, maximizingPlayer)
        if node is a terminal node
            return { value: value of node, node : node}
        if maximizingPlayer
            v = -∞
            bestNode = None
            for each child of node
                localMax = alphabeta(child, α, β, FALSE)
                if localMax.value > v
                    v = localMax.value
                    bestNode = localMax.node

                α = max(α, v)
                if β ≤ α
                    break
            return {value : v, node: bestNode}

只是最大化部分b/c两者相似

function alphabeta(node, a, b, maximizingPlayer)
    if node is a terminal node
         return valueOfNode, None
    if maximizingPlayer
        v = -∞
        for each move in node.possible_moves()
            child = play(move, TRUE) #True / False respresents if it should make an "x" or an "o" on the board
            temp_max, _ = alphabeta(child, a, b, FALSE) # "_" means disregard the value
            if temp_max > v:
                v = temp_max
                best_move = move
            a = max(a, v)
            if b <= a:
                break
        return v, best_move

相关问题 更多 >