棋盘游戏中的深度学习与强化学习
1. MCTS - UCT 算法
在完成一次蒙特卡罗树搜索(MCTS)的展开后,需要根据结果更新统计信息。展开路径(rollout_path)包含了要更新的每个节点的棋盘状态和玩家信息,需要遍历其中的每个条目。游戏结果在 -1 到 1 之间,但 UCB1 算法要求回报在 0 到 1 之间,通过 result * path_side / 2 + 0.5 进行转换。同时,还需根据玩家信息转换结果。
选择最佳移动的代码如下:
move_states = {move: apply_move(board_state, move, side) for move in available_moves(board_state)}
move = max(move_states, key=lambda x: state_results[move_states[x]] / state_samples[move_states[x]])
return state_results[move_states[move]] / state_samples[move_states[move]], move
当完成所需次数的展开后,可根据最佳预期回报从当前状态选择最佳移动。此时无需再使用 UCB1 选择最佳移动,因为这是最终决策,额外的探索没有价值,最佳移动就是具有最佳平均回报的移动。
这就是 MCTS - UCT 算法,它有许多不同的变体,适用于不同的特定情况,但核心逻辑相同。MCTS - UCT 为评估具有巨大搜索空间的游戏(如围棋)
超级会员免费看
订阅专栏 解锁全文
2815

被折叠的 条评论
为什么被折叠?



