皇室战争

1 分钟阅读

本人闲暇时也会玩一些游戏,其中就有supercell开发的clash royale

最近,我开始尝试做一个能够自主游玩《皇室战争》的 AI 项目。

项目暂时叫作 RanchoCR。我也考虑过类似 KataCR 的名字,因为它在定位上确实受到 KataGo 的启发:不是为游戏编写一套固定脚本,而是尝试构建一个能够理解局面、评估决策,并通过训练逐步变强的智能体。

不过,这个项目和围棋 AI 有一个很明显的区别。

围棋是一个规则完全明确、状态完全可见、行动空间离散的回合制游戏;《皇室战争》则是一个实时、部分可观测、多单位并行行动的策略游戏。玩家不仅要决定“下一步做什么”,还要决定“什么时候做”“放在哪里”“是否继续等待”。

这让它成为了一个很有意思的 AI 问题。

为什么选择《皇室战争》

表面上看,《皇室战争》只是一个操作相对简单的手游。

玩家拥有八张卡牌,每次从当前四张手牌中选择一张,将其部署在竞技场中的某个位置。单位随后自动移动和攻击,最终目标是在规定时间内摧毁对方的皇家塔。

但真正进入游戏以后,会发现它包含了很多复杂因素:

  • 双方的圣水会随时间恢复;
  • 手牌按照特定顺序循环;
  • 玩家无法直接看到对方的全部手牌;
  • 不同卡牌之间存在复杂的克制和配合关系;
  • 同一张卡牌放置位置不同,结果可能完全不同;
  • 玩家需要同时考虑进攻、防守、节奏和资源交换;
  • 当前决策的影响可能在十几秒后才真正体现出来。

因此,一次出牌并不是孤立的动作。

AI 必须根据当前场面,推测对方可能拥有的卡牌,判断双方的圣水差,预测场上单位接下来的运动,并评估不同决策对未来局面的影响。

从这个角度看,《皇室战争》可以被视为一个小型的实时战略决策环境。

我想做的不是一个脚本

最简单的游戏自动化方案,是提前写好大量规则:

对方出野猪骑士,就在某个位置放建筑。 对方沉底放大型单位,就去另一路进攻。 圣水达到十点,就按照预设顺序出牌。

这种系统可能在特定卡组和特定环境中有效,但它并没有真正理解局面。一旦版本变化、卡组改变,或者遇到规则没有覆盖的情况,系统就很容易失效。

我更感兴趣的问题是:

能不能让模型从游戏状态中学习决策,而不是由人类写出全部决策规则?

理想情况下,系统接收到的应该是普通玩家能够获得的信息,例如游戏画面、当前手牌、圣水数量、场上单位和剩余时间,然后输出一项合法操作:

  1. 暂时不行动;
  2. 选择一张卡牌;
  3. 决定部署的位置和时机。

它不应该依赖读取游戏内存、提前获知对方手牌,或者使用普通玩家无法获得的信息。

我希望研究的是一个在相同信息条件下进行决策的游戏智能体,而不是一个依靠信息优势运行的外挂。

这个问题可以怎样建模

从强化学习的角度看,一局《皇室战争》可以被描述为一个连续进行的决策过程。

在每个时刻,智能体需要获得对当前局面的表示:

[ s_t = \text{当前手牌、圣水、场上单位、防御塔状态、时间和历史信息} ]

随后选择一个动作:

[ a_t = \text{卡牌、部署位置、部署时间} ]

环境根据双方行动继续演化,最终产生胜利、失败或平局。

但这里存在几个困难。

首先,游戏并不是完全可观测的。AI 无法直接看到对方尚未打出的卡牌,也无法准确知道对方当前拥有多少圣水。因此,模型不能只处理单帧画面,还需要利用历史信息维护对对手状态的估计。

其次,动作空间非常大。一张卡牌可以被放置在竞技场中的许多位置,而且“不出牌”本身也是一种重要决策。很多时候,错误并不是出了错误的牌,而是出牌过早,浪费了圣水或者暴露了自己的防守。

再次,奖励十分稀疏。一局游戏持续数分钟,但最直接的训练信号通常只有最后的胜负。模型需要判断,究竟是几十秒前的哪一个决策导致了当前结果。

这意味着项目可能同时涉及:

  • 计算机视觉;
  • 时序状态建模;
  • 对手状态估计;
  • 行为克隆;
  • 强化学习;
  • 自博弈;
  • 搜索与局面评估;
  • 实时智能体系统。

第一阶段:先让系统看懂游戏

在训练决策模型之前,首先需要让程序把游戏画面转换成结构化状态。

例如:

  • 当前四张手牌分别是什么;
  • 玩家拥有多少圣水;
  • 双方防御塔还剩多少生命值;
  • 场上出现了哪些单位;
  • 每个单位位于什么位置;
  • 单位属于哪一方;
  • 当前处于正常时间还是加时阶段。

这一步看起来只是视觉识别,但它决定了后续系统能够获得多可靠的信息。

最初版本不必追求理解游戏中的全部细节。可以先固定分辨率、卡组和竞技场,只处理有限数量的卡牌,逐步建立一个能够稳定运行的最小环境。

相比一开始就追求覆盖完整游戏,我更希望先跑通一个闭环:

