炉石传说 AI 如何处理随机事件

人工智能 机器学习 游戏-ai 蒙特卡罗树搜索
2021-10-20 01:52:31

我想学习很多关于CCG的AI,比如炉石。现在我知道了这类游戏中使用的主要算法之一,MCTS。它分析最有希望的移动,并基于搜索空间的随机采样扩展搜索树。但是这个游戏中有太多的随机事件,可能会导致一场战斗的不同结果。例如,一张卡牌可以随机对英雄或其他随从造成X点伤害,X是0到30之间的一个随机数。X的数量对下一个决策很重要,但只使用MCTS会导致准确率低.

那么人工智能如何处理这些随机事件呢?

1个回答

MCTS 最“标准”的实现可能涉及在节点内存储游戏状态的副本。由于您提到的原因,这适用于确定性游戏,但不适用于非确定性游戏。

在非确定性游戏中,使 MCTS 工作的最简单方法之一是认为树中的每个节点都应该映射/表示/编码一个轨迹动作序列,而不是一个状态这意味着每个节点都收集统计信息(获胜次数 / 访问次数等),以收集它所代表的动作轨迹,而不是它所代表的状态。

通过根本不在节点中存储任何游戏状态,这种观点可以很容易地实现。相反,每当您遍历树时(在 MCTS 的选择阶段),您应该简单地重新模拟沿该路径穿过树的所有动作,再次从根状态开始。这样,由于不确定的游戏状态转换,通过单个节点的不同访问可能导致在该节点中“观察到”不同的游戏状态。在极限内(在无限时间之后),每个节点将估计导致该节点的动作轨迹的期望值,而不是单个确定性结果博弈状态的博弈论值。这整个想法有时被称为“开环 MCTS”,例如在本文中。


我上面描述的是一种简单的方法,可以在涉及非确定性状态转换的游戏中从 MCTS 获得更好的性能,如您所描述的(例如造成的随机伤害量),但也有许多更复杂的想法。我怀疑特别需要更复杂的方法来处理更“激烈”的不确定性形式(由随机抽牌产生,或由基于随机化的方法来处理不完全信息,例如不知道对手有哪些牌)。

最近有一场炉石 AI 竞赛,可能会发现一些有用的想法,例如,在与该竞赛相关的工作页面上。