MicroRTS-Py
基于即时战略游戏的高效强化学习环境,支持全视野与战争迷雾双模式,内置多智能体 RL 训练基准
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于即时战略游戏的高效强化学习环境,支持全视野与战争迷雾双模式,内置多智能体 RL 训练基准
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你训练了一个 AI 下棋已经登峰造极,现在让它去指挥一场真实的战争——它能行吗?这就是 RL 研究者长期面临的核心困境:现有基准环境往往过度简化,无法真实反映 AI 在复杂、动态多智能体环境中的决策能力。MicroRTS-Py 正是在这一背景下诞生的:它将即时战略游戏(RTS)的完整博弈复杂性——资源采集、基地建设、兵种生产、战术对抗——封装为一个高效可训练的强化学习环境,让 AI 在接近真实的战场上接受考验。
MicroRTS-Py 并非凭空出现。它的前身是Santiago Ontañón 开发的开源 RTS 游戏模拟器 μRTS,由机器学习研究者 Costa Huang(vchxyzjn)于 2020 年封装为 Gym 环境(gym-microrts),成为 RL 领域最早的 RTS 基准之一。2022 年,随着 Gym 被废弃,项目迁移至 gym-microrts 独立仓库,并最终由强化学习开源社区 Farama Foundation 接手维护——这是一个专门孵化 Gymnasium 系列开源项目的非营利组织,旗下包括 Gym、PettingZoo、Minari 等多个 RL 基础设施项目。

