蒙特卡洛与UCB在复杂卡牌游戏中的应用

我在尝试理解蒙特卡洛树搜索(MCTS)算法的工作原理,以及如何在卡牌游戏中实现它以提升AI引擎的性能。

我已经阅读了mcts.ai/网站和许多相关论文,其中一篇论文展示了在《魔法卡牌》游戏AI中应用蒙特卡洛搜索与UCB取得的成功结果,这大致是我需要做的。然而,我在理解某些要点和如何应用这些方法来解决我的需求时遇到了困难。我在数学方面的经验也不够丰富,所以当论文用复杂的公式解释这些内容时,我会感到迷茫。

到目前为止,我得出的想法如下:

  1. 给定一个游戏状态(游戏中的玩家手牌),确定所有可能的合法出牌,然后我会创建一个节点列表(每个节点代表一种出牌),作为MCTSTree根节点的一个属性,并记录每个节点的结果(得分值?)。

  2. 对每一种合法出牌模拟一个完整的(直到游戏结束)游戏过程,使用随机玩家并记录每个节点的结果,无论玩家是赢还是输,以便获得完整的画面。

我认为在这里应该应用蒙特卡洛 + UCB:

  1. 使用UCB递归选择最有前景的出牌(节点),如果是叶子节点,则从其游戏状态扩展所有可能的出牌。

  2. 从选定的节点模拟n次游戏,直到达到一定的时间限制。

    • 在这个阶段我有一些疑问…假设我尝试给定一系列可能的游戏过程中的随机游戏过程…我需要如何处理第一个结果以继续模拟?我应该让树生长吗?
  3. 我如何回溯传播结果?

然后,

  • 考虑到这是一个复杂的卡牌游戏,我有如此多的可能移动…在任何节点有如此多的子节点是否会有足够好的性能?

  • 如果每次玩家进行移动时游戏状态都在变化,那么基于游戏状态的每次模拟如何让我知道这棵树是否真的有用?

我非常感谢任何帮助。

非常感谢!


回答:

MCTS只是以下内容:

enter image description here

我对它的描述与图片所示的略有不同,这可能更适合实现。

  1. 从根节点(游戏的当前状态)开始下降,使用UCB在每一步,直到你决定一个未实例化的节点l。(选择)
  2. l添加到你的树中。(扩展)
  3. l开始,玩一个随机游戏。(模拟)
  4. 用游戏结果更新从l回溯到根节点路径上的所有节点。
  5. 重复直到时间用完。

如你所提到的,如果你的分支因子很大,你可能需要考虑在下降树时选择后继节点的其他策略,比如RAVE。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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