蒙特卡洛树搜索中每个节点的模拟次数

在维基百科描述的MCTS算法中,每次节点选择时只进行一次模拟(playout)。现在,我正在一个简单的connect-k游戏中实验这个算法。我想知道,在实际操作中,我们是否会进行更多的模拟来减少方差?

我尝试了原始算法,每次只进行一次随机模拟(无偏见)。与我的启发式搜索结合alpha-beta剪枝相比,结果很差。它的收敛速度非常慢。当我改为进行500次模拟时,噪声大大减少。然而,每个节点的模拟速度太慢,算法在给定时间内无法探索树的其他部分,有时会错过最关键的移动。

然后,我在基本的MCTS中加入了AMAF(特别是RAVE过渡)启发式方法。使用500次模拟时,我没有注意到太大的差异,可能是因为方差已经很低了。我还没有分析使用1次模拟的结果。

能否有人给我一些见解?


回答:

通常,每次选择步骤只进行一次模拟。然而,后续的选择步骤可以通过同一个节点多次。

例如,考虑一个只有两种可用移动的根节点的情况。如果你运行了10,000次完整的MCTS迭代(其中一次迭代 = 选择 + 扩展 + 模拟 + 回溯),根节点下方的每个节点大约会被选择5,000次(或者如果第一个明显比第二个更好,可能是第一个被选择9,000次,第二个被选择1,000次,但无论如何,两个节点都会被选择多次)。

这是否与你当前实现的方式相符?如果不符,请提供你当前的代码,以便我们可以看到问题出在哪里。但如果你按照这种方式实现了(这是应该的方式),那么每次选择步骤只进行一次模拟应该没有问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注