2016-12-12 4 views
1

Gibt es eine Möglichkeit, diesen modifizierten Pseudocode so umzuschreiben, dass er sowohl eine Bewegung als auch eine Punktzahl zurückgibt? Gefunden here. Dies ist der Alpha-Beta Algorithmus, der eine optimierte Version des Minimax Algorithmus ist, die beide verwendet werden, um die optimale Bewegung in perfekten Informationsspielen zu finden, wie Tic-Tac-Toe. Kehre auch zurück, indem du diesen Pseudocode änderst

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 
+0

Für Ihre griechischen Buchstaben +1 ähnlich sind! –

Antwort

0

Nur die Maximizing Teil b/c beide

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 
0

minimieren ist wirklich ähnlich, so zu maximieren, wird ein Teil gerade tun:

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} 
+1

Kann ich Ihren Code in Pseudocode ändern? – PAS

+0

@PAS sicher! Ich mache normalerweise keinen Pseudocode, also war ich mir nicht sicher, ob das richtige sintax für null und zurück tuple – juvian

+0

Ich habe versucht, es zu reparieren, nicht sicher, ob es das gleiche ist – PAS

Verwandte Themen