首页 文章

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

提问于
浏览
0

我正在研究MCTS算法的实现,在具有完美信息的零和棋盘游戏的背景下 . 例如 . 国际象棋,围棋,跳棋 .

据我所知,在算法的每次迭代中,有四个步骤:选择,扩展,模拟和反向传播 .

我的问题是关于对手动作的实施,如何在树中呈现,以及如何在每个阶段实施 .

例如,让我们想象一下GO的游戏,我们(黑色)正在玩AI(白色) . 当黑色从根节点s0做出动作ab时,然后转为白色以进行动作aw .

我最初的想法是每个动作都会产生一个新的状态 . 所以s0 - > ab - > s1 - > aw - > s2,其中每个s状态代表一个节点 . 但是,这会影响MCTS中的选择过程 . 在这种情况下,MCTS不会有探索糟糕的移动的倾向吗?因为这将为黑色返回更好的奖励 .

我的另一种解决方案是将动作组合到一个节点中 . 所以s0 - > ab - > aw - > s1 . 但是,这会使决策变得更加困难,因为现在每个根级别操作都与多个不同的节点相关联 .

是否有任何框架表明反对者应如何在MCTS中代表?任何帮助,将不胜感激 .

Edit 1: 由于我们将在上面的示例中玩黑色,因此每次模拟结束时的奖励功能将与黑色相关 . 例如 . 如果黑方在游戏结束时获胜,则奖励将通过所有节点(黑色和白色节点)进行备份 . 我的期望是具有高状态值的白色节点(允许黑色获胜) .

但也许我应该在做反向传播时放弃奖励?例如 . 如果黑色获胜,则黑色节点为1,白色节点为-1 . 这样,选择功能保持不变 . 这是正确的吗?

1 回答

  • 0

    你应该对抗一个已知的强大对手或对抗算法本身 .

    假设您运行自己的算法,将数据输入其中以找出“最佳”移动 . 确保算法适用于预期的一方(即,如果您玩go / chess,最简单的方法是交换游戏块的颜色) .

    如果你对自己发挥作用,你基本上会产生两倍的数据点来学习游戏 .

    如果你刚刚开始,它可能值得与其他机器玩家对战 . 你没有获得如此多的数据点,但你获得的数据点更多(即更快地学习坏动作) .

    你可能想从一些合理的,现有的AI开始玩,然后转而对抗自己 .

相关问题