我正在研究MCTS算法的实现,在具有完美信息的零和棋盘游戏的背景下。例如。 Chess,Go,Checkers。
据我了解,在算法的每次迭代中,有四个步骤:选择,扩展,模拟和反向传播。
我的问题是关于对手动作的实施,应该如何在树中呈现,以及如何在每个阶段实施。
例如,让我们想象一下GO游戏,我们(黑色)正在玩AI(白色)。当黑色从根节点s 0 创建一个 b 动作时,然后转为白色以使动作成为 w 。
我最初的想法是每个动作都会产生一个新的状态。所以s 0 - > a b - > s 1 - > a w - > s 2 ,其中每个s状态代表一个节点。但是,这会影响MCTS中的选择过程。在这种情况下,不会MCTS倾向于探索不好的 w 动作吗?因为这将为黑人带来更好的奖励。
另一种解决方案我是将动作组合到一个节点中。所以s 0 - &gt; a b - &gt; a w - &gt;小号<子> 1 子>。但是,这会使决策变得更加困难,因为现在每个根级别操作都与多个不同的节点相关联。
是否有任何框架表明对手应该如何在MCTS中代表?任何帮助将不胜感激。
编辑1: 由于我们将在上面的示例中玩黑色,因此每次模拟结束时的奖励功能将与黑色相关。例如。如果黑方在游戏结束时获胜,则奖励将通过所有节点(黑色和白色节点)进行备份。我的期望是白色节点(允许黑色获胜)具有高状态值。
但也许我应该在做反向传播时放弃奖励?例如。如果黑色获胜,则黑色节点为1,白色节点为-1。这样,选择功能保持不变。这是正确的吗?
答案 0 :(得分:-1)
你应该对抗一个已知的强大对手或者对抗算法本身。
假设您针对自己的算法运行,请将数据输入其中以找出“最佳”移动。确保算法适用于预期的一面(即,如果你玩go / chess,最简单的方法就是交换游戏棋子的颜色)。
如果你对自己发挥作用,你基本上会产生两倍的数据点来学习游戏。
如果你刚刚开始,可能值得与其他机器玩家对战。你没有获得如此多的数据点,但是你获得的数据点更多(即更快地学习坏动作)。
你可能想从一些合理的,现有的AI开始玩,然后转而对抗自己。