使用alphabeta TicTacT查找最佳移动

2024-09-24 22:27:59 发布

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

试图找到最好的移动和得分。我已经让我的程序正确地返回游戏的分数,但我希望它也能返回移动。如何更改我的代码以使其执行此操作? 类似于this和{a2}。看我失败的代码here,游戏结束后返回的{}应该是移动。在

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

Tags: alphagamechildtruegetmovereturnif
1条回答
网友
1楼 · 发布于 2024-09-24 22:27:59

你可以跟踪到目前为止的最佳动作,比如:

    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

其他情况也一样

相关问题 更多 >