读取画面 → 提取状态 → 模型决策 → 执行动作 → 记录结果。

只要这个闭环能够稳定运行,后续的识别模型、决策模型和训练方法都可以逐步替换。

第二阶段:从人类对局中学习

直接通过强化学习从零探索,成本可能非常高。

随机智能体甚至很难完成基本的出牌和防守,更不用说理解卡牌之间的组合关系。因此,一个更现实的起点是收集人类玩家的对局数据,进行行为克隆。

模型观察某个时刻的局面,并学习人类玩家接下来选择的卡牌、位置和出牌时间。

这一阶段的目标不是立刻超过人类,而是让智能体先获得最基础的游戏常识:

  • 不要让圣水长期溢出;
  • 对方进攻时需要进行防守;
  • 不要把远程单位放到敌方单位脸上;
  • 根据场上威胁选择合适的卡牌;
  • 理解常见卡组的基本进攻节奏。

行为克隆也存在明显局限。模型只能模仿数据中的行为,可能同时学到人类玩家的错误,而且在进入训练数据没有覆盖的局面后,误差会不断积累。

但它可以为后续的强化学习提供一个远好于随机策略的起点。

第三阶段:建立可训练的简化环境

真正困难的部分,可能不是模型结构,而是训练环境。

如果每一次训练都必须在真实游戏客户端中进行,那么采样速度会受到动画、网络、匹配机制和游戏时长的限制。训练数百万局几乎不可行。

因此,长期来看,可能需要构建一个简化的《皇室战争》模拟环境。

这个环境不必在最初阶段完整复现游戏,但至少需要描述:

  • 圣水恢复;
  • 卡牌轮转;
  • 单位生成;
  • 移动和索敌;
  • 攻击距离与攻击间隔;
  • 伤害和生命值;
  • 建筑与防御塔机制;
  • 胜负判断。

有了可以高速运行的环境,才可能进行大规模自博弈、策略搜索和强化学习实验。

当然,模拟环境与真实游戏之间一定存在差异。因此,最终还需要解决从模拟环境迁移到真实画面环境的问题。

第四阶段:自博弈与持续进化

项目更长期的目标,是让不同版本的智能体相互对战。

每个版本都可以和历史策略进行比赛,根据胜率进入新的训练迭代。模型不再只模仿固定的人类数据,而是通过对抗不断发现新的策略。

理想情况下,整个训练过程会形成一个循环:

[ \text{自我对局} \rightarrow \text{收集数据} \rightarrow \text{更新策略} \rightarrow \text{评估新模型} \rightarrow \text{进入下一轮对局} ]

这也是我从 KataGo 等项目中最想借鉴的部分。

真正值得研究的,不只是某一个最终模型,而是如何建立一套能够自动产生数据、评估策略并持续迭代的训练系统。

先限制问题,而不是无限扩大目标

完整解决《皇室战争》是一个很大的目标。

游戏中存在上百张卡牌、不同等级、不同卡组和持续变化的版本环境。如果一开始就试图解决全部问题,项目很可能长期停留在基础设施建设阶段。

因此,初期应该主动限制问题:

  • 固定一套或少量卡组;
  • 固定卡牌和等级;
  • 暂时忽略部分特殊机制;
  • 使用统一分辨率和设备环境;
  • 先完成单局决策闭环;
  • 先让 AI 达到“会玩”,再讨论“玩得强”。

最小可行目标不是击败职业玩家,而是让一个不依赖硬编码出牌顺序的智能体,能够独立完成一局游戏,并且表现显著优于随机策略。

这已经足以验证整个系统是否成立。

关于项目名称

目前我还没有完全确定项目名称。

RanchoCR 更像一个个人项目名称,能够和我的个人主页及其他项目保持一致;KataCR 则更容易让人联想到 KataGo,直接表达项目的自博弈和游戏 AI 属性。

不过,名字并不是当前最重要的问题。

一个项目最终是否能够被记住,取决于它是否真正做出了结果。与其花太多时间寻找一个完美名称,不如先完成第一个能够识别画面、作出决策并实际出牌的版本。

在那之后,名字自然会逐渐确定下来。

接下来准备做什么

目前,这个项目仍然处于早期探索阶段。

接下来最重要的工作,不是直接训练一个巨大的模型,而是逐步明确和验证下面几个问题:

  1. 如何稳定获取并记录对局数据;
  2. 如何将游戏画面转化为结构化状态;
  3. 如何表示卡牌、位置和时间组成的动作空间;
  4. 是否能够用行为克隆训练出最基础的策略;
  5. 如何建立一个足够快的简化训练环境;
  6. 如何客观评估不同版本智能体的强弱。

我会把整个项目拆成一系列尽可能小的实验,每次只验证一个关键环节。

它最终可能成为一个真正有竞争力的游戏 AI,也可能在某个阶段证明现有方案并不可行。但无论结果如何,这个项目都会涉及从视觉感知、模型训练到智能体工程部署的一整套流程。

对我来说,这正是它最有价值的地方。

我并不只是想让程序自动打一局《皇室战争》。

我想知道的是:

在一个实时、部分可观测并且存在复杂长期策略的环境中,我们究竟应该怎样构建一个能够感知、判断、行动并通过对抗持续变强的智能体?