[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-rl-tools--rl-tools":3,"tool-rl-tools--rl-tools":61},[4,18,28,36,45,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},9989,"n8n","n8n-io\u002Fn8n","n8n 是一款面向技术团队的公平代码（fair-code）工作流自动化平台，旨在让用户在享受低代码快速构建便利的同时，保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点，帮助用户轻松连接 400 多种应用与服务，实现复杂业务流程的自动化。\n\nn8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”：既可以通过直观的可视化界面拖拽节点搭建流程，也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外，n8n 原生集成了基于 LangChain 的 AI 能力，支持用户利用自有数据和模型构建智能体工作流。在部署方面，n8n 提供极高的自由度，支持完全自托管以保障数据隐私和控制权，也提供云端服务选项。凭借活跃的社区生态和数百个现成模板，n8n 让构建强大且可控的自动化系统变得简单高效。",184740,2,"2026-04-19T23:22:26",[16,14,13,15,27],"插件",{"id":29,"name":30,"github_repo":31,"description_zh":32,"stars":33,"difficulty_score":10,"last_commit_at":34,"category_tags":35,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":24,"last_commit_at":42,"category_tags":43,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",161147,"2026-04-19T23:31:47",[14,13,44],"语言模型",{"id":46,"name":47,"github_repo":48,"description_zh":49,"stars":50,"difficulty_score":24,"last_commit_at":51,"category_tags":52,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":24,"last_commit_at":59,"category_tags":60,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[27,13,15,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":64,"owner_name":72,"owner_avatar_url":73,"owner_bio":74,"owner_company":75,"owner_location":75,"owner_email":75,"owner_twitter":75,"owner_website":76,"owner_url":77,"languages":78,"stars":117,"forks":118,"last_commit_at":119,"license":120,"difficulty_score":121,"env_os":122,"env_gpu":123,"env_ram":124,"env_deps":125,"category_tags":133,"github_topics":135,"view_count":24,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":144,"updated_at":145,"faqs":146,"releases":175},9928,"rl-tools\u002Frl-tools","rl-tools","The Fastest Deep Reinforcement Learning Library","rl-tools 是一款专注于极致性能的深度强化学习开源库，旨在解决传统框架在训练速度和资源消耗上的瓶颈。它通过高度优化的 C++ 后端架构，实现了比主流库更快的训练效率，让复杂的强化学习算法能在普通笔记本电脑甚至微控制器上流畅运行。\n\n对于算法研究人员和嵌入式开发者而言，rl-tools 极大地降低了实验门槛。你无需依赖昂贵的 GPU 集群，仅需一台普通的 MacBook 或类似设备，即可在短时间内完成如机械臂控制、赛车驾驶或无人机飞行等高难度任务的模型训练。其独特的技术亮点在于对计算资源的极致利用，不仅支持在浏览器中直接运行演示，还能将训练好的模型高效部署到资源受限的微控制器上，实现高频次的实时推理。\n\n无论是希望快速验证新算法的研究者，还是需要将智能决策能力植入硬件产品的工程师，rl-tools 都提供了一个轻量、快速且易于集成的解决方案。配合完善的文档、预训练模型库（Zoo）以及交互式教程，它能帮助用户更专注于算法逻辑本身，而非被繁琐的工程配置所困扰。","\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_3190ae10e6f2.jpg\"\u002F width=500>  \n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.03530\">Paper on arXiv\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Frl.tools\">Live demo (browser)\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fdocs.rl.tools\">Documentation\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fzoo.rl.tools\">Zoo\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fstudio.rl.tools\">Studio\u003C\u002Fa>\n  \u003C\u002Fbr>\n\u003C\u002Fbr>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Factions\u002Fworkflows\u002Ftests-tier3.yml\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Factions\u002Fworkflows\u002Ftests-tier3.yml\u002Fbadge.svg\" alt=\"Unit Tests\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Frl-tools\u002Frl-tools\" >\n  \u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Frl-tools\u002Frl-tools\u002Fbranch\u002Fmain\u002Fgraph\u002Fbadge.svg?token=3TJZ635O8V\"\u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdocs.rl.tools\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocumentation-Read%20the%20Docs-blue.svg\" alt=\"Documentation\">\n  \u003C\u002Fa>\n\u003C\u002Fbr>\n  \u003Ca href=\"https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=01-Containers.ipynb\">\n  \u003Cimg src=\"https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg\" alt=\"Run tutorials on Binder\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Frl-tools\u002Fdocumentation\u002Fblob\u002Fmaster\u002Fdocs\u002F09-Python%20Interface.ipynb\">\n  \u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"Run Example on Colab\">\n  \u003C\u002Fa>\n\u003C\u002Fbr>\n\u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FkbvxCavb5h\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1194228521216778250?label=Discord&logo=discord&logoColor=white&color=7289da\" alt=\"Join our Discord!\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_5d6da09c6f26.gif\" alt=\"animated\" height='200'\u002F>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_12ff0e07ebf3.gif\" alt=\"animated\" height='200'\u002F>\n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    Trained on a 2020 MacBook Pro (M1) using \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> SAC and TD3 (respectively)\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fblob\u002Fmaster\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcpu\u002Ftraining.h\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_000c31fdd223.gif\" alt=\"animated\" height='200'\u002F>  \n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fblob\u002Fe033cc1d739f66d18ef685233d8dd84dddb3fe69\u002Fsrc\u002Frl\u002Fzoo\u002Fppo\u002Fbottleneck-v0.h\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_ae095ca04e8e.gif\" alt=\"animated\" height='200'\u002F>  \n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n    Trained on a 2020 MacBook Pro (M1) using \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> PPO\u002FMulti-Agent PPO\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Flearning-to-fly\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_7090c53f9984.gif\" alt=\"animated\" width='350'\u002F>  \n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n    Trained in 18s on a 2020 MacBook Pro (M1) using \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> TD3\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\n## Benchmarks\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_b06c6c2dff09.png\"\u002F width=300>  \n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_55441721b281.png\"\u002F width=300>\n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    Benchmarks of training the Pendulum swing-up using different RL libraries (PPO and SAC respectively)\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_154e6e9e3186.png\"\u002F width=350>  \n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    Benchmarks of training the Pendulum swing-up on different devices (SAC, RLtools)\n\u003C\u002Fdiv>\n\n\u003C\u002Fbr>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_52da7abe613d.png\"\u002F width=600>  \n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    Benchmarks of the inference frequency for a two-layer [64, 64] fully-connected neural network across different microcontrollers (types and architectures).\n\u003C\u002Fdiv>\n\n## Quick Start\nClone this repo, then build a Zoo example:\n```\ng++ -std=c++17 -O3 -ffast-math -I include src\u002Frl\u002Fzoo\u002Fl2f\u002Fsac.cpp\n```\nRun it `.\u002Fa.out 1337` (number = seed) then run `.\u002Ftools\u002Fserve.sh` to visualize the results. Open `http:\u002F\u002Flocalhost:8000` and navigate to the ExTrack UI to watch the quadrotor flying. \n\n- **macOS**: Append `-framework Accelerate -DRL_TOOLS_BACKEND_ENABLE_ACCELERATE` for fast training (~4s on M3)\n- **Ubuntu**: Use `apt install libopenblas-dev` and append `-lopenblas -DRL_TOOLS_BACKEND_ENABLE_OPENBLAS` (~6s on Zen 5).\n\n## Algorithms\n| Algorithm | Example                                                                                                                                                                                                                                                                                |\n|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **TD3**   | [Pendulum](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Ftd3\u002Fcpu\u002Fstandalone.cpp), [Racing Car](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fcar\u002Fcar.cpp), [MuJoCo Ant-v4](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Ftd3\u002Ftraining.h), [Acrobot](.\u002Fsrc\u002Frl\u002Fenvironments\u002Facrobot\u002Ftd3\u002Facrobot.cpp)                                         |\n| **PPO**   | [Pendulum](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fppo\u002Fcpu\u002Ftraining.cpp), [Racing Car](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fcar\u002Ftraining_ppo.h), [MuJoCo Ant-v4 (CPU)](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcpu\u002Ftraining.h), [MuJoCo Ant-v4 (CUDA)](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcuda\u002Ftraining_ppo.cu) |\n| **Multi-Agent PPO**   | [Bottleneck](.\u002Fsrc\u002Frl\u002Fzoo\u002Fbottleneck-v0\u002Fppo.h) |\n| **SAC**   | [Pendulum (CPU)](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fsac\u002Fcpu\u002Ftraining.cpp), [Pendulum (CUDA)](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fsac\u002Fcuda\u002Fsac.cu), [Acrobot](.\u002Fsrc\u002Frl\u002Fenvironments\u002Facrobot\u002Fsac\u002Facrobot.cpp)                                                                                     |\n\n## Projects Based on \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan>\n- Learning to Fly in Seconds: [GitHub](https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Flearning-to-fly) \u002F [arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.13081) \u002F [YouTube](https:\u002F\u002Fyoutu.be\u002FNRD43ZA1D-4) \u002F [IEEE Spectrum](https:\u002F\u002Fspectrum.ieee.org\u002Famp\u002Fdrone-quadrotor-2667196800)\n- Data-Driven System Identification of Quadrotors Subject to Motor Delays [GitHub](https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Fdata-driven-system-identification) \u002F [arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2404.07837) \u002F [YouTube](https:\u002F\u002Fyoutu.be\u002FG3WGthRx2KE) \u002F [Project Page](https:\u002F\u002Fsysid.tools)\n\n\n# Getting Started\n> **⚠️ Note**: Check out [Getting Started](https:\u002F\u002Fdocs.rl.tools\u002Fgetting_started.html) in the documentation for a more thorough guide\n\nTo get started implementing your own environment please refer to [rl-tools\u002Fexample](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fexample)\n\n\n# Documentation\nThe documentation is available at [docs.rl.tools](https:\u002F\u002Fdocs.rl.tools) and consists of C++ notebooks. You can also run them locally to tinker around:\n\n```\ndocker run -p 8888:8888 rltools\u002Fdocumentation\n```\nAfter running the Docker container, open the link that is displayed in the CLI (http:\u002F\u002F127.0.0.1:8888\u002F...) in your browser and enjoy tinkering!\n\n| Chapter                                                                                 | Interactive Notebook                                                                                                                                                                                                                                                                               |\n|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [Overview                              ](https:\u002F\u002Fdocs.rl.tools\u002Foverview.html)                 | -                                                                                                                                                                                                                                                                                                  |\n| [Getting Started                       ](https:\u002F\u002Fdocs.rl.tools\u002Fgetting_started.html)                 | -                                                                                                                                                                                                                                                                                           |\n| [Containers                            ](https:\u002F\u002Fdocs.rl.tools\u002F01-Containers.html)            | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=01-Containers.ipynb)                                                                                                                                                             | \n| [Multiple Dispatch                     ](https:\u002F\u002Fdocs.rl.tools\u002F02-Multiple%20Dispatch.html)   | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=02-Multiple%20Dispatch.ipynb)                                                                                                                                                    | \n| [Deep Learning                         ](https:\u002F\u002Fdocs.rl.tools\u002F03-Deep%20Learning.html)       | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=03-Deep%20Learning.ipynb)                                                                                                                                                        | \n| [CPU Acceleration                      ](https:\u002F\u002Fdocs.rl.tools\u002F04-CPU%20Acceleration.html)    | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=04-CPU%20Acceleration.ipynb)                                                                                                                                                     | \n| [MNIST Classification                  ](https:\u002F\u002Fdocs.rl.tools\u002F05-MNIST%20Classification.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=05-MNIST%20Classification.ipynb)                                                                                                                                                | \n| [Deep Reinforcement Learning           ](https:\u002F\u002Fdocs.rl.tools\u002F06-Deep%20Reinforcement%20Learning.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=06-Deep%20Reinforcement%20Learning.ipynb)                                                                                                                                       | \n| [The Loop Interface                    ](https:\u002F\u002Fdocs.rl.tools\u002F07-The%20Loop%20Interface.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=07-The%20Loop%20Interface.ipynb)                                                                                                                                                | \n| [Custom Environment                    ](https:\u002F\u002Fdocs.rl.tools\u002F08-Custom%20Environment.html)  | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=08-Custom%20Environment.ipynb)                                                                                                                                                   | \n| [Python Interface                      ](https:\u002F\u002Fdocs.rl.tools\u002F09-Python%20Interface.html)                | [![Run Example on Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Frl-tools\u002Fdocumentation\u002Fblob\u002Fmaster\u002Fdocs\u002F09-Python%20Interface.ipynb) | \n\n\n[\u002F\u002F]: # (## Content)\n\n[\u002F\u002F]: # (- [Getting Started]&#40;#getting-started&#41;)\n\n[\u002F\u002F]: # (  - [Cloning the Repository]&#40;#cloning-the-repository&#41;)\n\n[\u002F\u002F]: # (  - [Docker]&#40;#docker&#41;)\n\n[\u002F\u002F]: # (  - [Native]&#40;#native&#41;)\n\n[\u002F\u002F]: # (    - [Unix &#40;Linux and macOS&#41;]&#40;#unix-linux-and-macos&#41;)\n\n[\u002F\u002F]: # (    - [Windows]&#40;#windows&#41;)\n\n[\u002F\u002F]: # (- [Embedded Platforms]&#40;#embedded-platforms&#41;)\n\n[\u002F\u002F]: # (- [Naming Convention]&#40;#naming-convention&#41;)\n\n[\u002F\u002F]: # (- [Citing]&#40;#citing&#41;)\n\n\n### Python Interface\n\nWe provide Python bindings that available as `rltools` through PyPI (the pip package index). Note that using Python Gym environments can slow down the trianing significantly compared to native \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> environments.\n```\npip install rltools gymnasium\n```\nUsage:\n```\nfrom rltools import SAC\nimport gymnasium as gym\nfrom gymnasium.wrappers import RescaleAction\n\nseed = 0xf00d\ndef env_factory():\n    env = gym.make(\"Pendulum-v1\")\n    env = RescaleAction(env, -1, 1)\n    env.reset(seed=seed)\n    return env\n\nsac = SAC(env_factory)\nstate = sac.State(seed)\n\nfinished = False\nwhile not finished:\n    finished = state.step()\n```\nYou can find more details in the [Python Interface documentation](https:\u002F\u002Fdocs.rl.tools\u002F09-Python%20Interface.html) and from the repository [rl-tools\u002Fpython-interface](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fpython-interface).\n\n## Embedded Platforms\n### Inference & Training\n- [iOS](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fios)\n- [teensy](.\u002Fembedded_platforms)\n### Inference\n- [Crazyflie](embedded_platforms\u002Fcrazyflie)\n- [ESP32](embedded_platforms)\n- [PX4](embedded_platforms)\n\n## Naming Convention\nWe use `snake_case` for variables\u002Finstances, functions as well as namespaces and `PascalCase` for structs\u002Fclasses. Furthermore, we use upper case `SNAKE_CASE` for compile-time constants. \n\n## Citing\nWhen using \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> in an academic work please cite our publication using the following Bibtex citation:\n```\n@article{eschmann_rltools_2024,\n  author  = {Jonas Eschmann and Dario Albani and Giuseppe Loianno},\n  title   = {RLtools: A Fast, Portable Deep Reinforcement Learning Library for Continuous Control},\n  journal = {Journal of Machine Learning Research},\n  year    = {2024},\n  volume  = {25},\n  number  = {301},\n  pages   = {1--19},\n  url     = {http:\u002F\u002Fjmlr.org\u002Fpapers\u002Fv25\u002F24-0248.html}\n}\n```\n","\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_3190ae10e6f2.jpg\"\u002F width=500>  \n\u003C\u002Fdiv>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.03530\">arXiv上的论文\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Frl.tools\">在线演示（浏览器）\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fdocs.rl.tools\">文档\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fzoo.rl.tools\">动物园\u003C\u002Fa> | \u003Ca href=\"https:\u002F\u002Fstudio.rl.tools\">工作室\u003C\u002Fa>\n  \u003C\u002Fbr>\n\u003C\u002Fbr>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Factions\u002Fworkflows\u002Ftests-tier3.yml\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Factions\u002Fworkflows\u002Ftests-tier3.yml\u002Fbadge.svg\" alt=\"单元测试\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Frl-tools\u002Frl-tools\" >\n  \u003Cimg src=\"https:\u002F\u002Fcodecov.io\u002Fgh\u002Frl-tools\u002Frl-tools\u002Fbranch\u002Fmain\u002Fgraph\u002Fbadge.svg?token=3TJZ635O8V\"\u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdocs.rl.tools\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocumentation-Read%20the%20Docs-blue.svg\" alt=\"文档\">\n  \u003C\u002Fa>\n\u003C\u002Fbr>\n  \u003Ca href=\"https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=01-Containers.ipynb\">\n  \u003Cimg src=\"https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg\" alt=\"在Binder上运行教程\">\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Frl-tools\u002Fdocumentation\u002Fblob\u002Fmaster\u002Fdocs\u002F09-Python%20Interface.ipynb\">\n  \u003Cimg src=\"https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg\" alt=\"在Colab上运行示例\">\n  \u003C\u002Fa>\n\u003C\u002Fbr>\n\u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FkbvxCavb5h\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1194228521216778250?label=Discord&logo=discord&logoColor=white&color=7289da\" alt=\"加入我们的Discord！\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_5d6da09c6f26.gif\" alt=\"动画\" height='200'\u002F>\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_12ff0e07ebf3.gif\" alt=\"动画\" height='200'\u002F>\n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    使用\u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan>的SAC和TD3分别在2020款MacBook Pro（M1）上训练\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fblob\u002Fmaster\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcpu\u002Ftraining.h\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_000c31fdd223.gif\" alt=\"动画\" height='200'\u002F>  \n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fblob\u002Fe033cc1d739f66d18ef685233d8dd84dddb3fe69\u002Fsrc\u002Frl\u002Fzoo\u002Fppo\u002Fbottleneck-v0.h\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_ae095ca04e8e.gif\" alt=\"动画\" height='200'\u002F>  \n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n    使用\u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan>的PPO\u002F多智能体PPO在2020款MacBook Pro（M1）上训练\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Flearning-to-fly\">\n    \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_7090c53f9984.gif\" alt=\"动画\" width='350'\u002F>  \n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\n\u003Cdiv align=\"center\">\n    使用\u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan>的TD3在2020款MacBook Pro（M1）上用18秒完成训练\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\n\n## 基准测试\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_b06c6c2dff09.png\"\u002F width=300>  \n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_55441721b281.png\"\u002F width=300>\n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    使用不同强化学习库（分别为PPO和SAC）训练摆杆上摆问题的基准测试\n\u003C\u002Fdiv>\n\u003C\u002Fbr>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_154e6e9e3186.png\"\u002F width=350>  \n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    在不同设备上使用SAC、RLtools训练摆杆上摆问题的基准测试\n\u003C\u002Fdiv>\n\n\u003C\u002Fbr>\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_readme_52da7abe613d.png\"\u002F width=600>  \n\u003C\u002Fdiv>\n\u003Cdiv align=\"center\">\n    不同微控制器（类型和架构）上，两层[64, 64]全连接神经网络推理频率的基准测试\n\u003C\u002Fdiv>\n\n## 快速入门\n克隆此仓库，然后构建一个Zoo示例：\n```\ng++ -std=c++17 -O3 -ffast-math -I include src\u002Frl\u002Fzoo\u002Fl2f\u002Fsac.cpp\n```\n运行`.\u002Fa.out 1337`（数字为种子），然后运行`.\u002Ftools\u002Fserve.sh`以可视化结果。打开`http:\u002F\u002Flocalhost:8000`并进入ExTrack UI，即可观看四旋翼飞行。\n\n- **macOS**: 追加`-framework Accelerate -DRL_TOOLS_BACKEND_ENABLE_ACCELERATE`以实现快速训练（M3约4秒）\n- **Ubuntu**: 使用`apt install libopenblas-dev`并追加`-lopenblas -DRL_TOOLS_BACKEND_ENABLE_OPENBLAS`（Zen 5约6秒）。\n\n## 算法\n| 算法 | 示例                                                                                                                                                                                                                                                                                |\n|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **TD3**   | [摆杆](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Ftd3\u002Fcpu\u002Fstandalone.cpp), [赛车](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fcar\u002Fcar.cpp), [MuJoCo Ant-v4](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Ftd3\u002Ftraining.h), [双连杆倒立摆](.\u002Fsrc\u002Frl\u002Fenvironments\u002Facrobot\u002Ftd3\u002Facrobot.cpp)                                         |\n| **PPO**   | [摆杆](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fppo\u002Fcpu\u002Ftraining.cpp), [赛车](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fcar\u002Ftraining_ppo.h), [MuJoCo Ant-v4（CPU）](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcpu\u002Ftraining.h), [MuJoCo Ant-v4（CUDA）](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fmujoco\u002Fant\u002Fppo\u002Fcuda\u002Ftraining_ppo.cu) |\n| **多智能体PPO**   | [瓶颈](.\u002Fsrc\u002Frl\u002Fzoo\u002Fbottleneck-v0\u002Fppo.h) |\n| **SAC**   | [摆杆（CPU）](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fsac\u002Fcpu\u002Ftraining.cpp), [摆杆（CUDA）](.\u002Fsrc\u002Frl\u002Fenvironments\u002Fpendulum\u002Fsac\u002Fcuda\u002Fsac.cu), [双连杆倒立摆](.\u002Fsrc\u002Frl\u002Fenvironments\u002Facrobot\u002Fsac\u002Facrobot.cpp)                                                                                     |\n\n## 基于\u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan>的项目\n- 几秒钟学会飞行：[GitHub](https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Flearning-to-fly) \u002F [arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.13081) \u002F [YouTube](https:\u002F\u002Fyoutu.be\u002FNRD43ZA1D-4) \u002F [IEEE Spectrum](https:\u002F\u002Fspectrum.ieee.org\u002Famp\u002Fdrone-quadrotor-2667196800)\n- 面向电机延迟的四旋翼数据驱动系统辨识 [GitHub](https:\u002F\u002Fgithub.com\u002Farplaboratory\u002Fdata-driven-system-identification) \u002F [arXiv](https:\u002F\u002Farxiv.org\u002Fabs\u002F2404.07837) \u002F [YouTube](https:\u002F\u002Fyoutu.be\u002FG3WGthRx2KE) \u002F [项目页面](https:\u002F\u002Fsysid.tools)\n\n\n# 开始使用\n> **⚠️ 注意**: 请参阅文档中的[入门指南](https:\u002F\u002Fdocs.rl.tools\u002Fgetting_started.html)以获取更详细的指导\n\n如需开始实现您自己的环境，请参考[rl-tools\u002Fexample](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fexample)\n\n# 文档\n文档可在 [docs.rl.tools](https:\u002F\u002Fdocs.rl.tools) 上找到，由 C++ 笔记本组成。你也可以在本地运行它们进行尝试：\n\n```\ndocker run -p 8888:8888 rltools\u002Fdocumentation\n```\n运行 Docker 容器后，在浏览器中打开 CLI 中显示的链接（http:\u002F\u002F127.0.0.1:8888\u002F...），尽情探索吧！\n\n| 章节                                                                                 | 交互式笔记本                                                                                                                                                                                                                                                                               |\n|-----------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [概述                              ](https:\u002F\u002Fdocs.rl.tools\u002Foverview.html)                 | -                                                                                                                                                                                                                                                                                                  |\n| [入门                       ](https:\u002F\u002Fdocs.rl.tools\u002Fgetting_started.html)                 | -                                                                                                                                                                                                                                                                                           |\n| [容器                            ](https:\u002F\u002Fdocs.rl.tools\u002F01-Containers.html)            | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=01-Containers.ipynb)                                                                                                                                                             | \n| [多分派                     ](https:\u002F\u002Fdocs.rl.tools\u002F02-Multiple%20Dispatch.html)   | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=02-Multiple%20Dispatch.ipynb)                                                                                                                                                    | \n| [深度学习                         ](https:\u002F\u002Fdocs.rl.tools\u002F03-Deep%20Learning.html)       | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=03-Deep%20Learning.ipynb)                                                                                                                                                        | \n| [CPU 加速                      ](https:\u002F\u002Fdocs.rl.tools\u002F04-CPU%20Acceleration.html)    | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=04-CPU%20Acceleration.ipynb)                                                                                                                                                     | \n| [MNIST 分类                  ](https:\u002F\u002Fdocs.rl.tools\u002F05-MNIST%20Classification.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=05-MNIST%20Classification.ipynb)                                                                                                                                                | \n| [深度强化学习           ](https:\u002F\u002Fdocs.rl.tools\u002F06-Deep%20Reinforcement%20Learning.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=06-Deep%20Reinforcement%20Learning.ipynb)                                                                                                                                       | \n| [循环接口                    ](https:\u002F\u002Fdocs.rl.tools\u002F07-The%20Loop%20Interface.html) | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=07-The%20Loop%20Interface.ipynb)                                                                                                                                                | \n| [自定义环境                    ](https:\u002F\u002Fdocs.rl.tools\u002F08-Custom%20Environment.html)  | [![Binder](https:\u002F\u002Fmybinder.org\u002Fbadge_logo.svg)](https:\u002F\u002Fmybinder.org\u002Fv2\u002Fgh\u002Frl-tools\u002Fdocumentation\u002Fbinder?labpath=08-Custom%20Environment.ipynb)                                                                                                                                                   | \n| [Python 接口                      ](https:\u002F\u002Fdocs.rl.tools\u002F09-Python%20Interface.html)                | [![在 Colab 上运行示例](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002Frl-tools\u002Fdocumentation\u002Fblob\u002Fmaster\u002Fdocs\u002F09-Python%20Interface.ipynb) | \n\n\n[\u002F\u002F]: # (## 内容)\n\n[\u002F\u002F]: # (- [入门]&#40;#getting-started&#41;)\n\n[\u002F\u002F]: # (  - [克隆仓库]&#40;#cloning-the-repository&#41;)\n\n[\u002F\u002F]: # (  - [Docker]&#40;#docker&#41;)\n\n[\u002F\u002F]: # (  - [原生]&#40;#native&#41;)\n\n[\u002F\u002F]: # (    - [Unix &#40;Linux 和 macOS&#41;]&#40;#unix-linux-and-macos&#41;)\n\n[\u002F\u002F]: # (    - [Windows]&#40;#windows&#41;)\n\n[\u002F\u002F]: # (- [嵌入式平台]&#40;#embedded-platforms&#41;)\n\n[\u002F\u002F]: # (- [命名规范]&#40;#naming-convention&#41;)\n\n[\u002F\u002F]: # (- [引用]&#40;#citing&#41;)\n\n\n### Python 接口\n\n我们提供了通过 PyPI（pip 包索引）发布的 `rltools` Python 绑定。请注意，与原生 \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> 环境相比，使用 Python Gym 环境会显著降低训练速度。\n```\npip install rltools gymnasium\n```\n用法：\n```\nfrom rltools import SAC\nimport gymnasium as gym\nfrom gymnasium.wrappers import RescaleAction\n\nseed = 0xf00d\ndef env_factory():\n    env = gym.make(\"Pendulum-v1\")\n    env = RescaleAction(env, -1, 1)\n    env.reset(seed=seed)\n    return env\n\nsac = SAC(env_factory)\nstate = sac.State(seed)\n\nfinished = False\nwhile not finished:\n    finished = state.step()\n```\n更多详细信息请参阅 [Python 接口文档](https:\u002F\u002Fdocs.rl.tools\u002F09-Python%20Interface.html)，以及仓库 [rl-tools\u002Fpython-interface](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fpython-interface)。\n\n## 嵌入式平台\n### 推理与训练\n- [iOS](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fios)\n- [teensy](.\u002Fembedded_platforms)\n\n### 推理\n- [Crazyflie](embedded_platforms\u002Fcrazyflie)\n- [ESP32](embedded_platforms)\n- [PX4](embedded_platforms)\n\n## 命名规范\n我们对变量\u002F实例、函数以及命名空间使用 `snake_case`，而对结构体\u002F类则使用 `PascalCase`。此外，编译时常量采用全大写的 `SNAKE_CASE`。\n\n## 引用\n在学术工作中使用 \u003Cspan style=\"color:#7DB9B6\">RLtools\u003C\u002Fspan> 时，请使用以下 BibTeX 格式的引用文献：\n```\n@article{eschmann_rltools_2024,\n  author  = {Jonas Eschmann and Dario Albani and Giuseppe Loianno},\n  title   = {RLtools: A Fast, Portable Deep Reinforcement Learning Library for Continuous Control},\n  journal = {Journal of Machine Learning Research},\n  year    = {2024},\n  volume  = {25},\n  number  = {301},\n  pages   = {1--19},\n  url     = {http:\u002F\u002Fjmlr.org\u002Fpapers\u002Fv25\u002F25-0248.html}\n}\n```","# rl-tools 快速上手指南\n\nrl-tools 是一个高性能的 C++ 强化学习库，专为低延迟推理和嵌入式部署设计，支持在 MacBook、Linux 服务器甚至微控制器上高效运行。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: macOS (推荐 M1\u002FM2\u002FM3) 或 Linux (Ubuntu 等)\n- **编译器**: 支持 C++17 标准的编译器 (如 `g++` 或 `clang++`)\n- **硬件**: \n    - 训练：现代 CPU 或 NVIDIA GPU (可选 CUDA 加速)\n    - 推理：支持在微控制器上运行\n\n### 前置依赖\n根据操作系统安装相应的数学库以加速计算：\n\n- **macOS**: \n    - 无需额外安装，系统自带 `Accelerate` 框架。\n- **Ubuntu \u002F Linux**: \n    - 安装 OpenBLAS:\n      ```bash\n      sudo apt install libopenblas-dev\n      ```\n\n## 安装步骤\n\nrl-tools 是一个头文件库（Header-only），无需传统的 `make install` 过程。只需克隆仓库即可使用。\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools.git\ncd rl-tools\n```\n\n## 基本使用\n\n以下示例演示如何编译并运行一个预置的强化学习案例（四旋翼飞行器 \"Learning to Fly\"），并在浏览器中可视化结果。\n\n### 1. 编译示例代码\n\n进入项目目录，使用 `g++` 编译 Zoo 中的示例代码。\n\n**通用命令:**\n```bash\ng++ -std=c++17 -O3 -ffast-math -I include src\u002Frl\u002Fzoo\u002Fl2f\u002Fsac.cpp\n```\n\n**针对特定平台的优化编译（推荐）:**\n\n- **macOS (利用 Accelerate 框架加速):**\n  ```bash\n  g++ -std=c++17 -O3 -ffast-math -I include src\u002Frl\u002Fzoo\u002Fl2f\u002Fsac.cpp -framework Accelerate -DRL_TOOLS_BACKEND_ENABLE_ACCELERATE\n  ```\n  *注：在 M3 芯片上训练仅需约 4 秒。*\n\n- **Ubuntu (利用 OpenBLAS 加速):**\n  ```bash\n  g++ -std=c++17 -O3 -ffast-math -I include src\u002Frl\u002Fzoo\u002Fl2f\u002Fsac.cpp -lopenblas -DRL_TOOLS_BACKEND_ENABLE_OPENBLAS\n  ```\n  *注：在 Zen 5 架构上训练仅需约 6 秒。*\n\n### 2. 运行训练程序\n\n编译成功后，运行生成的可执行文件（默认为 `a.out`），并传入一个随机种子（例如 1337）：\n\n```bash\n.\u002Fa.out 1337\n```\n程序将开始训练，并在终端输出训练进度。\n\n### 3. 可视化结果\n\n保持训练程序运行（或训练完成后），打开另一个终端窗口，运行提供的服务脚本来启动本地 Web 服务器：\n\n```bash\n.\u002Ftools\u002Fserve.sh\n```\n\n然后在浏览器中访问：\n```text\nhttp:\u002F\u002Flocalhost:8000\n```\n\n导航至 **ExTrack UI** 界面，即可实时观看训练好的四旋翼飞行器飞行效果。\n\n### 更多算法示例\n\nrl-tools 内置了多种主流强化学习算法的实现，您可以参考 `src\u002Frl\u002Fenvironments` 目录下的源码进行修改和实验：\n\n| 算法 | 典型应用场景示例 |\n| :--- | :--- |\n| **TD3** | 倒立摆 (Pendulum), 赛车 (Racing Car), MuJoCo Ant, Acrobot |\n| **PPO** | 倒立摆，赛车，MuJoCo Ant (支持 CPU 和 CUDA) |\n| **SAC** | 倒立摆 (支持 CPU 和 CUDA), Acrobot |\n| **Multi-Agent PPO** | 多智能体瓶颈测试 (Bottleneck) |\n\n如需深入开发自定义环境，建议参考官方示例仓库 [rl-tools\u002Fexample](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Fexample) 或查阅 [在线文档](https:\u002F\u002Fdocs.rl.tools)。","某机器人初创公司的算法团队正致力于在资源受限的嵌入式芯片上部署四足机器人的动态平衡控制策略，以满足实时响应需求。\n\n### 没有 rl-tools 时\n- **训练周期漫长**：使用传统 Python 库（如 Stable Baselines3）在本地 MacBook 上训练一个稳定的步态模型需要数小时甚至数天，严重拖慢迭代速度。\n- **部署门槛极高**：将训练好的模型从 Python 环境迁移到 C++ 嵌入式环境时，常因依赖库冲突或算子不支持导致推理失败，需耗费大量时间重写代码。\n- **实时性难以保证**：在微控制器上进行推理时，帧率往往低于控制频率要求，导致机器人动作卡顿甚至摔倒，无法满足毫秒级响应。\n- **硬件利用率低**：现有工具链难以充分利用 M1 芯片或特定 MCU 的指令集优化，算力浪费严重，无法在边缘设备上运行复杂策略。\n\n### 使用 rl-tools 后\n- **秒级快速迭代**：借助 rl-tools 极致的 C++ 后端优化，团队在 2020 款 MacBook Pro (M1) 上仅需 18 秒即可完成“飞行学习”任务的训练，研发效率提升百倍。\n- **无缝端侧部署**：rl-tools 原生支持 C++ 且无重型依赖，导出的模型可直接编译运行在微控制器上，消除了环境适配痛点，实现了“训练即部署”。\n- **超高推理频率**：经过专门优化的神经网络推理引擎，在低端 MCU 上也能实现高频控制循环，确保机器人动作流畅稳定，完美匹配实时控制需求。\n- **极致硬件性能**：自动利用不同架构的指令集加速，使得在资源受限设备上也能运行深层网络，最大化挖掘了边缘计算潜力。\n\nrl-tools 通过打破训练速度与部署兼容性的双重瓶颈，让复杂的深度强化学习算法真正得以在轻量级边缘设备上实时落地。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Frl-tools_rl-tools_e727127c.png","RLtools","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Frl-tools_f1bfa9dc.png","",null,"https:\u002F\u002Frl.tools","https:\u002F\u002Fgithub.com\u002Frl-tools",[79,83,87,91,95,99,103,107,111,114],{"name":80,"color":81,"percentage":82},"C++","#f34b7d",81.8,{"name":84,"color":85,"percentage":86},"Cuda","#3A4E3A",5.2,{"name":88,"color":89,"percentage":90},"JavaScript","#f1e05a",4.6,{"name":92,"color":93,"percentage":94},"CMake","#DA3434",2.2,{"name":96,"color":97,"percentage":98},"Python","#3572A5",2.1,{"name":100,"color":101,"percentage":102},"HTML","#e34c26",1.7,{"name":104,"color":105,"percentage":106},"C","#555555",1.4,{"name":108,"color":109,"percentage":110},"CSS","#663399",0.3,{"name":112,"color":113,"percentage":110},"Shell","#89e051",{"name":115,"color":75,"percentage":116},"GDB",0.2,961,51,"2026-04-19T16:41:13","MIT",4,"Linux, macOS","非必需。支持 CUDA (NVIDIA GPU) 加速，也支持纯 CPU 运行（通过 OpenBLAS 或 Apple Accelerate 框架）。具体显存和 CUDA 版本未说明。","未说明",{"notes":126,"python":127,"dependencies":128},"这是一个基于 C++17 的高性能强化学习库。编译时需添加特定标志以启用加速：macOS 需链接 Accelerate 框架并定义宏；Ubuntu 需安装 libopenblas-dev 并链接 openblas。项目提供 Docker 镜像用于查看文档，以及 Binder\u002FColab 用于运行教程。","未说明 (主要基于 C++17，提供 Python 接口但未指定版本)",[129,130,131,132],"C++17 编译器 (g++)","OpenBLAS (Linux)","Apple Accelerate Framework (macOS)","Docker (用于运行文档)",[14,134],"其他",[136,137,138,139,140,141,142,143],"continuous-control","cpp","deep-learning","mujoco","reinforcement-learning","robotics","tinyml","tinyrl","2026-03-27T02:49:30.150509","2026-04-20T10:25:38.852386",[147,152,157,162,167,171],{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},44574,"在 Windows 上编译模型时遇到链接错误（如找不到 python38.lib）或编码错误怎么办？","1. 链接错误：建议尝试使用官方 Python 安装程序（https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F）并安装最新版本。Windows 上的某些 Python 版本可能存在特殊问题，而 Linux 上 3.7-3.12 通常都能正常工作。\n2. 编码错误：如果遇到 UnicodeDecodeError，可以尝试将 Windows 系统区域设置更改为 UTF-8（这是一个测试功能），或者在命令行运行前执行 `chcp 65001` 命令来设置代码页为 UTF-8。\n3. 路径问题：确保包含路径中不包含空格。\n参考视频演示：https:\u002F\u002Fyoutu.be\u002FI781CVBSMoU","https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fissues\u002F4",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},44575,"如何使用循环神经网络（RNN\u002FGRU）进行训练？支持哪些算法？","目前仅支持带有循环层的离线策略算法，具体为 SAC 和 TD3。PPO 的循环版本暂时还不支持。\n使用方法：\n1. 参考官方文档中的 RNN (https:\u002F\u002Fdocs.rl.tools\u002F11-RNN.html) 和 Memory (https:\u002F\u002Fdocs.rl.tools\u002F12-Memory.html) 部分。\n2. 最佳入门示例是 `flag` 环境（位于 `src\u002Frl\u002Fzoo\u002Fflag`），它被收录在 zoo 中。\n注意：由于序列长度的影响，训练速度会显著变慢（例如序列长度为 50 时，训练速度约为原来的 1\u002F50）。","https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fissues\u002F25",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},44576,"如何在训练过程中跟踪并选择表现最好的策略（Policy），而不是默认使用最后一个？","库中包含一个单独的评估步骤（evaluation step），用于计算平均回报（returns_mean）。\n1. 数据位置：训练期间的性能指标（如平均回报）记录在 `return.json` 文件中，你可以加载该文件来分析哪个策略最好。\n2. 评估模式：在评估时，应传入 `ts.evaluation_mode` 参数。这类似于 PyTorch 中的 `model.eval()`，它会关闭探索噪声（针对 TD3）或使用分布的均值（针对 PPO\u002FSAC）来进行确定性评估。\n3. 轨迹文件：生成的轨迹文件（trajectories.json）也是基于这个单独的评估步骤收集的，而非训练过程中的采样数据。","https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fissues\u002F17",{"id":163,"question_zh":164,"answer_zh":165,"source_url":166},44577,"SAC 算法推理时动作具有随机性导致输出振动，如何获取确定性的动作（只使用均值）？","是的，可以在推理阶段获取确定性动作。SAC 在训练时会输出均值和标准差以进行探索，但在部署时通常只需要均值。\n解决方案：\n在调用评估函数时，确保使用评估模式。虽然具体的 API 调用可能因版本而异，但核心逻辑是绕过随机采样（rsample），直接对均值应用激活函数（如 tanh）和缩放。\n参考 CleanRL 的实现逻辑：推理时直接计算 `action = torch.tanh(mean) * action_scale + action_bias`，而不经过正态分布采样。在 rl-tools 中，这通常通过特定的评估接口或设置 `evaluation_mode` 来实现，从而禁用随机性并仅输出均值动作。","https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Fissues\u002F23",{"id":168,"question_zh":169,"answer_zh":170,"source_url":151},44578,"为什么我加载 Gym\u002FGymnasium 环境时会出现规格（specs）缺失的错误？","这个问题通常是因为加载环境的方式不正确导致的。\n错误原因：如果你是将环境作为函数加载，而不是使用标准的 `make()` 函数，环境的规格信息（例如 `max_episode_steps`）可能无法被正确识别或获取。\n解决方法：请确保使用 `gym.make()` 或 `gymnasium.make()` 来实例化环境，这样库才能自动获取必要的环境元数据和规格限制。",{"id":172,"question_zh":173,"answer_zh":174,"source_url":161},44579,"评估步骤（Evaluation Step）和训练轨迹收集有什么区别？","两者有明显的区别：\n1. 评估步骤：是一个独立的过程，不依赖文件系统存储轨迹，因此甚至可以在微控制器等资源受限的设备上运行。它的主要目的是在关闭探索噪声的情况下（使用 `ts.evaluation_mode`）测试策略的真实性能。\n2. 训练轨迹收集：依赖于文件系统来保存轨迹数据（通常在 `operations_cpu.h` 中定义），主要用于记录训练过程中的采样数据以供分析。\n简而言之，评估步骤是为了获得纯净的性能指标，而轨迹收集是为了记录训练过程。",[176,181,186,191,195],{"id":177,"version":178,"summary_zh":179,"released_at":180},352018,"v2.2.0","为了使 RLtools 支持混合精度训练，我们引入了一个类型策略 `numeric_types::Policy`。在此之前，在 RLtools 中切换浮点类型非常简单，因为所有内容都依赖于模板参数 `T`。然而，对于现代深度学习而言，这种做法已不足够，因为我们希望为模型或算法的不同部分配置不同的数据类型（例如，使用 `bf16` 作为参数类型，而用 `fp32` 来存储梯度和优化器状态）。要实现这一点，仅仅传递一个单一的类型参数是远远不够的。\n\n因此，我们创建了 `numeric_types::Policy`，以支持灵活的类型配置：\n\n```c++\nusing namespace rlt::numeric_types;\nusing PARAMETER_TYPE_RULE = UseCase\u003Ccategories::Parameter, float>;\nusing GRADIENT_TYPE_RULE = UseCase\u003Ccategories::Gradient, float>;\nusing TYPE_POLICY = Policy\u003Cdouble, PARAMETER_TYPE_RULE, GRADIENT_TYPE_RULE>;\n```\n\n接下来，我们将 `TYPE_POLICY` 替代 `T` 进行传递，例如：\n\n```cpp\nusing MODEL_CONFIG = rlt::nn_models::mlp::Configuration\u003CTYPE_POLICY, TI, OUTPUT_DIM, NUM_LAYERS, HIDDEN_DIM, ACTIVATION_FUNCTION, ACTIVATION_FUNCTION_OUTPUT>;\n```\n\n在代码库中，可以通过以下方式查询 `TYPE_POLICY` 中的特定类型：\n\n```cpp\nusing PARAMETER_TYPE = TYPE_POLICY::template GET\u003Ccategories::Parameter>;\nusing GRADIENT_TYPE = TYPE_POLICY::template GET\u003Ccategories::Gradient>;\nusing OPTIMIZER_TYPE = TYPE_POLICY::template GET\u003Ccategories::Optimizer>;\n```\n\n这种方式提供了极大的灵活性。如果某个标签未被显式指定（如本例中的 `categories::Optimizer`），则会回退到 `TYPE_POLICY::DEFAULT`，即本例中的 `double`（作为第一个模板参数）。此外，`TYPE_POLICY::DEFAULT` 也应被用于配置变量以及其他无法明确归入任何类别的变量。用户还可以轻松地自定义新的类别标签。关于这方面的更多内容，未来将在 [https:\u002F\u002Fdocs.rl.tools](https:\u002F\u002Fdocs.rl.tools) 的文档章节中详细介绍。\n\n虽然这只是一个小的 API 变更，但它出现在代码库的许多地方。因此，我们尽快实现了这一改动（尽管目前尚未实现混合精度训练功能），以便在未来减少混淆，并使这类 API 更加稳定。\n\n目前的建议是直接创建一个 `TYPE_POLICY = rlt::numeric_types::Policy\u003C{float,double}>;`，并在所有需要的地方传递它。在访问某些类似 `SPEC::T` 的类型时，可能会遇到编译错误；此时可以将其替换为 `SPEC::TYPE_POLICY::DEFAULT`，以获得相同的行为。总体而言，只要将浮点类型配置为与之前使用的 `T` 相同，程序的行为应当完全一致。","2025-10-23T05:42:48",{"id":182,"version":183,"summary_zh":184,"released_at":185},352019,"v2.1.0","- **清理代码库结构**：此前我们使用 `rl-tools\u002Frl-tools` 作为单体仓库，将 RLtools 生态中的所有内容统一进行版本管理。然而，这种方式并不理想，因为如果用户仅仅需要头文件-only 的库（即仅包含 `.\u002Finclude` 目录），一次 `git clone --recursive` 或 `git submodule update --init --recursive` 就可能触发数 GB 的下载。此外，由于存在大量子模块，浏览历史记录也十分不便（例如进行二分查找调试等）。因此，我们将相关项目的版本管理迁移至 `rl-tools\u002Fmono`，而 `rl-tools\u002Frl-tools` 现在则是一个去除了子模块的轻量级核心库（完整历史记录的下载大小约为 7MB）。\n  \n- **记忆机制**：从 `v2.0` 到 `v2.1` 的主要工作集中在完善记忆机制的实现上（即在离策略算法中使用 RNN）。更多信息请参阅文档中的 [RNN](https:\u002F\u002Fdocs.rl.tools\u002F11-RNN.html) 和 [记忆机制](https:\u002F\u002Fdocs.rl.tools\u002F12-Memory.html) 章节。\n\n- **旗帜环境**：我们引入了一个用于测试循环神经网络强化学习算法的基础环境。在这个环境中，初始步骤会显示两面旗帜的位置，智能体需要记住这些位置，并按顺序依次访问它们。之所以需要两个位置，是因为如果只有一个位置，智能体会通过直接加速朝正确方向移动来“作弊”，从而将方向信息存储在状态中，而不是真正地在内部进行记忆。您可以在 [https:\u002F\u002Fzoo.rl.tools](https:\u002F\u002Fzoo.rl.tools) 上查看该旗帜环境及一个基准策略。\n\n- **新增推理工具**：我们在 `include\u002Frl_tools\u002Finference` 中添加了一些常用的推理工具，例如可以暴露纯 C 接口（适用于微控制器集成等场景）等功能。\n\n- **完整的 CUDA 训练**：我们重新实现了完整的 GPU 上训练功能，相关代码已合并到 [这里](https:\u002F\u002Fgithub.com\u002Frl-tools\u002Frl-tools\u002Ftree\u002Fv2.1.0\u002Ftests\u002Fsrc\u002Frl\u002Falgorithms\u002Fsac\u002Fcuda)。该功能支持完整的 CUDA 图捕获，这意味着每一步迭代对应一次图执行。\n\n- **L2F**：L2F 模拟器已被模块化，并进行了更好的结构化设计。","2025-10-14T22:48:13",{"id":187,"version":188,"summary_zh":189,"released_at":190},352020,"v2.0.0","- **ExTrack** 实验跟踪规范\n- **[studio.rl.tools](https:\u002F\u002Fstudio.rl.tools)** 及其 UI 规范（基于 HTML5 Canvas）\n- **Zoo**：调优后的环境与算法示例（[zoo.rl.tools](https:\u002F\u002Fzoo.rl.tools)）\n- **MAPPO**：多智能体 PPO 算法\n- **L2F**：将“Learning to Fly in Seconds”模拟器升级为 RLtools 中的一等公民（开箱即用，同时支持灵活替换）\n- 改进的环境接口\n- 以及更多……","2024-11-19T16:28:04",{"id":192,"version":193,"summary_zh":75,"released_at":194},352021,"v1.1.0","2024-06-14T15:38:56",{"id":196,"version":197,"summary_zh":75,"released_at":198},352022,"v1.0.0","2024-02-17T22:18:08"]