在维基百科描述的MCTS算法中,每次节点选择时只进行一次模拟(playout)。现在,我正在一个简单的connect-k游戏中实验这个算法。我想知道,在实际操作中,我们是否会进行更多的模拟来减少方差?
我尝试了原始算法,每次只进行一次随机模拟(无偏见)。与我的启发式搜索结合alpha-beta剪枝相比,结果很差。它的收敛速度非常慢。当我改为进行500次模拟时,噪声大大减少。然而,每个节点的模拟速度太慢,算法在给定时间内无法探索树的其他部分,有时会错过最关键的移动。
然后,我在基本的MCTS中加入了AMAF(特别是RAVE过渡)启发式方法。使用500次模拟时,我没有注意到太大的差异,可能是因为方差已经很低了。我还没有分析使用1次模拟的结果。
能否有人给我一些见解?
回答:
通常,每次选择步骤只进行一次模拟。然而,后续的选择步骤可以通过同一个节点多次。
例如,考虑一个只有两种可用移动的根节点的情况。如果你运行了10,000次完整的MCTS迭代(其中一次迭代 = 选择 + 扩展 + 模拟 + 回溯),根节点下方的每个节点大约会被选择5,000次(或者如果第一个明显比第二个更好,可能是第一个被选择9,000次,第二个被选择1,000次,但无论如何,两个节点都会被选择多次)。
这是否与你当前实现的方式相符?如果不符,请提供你当前的代码,以便我们可以看到问题出在哪里。但如果你按照这种方式实现了(这是应该的方式),那么每次选择步骤只进行一次模拟应该没有问题。