蒙特卡洛树搜索在棋盘游戏中的应用 – 如何实现对手的移动

我正在开发一个蒙特卡洛树搜索(MCTS)算法的实现,用于零和棋盘游戏中,这些游戏具有完美信息。例如,国际象棋、围棋、跳棋。

据我所知,算法的每次迭代包含四个步骤:选择、扩展、模拟和回溯。

我的问题是关于如何在树中表示对手的移动,以及在每个阶段如何实现这些移动。

例如,我们想象一场围棋比赛,我们(黑方)与AI(白方)对弈。当黑方从根节点s0采取行动ab后,轮到白方采取行动aw

我的初步想法是,每个行动都会产生一个新的状态。因此,s0 -> ab -> s1 -> aw -> s2,其中每个s状态代表一个节点。然而,这会影响MCTS的选择过程。在这种情况下,MCTS不会倾向于探索坏的aw移动吗?因为这会为黑方带来更好的回报。

我考虑的另一种解决方案是将行动组合成一个节点。因此,s0 -> ab -> aw -> s1。然而,这会使决策过程变得更加复杂,因为每个根级别的行动现在与多个不同的节点相关联。

有没有哪种框架建议在MCTS中如何表示对手?任何帮助都将不胜感激。

编辑1:因为我们在上面的示例中将扮演黑方,所以每次模拟结束时的奖励函数将针对黑方。例如,如果黑方在游戏结束时获胜,奖励将通过所有节点回溯,包括黑方和白方的节点。我的预期是允许黑方获胜的白方节点将具有高状态值。

但也许我在回溯时应该翻转奖励?例如,如果黑方获胜,对黑方节点是1,对白方节点是-1。这样,选择函数保持不变。这是否正确?


回答:

你应该与一个已知的强力对手或与算法本身对抗。

假设你与自己的算法对抗,将数据输入其中以找出“最佳”移动。确保算法适用于预定的角色(例如,如果你玩围棋/国际象棋,最简单的方法是交换游戏棋子的颜色)。

如果你与自己对抗,基本上会为学习游戏生成两倍的数据点。

如果你刚开始,可能值得与其他机器玩家对抗。你不会获得那么多数据点,但你获得的数据点会教你更多(即,坏的移动会更快被学习)。

你可能想先与某个合理的、现有的AI对抗,然后切换到与自己对抗。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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