我在网上看到了一些 MCTS 实现以及它们是如何在游戏中使用的。根据当时的状态计算每个移动的最佳移动。如果您在人和计算机之间的游戏中有一系列动作,例如:
turn_h1,turn_c1,turn_h2,turn_c2,turn_h3,turn_c3,....turn_hn,turn_cn
turn_h(i)=human, turn_c(i)=computer and i 玩家的第 i 步(人/计算机)。
并且对于每台计算机的轮到 i,都有一个相应的状态,用于确定MCTS的第 i 个最佳移动。
问题:第(i-1)轮(bestmove)中构建的树是否应该用于第i轮(MCTS bestmove)?
我的意思是,是否应该将作为状态 (n-1) 中最佳移动结果的树用作确定第 i 个状态的最佳移动的输入?
换句话说,我可以重新使用之前回合/最佳移动计算中已经构建的树节点,这样我就不需要再次构建整个树了吗?
我在伪代码中创建了一系列转弯,只是为了弄清楚我使用第 (i-1) 个状态(树)来提供下一个 MCST bestmove 的含义。(当然在现实世界中,下面的逻辑将被实现为迭代/循环构造):
#start game
initial_game_state.board= initialize_board()
#turn 1
#human play
new_game_state_1 = initial_game_state.board.make_move(move_1)
#computer play
move_1 = MCTS.determine_bestmove(new_game_state_1)
new_game_state_2 = game_state_1.board.make_move(move_1)
#turn 2
#human play
new_game_state_3 = new_game_state_2.board.make_move(move_2)
#computer play
move_3 = MCTS.determine_bestmove(new_game_state_3)
new_game_state_4 = new_game_state_4.board.makeMove(move_3)
#turn 3
# ....