slimevolleygym
slimevolleygym 是一个基于经典网页游戏“史莱姆排球”打造的轻量级强化学习环境。它将原本简单的双人排球对抗转化为标准的 OpenAI Gym 接口,旨在为单智能体及多智能体强化学习算法提供高效、稳定的测试平台。
该工具主要解决了传统基准任务(如 CartPole)缺乏博弈互动性的问题,让研究人员能够轻松构建自对弈(self-play)或多智能体对抗场景,从而更全面地评估智能体在动态竞争中的表现。它特别适合强化学习研究者、算法开发者以及高校师生用于教学演示和原型验证。
slimevolleygym 拥有多项技术亮点:依赖极少,仅需 gym 和 numpy 即可运行,极大降低了环境配置出错的风险;运算效率极高,在普通 CPU 上每秒可模拟上万步,显著缩短实验迭代周期;支持像素观察模式,可直接在无显示器的云端服务器上运行,并兼容针对 Atari 游戏优化的主流模型。此外,其独特的观测设计确保了一侧训练的智能体无需调整即可直接切换到另一侧对战,为迁移学习和对称策略研究提供了便利。无论是探索多智能体协作还是验证新的进化算法,slimevolleygym 都是一个简洁而强大的选择。
使用场景
某高校强化学习实验室的研究团队正致力于开发一种能在动态对抗环境中快速进化的多智能体协作算法,急需一个轻量级且支持自博弈的测试平台。
没有 slimevolleygym 时
- 环境搭建繁琐:研究者需自行编写游戏物理引擎或集成厚重的 Atari 模拟器,依赖库冲突频发,配置耗时数天。
- 训练迭代缓慢:传统环境在 CPU 上运行效率低,完成一次完整的自博弈进化实验往往需要数小时甚至更久,严重拖慢验证节奏。
- 多智能体支持缺失:现有简单基准任务(如 CartPole)缺乏对抗机制,而复杂游戏难以直接修改为自博弈模式,无法有效评估策略的鲁棒性。
- 云端部署困难:大多数图形化环境依赖显示服务器,难以在无头(headless)云服务器上直接进行大规模并行训练。
使用 slimevolleygym 后
- 即插即用:仅依赖 gym 和 numpy 即可运行,无需额外配置物理引擎,研究人员可在几分钟内启动实验代码。
- 极速迭代:在普通笔记本上即可达到每秒 1.25 万步的仿真速度,若结合 EvoJAX 加速,训练时间从小时级缩短至分钟级。
- 原生自博弈支持:内置对手模型可轻松替换为任意策略网络,天然支持单代理对抗、多智能体协作及持续学习场景,完美契合算法验证需求。
- 无缝云端运行:提供像素观察模式,直接将画面渲染为 NumPy 数组,无需图形界面即可在云端集群大规模并行训练。
slimevolleygym 通过极简的架构与高效的仿真能力,将多智能体强化学习的实验门槛降至最低,让研究者能专注于算法创新而非环境调试。
运行环境要求
- Linux
- macOS
- Windows
- 非必需
- 默认版本仅需 CPU 即可运行(在 2015 年 MacBook i7 上可达 12.5K steps/s)
- 若需硬件加速训练,可配合 EvoJAX 工具包在 GPU 上运行
未说明(轻量级环境,依赖仅为 gym 和 numpy)