项目现状:2025 年 8 月 11 日,Farama 官方宣布项目正式弃用(deprecated),理由是社区使用规模不足,不再计划投入资源维护。但代码库仍保留完整功能,历史版本可用,是研究 RTS 场景下多智能体决策的经典参考。
MicroRTS-Py 的设计哲学是将游戏状态完全暴露给 AI,同时保留人类可理解的游戏机制。这与《星际争霸》《魔兽争霸》这类商业游戏不同——后者有大量隐藏信息、复杂 UI 交互,无法直接用于 RL 训练。
游戏地图被建模为一个二维网格(Grid)。每一格是一个 cell,包含以下 29 通道的特征平面(Feature Planes):
| 特征类型 | 通道数 | 说明 |
|---|---|---|
| 地形/墙体 | 2 | 墙和自由地形 |
| 资源分布 | 1 | 黄金资源位置 |
| 资源携带状态 | 1 | 单位是否携带资源 |
| 玩家归属 | 2 | Player 1 / Player 2 |
| 单位类型 | 8 | Worker、Base、Baracks、Barracks 等 |
| 单位生命值 | 4 | HP 分级 |
| 当前执行的动作 | 6 | attack/move/harvest/build/produce/spawn |
| 动作参数 | N | 移动方向、攻击目标等 |
这意味着每个网格位置是一个 29 维向量,AI 看到的是棋盘式的高维张量——类似于围棋 AI 看到棋盘的方式,只是每一步的可能性从 361 个交叉点变成了多个动作维度的组合。
采用 MultiDiscrete 复合动作空间,分解为 7 个子维度:
| 动作维度 | 动作类型数 | 说明 |
|---|---|---|
| 动作类型 | 6 | 攻击、移动、采集、返回、生产、训练 |
| 移动方向 | 4 | 北/南/东/西 |
| 采集方向 | 4 | 同上 |
| 返回方向 | 4 | 同上 |
| 生产方向 | 4 | 同上 |
| 兵种选择 | 7 | 选择要训练的兵种 |
| 攻击目标 | 可变 | 指定攻击对象 |
每个时间步,AI 需要在全地图所有合法动作中做出选择。这导致动作空间随地图大小指数增长——一个 16×16 的地图,合法动作数可达数千,使得 MicroRTS 成为高维度动作空间下 RL 算法的压力测试场。
支持两种模式:
MicroRTS-Py 通过 PettingZooMicroRTSGridModeSharedMemVecEnv 提供标准多智能体接口。这意味着它可以与 PettingZoo 生态中的任何 RL 算法对接——MADDPG、QMIX、MAPPO 等多智能体算法均可无缝使用。
项目结构清晰,分工明确:
gym_microrts/ # 核心环境包
├── envs/
│ └── vec_env.py # 向量化环境(支持多进程并行)
├── microrts/
│ ├── microrts.jar # Java 编译的 RTS 游戏引擎
│ └── microrts_maps/ # 预设地图(16x16、24x24 等)
├── microrts_ai.py # 内置 AI Bot(coacAI、random、workerRush 等)
├── petting_zoo_api.py # PettingZoo 接口适配层
└── microrts_maps.py # 地图管理
experiments/ # 训练示例
├── ppo_gridnet.py # PPO + GridNet 训练脚本
├── league.py # 联赛式自我对弈
└── ppo_gridnet_eval.py # 评估脚本
关键设计:RTS 游戏逻辑本身运行在 Java 引擎中(microrts.jar),通过 JPype(Java Python Bridge)从 Python 调用。这保证了游戏引擎的高效执行(Java 在实时策略计算上的性能优势),同时让 RL 研究者用熟悉的 Python 交互。
构建流程(build.sh):Java 源码编译 → 打包 JAR → Python 通过 JPype 连接。这种架构也带来了一个门槛:必须安装 Java 8+ 运行环境。
MicroRTSGridModeVecEnv 支持同时运行多个游戏实例(num_selfplay_envs 控制自我对弈环境数,num_bot_envs 控制与内置 Bot 对战的数量),配合 PyTorch 的 VecEnvWrapper 实现真正的批量化训练。实验脚本 ppo_gridnet.py 默认配置 24 个自我对弈环境 + 16 个 Bot 环境,共计 40 个并行环境。
项目内置多个预制 Bot:randomAI(随机策略)、workerRush(工人 rush rush速攻)、naiveMCTS(蒙特卡洛树搜索)、coacAI(贪婪组合策略)等,可直接作为对手或基线对比。league.py 实现了联赛式自我对弈,逐步解锁更强大的策略变体。
项目提供了完整的 PPO 训练脚本 ppo_gridnet.py,基于 Stable-Baselines3,关键配置:
# 默认训练配置
num_selfplay_envs = 24 # 自我对弈环境
num_bot_envs = 16 # Bot 对战环境
total_timesteps = 50_000_000 # 默认训练步数
learning_rate = 2.5e-4
partial_obs = False # 默认全视野
训练输出会自动记录到 TensorBoard 和 WandB,并支持录制视频(通过 FFmpeg)。实测在单卡 RTX 3080 上,完成 5000 万步训练约需 3-5 天。
必须坦诚地说,MicroRTS-Py 并非完美。它的主要局限包括:
已弃用:项目官方已于 2025 年 8 月停止维护,不再接受更新。Farama 团队表示会维持代码可用,但不会继续投入开发。
动作空间维度灾难:相比 AlphaStar 使用的 PMORE 等高级动作分解,MicroRTS 的 flat action space 在大地图上搜索空间极大,普通 PPO 算法难以探索有效策略。
Java 依赖门槛:必须在 Python 之外安装 Java 环境,增加了部署复杂度,且跨平台(尤其 macOS ARM)存在兼容性问题。
非真实感:即便比传统 Gym 环境复杂,与《星际争霸》《Dota 2》相比,MicroRTS 的视觉复杂度和战略深度仍有较大差距。
弃用后的生态风险:随着项目弃用,相关依赖(JPype 版本、Poetry lock 文件中的旧版 torch 1.7.1)可能逐渐与新环境不兼容。
尽管已被官方弃用,MicroRTS-Py 在 RL 研究史上留下了深刻的印记:
对于 AI 爱好者而言,MicroRTS-Py 是一扇低门槛窥探 RTS AI 研究精髓的窗口;对于开发者而言,它是多智能体强化学习从理论走向实践的经典练手项目。建议在 Python 3.7-3.9 + Poetry + Java 8+ 环境中部署,配合 Stable-Baselines3 或 TRL 库进行自定义算法实验。

图1:MicroRTS 游戏中 Worker Rush 战术的运行画面,展示了两方单位在 16×16 网格地图上的对抗过程。