rlgym
将《火箭联盟》变为强化学习实验床的 Python 库,模块化 Gymnasium 风格 API 支持自定义观察/奖励/动作解析
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将《火箭联盟》变为强化学习实验床的 Python 库,模块化 Gymnasium 风格 API 支持自定义观察/奖励/动作解析
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你或许听说过那个把游戏变成健身房的经典比喻,而 RLGym 就是这句话在电竞领域的真实写照。这个开源项目将风靡全球的竞技游戏《火箭联盟》(Rocket League)包装成一个标准的 Gym 风格强化学习环境,让研究者和开发者能够像训练 Atari 游戏 AI 一样,训练自己的足球赛车机器人。
RLGym 最初由几位热爱强化学习和 Rocket League 的独立开发者发起。项目创始团队包括 Lucas Emery、Matthew Allen 和 Rolv-Arild Braaten,他们最初只是想验证一个朴素的想法——能不能让一个 AI 从零学会开车、跳起、射门?
这个看似玩具级的需求,背后却有严肃的学术价值。Rocket League 是一个高度动态的多智能体环境:两辆赛车在三维空间中对抗,球有物理碰撞,车辆有加速度限制,胜负取决于时机、判断和配合。比起棋类或简单像素游戏,它更接近现实世界的机器人控制问题。
2022 年,项目获得了广泛关注,并在 2024 年进行了重大架构重构——将原本与 Rocket League 强绑定的代码,抽象为游戏无关的核心 API(rlgym-api),使其从单一游戏的环境库,升级为通用的强化学习环境构建框架。2025 年 4 月,rlgym-rocket-league 作为独立包在 PyPI 发布,生态进一步成熟。
RLGym 的设计哲学是高度模块化。一个 RL 环境由以下组件拼装而成:
观察构建器(ObsBuilder):定义智能体能"看到"什么。内置 DefaultObs 提供标准视角,也可自定义构建器返回任意特征向量。
动作解析器(ActionParser):将神经网络的输出映射为游戏操作。内置 LookupTableAction 提供离散动作空间,ContinuousAction 支持连续控制,RepeatAction 可将一个动作重复执行多步以提升控制频率。
奖励函数(RewardFunction):定义智能体的学习目标。内置函数包括 GoalReward(进球奖励)、TouchReward(触球奖励)、VelocityReward(速度奖励)等,支持通过 CombinedReward 组合多个奖励项,并可设置相对权重。
终止/截断条件(DoneCondition):决定一局何时结束。内置 GoalCondition(进球结束)、TimeoutCondition(超时截断)、NoTouchTimeoutCondition(无人触球超时截断)等。
状态修改器(StateMutator):在每局开始时随机化初始状态。FixedTeamSizeMutator 固定双方人数,KickoffMutator 设置开球状态,SpawnRandomMutator 随机出生点位,大幅提升数据多样性。
模拟引擎(TransitionEngine):使用 RocketSimEngine 在无头模式下运行游戏物理,不依赖游戏客户端,支持批量并行模拟。
渲染器(Renderer):可选的 RLViserRenderer 提供浏览器内实时可视化,观察智能体的学习进展。
以下是一个标准的 2v2 对抗环境配置示例,展示了各组件的组合方式:
from rlgym.api import RLGym
from rlgym.rocket_league.sim import RocketSimEngine
from rlgym.rocket_league.obs_builders import DefaultObs
from rlgym.rocket_league.action_parsers import LookupTableAction, RepeatAction
from rlgym.rocket_league.reward_functions import CombinedReward, GoalReward, TouchReward
from rlgym.rocket_league.done_conditions import GoalCondition, TimeoutCondition
from rlgym.rocket_league.state_mutators import MutatorSequence, FixedTeamSizeMutator, KickoffMutator
from rlgym.rocket_league.rlviser import RLViserRenderer
from RocketSim import GameMode
env = RLGym(
obs_builder=DefaultObs(zero_padding=None),
action_parser=RepeatAction(LookupTableAction(), repeats=8),
reward_fn=CombinedReward((GoalReward(), 10.), (TouchReward(), 0.1)),
termination_cond=GoalCondition(),
truncation_cond=TimeoutCondition(timeout_seconds=300.),
transition_engine=RocketSimEngine(game_mode=GameMode.SOCCAR),
renderer=RLViserRenderer()
)
RLGym 的架构分为两个层次:
rlgym-api(核心包):纯 Python 实现,零外部依赖,任何人都可以基于它为自己的游戏或仿真器构建 RL 环境,完全不涉及 Rocket League。API 设计遵循 Gymnasium 规范,兼容主流 RL 训练框架。
rlgym-rocket-league(游戏实现包):依赖 RocketSim(一个开源的 Rocket League 物理模拟器,使用 Rust 实现,通过 pip 安装时自动编译),提供针对 Rocket League 的专用组件(观察构建器、动作解析器、奖励函数等)。
这种拆分使得核心框架和游戏特定逻辑解耦,代码复用性大幅提升。
对于爱好者:RLGym 提供了完整的入门文档(rlgym.org)和 RLViserRenderer 实时可视化,初学者可以直观看到 AI 的学习过程。但要真正训练出有竞争力的 bot,需要至少理解 PPO 或 SAC 等策略梯度算法的基本原理。
对于开发者:RLGym 的模块化设计让自定义环境变得简单——只需实现几个抽象方法即可接入自己的游戏引擎。主要门槛在于 RocketSim 的安装(需要 C++ 编译工具链)和 GPU 驱动的配置。
GPU 硬件需求:RLGym 本身不强制要求 GPU(纯模拟可以用 CPU),但训练神经网络策略必须依赖 GPU。没有 NVIDIA 显卡的用户可以使用 Google Colab 或云计算实例。
RocketSim 依赖复杂性:RocketSim 以二进制形式分发,跨平台安装(尤其是 Windows 和 Linux 之间的兼容)有时会遇到编译错误,影响入门体验。
训练样本效率低:相比 AlphaGo 等大规模自对弈项目,RLGym 的早期版本训练样本效率不高,需要数百万步才能学到基础技能。但配合 StateMutator 做数据增强后有所改善。
生态封闭性:项目以 Rocket League 为核心,周边生态工具(如 rlgym-ppo、rlgym-tools)质量参差不齐,缺乏像 Stable-Baselines3 那样开箱即用的高质量训练框架集成。
RLGym 的出现填补了一个细分但重要的空白——高动态、多智能体、3D 物理仿真环境。在此之前,RL 研究者通常只能在 Mujoco(单智能体物理控制)或简单 2D 环境(Gym 类经典环境)中做实验。RLGym 将足球机器人这个介于学术和游戏之间的场景,带入了可复现研究的范畴。
项目已被用于多篇学术论文,并形成了活跃的 Discord 社区。对于想深入理解强化学习、或对多智能体协作/竞争问题感兴趣的开发者,RLGym 是一个兼具趣味性和研究价值的实践平台。
总结:RLGym 是将《火箭联盟》变为强化学习实验床的 Python 库,通过模块化的 Gymnasium 风格 API,让研究者和爱好者能够训练自己的足球赛车机器人。它以 rlgym-api(零依赖核心)和 rlgym-rocket-league(游戏实现)两层架构兼顾通用性和专一性,适合有一定 RL 基础、想接触 3D 多智能体场景的开发者入门和研究。