快速开始
黏液排球 Gym 环境
黏液排球是一款由不知名作者在2000年代初制作的游戏。
“游戏的物理机制有点‘不太靠谱’,但其简单的玩法却让人一玩就上瘾。”
更新(2022年5月12日): 该环境已被移植到 EvoJAX 上,这是一个硬件加速的神经进化工具包,使得 SlimeVolley 可以在 GPU 上运行,从而将训练时间从数小时缩短至几分钟。
SlimeVolleyGym 是一个用于测试单智能体和多智能体强化学习算法的简单 Gym 环境。
游戏规则非常简单:智能体的目标是将球打到对方场地的地面上,从而使对方失去一条生命。每个智能体初始有五条生命。当任意一方的生命耗尽,或者经过 3000 个时间步后,回合即结束。当对手失分时,智能体获得 +1 的奖励;当自己失分时,则获得 -1 的奖励。
该环境基于我于 2015 年 开发的 JavaScript 游戏 Neural Slime Volleyball。当时我利用自我对弈和进化算法训练了一个简单的神经网络智能体,使其表现优于大多数人类玩家。后来,我决定将其移植到 Python 中,作为一个轻量级、高速的 Gym 环境,用作更高级 RL 方法的测试平台,例如多智能体、自我对弈、持续学习和模仿学习等算法。
注意:关于库
预训练的 PPO 模型是使用 stable-baselines v2.10 训练的,而非 stable-baselines3。
示例代码基于 Gym 0.19.0 或更早版本开发。我曾短暂测试过 0.20.0 版本,似乎可以正常工作,但更高版本的 Gym 存在破坏兼容性的 API 变更。
在开发过程中,我使用的是 pyglet 库 0.15.7 或更早版本,尚未测试最新版本的 pyglet 是否兼容。
显著特点
唯一依赖项是 gym 和 numpy。运行该环境无需其他库,因此出错的可能性较低。
在常规的单智能体设置中,智能体将与一个来自 2015 年的、仅有 120 个参数的 神经网络 基线智能体对战。这个对手可以轻松替换为其他策略,从而实现多智能体或自我对弈环境。
在 2015 年款 MacBook(Core i7)上,状态空间观测模式下可达到约 12.5K 时间步/秒的运行速度,从而加快实验迭代。
提供了一份教程,演示了多种不同的训练方法(如单智能体、自我对弈、进化等),这些方法通常仅需一台 CPU 机器即可完成。对于教学用途可能非常有用。
提供像素观测模式。观测结果直接渲染为 numpy 数组,并可在无头云服务器上运行。该像素版本的环境模仿了基于 Atari Learning Environment 的 Gym 环境,已成功应用于多个 Atari Gym 封装及针对 Atari 优化的 RL 模型。
对手的观测信息会作为
env.step()返回的可选info对象的一部分提供,适用于状态空间和像素两种观测模式。观测数据的构建方式是假设智能体始终位于右侧球场,即使实际位置在左侧,因此在某一侧训练的智能体无需调整即可在另一侧继续游戏。
该环境旨在补充现有的简单基准任务,如 CartPole、Lunar Lander、Bipedal Walker、Car Racing 以及连续控制任务(MuJoCo / PyBullet / DM Control),同时增加游戏性元素。其设计初衷是便于让训练好的智能体相互对战,也能够直接在多智能体环境中进行训练,从而为评估智能体性能提供更多维度。
安装
如果仅需使用 Gym 环境,而不需要示例脚本,可通过 pip 包安装:
pip install slimevolleygym
若希望获取基础使用演示、训练脚本及预训练模型,则可从仓库安装:
git clone https://github.com/hardmaru/slimevolleygym.git
cd slimevolleygym
pip install -e .
基本使用
从仓库安装后,可以通过运行以下命令与基线智能体对战:
python test_state.py
可使用方向键控制右侧智能体,或使用 (A, W, D) 控制左侧智能体。
同样地,test_pixel.py 允许在像素化环境中游玩,而 test_atari.py 则可以让玩家通过观察预处理后的堆叠帧(84px x 84px x 4 帧)来玩游戏,这种观测方式通常用于 Atari RL 任务:
Atari Gym 封装会将 4 帧合并为一个观测值。
环境类型
该环境分为两种观测模式:状态空间观测和像素观测:
| 环境 ID | 观测空间 | 动作空间 |
|---|---|---|
| SlimeVolley-v0 | Box(12) | MultiBinary(3) |
| SlimeVolleyPixel-v0 | Box(84, 168, 3) | MultiBinary(3) |
| SlimeVolleyNoFrameskip-v0 | Box(84, 168, 3) | Discrete(6) |
SlimeVolleyNoFrameskip-v0 与 SlimeVolleyPixel-v0 相同,唯一的区别在于动作空间现在采用 Atari RL 任务中常用的独热向量表示。
在状态空间观测中,12 维向量对应以下状态:
原点 (0, 0) 位于围栏底部。
无论是状态空间观测还是像素观测,都假定智能体位于屏幕的右侧。
使用多智能体环境
修改 Gym 循环以支持多智能体或自我对弈非常简单。以下是一个基本的 Gym 循环:
import gym
import slimevolleygym
env = gym.make("SlimeVolley-v0")
obs = env.reset()
done = False
total_reward = 0
while not done:
action = my_policy(obs)
obs, reward, done, info = env.step(action)
total_reward += reward
env.render()
print("score:", total_reward)
info 对象包含额外的信息,包括对手的观测:
info = {
'ale.lives': 本方剩余生命值,
'ale.otherLives': 对手剩余生命值,
'otherObs': 对手的观测,
'state': 本方的状态(在状态模式下与 obs 相同),
'otherState': 对手的状态(在状态模式下与 otherObs 相同),
}
通过这种修改,你可以评估 policy1 对抗 policy2 的表现:
obs1 = env.reset()
obs2 = obs1 # 双方始终看到相同的初始观测。
done = False
total_reward = 0
while not done:
action1 = policy1(obs1)
action2 = policy2(obs2)
obs1, reward, done, info = env.step(action1, action2) # 额外参数
obs2 = info['otherObs']
total_reward += reward
env.render()
print("policy1's score:", total_reward)
print("policy2's score:", -total_reward)
需要注意的是,在状态模式和像素模式下,otherObs 都是以智能体位于屏幕右侧的角度给出的,因此可以轻松切换智能体的位置,而无需修改智能体本身。
对手的观测显示在较小的窗口中。
你可以考虑用自己智能体的早期版本替换 policy2(即自我对弈),并将多智能体环境包装成单智能体环境,以便使用标准的强化学习算法。这些技术的更多详细示例可以在 TRAINING.md 教程中找到。
对抗其他智能体进行评估
TRAINING.md 教程中讨论了几种预训练的智能体(ppo、cma、ga、baseline)。
你可以使用以下命令让它们相互对战:
python eval_agents.py --left ppo --right cma --render
评估 PPO 智能体(左)对抗 CMA-ES(右)。
修改 eval_agents.py 以加入你自定义的智能体应该相对简单。
排行榜
以下是各种算法取得的分数及其实现链接。欢迎在此处添加你的结果:
SlimeVolley-v0
| 方法 | 平均得分 | 回合数 | 其他信息 |
|---|---|---|---|
| 理论最高分 | 5.0 | ||
| PPO | 1.377 ± 1.133 | 1000 | 链接 |
| CMA-ES | 1.148 ± 1.071 | 1000 | 链接 |
| GA(自我对弈) | 0.353 ± 0.728 | 1000 | 链接 |
| CMA-ES(自我对弈) | -0.071 ± 0.827 | 1000 | 链接 |
| PPO(自我对弈) | -0.371 ± 1.085 | 1000 | 链接 |
| 随机策略 | -4.866 ± 0.372 | 1000 | |
| 添加方法 |
SlimeVolley-v0(样本效率)
对于样本效率,我们可以衡量训练一个能够在 1000 回合内对内置基准策略取得正平均得分的智能体所需的步数:
| 方法 | 最佳步数 | 中位数步数 | 试验次数 | 其他信息 |
|---|---|---|---|---|
| PPO | 1.274M | 2.998M | 17 | 链接 |
| 数据高效 Rainbow | 0.750M | 0.751M | 3 | 链接 |
| 添加方法 |
SlimeVolley-v0(对抗其他智能体)
与默认基准策略以外的其他智能体对战时的平均得分表(基于 1000 回合测试):
| 方法 | 基准 | PPO | CMA-ES | GA(自我对弈) | 其他信息 |
|---|---|---|---|---|---|
| PPO | 1.377 ± 1.133 | — | 0.133 ± 0.414 | -3.128 ± 1.509 | 链接 |
| CMA-ES | 1.148 ± 1.071 | -0.133 ± 0.414 | — | -0.301 ± 0.618 | 链接 |
| GA(自我对弈) | 0.353 ± 0.728 | 3.128 ± 1.509 | 0.301 ± 0.618 | — | 链接 |
| CMA-ES(自我对弈) | -0.071 ± 0.827 | -0.749 ± 0.846 | -0.351 ± 0.651 | -4.923 ± 0.342 | 链接 |
| PPO(自我对弈) | -0.371 ± 1.085 | 0.119 ± 1.46 | -2.304 ± 1.392 | -0.42 ± 0.717 | 链接 |
| 添加方法 |
值得注意的是,尽管 GA(自我对弈)在对抗基准策略时的表现不如 PPO 和 CMA-ES,但如果将其与其他直接针对基准策略训练的智能体进行比较,则它是一种更优的策略。
SlimeVolleyPixel-v0
像素观测版本环境(SlimeVolleyPixel-v0 或 SlimeVolleyNoFrameskip-v0)的结果:
| 像素观测 | 平均得分 | 回合数 | 其他信息 |
|---|---|---|---|
| 理论最高分 | 5.0 | ||
| PPO | 0.435 ± 0.961 | 1000 | 链接 |
| Rainbow | 0.037 ± 0.994 | 1000 | 链接 |
| A2C | -0.079 ± 1.091 | 1000 | 链接 |
| ACKTR | -1.183 ± 1.480 | 1000 | 链接 |
| ACER | -1.789 ± 1.632 | 1000 | 链接 |
| DQN | -4.091 ± 1.242 | 1000 | 链接 |
| 随机策略 | -4.866 ± 0.372 | 1000 | |
| 添加方法 | (≥ 1000) |
出版物
如果你有使用该环境的出版物、文章、项目或博客文章,请随时通过 PR 在此处添加链接。
引用
请使用以下 BibTeX 格式在您的出版物中引用本仓库:
@misc{slimevolleygym,
author = {David Ha},
title = {史莱姆排球 Gym 环境},
year = {2020},
publisher = {GitHub},
journal = {GitHub 代码库},
howpublished = {\url{https://github.com/hardmaru/slimevolleygym}},
}
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。