用于机会节点分支因子非常高的非确定性博弈的 MCTS

人工智能 蒙特卡罗树搜索 机会游戏
2021-10-17 22:19:01

我正在尝试使用蒙特卡洛树搜索来进行非确定性游戏。显然,标准方法之一是使用机会节点对非确定性建模这个游戏的问题是它对随机事件有一个非常高的最小熵(想象一副牌的洗牌),因此有一个非常大的分支因子(232) 如果我将其建模为机会节点。

尽管存在这个问题,但有几件事可能会使搜索更容易处理:

  1. 机会节点每场比赛只出现几次,而不是在每一步之后。
  2. 机会事件不依赖于玩家的行为。
  3. 即使两个随机结果不同,它们也可能“彼此相似”,这将导致游戏结果也相似。

到目前为止,我发现的所有非确定性游戏的 MCTS 方法都使用类似 UCT 的策略(例如A Monte-Carlo AIXI Approximation 的第 4 章)来选择机会节点,这些节点最大程度地加权未探索的节点。就我而言,我认为这将导致完全随机播放,因为在选择阶段不会重复任何机会节点。

解决这个问题的最佳方法是什么?有没有这方面的研究?天真地,我正在考虑一种更倾向于重复机会节点而不是总是探索新节点的策略。

2个回答

您可以尝试使用“开环”MCTS 方法,而不是标准的“闭环”方法,并完全消除机会节点。参见,例如,通用视频游戏播放的开环搜索

在“标准”(闭环)实现中,您将在每个正常(非机会)节点中存储游戏状态。每当有机会事件发生时,您将随机遍历到它的一个子节点,然后再次拥有一个具有“确定性”游戏状态的正常节点。

在开环方法中,您不会将游戏状态存储在任何节点(可能除了根节点)中,因为节点不再确定性地对应于特定的游戏状态。开环 MCTS 方法中的每个节点只对应于从根节点到它的动作序列这完全消除了对机会节点的需求,并导致树明显更小,因为对于每个可能的唯一操作序列,您只需要树中的一条路径。根据随机事件,单个动作序列可能导致可能的游戏状态分布。

在每个单独的 MCTS 迭代中,您将在遍历树时通过“沿边缘”应用移动来重新生成游戏状态。对于任何随机事件,您还可以再次“掷骰子”。如果您的 MCTS 迭代足够频繁地遍历树的某个路径,它仍然能够通过采样观察所有可能的随机事件。

请注意,给定无限的时间,具有显式机会节点的闭环方法可能会表现得更好但是,当您有少量时间时(如我在上面链接的论文中考虑的实时视频游戏设置中的情况),没有明确机会节点的开环方法可能会表现得更好。


或者,如果您更喜欢具有显式机会节点的闭环方法,您可以尝试以下组合:

  • 允许 MCTS 将搜索树的有希望的部分优先于根本没有访问过的部分(即不自动优先考虑具有0访问)。例如,而不是给未访问的节点一个价值估计(这就是你如何解释它们的自动选择),你可以给它们一个等于父节点的值估计的值估计,然后直接应用 UCB1 方程。
  • 在您的选择阶段使用 AMAF 价值估计 / RAVE / GRAVE 。这使您可以非常快速地了解一些您从未在选择阶段选择过的移动的粗略价值估计,方法是从在播放阶段播放它们的观察中进行概括。我注意到 RAVE / GRAVE 的“标准”实现,没有明确的类似 UCB 的探索术语,与我之前对未访问儿童使用非无限价值估计的建议不符。考虑一个带有明确探索术语的类 UCB 变体可能会更好。

如果您对您的环境有这种先验知识,正如您所说,它将大大简化问题。据我所知,您已经进行了大量的背景研究,只是想将 UTC MCTS(或类似的)应用到环境中。您提到“机会节点在选择阶段永远不会重复”。

如果我正确理解您的要求,您可以简单地使用您所知道的来改变您搜索树节点的方式。即,您基本上可以对初始机会节点采取贪婪的行动,然后随着训练的进行缓慢地衰减该搜索策略(以避免收敛到局部最大值)。

我鼓励你更深入地研究探索与利用的方法,因为特别是这个问题可能有一个优雅的解决方案。