我想开发一款《RISK》棋盘游戏,其中将包括用于电脑玩家的AI。此外,我阅读了两篇文章,这篇和这篇,关于这个主题,我意识到我必须学习关于蒙特卡洛模拟和马尔可夫链的技术。我认为我必须将这些技术结合使用,但我猜它们是不同的技术,用于计算状态转换的概率。
那么,有人能解释一下它们之间的重要区别以及各自的优缺点吗?
最后,如果你要为《RISK》游戏实现一个AI,你会选择哪种方法?
你可以在这里找到关于《RISK》棋盘游戏中战斗结果的简单确定性概率,以及使用的暴力算法。这里有一个树状图,指定了所有可能的状态。我应该在这棵树上使用蒙特卡洛还是马尔可夫链?
回答:
好的,我快速浏览了这些文章,以了解它们在做什么。以下是我对你所问的术语的概述:
马尔可夫链只是一个系统如何从一个状态移动到另一个状态的模型。从头开始开发一个马尔可夫模型有时可能很困难,但一旦你掌握了一个模型,它们相对容易使用,也相对容易理解。基本思想是你的游戏将有某些与之相关的状态;作为游戏的一部分,你将从一个状态移动到另一个状态;而且,关键的是,这种状态之间的移动是基于概率的,而且你知道这些概率。
一旦你有了这些信息,你可以将其全部表示为一个图,其中节点是状态,状态之间的弧(标有概率)是转换。你也可以将其表示为满足某些约束的矩阵,或者其他几种更奇特的数据库结构。
那篇短文实际上完全是关于马尔可夫链方法的,但——这很重要——它只是使用这种方法作为一种快速估计如果军队A攻击由军队B防守的领土会发生什么的工具。这是一种很好的技术应用,但它不是《RISK》的AI,它只是AI中的一个模块,帮助计算攻击的可能结果。
相比之下,蒙特卡洛技术是估算器。一旦你有了一个模型,无论是马尔可夫模型还是其他任何模型,你常常会发现自己想要估算一些关于它的东西。(通常它会变成某种形式的积分,而这种形式的积分很难处理。)蒙特卡洛技术只是随机抽样并将结果聚合成对将要发生的事情的估计。
在我看来,蒙特卡洛技术不是AI技术。它们是一种非常通用的技术,恰好对AI有用,但它们本身并不是AI。(你可以对马尔可夫模型说同样的话,但这个说法较弱,因为马尔可夫模型对AI中的规划非常有用,以至于整个AI哲学都是围绕这种技术构建的。马尔可夫模型也用于其他地方。)
这就是它们的本质。你还问如果我必须实现一个《RISK》AI,我会使用哪一个。嗯,这两者都不够。蒙特卡洛,正如我所说,不是AI技术,而是一种通用的数学工具。而马尔可夫模型,虽然理论上可以代表整个《RISK》游戏,但最终会变得非常笨重:你需要表示游戏的每一个状态,意味着领土中军队的每一种可能配置和手中卡片的每一种可能配置等。(我在这里略过了很多细节:这种方法有很多其他困难。)
Wolf的论文的核心既不是马尔可夫方法也不是蒙特卡洛方法,实际上是他所描述的评估函数。这是AI问题的核心:如何找出最佳行动。Blatt论文中的蒙特卡洛方法描述了一种计算行动预期结果的方法,但这与找出最佳行动不同。此外,Wolf的论文中有一个低调的声明,关于在《RISK》中进行前瞻性操作很难,因为游戏树变得非常大,这可能导致他(我认为)如此关注评估函数。
所以我的真正建议是:阅读关于搜索树方法的内容,如极小极大算法、alpha-beta剪枝,尤其是期望极小极大算法。你可以在Russell和Norvig的早期作品中找到这些方法的良好处理,甚至在维基百科上也能找到。试着理解这些技术为什么在一般情况下有效,但对《RISK》来说却很繁琐。这将引导你讨论棋盘评估技术。然后返回并查看Wolf的论文,关注他的行动评估函数。最后,关注他尝试自动学习一个好的评估函数的方式。
这需要很多工作。但为《RISK》开发一个AI并不是一件容易的事。
(如果你只是想计算给定攻击的预期结果,我会建议使用蒙特卡洛。它干净,直观易懂,实施起来也非常容易。唯一困难的——而且不是很大——是确保你运行足够的试验以获得好的结果。)