使用 alphabeta TicTacToe 找到最佳着法
find best move using alphabeta TicTacToe
试图找到最佳着法和分数。我已经让我的程序正确 return 游戏得分,但我希望它也能 return 移动。我如何更改我的代码以使其执行此操作?
类似于this and this. See my failed code here,如果游戏结束,None
returned应该是移动。
def alphabeta(game_state, alpha, beta, our_turn=True):
if game_state.is_gameover():
return game_state.score()
if our_turn:
score = -9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, True)
temp_max = alphabeta(child, alpha, beta, False)
if temp_max > score:
score = temp_max
alpha = max(alpha, score)
if beta <= alpha:
break
return score
else:
score = 9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, False)
temp_min = alphabeta(child, alpha, beta, True)
if temp_min < score:
score = temp_min
beta = min(beta, score)
if beta <= alpha:
break
return score
您可以跟踪到目前为止的最佳着法,例如:
if game_state.is_gameover():
return game_state.score(), None
if our_turn:
score = -9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, True)
temp_max, _ = alphabeta(child, alpha, beta, False) # _ to disregard the returned move
if temp_max > score:
score = temp_max
best_move = move
alpha = max(alpha, score)
if beta <= alpha:
break
return score, best_move
其他情况类似
试图找到最佳着法和分数。我已经让我的程序正确 return 游戏得分,但我希望它也能 return 移动。我如何更改我的代码以使其执行此操作?
类似于this and this. See my failed code here,如果游戏结束,None
returned应该是移动。
def alphabeta(game_state, alpha, beta, our_turn=True):
if game_state.is_gameover():
return game_state.score()
if our_turn:
score = -9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, True)
temp_max = alphabeta(child, alpha, beta, False)
if temp_max > score:
score = temp_max
alpha = max(alpha, score)
if beta <= alpha:
break
return score
else:
score = 9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, False)
temp_min = alphabeta(child, alpha, beta, True)
if temp_min < score:
score = temp_min
beta = min(beta, score)
if beta <= alpha:
break
return score
您可以跟踪到目前为止的最佳着法,例如:
if game_state.is_gameover():
return game_state.score(), None
if our_turn:
score = -9999
for move in game_state.get_possible_moves():
child = game_state.get_next_state(move, True)
temp_max, _ = alphabeta(child, alpha, beta, False) # _ to disregard the returned move
if temp_max > score:
score = temp_max
best_move = move
alpha = max(alpha, score)
if beta <= alpha:
break
return score, best_move
其他情况类似