您可以尝试使用“开环”MCTS 方法,而不是标准的“闭环”方法,并完全消除机会节点。参见,例如,通用视频游戏播放的开环搜索。
在“标准”(闭环)实现中,您将在每个正常(非机会)节点中存储游戏状态。每当有机会事件发生时,您将随机遍历到它的一个子节点,然后再次拥有一个具有“确定性”游戏状态的正常节点。
在开环方法中,您不会将游戏状态存储在任何节点(可能除了根节点)中,因为节点不再确定性地对应于特定的游戏状态。开环 MCTS 方法中的每个节点只对应于从根节点到它的动作序列。这完全消除了对机会节点的需求,并导致树明显更小,因为对于每个可能的唯一操作序列,您只需要树中的一条路径。根据随机事件,单个动作序列可能导致可能的游戏状态分布。
在每个单独的 MCTS 迭代中,您将在遍历树时通过“沿边缘”应用移动来重新生成游戏状态。对于任何随机事件,您还可以再次“掷骰子”。如果您的 MCTS 迭代足够频繁地遍历树的某个路径,它仍然能够通过采样观察所有可能的随机事件。
请注意,给定无限的时间,具有显式机会节点的闭环方法可能会表现得更好。但是,当您有少量时间时(如我在上面链接的论文中考虑的实时视频游戏设置中的情况),没有明确机会节点的开环方法可能会表现得更好。
或者,如果您更喜欢具有显式机会节点的闭环方法,您可以尝试以下组合:
- 允许 MCTS 将搜索树的有希望的部分优先于根本没有访问过的部分(即不自动优先考虑具有0访问)。例如,而不是给未访问的节点一个价值估计∞(这就是你如何解释它们的自动选择),你可以给它们一个等于父节点的值估计的值估计,然后直接应用 UCB1 方程。
- 在您的选择阶段使用 AMAF 价值估计 / RAVE / GRAVE 。这使您可以非常快速地了解一些您从未在选择阶段选择过的移动的粗略价值估计,方法是从在播放阶段播放它们的观察中进行概括。我注意到 RAVE / GRAVE 的“标准”实现,没有明确的类似 UCB 的探索术语,与我之前对未访问儿童使用非无限价值估计的建议不符。考虑一个带有明确探索术语的类 UCB 变体可能会更好。