<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>概述 on CoMLRL</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/</link><description>Recent content in 概述 on CoMLRL</description><generator>Hugo</generator><language>zh-CN</language><copyright>© {year} OpenMLRL. All rights reserved.</copyright><atom:link href="https://openmlrl.github.io/CoMLRL/zh-cn/index.xml" rel="self" type="application/rss+xml"/><item><title>安装</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/installation/</guid><description>&lt;p&gt;CoMLRL 可以从 PyPI、conda-forge 或源代码安装，并支持 Python 3.10 或更高版本。用户还应安装与设备兼容的 PyTorch 构建。&lt;/p&gt;
&lt;h2 id="install-from-pypi"&gt;从 PyPI 安装&lt;a class="anchor" href="#install-from-pypi"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install comlrl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install PyTorch compatible with your device.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-from-conda-forge"&gt;从 conda-forge 安装&lt;a class="anchor" href="#install-from-conda-forge"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;conda install -c conda-forge comlrl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Install PyTorch compatible with your device.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="install-from-source"&gt;从源代码安装&lt;a class="anchor" href="#install-from-source"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;用户还可以克隆仓库并以可编辑模式安装 CoMLRL 以访问最新功能或在本地进行开发：&lt;/p&gt;</description></item><item><title>多智能体 REINFORCE</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-agent-reinforce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-agent-reinforce/</guid><description>&lt;p&gt;REINFORCE 是一种策略梯度方法，它直接优化策略，使用样本回报。
这些方法广泛用于 LLM 的微调，因为它们简单高效。 例子包括 &lt;a href="https://arxiv.org/pdf/2402.03300"&gt;GRPO&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2503.20783"&gt;Dr. GRPO&lt;/a&gt;, &lt;a href="https://openreview.net/forum?id=r1lgTGL5DE"&gt;RLOO&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2310.10505"&gt;ReMax&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2506.05183"&gt;TreeRPO&lt;/a&gt;, 和 &lt;a href="https://arxiv.org/abs/2501.03262"&gt;REINFORCE++&lt;/a&gt;.
REINFORCE 可以扩展到多智能体设置，其中多个 LLM 智能体在每个回合中响应，并且它们的联合响应获得一个共享奖励。&lt;/p&gt;</description></item><item><title>恢复训练</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/advanced/resume-training/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/advanced/resume-training/</guid><description>&lt;p&gt;此示例训练两个小型智能体，用于两个 epochs，然后从检查点继续相同的运行，用于两个 epochs。 两个部分都记录到同一个 W&amp;amp;B 运行。&lt;/p&gt;
&lt;h2 id="setup"&gt;设置&lt;a class="anchor" href="#setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;任务要求第二个智能体生成一个比第一个智能体响应 2 到 3 倍长的响应。&lt;/p&gt;</description></item><item><title>写作</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/writing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/writing/</guid><description>&lt;!-- External link entry --&gt;</description></item><item><title>长度比训练</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/quick-start/length-ratio-training/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/quick-start/length-ratio-training/</guid><description>&lt;p&gt;本教程演示了一个简单的双智能体训练任务，使用长度比奖励。两个智能体都接收相同的提示并独立生成；第二个智能体看不到第一个智能体的响应。奖励鼓励第二个输出包含 2–3 倍第一个输出的字符数。它不评估故事质量或语义协作。&lt;/p&gt;</description></item><item><title>支持</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/support/</guid><description>&lt;h1 id="support"&gt;支持&lt;a class="anchor" href="#support"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我们很高兴为您解决在使用 CoMLRL 时遇到的问题。&lt;/p&gt;
&lt;h2 id="report-issues"&gt;报告问题&lt;a class="anchor" href="#report-issues"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下步骤可帮助用户解决或报告问题：&lt;/p&gt;
&lt;div class="book-steps"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;用户可以首先查阅文档，包括搜索功能（Ctrl + K）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;搜索现有的 &lt;a href="https://github.com/OpenMLRL/CoMLRL/issues"&gt;GitHub 问题&lt;/a&gt; 可能会发现相同问题的报告。&lt;/p&gt;</description></item><item><title>编码</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/coding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/coding/</guid><description>&lt;!-- External link entry --&gt;</description></item><item><title>多轮反馈</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/advanced/multi-turn-feedback/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/examples/advanced/multi-turn-feedback/</guid><description>&lt;p&gt;在此示例中，两个智能体回答任务，接收对答案的反馈，然后再次回答。&lt;/p&gt;
&lt;h2 id="setup"&gt;设置&lt;a class="anchor" href="#setup"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;任务要求第二个智能体写出的答案长度为第一个智能体的答案长度的 2 到 3 倍。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;math&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datasets&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Dataset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoModelForCausalLM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;comlrl.trainers.reinforce&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MAGRPOConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MAGRPOTrainer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;model_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Qwen/Qwen2.5-0.5B&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoTokenizer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;train_dataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Dataset&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_dict&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Describe a city in the clouds:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Invent a new holiday and explain it:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Write a bedtime story for a dragon:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Design a playground on Mars:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;length_ratio_reward&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;completions1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;completions2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rewards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;completions1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;completions2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nb"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ratio&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;rewards&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;rewards&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="feedback-between-turns"&gt;轮次间反馈&lt;a class="anchor" href="#feedback-between-turns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在第一轮之后，此函数为每个智能体编写新的提示。提示报告答案的长度。&lt;/p&gt;</description></item><item><title>多智能体 Actor-Critic</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-agent-actor-critic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-agent-actor-critic/</guid><description>&lt;p&gt;Actor-Critic (AC) 方法是广泛使用的策略梯度方法，使用 critics 来支持训练。
AC 方法可以实现比 REINFORCE 更低的方差和更好的样本效率，但这需要仔细设计和调整 critic，以确保稳定的训练。
在多智能体强化学习 (MARL) 中，Actor-Critic 方法包括多智能体 Actor-Critic (MAAC) 和独立式 Actor-Critic (IAC)。&lt;/p&gt;</description></item><item><title>贡献</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/contributing/</guid><description>&lt;h1 id="contributing"&gt;贡献&lt;a class="anchor" href="#contributing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;对 CoMLRL 的贡献是受欢迎的。本指南涵盖代码更改和代码库维护。&lt;/p&gt;
&lt;h2 id="development-guidelines"&gt;开发指南&lt;a class="anchor" href="#development-guidelines"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="book-steps"&gt;
&lt;ol&gt;
&lt;li&gt;贡献者可以对上游仓库进行分支。&lt;/li&gt;
&lt;li&gt;以下命令克隆分支并将其与上游同步:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git clone https://github.com/&amp;lt;your-username&amp;gt;/CoMLRL.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; CoMLRL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git remote add upstream https://github.com/OpenMLRL/CoMLRL.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git fetch upstream
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git checkout -b feature/&amp;lt;short-description&amp;gt; upstream/main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git fetch upstream &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git rebase upstream/main&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;贡献者可以实现新功能或修复错误，并根据需要更新文档。&lt;/li&gt;
&lt;li&gt;更改可以提交到上游仓库，作为拉取请求进行审查。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>训练实体</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-entities/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-entities/</guid><description>&lt;p&gt;CoMLRL 支持训练 LLM 智能体，并使用基于 LLM 的 critics 或奖励模型进行训练。 智能体和 critics 可以是来自 Hugging Face 或本地目录的同构或异构模型。
用户可以通过 &lt;code&gt;agent_model&lt;/code&gt;/&lt;code&gt;critic_model&lt;/code&gt;，对于同构设置指定 &lt;a href="https://huggingface.co/models"&gt;Hugging Face 模型标识符&lt;/a&gt;，或者提供 &lt;code&gt;agents&lt;/code&gt;/&lt;code&gt;critics&lt;/code&gt; 列表，对于异构设置。 训练好的实体可以保存并加载到新的 trainer 中，以便进行进一步训练。&lt;/p&gt;</description></item><item><title>代码补全</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/code-completion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/code-completion/</guid><description>&lt;!-- External link entry --&gt;</description></item><item><title>多个 LLM PbRL</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-llm-pbrl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-llm-pbrl/</guid><description>&lt;p&gt;多智能体 PbRL 训练协作的 LLM 智能体，基于它们之间的联合响应的偏好。 CoMLRL 从任务项中构建偏好数据，并使用以下两种算法之一进行学习：MARLHF 拟合一个联合奖励模型，然后用 RL 训练策略，而 MADPO 则直接从偏好中优化策略。 &lt;code&gt;MARLHFTrainer&lt;/code&gt;, &lt;code&gt;MADPOTrainer&lt;/code&gt;, 以及它们的迭代变体 &lt;code&gt;MARLHFIterTrainer&lt;/code&gt; 和 &lt;code&gt;MADPOIterTrainer&lt;/code&gt; 可从 &lt;code&gt;comlrl.trainers.preference&lt;/code&gt; 获取。&lt;/p&gt;</description></item><item><title>更新日志</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/dev/changelog/</guid><description>&lt;h1 id="changelog"&gt;更新日志&lt;a class="anchor" href="#changelog"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="version-143"&gt;版本 1.4.3&lt;a class="anchor" href="#version-143"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;支持 MAPL 算法，包括 MARLHF 和 MADPO (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/72"&gt;#72&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;支持集中式多智能体系统训练 (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/72"&gt;#72&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;改进文档。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-142"&gt;版本 1.4.2&lt;a class="anchor" href="#version-142"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;支持更多比较器模型 (提交 &lt;a href="https://github.com/OpenMLRL/CoMLRL/commit/e1b3d8065eeddaad9d857d10e0d21764cb1f3270"&gt;e1b3d80&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;修复同构生成问题 (提交 &lt;a href="https://github.com/OpenMLRL/CoMLRL/commit/11d89a933a40d0d31e60c09491eb699e007b3cf9"&gt;11d89a9&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-141"&gt;版本 1.4.1&lt;a class="anchor" href="#version-141"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;支持使用比较器作为集中式协调器 (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/69"&gt;#69&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;允许部署 LLM 智能体、奖励模型和比较器在不同设备上 (提交 &lt;a href="https://github.com/OpenMLRL/CoMLRL/commit/7cbb7928e4569359021f094686d3a01c197e2223"&gt;7cbb792&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;允许将当前模型作为比较器在新设备上使用 (提交 &lt;a href="https://github.com/OpenMLRL/CoMLRL/commit/d8d493a044d6a0b7b5d6aaaea2bf8bca2bfca81f"&gt;d8d493a&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;优化 GPU 的内存使用，及时释放未使用的模型 (提交 &lt;a href="https://github.com/OpenMLRL/CoMLRL/commit/d0c6376cf843aaa9eb14e4c9f94cdf43a7a85f30"&gt;d0c6376&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-140"&gt;版本 1.4.0&lt;a class="anchor" href="#version-140"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;添加在线 PbRL 方法 (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/68"&gt;#68&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;添加数据集漂移记录器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-139"&gt;版本 1.3.9&lt;a class="anchor" href="#version-139"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;添加离线 PbRL 方法，如 MADPO 和 MARLHF (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/67"&gt;#67&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-138"&gt;版本 1.3.8&lt;a class="anchor" href="#version-138"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;允许使用参考模型用于所有算法 (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/65"&gt;#65&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;统一不同 trainers 的记录器 (PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/66"&gt;#66&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-137"&gt;版本 1.3.7&lt;a class="anchor" href="#version-137"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;移除算法中的冗余采样超参数。&lt;/li&gt;
&lt;li&gt;允许与 GPU 联合训练，使用 MP (参见结果在 PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/62"&gt;#62&lt;/a&gt;)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-136"&gt;版本 1.3.6&lt;a class="anchor" href="#version-136"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;修复异构模型加载的严重错误，并重构模型加载逻辑 (参见结果在 PR &lt;a href="https://github.com/OpenMLRL/CoMLRL/pull/60"&gt;#60&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;完善文档。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-135"&gt;版本 1.3.5&lt;a class="anchor" href="#version-135"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;添加超参数约束的单元测试。&lt;/li&gt;
&lt;li&gt;清理遗留接口。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-134"&gt;版本 1.3.4&lt;a class="anchor" href="#version-134"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;修复异构模型加载的错误，并重构加载逻辑。&lt;/li&gt;
&lt;li&gt;在 MAGRPO 中启用 MBGD，以与 MAAC 和 IAC 保持一致。&lt;/li&gt;
&lt;li&gt;移除冗余和遗留超参数 (例如，模型 kwargs, 修补超参数)。&lt;/li&gt;
&lt;li&gt;清理多设备遗留代码，例如 &lt;code&gt;drop_last&lt;/code&gt; 和 &lt;code&gt;num_workers&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;添加模型加载的单元测试，并将其与 CI 分开。&lt;/li&gt;
&lt;li&gt;清理短函数。&lt;/li&gt;
&lt;li&gt;整理文档并对参数进行对齐。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-133"&gt;版本 1.3.3&lt;a class="anchor" href="#version-133"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;压缩 MAREINFORCETrainer 的派生，并将其移动到新文件夹。&lt;/li&gt;
&lt;li&gt;统一不同 trainers 的接口。&lt;/li&gt;
&lt;li&gt;移除冗余的补丁和包装。&lt;/li&gt;
&lt;li&gt;整理 config YAML 文件中的变量。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-132"&gt;版本 1.3.2&lt;a class="anchor" href="#version-132"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;修复 wandb 日志问题在 MAGRPOTrainer 中的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-131"&gt;版本 1.3.1&lt;a class="anchor" href="#version-131"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;允许在 MAGRPOTrainer、IACTrainer 和 MAACTrainer 中进行批量训练。&lt;/li&gt;
&lt;li&gt;允许在 IACTrainer 和 MAACTrainer 中进行多轮训练。&lt;/li&gt;
&lt;li&gt;将 x 轴从 &lt;code&gt;data_step&lt;/code&gt; 更改为 &lt;code&gt;env_step&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-130"&gt;版本 1.3.0&lt;a class="anchor" href="#version-130"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用 TD 错误作为 critic 更新目标，在 IACTrainer 和 MAACTrainer 中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-129"&gt;版本 1.2.9&lt;a class="anchor" href="#version-129"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;添加 MAACTrainer (独立的集中式 critic); 现在 IACTrainer 和 MAACTrainer 都支持单轮训练。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-128"&gt;版本 1.2.8&lt;a class="anchor" href="#version-128"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;critic 在 IACTrainer 中现在估计 V 而不是 Q。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-127"&gt;版本 1.2.7&lt;a class="anchor" href="#version-127"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;将 IPPOTrainer 更改为 IACTrainer。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="version-126"&gt;版本 1.2.6&lt;a class="anchor" href="#version-126"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;包含 MAGRPO, MAREINFORCE, MARLOO, MAREMAX, 和 IPPO trainers 用于与 LLMs 结合的多智能体强化学习。&lt;/li&gt;
&lt;li&gt;支持多轮训练，并具有自定义外部反馈机制。&lt;/li&gt;
&lt;li&gt;LLM 协作环境，用于各种任务。&lt;/li&gt;
&lt;li&gt;全面的文档和示例，用于快速上手。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>训练初始化</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-initialization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-initialization/</guid><description>&lt;p&gt;训练从任务集开始，任务集是一类共享输入格式和奖励的任务。格式器将每个任务转换为智能体提示，奖励函数对智能体的联合响应进行评分。&lt;/p&gt;
&lt;h2 id="task-sets"&gt;任务集&lt;a class="anchor" href="#task-sets"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;任务集是 Hugging Face、&lt;code&gt;Dataset&lt;/code&gt; 或 &lt;code&gt;IterableDataset&lt;/code&gt; 的行，每行是一个字典，代表任务项。默认格式器读取 &lt;code&gt;prompt&lt;/code&gt; 字段；其他字段可以包含目标、标签、测试用例或其他奖励函数所需的其他信息。Trainers 将原始任务项通过 &lt;code&gt;batch_items&lt;/code&gt; 传递给奖励函数。&lt;/p&gt;</description></item><item><title>多轮交互</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-turn-interaction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/marl/multi-turn-interaction/</guid><description>&lt;p&gt;许多复杂问题需要多轮才能解决。 LLM 智能体与环境交互以从系统中其他模型或工具中获得有用的反馈。&lt;/p&gt;
&lt;h2 id="multi-turn-magrpo"&gt;多轮 MAGRPO&lt;a class="anchor" href="#multi-turn-magrpo"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;多轮 MAGRPO 构建一个 rollout 树，其分支代表不同的联合响应 (&lt;a href="https://arxiv.org/abs/2506.05183"&gt;TreeRPO&lt;/a&gt;)。&lt;/p&gt;
&lt;figure class="docs-rollout" data-rollout data-diagram="joint-tree" data-direction="down" aria-labelledby="rollout-joint-tree-0-title"&gt;
 &lt;figcaption class="docs-rollout-caption"&gt;
 &lt;span class="docs-rollout-title" id="rollout-joint-tree-0-title"&gt;联合 rollout 树&lt;/span&gt;
 &lt;span class="docs-rollout-description" id="rollout-joint-tree-0-description"&gt;联合观察和行动分支到独立的 rollouts。&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;div class="docs-rollout-stage"&gt;
&lt;svg role="img" aria-labelledby="rollout-joint-tree-0-title rollout-joint-tree-0-description" focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="274.186pt" height="118.439pt" viewBox="0 0 274.186 118.439"&gt;
&lt;defs&gt;
&lt;g&gt;
&lt;g id="rollout-joint-tree-0-glyph-0-0"&gt;
&lt;path d="M 5.40625 -2.171875 C 5.40625 -3.515625 4.484375 -4.515625 2.859375 -4.515625 C 1.21875 -4.515625 0.3125 -3.5 0.3125 -2.171875 C 0.3125 -0.9375 1.203125 0.0625 2.859375 0.0625 C 4.53125 0.0625 5.40625 -0.953125 5.40625 -2.171875 Z M 2.859375 -0.34375 C 1.59375 -0.34375 1.59375 -1.421875 1.59375 -2.28125 C 1.59375 -2.734375 1.59375 -3.234375 1.765625 -3.578125 C 1.953125 -3.953125 2.375 -4.15625 2.859375 -4.15625 C 3.28125 -4.15625 3.703125 -4 3.921875 -3.65625 C 4.125 -3.3125 4.125 -2.765625 4.125 -2.28125 C 4.125 -1.421875 4.125 -0.34375 2.859375 -0.34375 Z M 2.859375 -0.34375 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-0-1"&gt;
&lt;path d="M 3.734375 -0.765625 C 3.734375 -0.453125 3.734375 0 4.765625 0 L 5.25 0 C 5.4375 0 5.5625 0 5.5625 -0.234375 C 5.5625 -0.46875 5.4375 -0.46875 5.296875 -0.46875 C 4.6875 -0.484375 4.6875 -0.609375 4.6875 -0.84375 L 4.6875 -2.984375 C 4.6875 -3.875 3.984375 -4.515625 2.5 -4.515625 C 1.9375 -4.515625 0.71875 -4.46875 0.71875 -3.59375 C 0.71875 -3.15625 1.0625 -2.96875 1.328125 -2.96875 C 1.640625 -2.96875 1.96875 -3.1875 1.96875 -3.59375 C 1.96875 -3.890625 1.78125 -4.0625 1.75 -4.09375 C 2.03125 -4.140625 2.34375 -4.15625 2.46875 -4.15625 C 3.203125 -4.15625 3.5625 -3.734375 3.5625 -2.984375 L 3.5625 -2.640625 C 2.84375 -2.609375 0.3125 -2.515625 0.3125 -1.078125 C 0.3125 -0.125 1.5625 0.0625 2.25 0.0625 C 3.046875 0.0625 3.515625 -0.34375 3.734375 -0.765625 Z M 3.5625 -2.328125 L 3.5625 -1.390625 C 3.5625 -0.421875 2.640625 -0.296875 2.390625 -0.296875 C 1.890625 -0.296875 1.484375 -0.640625 1.484375 -1.09375 C 1.484375 -2.15625 3.0625 -2.296875 3.5625 -2.328125 Z M 3.5625 -2.328125 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-1-0"&gt;
&lt;path d="M 3.59375 -2.21875 C 3.59375 -2.984375 3.5 -3.546875 3.1875 -4.03125 C 2.96875 -4.34375 2.53125 -4.625 1.984375 -4.625 C 0.359375 -4.625 0.359375 -2.71875 0.359375 -2.21875 C 0.359375 -1.71875 0.359375 0.140625 1.984375 0.140625 C 3.59375 0.140625 3.59375 -1.71875 3.59375 -2.21875 Z M 1.984375 -0.0625 C 1.65625 -0.0625 1.234375 -0.25 1.09375 -0.8125 C 1 -1.21875 1 -1.796875 1 -2.3125 C 1 -2.828125 1 -3.359375 1.09375 -3.734375 C 1.25 -4.28125 1.6875 -4.4375 1.984375 -4.4375 C 2.359375 -4.4375 2.71875 -4.203125 2.84375 -3.796875 C 2.953125 -3.421875 2.96875 -2.921875 2.96875 -2.3125 C 2.96875 -1.796875 2.96875 -1.28125 2.875 -0.84375 C 2.734375 -0.203125 2.265625 -0.0625 1.984375 -0.0625 Z M 1.984375 -0.0625 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-1-1"&gt;
&lt;path d="M 2.46875 -5.21875 C 1.15625 -4.296875 0.796875 -2.8125 0.796875 -1.75 C 0.796875 -0.765625 1.09375 0.765625 2.46875 1.734375 C 2.53125 1.734375 2.609375 1.734375 2.609375 1.65625 C 2.609375 1.609375 2.59375 1.59375 2.546875 1.546875 C 1.609375 0.703125 1.28125 -0.46875 1.28125 -1.734375 C 1.28125 -3.625 2 -4.546875 2.5625 -5.0625 C 2.59375 -5.09375 2.609375 -5.109375 2.609375 -5.140625 C 2.609375 -5.21875 2.53125 -5.21875 2.46875 -5.21875 Z M 2.46875 -5.21875 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-1-2"&gt;
&lt;path d="M 2.328125 -4.4375 C 2.328125 -4.625 2.328125 -4.625 2.125 -4.625 C 1.671875 -4.1875 1.046875 -4.1875 0.765625 -4.1875 L 0.765625 -3.9375 C 0.921875 -3.9375 1.390625 -3.9375 1.765625 -4.125 L 1.765625 -0.578125 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 C 0.9375 0 1.796875 -0.03125 2.046875 -0.03125 C 2.265625 -0.03125 3.140625 0 3.296875 0 L 3.296875 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.578125 Z M 2.328125 -4.4375 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-1-3"&gt;
&lt;path d="M 0.625 -5.21875 C 0.578125 -5.21875 0.5 -5.21875 0.5 -5.140625 C 0.5 -5.109375 0.515625 -5.09375 0.5625 -5.03125 C 1.15625 -4.484375 1.828125 -3.546875 1.828125 -1.75 C 1.828125 -0.296875 1.375 0.8125 0.625 1.484375 C 0.5 1.609375 0.5 1.609375 0.5 1.65625 C 0.5 1.6875 0.515625 1.734375 0.578125 1.734375 C 0.671875 1.734375 1.328125 1.28125 1.796875 0.40625 C 2.09375 -0.171875 2.296875 -0.921875 2.296875 -1.734375 C 2.296875 -2.71875 2 -4.25 0.625 -5.21875 Z M 0.625 -5.21875 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-2-0"&gt;
&lt;path d="M 5.875 -4.8125 C 5.875 -4.84375 5.859375 -4.90625 5.78125 -4.90625 C 5.734375 -4.90625 5.71875 -4.890625 5.65625 -4.8125 L 5.15625 -4.28125 C 5.09375 -4.359375 4.703125 -4.90625 3.84375 -4.90625 C 2.140625 -4.90625 0.484375 -3.40625 0.484375 -1.828125 C 0.484375 -0.75 1.3125 0.140625 2.640625 0.140625 C 3.265625 0.140625 3.90625 -0.015625 4.265625 -0.40625 C 4.34375 -0.265625 4.53125 0 4.609375 0 C 4.671875 0 4.6875 -0.03125 4.71875 -0.1875 L 4.859375 -0.71875 C 4.890625 -0.84375 4.984375 -1.265625 5.015625 -1.34375 C 5.09375 -1.65625 5.09375 -1.671875 5.515625 -1.671875 C 5.5625 -1.671875 5.671875 -1.671875 5.671875 -1.8125 C 5.671875 -1.890625 5.609375 -1.921875 5.5625 -1.921875 C 5.328125 -1.921875 5.03125 -1.890625 4.796875 -1.890625 C 4.625 -1.890625 4.390625 -1.890625 4.21875 -1.90625 C 4.046875 -1.90625 3.84375 -1.921875 3.671875 -1.921875 C 3.609375 -1.921875 3.515625 -1.921875 3.515625 -1.765625 C 3.515625 -1.671875 3.59375 -1.671875 3.765625 -1.671875 C 3.890625 -1.671875 4.03125 -1.671875 4.171875 -1.65625 C 4.390625 -1.640625 4.390625 -1.609375 4.390625 -1.53125 C 4.390625 -1.5 4.390625 -1.484375 4.34375 -1.296875 C 4.296875 -1.109375 4.21875 -0.796875 4.1875 -0.71875 C 4 -0.296875 3.34375 -0.109375 2.796875 -0.109375 C 2.109375 -0.109375 1.1875 -0.453125 1.1875 -1.625 C 1.1875 -2.375 1.546875 -3.296875 2.0625 -3.828125 C 2.78125 -4.53125 3.515625 -4.640625 3.90625 -4.640625 C 4.71875 -4.640625 5.1875 -4.0625 5.1875 -3.28125 C 5.1875 -3.09375 5.171875 -3.03125 5.171875 -3 C 5.171875 -2.90625 5.265625 -2.90625 5.296875 -2.90625 C 5.40625 -2.90625 5.40625 -2.921875 5.4375 -3.0625 Z M 5.875 -4.8125 "/&gt;
&lt;/g&gt;
&lt;g id="rollout-joint-tree-0-glyph-3-0"&gt;
&lt;path d="M 2.75 -3.578125 C 2.75 -4 2.40625 -4.34375 2 -4.34375 C 1.578125 -4.34375 1.234375 -4 1.234375 -3.578125 C 1.234375 -3.171875 1.578125 -2.828125 2 -2.828125 C 2.40625 -2.828125 2.75 -3.171875 2.75 -3.578125 Z M 2.75 -3.578125 "/&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/defs&gt;
&lt;path data-rollout-stage="0" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -17.007062 -8.503844 L 17.008563 -8.503844 L 17.008563 8.503969 L -17.007062 8.503969 Z M -17.007062 -8.503844 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="0" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-0" x="131.994" y="13.553"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="0" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-0" x="137.723" y="15.047"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="1" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(79.998779%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -58.112531 -35.308531 L -21.260969 -35.308531 L -21.260969 -20.253844 L -58.112531 -20.253844 Z M -58.112531 -35.308531 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="89.276" y="43.74"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="94.845" y="38.565"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="97.958104" y="38.565"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="101.929683" y="38.565"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-0" x="94.845" y="46.396"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="1" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 79.998779%)" stroke-opacity="1" stroke-miterlimit="10" d="M 21.258563 -35.308531 L 58.110125 -35.308531 L 58.110125 -20.253844 L 21.258563 -20.253844 Z M 21.258563 -35.308531 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="167.53" y="43.74"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="173.099" y="38.565"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-2-0" x="176.212" y="38.565"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="182.415" y="38.565"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-0" x="173.099" y="46.396"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="128.725" y="45.038"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="135.10619" y="45.038"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="1" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="141.473033" y="45.038"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="1" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(79.998779%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.00075 -9.249937 L -39.68675 -19.503844 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="1" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 79.998779%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.00075 -9.249937 L 39.684344 -19.503844 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="2" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(79.998779%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -92.409406 -75.968687 L -58.393781 -75.968687 L -58.393781 -58.960875 L -92.409406 -58.960875 Z M -92.409406 -75.968687 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-0" x="53.48" y="83.425"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="59.208" y="78.25"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="62.321104" y="78.25"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="66.292683" y="78.25"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="59.208" y="86.081"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="2" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 79.998779%)" stroke-opacity="1" stroke-miterlimit="10" d="M 58.395281 -75.968687 L 92.410906 -75.968687 L 92.410906 -58.960875 L 58.395281 -58.960875 Z M 58.395281 -75.968687 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-0" x="203.166" y="83.425"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="208.895" y="78.25"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-2-0" x="212.008" y="78.25"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="218.211" y="78.25"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="208.895" y="86.081"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="128.725" y="78.77"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="135.10619" y="78.77"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="2" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="141.473033" y="78.77"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="2" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(79.998779%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -39.68675 -36.054625 L -75.4055 -58.214781 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="2" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 79.998779%)" stroke-opacity="1" stroke-miterlimit="10" d="M 39.684344 -36.054625 L 75.403094 -58.214781 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(100%, 54.902649%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -133.514875 -102.773375 L -96.663312 -102.773375 L -96.663312 -87.718687 L -133.514875 -87.718687 Z M -133.514875 -102.773375 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="13.874" y="111.204"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="19.444" y="106.029"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="22.557104" y="106.029"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="26.528683" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="19.444" y="113.861"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(100%, 70.588684%, 78.431702%)" stroke-opacity="1" stroke-miterlimit="10" d="M -66.046125 -102.773375 L -29.198469 -102.773375 L -29.198469 -87.718687 L -66.046125 -87.718687 Z M -66.046125 -102.773375 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="80.223" y="111.204"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="85.792" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-2-0" x="88.906" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="95.108" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="85.792" y="113.861"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="47.37" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="53.75119" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="60.118033" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="128.725" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="135.10619" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="141.473033" y="110.518"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 70.588684%, 39.216614%)" stroke-opacity="1" stroke-miterlimit="10" d="M 29.196063 -102.773375 L 66.047625 -102.773375 L 66.047625 -87.718687 L 29.196063 -87.718687 Z M 29.196063 -102.773375 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="176.582" y="111.204"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="182.151" y="106.029"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="185.264104" y="106.029"/&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="189.235683" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="182.151" y="113.861"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="node" fill="none" stroke-width="1.49442" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 70.588684%, 86.274719%)" stroke-opacity="1" stroke-miterlimit="10" d="M 96.660906 -102.773375 L 133.512469 -102.773375 L 133.512469 -87.718687 L 96.660906 -87.718687 Z M 96.660906 -102.773375 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-0-1" x="242.931" y="111.204"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-1" x="248.5" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-2-0" x="251.613" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-3" x="257.816" y="106.029"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-1-2" x="248.5" y="113.861"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="210.079" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="216.46019" y="110.518"/&gt;
&lt;/g&gt;
&lt;g data-rollout-stage="3" data-rollout-kind="node" fill="rgb(0%, 0%, 0%)" fill-opacity="1"&gt;
&lt;use xlink:href="#rollout-joint-tree-0-glyph-3-0" x="222.827033" y="110.518"/&gt;
&lt;/g&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(100%, 54.902649%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -75.4055 -76.718687 L -115.089094 -86.972594 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(100%, 70.588684%, 78.431702%)" stroke-opacity="1" stroke-miterlimit="10" d="M -75.4055 -76.718687 L -47.62425 -86.972594 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 70.588684%, 39.216614%)" stroke-opacity="1" stroke-miterlimit="10" d="M 75.403094 -76.718687 L 47.621844 -86.972594 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;path data-rollout-stage="3" data-rollout-kind="edge" fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 70.588684%, 86.274719%)" stroke-opacity="1" stroke-miterlimit="10" d="M 75.403094 -76.718687 L 115.090594 -86.972594 " transform="matrix(1, 0, 0, -1, 137.093, 12.086)"/&gt;
&lt;/svg&gt;
&lt;/div&gt;
 &lt;div class="docs-rollout-controls" hidden&gt;
 &lt;div class="docs-rollout-progress"&gt;
 &lt;progress data-rollout-progress max="1" value="1" aria-label="Diagram animation progress"&gt;&lt;/progress&gt;
 &lt;span data-rollout-status&gt;Complete diagram&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="docs-rollout-actions"&gt;
 &lt;button type="button" data-rollout-play aria-label="Play diagram animation"&gt;
 &lt;svg class="docs-rollout-play-icon" viewBox="0 0 16 16" aria-hidden="true"&gt;&lt;path d="m5 3 7 5-7 5Z" fill="currentColor"/&gt;&lt;/svg&gt;
 &lt;svg class="docs-rollout-pause-icon" viewBox="0 0 16 16" aria-hidden="true"&gt;&lt;path d="M5.5 3v10m5-10v10" stroke="currentColor" stroke-width="2"/&gt;&lt;/svg&gt;
 &lt;span data-rollout-play-label&gt;Play&lt;/span&gt;
 &lt;/button&gt;
 &lt;button type="button" data-rollout-replay aria-label="Replay diagram animation"&gt;
 &lt;svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;path d="M3.5 5.5a5 5 0 1 1-.3 4M3.5 2.5v3h3"/&gt;&lt;/svg&gt;
 &lt;span&gt;Replay&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/figure&gt;

&lt;p&gt;每个 episode 从数据集中采样一个任务，从而提供所有智能体的初始观察和历史记录 &lt;span class="book-katex"&gt;\( \mathbf{o}_0=\{o_{1, 0}, \cdots, o_{n, 0}\} \)&lt;/span&gt; 和 &lt;span class="book-katex"&gt;\( \mathbf{h}_0=\{h_{1, 0}, \cdots, h_{n, 0}\} \)&lt;/span&gt;。 在每个回合中，智能体根据当前观察-动作历史 &lt;span class="book-katex"&gt;\( \mathbf{h}_t \)&lt;/span&gt; 生成一组联合响应 &lt;span class="book-katex"&gt;\( \mathbf{a}^{\mathcal{G}}_t\gets\boldsymbol{\pi}^{\mathcal{G}}(\cdot|\mathbf{h}_t) \)&lt;/span&gt;。 每个响应开始一个不同的 rollout。 智能体根据累积的历史和当前联合动作 &lt;span class="book-katex"&gt;\( \mathbf{a}^{(g)}_{t} \in \mathbf{a}^{\mathcal{G}}_{t} \)&lt;/span&gt;，为每个响应获得联合奖励 &lt;span class="book-katex"&gt;\( r^{(g)}_{t} \)&lt;/span&gt;。 &lt;strong&gt;每个 rollout 独立进化&lt;/strong&gt;，随着环境的变化产生新的联合观察 &lt;span class="book-katex"&gt;\( \mathbf{o}^{\mathcal{G}}_{t&amp;#43;1} \)&lt;/span&gt;，并在下一个回合中分支到进一步的 rollouts &lt;span class="book-katex"&gt;\( t&amp;#43;1 \)&lt;/span&gt;。 这个过程持续到终端回合 &lt;span class="book-katex"&gt;\( H \)&lt;/span&gt;。&lt;/p&gt;</description></item><item><title>旅行</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/travel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/travel/</guid><description>&lt;!-- External link entry --&gt;</description></item><item><title>并行训练</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-parallelization/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/training-parallelization/</guid><description>&lt;p&gt;CoMLRL 可以将不同的模型放置在不同的 GPUs 上。 使用 &lt;code&gt;parallel_training=&amp;quot;mp&amp;quot;&lt;/code&gt; 时，每个智能体在 &lt;code&gt;agent_devices&lt;/code&gt; 上的设备上运行，并且智能体同时生成； critics、奖励模型、比较器和参考模型各自使用自己的设备设置。 默认设置 &lt;code&gt;&amp;quot;none&amp;quot;&lt;/code&gt; 将智能体放在一个设备上。 两种模式都在一台机器上运行，不需要作业调度。&lt;/p&gt;</description></item><item><title>工具使用</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/bfcl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/env/bfcl/</guid><description>&lt;!-- External link entry --&gt;</description></item><item><title>问答</title><link>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/qa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmlrl.github.io/CoMLRL/zh-cn/docs/user-guide/qa/</guid><description>&lt;details class="docs-qa-item"id="what-are-the-differences-between-comlrl-and-other-multi-llm-training-frameworks"&gt;&lt;summary&gt;CoMLRL 与其他多 LLM 训练框架的区别是什么？&lt;/summary&gt;&lt;div class="markdown-inner"&gt;
&lt;p&gt;许多框架支持基于 LLM 的多智能体系统，其中每个智能体都有自己的奖励 (例如：&lt;a href="https://github.com/pettingllms-ai/PettingLLMs"&gt;PettingLLMs&lt;/a&gt;, &lt;a href="https://github.com/langfengQ/DrMAS"&gt;Dr. MAS&lt;/a&gt;, &lt;a href="https://github.com/TsinghuaC3I/MARTI"&gt;MARTI&lt;/a&gt;)。 这些框架通常被表述为部分可观测的随机游戏 (例如：POSGs)，其中每个智能体都有自己的奖励。 手工设计的奖励规则可以使训练信号更加密集，但设计起来比较困难。&lt;/p&gt;</description></item></channel></rss>