Popular-RL-Algorithms
Popular-RL-Algorithms 是一个基于 PyTorch 构建的无模型强化学习算法代码合集,涵盖了从基础的 Q-learning、SARSA 到前沿的 SAC、TD3、PPO 及多智能体算法 QMIX 等十余种主流方法。该项目旨在为开发者和研究人员提供一套可直接参考与对比的实现方案,解决了在学习复杂强化学习理论时缺乏高质量、多样化代码示例的痛点。
与其他追求高度封装的官方库不同,Popular-RL-Algorithms 的独特之处在于其“研究笔记”式的定位。作者特意保留了同一算法的多个实现版本(例如包含两种不同架构的 SAC 实现,以及支持优先经验回放的离散版 SAC),方便用户直观对比不同技术路线的差异与优劣。虽然代码结构未做过度美化,但这种原汁原味的呈现方式非常适合需要深入理解算法底层逻辑、进行二次开发或学术研究的工程师与学者。如果你希望透过代码细节掌握强化学习的核心机制,或在 TensorFlow 与 PyTorch 之间进行技术迁移参考,这个项目将是一个极具价值的学习资源。
使用场景
某机器人初创团队正在研发一款工业机械臂,需要让其通过强化学习自主掌握复杂环境下的精准抓取技能。
没有 Popular-RL-Algorithms 时
- 算法复现成本高昂:团队成员需从零编写 SAC、TD3 等前沿算法代码,极易在数学公式转换中引入隐蔽 Bug,导致训练无法收敛。
- 方案对比困难:面对连续动作空间,难以快速在同一框架下对比 PPO、DDPG 和 SAC 的不同版本(如基于状态值函数或目标 Q 值函数)的性能差异。
- 调试周期漫长:缺乏经过验证的基准实现,研究人员花费数周时间排查是算法逻辑错误还是超参数设置不当,严重拖慢研发进度。
- 离散场景支持缺失:当任务切换到离散动作控制时,找不到现成的 SAC Discrete 或带优先经验回放(PER)的参考代码,需重新造轮子。
使用 Popular-RL-Algorithms 后
- 即插即用基线:直接调用库中成熟的 PyTorch 版 SAC 和 TD3 实现,将算法搭建时间从数周缩短至几天,确保核心逻辑正确无误。
- 多版本灵活切换:轻松切换 PPO 的多进程版本或 SAC 的不同变体进行消融实验,快速确定最适合当前机械臂物理特性的算法架构。
- 聚焦核心创新:研究人员不再纠结于底层代码细节,而是将精力集中在奖励函数设计和仿真环境构建上,显著加速模型迭代。
- 全场景覆盖:利用内置的 SAC Discrete PER 等模块,无缝支持从连续轨迹规划到离散抓取指令的各类控制任务,无需额外开发。
Popular-RL-Algorithms 通过提供多样且经过验证的算法实现,让研发团队从繁琐的代码复现中解放出来,专注于解决真实的机器人控制难题。
运行环境要求
未说明
未说明

