« 用地标改进 A star 寻路的启发函数 | 返回首页

银河竞逐的乐趣和策略

银河竞逐是我最喜欢的桌游之一。我曾经为它写过两篇 blog :银河竞逐的设计如何教人玩银河竞逐

最近我教会了小孩玩这个游戏,我自己也在电脑上玩了 200 多盘。主要是在 BGA 上和人对战,以及在官方授权的电子版 中挑战最高难度的 AI 。和过去喜欢多人混战不同,这段时间我主要玩双人规则。虽然在线下,我玩这个游戏的水平超过一般桌游玩家,但在线上,我只有略高于 40% 的胜率。说明这个游戏的策略还有很高的天花板我没能摸到。和最高难度的 AI 相比,我的胜率超过了 50% 。

这是为数不多有着极深的策略,却又超快节奏的桌游。在 BGA 上默认只给两个选手各 3 分钟的总时间,通常在 5~6 分钟就可以完成一局游戏。应了它名字里的 Race ,玩起来颇有竞速的感觉。我在游戏过程中总是觉得思考时间不够,如果纯凭借经验(感觉)打牌,很容易输掉。特别在最后两个回合,往往需要精算自己和对手的各种可能性,找到取胜的可能。胜负比分通常差距非常小,运气成分虽然存在,但总有希望通过计算挽回。而判断上的一个小的失误却会迅速落下对手一大截。

这个游戏核心目标就是:在触碰结束条件的那一刻,比对手拿到更多的 VP 。新手则往往理解成单一的如何更高效的获取 VP 。这两者是有区别的。因为比拼获取 VP 的效率往往会减少 PvP 游戏的对抗性,变成埋头干自己的事情。初玩 RFTG 的时候,我也一度觉得这是个对抗性不强的游戏。但在实战中却发现,必须时刻关注对手在做什么。首先是通过判断对手的行动,帮助自己更高效的获取 VP ,其次是根据对手的节奏,扭转游戏结束的时间,做到在结束那一刻超过对手的 VP (而不是追求获得更多 VP)。

所以在高手对决时,尤其是最后,需要仔细计算游戏会在几轮结束,以及对手希望在什么时候结束。自己有什么方法维持几轮,是需要拖延多一轮、还是抢先减少一轮。而轮次最终又是双方一同决定的,这就存在很多博弈空间。需要提前估算每种情况的胜率和最佳对策。游戏规则给玩家提供了大量的选择。VP 可以通过铺在桌面的卡牌积累,也可以用场上的牌组持续生产。游戏终止条件依此分成了两个:任意玩家在桌面铺了 12 张卡牌,或耗尽 12 倍玩家数量的 VP token 。

在引擎构建方面,主流又能分为主导开发设施、军事占领、生产消费流派。细分还可以更多。这让玩家无论抽到什么手牌,总有办法构筑出有效的组合。而不同的流派决定了玩家每轮的行动倾向性,影响游戏的节奏。对手的流派影响着自己的流派的推进节奏。这种影响,可以让人可以预测对手的行动。正确预测对手的行动可以让自己获利,而这个游戏的胜利的本质是找到比对手快一点的路线。这就提供了博弈空间。这就有点像打(德州?)扑克,玩家的思考会有多个层次:第一层是计算如何行动构筑一个最强大的引擎,让自己的利益最大化;第二层则是猜测对手想做什么,怎么利用对手的行动产生优势(对自己构筑引擎,未必是最优的,但只需要比对手好);第三层是,去思考对手在第二层上猜测自己,从而避免让对手取得优势;第四层是,分析对手在前三个层面做决策,制定对自己的最优策略。

游戏(尤其是双人模式)节奏非常快,以我的经验,通常在 6-8 轮就会结束。而牌库空间相比较而言非常大,抽到什么卡几乎无法预测。假设所有人都对牌库及其熟悉,那么在前期就必须做好多手准备,中期随时转型。而游戏规则也提供了大量中途转型的可能,玩家几乎不会一门心思的贯彻刚开始的计划,都是随机应变。除了根据自己抽的新卡做调整,更会根据对手的情况而变化。毕竟,要想胜利,不在于你是否完美的执行了计划,取得了高分,而是在最后一轮超过了对手(提前冲线)。在这种思路下,最后一轮的行动选择往往是决胜一手。怎样让自己的利益和对手潜在的利益差最大。因为随机性的存在,这反映为估算哪个选择让自己击败对手的概率更大。在胜券在握时,减少黑天鹅事件事件(对手低概率摸到扭转胜负的牌并有机会打出来);在形势不利时,去博一个翻盘的可能性;在机会对等时,精算哪怕是一张手牌数量的差异……


银河竞逐很早就有人为它制作 AI 。这是个开源项目,以人工智能网络驱动的 AI 。代码其实挺好读的,因为它几乎不包含任何人为输入的策略,就存粹是以训练出来的网络指导 AI 做决策。所有 AI 的策略都是涌现出来的。但在我随意的浏览代码后,我感觉其实它还有许多的改进空间。比如,这段开源代码看起来只考虑了当前盘面的自己和对手的桌面,自己的手牌,以此来训练和推理做为行动判断。但以我的游戏经验来看,其实是不够的。因为我在玩游戏时,还要根据过往局面,推算抽牌堆可能有哪些牌,不可能有哪些牌,来做决策参考。我相信有丰富经验的玩家都会考虑这些。不过,这个 AI 的原作者 Keldon Jones 后来参加了官方授权的电子版制作。我相信他其后做了进一步的改进(包括我提到的这一点)。这里有一篇文章 介绍了后面这个版本的 AI 的思路。其中在神经网络的 input 里,专门列出了 Cards in deck, hand, discard 。

但另一方面,我感觉即使是新的版本也没有做到的,就是根据对手调整策略。因为这和围棋不一样,是一个有大量不公开信息的游戏。猜测对手的行动非常重要。如果非常了解对手,更容易找到对手的模式,猜中对手的行动更准确。而正确的预测在实战中的确可以大大提高胜率。对手会做什么,并不总能从历史中学习。如果要以此为网络的输入,我认为需要一定程度的加入当前局的历史,而不只有当前的局面。在文章中也提到,他们分叉了许多个模型,分别针对双人、多人、不同的扩展包规则。因为这样比把规则集作为参数输入同一个模型效率更高。在决策时,也不完全是一股脑把游戏的状态输入,而是把判断局面和猜测对手行动分为了两个独立部分,再用传统的搜索法整合起来:根据对手行动的不同预测结果和概率,参考局面胜率的判定,搜索最优策略。

我感觉还能细化更多:根据初始星球分开不同的开局策略、中盘和终局也可以分成不同的决策网络、甚至给对手的模式进行分类(保守还是激进)。尤其是对终局的处理,以我有限的游戏经验判断,最后是需要精算的,这有点类似围棋的收官,但又不完全相同。固然一个超大的统一模型或许可以涌现出人类需要在不同阶段分而治之的策略模式。但这同时也是个成本问题。从开源代码看,它也对最后一轮前的桌面状态做了一点区别对待(比如不再关心手牌保留了什么)。

无论如何,这是个高质量 AI 。我和 AI 对战也能获得不少乐趣。无法碾压 AI ,当然 AI 更无法碾压我。它能极大的帮助新手学习游戏,充当一个优秀的陪练。

不过,我感觉和人玩(哪怕是和线上完全不认识的人玩)还是更有趣一些。

Post a comment

非这个主题相关的留言请到:留言本