在执行 MCTS 的扩展阶段时,您创建多个子节点,选择其中一个数字,并从该子节点进行模拟,您如何有效且公正地决定生成哪个子节点?
一种策略是始终生成所有可能的孩子。我相信这个答案说 AlphaZero 总是产生所有可能的 () 孩子们。如果计算孩子的成本很高,或者孩子很多,这可能效率不高。
一种策略是生成可能的孩子的惰性流。也就是说,生成一个孩子并承诺生成其余的孩子。然后你可以通过掷硬币随机选择一个:正面你带第一个孩子,反面你继续走。这显然偏向于流中较早的儿童。
另一种策略是计算有多少那里有孩子,并提供生成孩子的功能(类型为 Nat -> State)。然后,您可以通过在范围内统一选择来随机选择一个. 这可能比以前的版本更难实现,因为计算子节点的数量可能与计算子节点本身一样困难。或者,您可以计算孩子数量的上限,并且该函数是部分的(类型为 Nat -> Maybe State),但您会执行拒绝采样之类的操作。
我相信如果剩余的 MCTS 迭代次数,, 大于孩子的数量,,那么你做什么都没关系,因为你会在下一次迭代中再次找到这个节点并展开其中一个子节点。这似乎表明唯一重要的时间是在像 AlphaZero 这样的情况下,比,这基本上不重要。
在这种情况下和大小相似,那么似乎确实需要将迭代次数更改为时间量,有时您将时间花在播放上,而其他时间则花时间计算子代。
我是否正确地考虑了这一点?