快速开始
流行的无模型强化学习算法
基于 PyTorch 和 TensorFlow 2.0 的、针对 OpenAI Gym 环境以及自定义 Reacher 环境的最先进无模型强化学习算法实现。
算法包括:
- Q-learning;
- SARSA;
- 蒙特卡洛回归;
- Actor-Critic (AC/A2C);
- Soft Actor-Critic (SAC);
- 深度确定性策略梯度 (DDPG);
- 双延迟 DDPG (TD3);
- 近端策略优化 (PPO);
- QT-Opt(包含交叉熵方法);
- PointNet;
- Transporter;
- 循环策略梯度;
- 软决策树;
- 概率混合专家 (PMOE);
- QMIX 等。
请注意,这个仓库更像是我在研究和学习期间实现并测试过的算法个人集合,而非用于实际使用的官方开源库或软件包。不过,我认为与大家分享这些内容可能会有所帮助,并期待大家对我的实现进行有益的讨论。但我在代码的清理和结构化方面并没有投入太多精力。正如你可能注意到的那样,每种算法可能有多个版本的实现,我特意将它们全部展示出来,供你参考和比较。此外,该仓库仅包含 PyTorch 实现。
对于 RL 算法的官方库,我提供了以下两个基于 TensorFlow 2.0 + TensorLayer 2.0 的库:
针对多智能体 RL,我还建立了一个新的仓库(PyTorch):
- MARS (状态:开发中) 是一个用于游戏类多智能体 RL 的库,例如 PettingZoo Atari、SlimeVolleyBall 等。
由于 TensorFlow 2.0 已经采用了动态图构建方式,取代了静态图,因此在 TensorFlow 和 PyTorch 之间迁移 RL 代码变得非常容易。
内容:
多个版本的 Soft Actor-Critic (SAC) 已被实现。
SAC 版本 1:
sac.py:使用状态值函数。论文:https://arxiv.org/pdf/1801.01290.pdf
SAC 版本 2:
sac_v2.py:使用目标 Q 值函数代替状态值函数。论文:https://arxiv.org/pdf/1812.05905.pdf
SAC 离散版
sac_discrete.py:适用于离散动作空间。论文(作者实际上是我的 IC 同学之一):https://arxiv.org/abs/1910.07207
SAC 离散版 PER
sac_discrete_per.py:适用于离散动作空间,并采用优先经验回放(PER)。深度确定性策略梯度 (DDPG):
ddpg.py:DDPG 的实现。双延迟 DDPG (TD3):
td3.py:TD3 的实现。近端策略优化 (PPO):
对于连续环境,实现了两个版本:
版本 1:
ppo_continuous.py和ppo_continuous_multiprocess.py版本 2:
ppo_continuous2.py和ppo_continuous_multiprocess2.py对于离散环境:
ppo_gae_discrete.py:采用广义优势估计(GAE)Actor-Critic (AC) / A2C:
ac.py:可扩展的 AC/A2C,易于修改为 DDPG 等。这是一个非常可扩展的普通 AC/A2C 版本,支持所有连续/离散、确定性/非确定性情况。
Q-learning、SARSA、蒙特卡洛回归:
qlearning_sarsa_mc.ipynb:三者的对比。DQN:
dqn.py:一个简单的 DQN。QT-Opt:
在 这里 实现了两个版本。
PointNet 用于通过无监督学习从图像中生成地标,已在 这里 实现。这种方法也被用作基于图像的强化学习中的 SOTA 算法,称为 Transporter。
原始论文:通过条件图像生成进行对象地标的无监督学习
强化学习相关论文:用于感知和控制的对象关键点的无监督学习
循环策略梯度:
rdpg.py:带有 LSTM 策略的 DDPG。td3_lstm.py:带有 LSTM 策略的 TD3。sac_v2_lstm.py:带有 LSTM 策略的 SAC。sac_v2_gru.py:带有 GRU 策略的 SAC。参考文献:
软决策树 作为 PPO 的函数逼近器:
sdt_ppo_gae_discrete.py:将 PPO 中的策略网络层替换为 软决策树,以实现可解释的强化学习。概率混合专家 (PMOE):
PMOE 使用可微分的多模态高斯分布来替代标准的单模态高斯分布,用于策略表示。
pmoe_sac.py:基于离线策略 SAC。pmoe_ppo.py:基于在线策略 PPO。QMIX:
qmix.py:一种完全协作式的多智能体强化学习算法,演示环境使用 pettingzoo。相位策略梯度 (PPG):
待办事项
论文:相位策略梯度
最大后验策略优化 (MPO):
待办事项
论文:最大后验策略优化
优势加权回归 (AWR):
待办事项
使用方法:
python ***.py --train
python ***.py --test
故障排除:
如果您遇到“未实现错误”,这可能是由于 Gym 版本不正确所致。最新的 gym==0.14 不适用。请使用 pip install -r requirements.txt 安装 gym==0.7 或 gym==0.10。
一些被低估的技巧:
众所周知,在强化学习算法的实际实现中,有许多技巧可以提升性能,包括超参数调整、归一化、网络架构,甚至是隐藏层的激活函数等。我在本仓库的代码中遇到的一些技巧总结如下:
环境特定:
- 对于 Gym 中的
Pendulum-v0环境,通常对奖励进行预处理(r+8)/8可以提高学习效率,如 此处 所示。 此外,该环境还需要将最大 episode 长度设置为至少 150,才能更好地学习;episode 过短会使得学习变得困难。 - Gym 中的
MountainCar-v0环境奖励非常稀疏(只有到达终点旗时才有奖励),因此其学习曲线通常较为嘈杂;所以针对该环境可能也需要一些特殊的处理方法。
- 对于 Gym 中的
归一化:
- 在批次中进行奖励归一化或优势归一化,有时可以显著提升算法的性能(学习效率和稳定性)。尽管理论上像 PPO 这样的策略梯度算法在训练过程中不应应用数据归一化,因为这会导致分布偏移。要深入理解这个问题,我们需要区分以下两种情况:(1) 对直接输入数据(如观测值、动作、奖励等)进行归一化;(2) 对价值估计(状态值、状态-动作值、优势等)进行归一化。对于 (1),更合理的归一化方式是维护一个移动平均的均值和标准差,从而达到类似于在 RL 代理学习过程中对整个数据集进行归一化的效果(然而在 RL 中这是不可能的,因为数据来源于智能体与环境的交互)。而对于 (2),我们可以直接对价值估计进行归一化(而不是保留历史平均值),因为我们并不希望这些估计值发生分布偏移,因此可以将其视为一种静态分布。
多进程:
基于
torch.multiprocessing的多进程更新是否是并行化代码的正确且安全的方式? 从官方文档(例如 Hogwild 示例)可以看出,torch.multiprocessing的使用并未采用任何显式锁机制,这意味着当多个进程同时计算梯度并更新共享模型时,可能会存在潜在的安全隐患。更多讨论请参见 这里,以及一些 测试 和 解答。总体而言,虽然存在不安全更新的风险,但多进程带来的加速效果往往更为显著(而且 RL 训练本身就有很大的方差和噪声)。尽管我提供了几种算法的多进程版本(如 SAC、PPO 等),但对于 Gym 中的小规模环境来说,通常并不需要甚至可能效率更低。在这种情况下,使用向量化环境包装器来进行并行环境采样可能是更合适的解决方案,因为学习效率的瓶颈主要在于与环境的交互,而非模型的学习(反向传播)过程。
关于多进程使用的一个小提示:
要在多个进程之间共享类实例及其状态,必须将实例放入 `multiprocessing.manager` 中:
PPO 细节:
- 这里 我总结了连续动作空间下 PPO 算法的实现细节,对应脚本为
ppo_gae_continuous.py、ppo_gae_continuous2.py和ppo_gae_continuous3.py。
- 这里 我总结了连续动作空间下 PPO 算法的实现细节,对应脚本为
关于 实现技巧 的更多讨论,请参阅我们书中这一章:链接。
性能:
- SAC 用于 Gym 的 Pendulum-v0 环境:
带有自动更新熵系数 α 的 SAC:
结果显示,自动更新熵有助于智能体更快地学习。
- TD3 用于 Gym 的 Pendulum-v0 环境:
采用确定性策略的 TD3:
看起来采用确定性策略的 TD3 表现稍好一些,但总体差异不大。
- AC 用于 Gym 的 CartPole-v0 环境:
不过,普通的 AC/A2C 并不能很好地处理像 Gym 的 Pendulum-v0 这样的连续动作空间问题。
- PPO 用于 Gym 的 LunarLanderContinuous-v2 环境:
请使用 ppo_continuous_multiprocess2.py。
引用:
若需引用此仓库,请使用以下格式:
@misc{rlalgorithms,
author = {Zihan Ding},
title = {Popular-RL-Algorithms},
year = {2019},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/quantumiracle/Popular-RL-Algorithms}},
}
其他资源:
深度强化学习:基础、研究与应用 施普林格自然出版社 2020年
是我与董浩博士和张尚恒博士共同主编的书籍,全面涵盖了深度强化学习领域的多个主题。详细信息请参见官方网站和施普林格网页。如需引用该书,请使用以下格式:
@book{deepRL-2020,
title={Deep Reinforcement Learning: Fundamentals, Research, and Applications},
editor={Hao Dong, Zihan Ding, Shanghang Zhang},
author={Hao Dong, Zihan Ding, Shanghang Zhang, Hang Yuan, Hongming Zhang, Jingqing Zhang, Yanhua Huang, Tianyang Yu, Huaqing Zhang, Ruitong Huang},
publisher={Springer Nature},
note={\url{http://www.deepreinforcementlearningbook.org}},
year={2020}
}
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
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 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器