我们来详细讲解如何在合作捕食者-猎物游戏中结合 PPO (Proximal Policy Optimization) 算法。我们将聚焦于 CTDE(Centralized Training, Decentralized Execution,集中训练、分散执行) 模式,因为这是处理合作多 Agent 任务的常用且有效的方法。

CTDE(Centralized Training, Decentralized Execution,集中训练、分散执行)模式是一种在人工智能、机器人系统、多智能体协作等领域广泛应用的框架,其核心思想是通过 “集中式训练” 提升系统性能,再通过 “分散式执行” 确保系统的灵活性、效率和鲁棒性。


合作捕食者-猎物游戏回顾

游戏目标

我们的目标是训练多个 捕食者 Agent协作捕捉一个或多个 猎物 Agent。当所有捕食者 Agent 将猎物完全围堵,使其无法移动时,即视为捕获成功。

游戏元素

  • 环境:一个网格地图,可能有障碍物。
  • 捕食者 Agent (NPN_PNP 个):我们的学习主体,例如 3 个捕食者。它们需要学习如何互相配合。
  • 猎物 Agent (NEN_ENE 个):被捕获的目标,例如 1 个猎物。为了简化,猎物可以采取随机移动、逃跑策略,或者是一个不会学习的简单 AI。
  • 状态
    • 每个捕食者的局部观测 (oio_ioi):例如,捕食者 iii 的当前位置、它周围一小块区域内的障碍物、其他捕食者和猎物的位置。
    • 全局状态 (sgs_gsg):所有 Agent 的完整位置信息,环境中的所有障碍物位置等。这个全局状态在训练时会被中央 Critic 使用。
  • 动作 (aia_iai):每个捕食者 Agent 可以选择向上、下、左、右移动一格,或保持不动。
  • 奖励 (RtR_tRt)
    • 捕获奖励:如果所有捕食者成功捕获猎物,所有捕食者都获得一个大的正奖励(例如 +100+100+100)。
    • 时间惩罚:每过一个时间步,所有捕食者都受到一个小小的负奖励(例如 −1-11),鼓励它们尽快完成任务。
    • 碰撞惩罚 (可选):Agent 之间或 Agent 与障碍物碰撞时,给予小额惩罚。

结合 PPO 的 CTDE 模式

PPO 是一种 On-Policy 算法,它通过限制每次策略更新的幅度来提高训练稳定性。在 CTDE 模式下,我们将利用一个中心化的 Critic 来评估全局状态,为去中心化的 Actor (策略网络) 提供更准确的指导。

1. 神经网络架构

我们将为每个捕食者 Agent 设计一个策略网络 (Actor) 和一个共享的价值网络 (Critic)。

同质 (Homogeneous) Agent:指所有捕食者 Agent 在功能上、能力上和目标上都完全相同。它们执行相同的动作集,接收相同类型的观测,并且都在为相同的团队目标而努力。
异质 (Heterogeneous) Agent:指 Agent在功能、能力或角色上存在差异。例如,一个捕食者是“速度型”,另一个是“力量型”,或者它们被明确分配了不同的子任务(如一个专门堵左边,一个专门追击)。

a. 策略网络 (Actor) πθi(ai∣oi)\pi_{\theta_i}(a_i | o_i)πθi(aioi)
  • 每个捕食者 Agent 都有一个自己的 Actor 网络(如果 Agent 是异质的),或者所有 Agent 共享一个 Actor 网络(如果它们是同质的)。
  • 输入:每个 Actor 接收其局部观测 oio_ioi
  • 输出:当前 Agent iii 在给定观测 oio_ioi 下采取每个可能动作的概率分布
    • 例如,一个小型 MLP(多层感知机)或 CNN(如果观测是网格图像)。
    • 通过 softmax 激活层将输出转换为概率。
b. 价值网络 (Critic) Vϕ(sg)V_\phi(s_g)Vϕ(sg)
  • 一个中心化的 Critic 网络,所有捕食者 Agent 共享这个 Critic。
  • 输入全局状态 sgs_gsg(或所有 Agent 的局部观测拼接在一起)。
    • 这样 Critic 就能看到整个游戏的局面,从而更准确地评估当前状态的价值。
  • 输出:一个单一的标量值,预测当前全局状态下的预期总奖励
    • 这通常也是一个 MLP。

2. PPO 训练流程 (CTDE 模式)

PPO 的训练是一个迭代过程:收集数据 -> 计算损失 -> 更新网络 -> 重新收集数据。

步骤 1:数据收集 (去中心化执行)
  1. 初始化环境:将捕食者和猎物 Agent 放置在地图上。
  2. 迭代模拟
    • 对于每个时间步 ttt,每个捕食者 Agent iii 根据其当前的策略网络 πθi\pi_{\theta_i}πθi,接收局部观测 oi,to_{i,t}oi,t,并从中采样一个动作 ai,ta_{i,t}ai,t
    • 记录每个 Agent 的动作概率 P(ai,t∣oi,t)P(a_{i,t} | o_{i,t})P(ai,toi,t) (来自 πθi\pi_{\theta_i}πθi 的输出)。这些是我们的 πθold\pi_{\theta_{\text{old}}}πθold 的概率。
    • 执行所有 Agent 的动作 a1:NP,ta_{1:N_P,t}a1:NP,t,环境转移到新状态,并给出团队奖励 RtR_tRt
    • 收集一整条轨迹 (episode),或者达到预设的步数(例如 KKK 步),然后将这些数据存入一个经验缓冲区。存储的内容包括:(oi,t,ai,t,Rt,P(ai,t∣oi,t))(o_{i,t}, a_{i,t}, R_t, P(a_{i,t} | o_{i,t}))(oi,t,ai,t,Rt,P(ai,toi,t)) 对于每个 Agent iii
    • 重要提示:这里的 RtR_tRt 是所有 Agent 共同获得的团队奖励。
步骤 2:计算优势函数 (Advantage Function)

在 PPO 中,我们使用优势函数 A^t\hat{A}_tA^t 来衡量一个动作相对于平均水平的好坏。在 CTDE 中,我们用中心化的 Critic 来帮助计算这个优势。

  1. 计算目标价值 (VtargetV_{\text{target}}Vtarget):对于轨迹中的每个时间步 ttt,目标价值 VtargetV_{\text{target}}Vtarget 可以通过折扣累积奖励计算(即 Rt+γRt+1+γ2Rt+2+…R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \dotsRt+γRt+1+γ2Rt+2+),或者更常用的是使用 GAE (Generalized Advantage Estimation)广义优势估计 来平滑估计。
    • GAE 公式
      δt=Rt+γVϕ(sg,t+1)−Vϕ(sg,t)\delta_t = R_t + \gamma V_\phi(s_{g,t+1}) - V_\phi(s_{g,t})δt=Rt+γVϕ(sg,t+1)Vϕ(sg,t)
      A^t=δt+γλδt+1+(γλ)2δt+2+…\hat{A}_t = \delta_t + \gamma \lambda \delta_{t+1} + (\gamma \lambda)^2 \delta_{t+2} + \dotsA^t=δt+γλδt+1+(γλ)2δt+2+
      其中 RtR_tRt 是在 ttt 时刻的团队奖励,γ\gammaγ 是折扣因子,λ\lambdaλ 是 GAE 参数。
    • 关键点:这里的 Vϕ(sg,t)V_\phi(s_{g,t})Vϕ(sg,t) 是由中心化的 Critic 网络全局状态 sg,ts_{g,t}sg,t 上预测的值。这是 CTDE 的核心,Critic 利用全局信息提供更准确的价值评估,帮助 Actor 计算更可靠的优势。
步骤 3:计算 PPO 损失并更新网络

从经验缓冲区中采样一批数据,然后进行 EEE 个 epoch 的训练。

  1. 计算策略损失 (Policy Loss) LpolicyL^{\text{policy}}Lpolicy

    • 对于每个 Agent iii,在时间步 ttt
      • 从当前的策略网络 πθi\pi_{\theta_i}πθi 计算动作 ai,ta_{i,t}ai,t 的新概率 Pnew(ai,t∣oi,t)P_{\text{new}}(a_{i,t} | o_{i,t})Pnew(ai,toi,t)
      • 计算策略概率比 rt=Pnew(ai,t∣oi,t)Pold(ai,t∣oi,t)r_t = \frac{P_{\text{new}}(a_{i,t} | o_{i,t})}{P_{\text{old}}(a_{i,t} | o_{i,t})}rt=Pold(ai,toi,t)Pnew(ai,toi,t)。这里的 PoldP_{\text{old}}Pold 是在数据收集阶段记录的概率。
      • 应用 Clipped Surrogate Objective:
        Lipolicy=−Et[min⁡(rtA^t,clip(rt,1−ϵ,1+ϵ)A^t)]L^{\text{policy}}_i = -\mathbb{E}_t \left[ \min \left( r_t \hat{A}_t, \text{clip}(r_t, 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right]Lipolicy=Et[min(rtA^t,clip(rt,1ϵ,1+ϵ)A^t)]
        注意,每个 Agent 的策略损失都使用相同的 A^t\hat{A}_tA^t,因为 A^t\hat{A}_tA^t 是基于团队奖励和中心化 Critic 估算的。
    • 总策略损失:所有 Agent 的策略损失之和 Lpolicy=∑i=1NPLipolicyL^{\text{policy}} = \sum_{i=1}^{N_P} L^{\text{policy}}_iLpolicy=i=1NPLipolicy
  2. 计算价值损失 (Value Loss) LvalueL^{\text{value}}Lvalue

    • 使用中心化 Critic 网络 VϕV_\phiVϕ 预测当前全局状态 sg,ts_{g,t}sg,t 的价值 Vϕ(sg,t)V_\phi(s_{g,t})Vϕ(sg,t)
    • 计算均方误差损失:
      Lvalue=Et[(Vϕ(sg,t)−Vtarget(sg,t))2]L^{\text{value}} = \mathbb{E}_t \left[ \left( V_\phi(s_{g,t}) - V_{\text{target}}(s_{g,t}) \right)^2 \right]Lvalue=Et[(Vϕ(sg,t)Vtarget(sg,t))2]
      其中 Vtarget(sg,t)V_{\text{target}}(s_{g,t})Vtarget(sg,t) 可以是 GAE 计算出的 Rt+γVϕ(sg,t+1)R_t + \gamma V_\phi(s_{g,t+1})Rt+γVϕ(sg,t+1)
  3. 熵奖励 (Entropy Bonus)

    • 为了鼓励探索,我们通常会加入一个熵奖励项 H(πθi)H(\pi_{\theta_i})H(πθi) 到策略损失中。
    • H(πθi)H(\pi_{\theta_i})H(πθi) 是 Agent iii 策略的熵,熵越高表示策略越随机。
    • 总损失中会减去这个项:−c2⋅∑i=1NPH(πθi)-c_2 \cdot \sum_{i=1}^{N_P} H(\pi_{\theta_i})c2i=1NPH(πθi)
  4. 总损失函数 LLL
    L=Lpolicy+c1⋅Lvalue−c2⋅∑i=1NPH(πθi)L = L^{\text{policy}} + c_1 \cdot L^{\text{value}} - c_2 \cdot \sum_{i=1}^{N_P} H(\pi_{\theta_i})L=Lpolicy+c1Lvaluec2i=1NPH(πθi)
    其中 c1,c2c_1, c_2c1,c2 是超参数,用于平衡不同损失项的重要性。

  5. 优化:使用 Adam 等优化器对总损失 LLL 进行反向传播,更新所有 Actor 网络 θi\theta_iθi 和 Critic 网络 ϕ\phiϕ 的参数。

步骤 4:重复
  • 训练 EEE 个 epoch 后,丢弃经验缓冲区中的旧数据
  • 返回步骤 1,使用更新后的策略网络重新收集新的数据

为什么 CTDE PPO 适合这个游戏?

  • 处理非平稳性:虽然每个 Agent 独立执行,但中心化的 Critic 能够看到所有 Agent 的行为和全局环境,这使得它能够更好地处理其他 Agent 策略变化带来的环境非平稳性。
  • 信用分配:通过使用统一的团队奖励和中心化的价值函数,PPO 能够将成功的团队行为的奖励有效分配给每个 Agent,即使单个 Agent 的贡献在局部观测下不明显。
  • PPO 的稳定性:PPO 固有的策略截断机制有助于防止策略更新过大,这在多 Agent 环境中尤其重要,因为环境的动态性更高。

实现上的关键点

  • 环境接口:确保你的环境能为每个 Agent 提供其局部观测,并能接收所有 Agent 的动作。
  • 并行化:为了提高数据收集效率,可以并行运行多个环境实例,让多个 Agent 同时进行探索。
  • 超参数调优:PPO 的性能对超参数(学习率、γ,λ,ϵ,c1,c2\gamma, \lambda, \epsilon, c_1, c_2γ,λ,ϵ,c1,c2)比较敏感,需要仔细调优。

这个例子提供了一个扎实的基础,能够理解 PPO 在合作多 Agent 环境中的应用。随着你对这个例子的理解加深,你可以尝试更复杂的合作任务,引入更聪明的猎物,或者探索其他 MARL 算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88637.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88637.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88637.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web应用文件上传安全设计指南

引言 在当今的Web应用中,文件上传功能已成为基础且必要的服务能力,但不当的设计可能带来目录遍历、代码注入、服务端资源耗尽等安全风险。本文从威胁模型、安全设计原则、技术实现三个维度,系统阐述安全文件上传架构的设计要点。 一、威胁模型…

用 React Three Fiber 实现 3D 城市模型的扩散光圈特效

本文介绍了如何使用 React Three Fiber(R3F)和 Three.js 实现一个从中心向外扩散的光圈特效(DiffuseAperture 组件),并将其集成到城市 3D 模型(CityModel 组件)中。该特效通过动态调整圆柱几何体…

【牛客刷题】COUNT数字计数

文章目录 一、题目介绍二、题解思路三、算法实现四、复杂度分析五 、关键步骤解析5.1 数字分解5.2 三种情况处理5.2.1 情况1: d < c u r d < cur d<cur(完整周期)5.2.2 情况2: d = c u r d = cur d=cur(混合周期)5.2.3 情况3: d > c u r d > cur d>cu…

AGV穿梭不“迷路”CCLinkIE转Modbus TCP的衔接技巧

在AGV控制系统集成中&#xff0c;工程师常面临一个现实难题&#xff1a;如何让CCLinkIE总线与Modbus TCP设备实现高效通信&#xff1f;这种跨协议的连接需求&#xff0c;往往需要耗费大量时间调试。本文将通过实际案例解析&#xff0c;为制造行业工程师提供可复用的解决方案。【…

【代码随想录】刷题笔记——哈希表篇

目录 242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 454. 四数相加 II 383. 赎金信 15. 三数之和 18. 四数之和 242. 有效的字母异位词 思路 代码 class Solution {public boolean isAnagram(String s, String t) {if (s.length() ! t.length()…

Python爬虫实战:研究messytables库相关技术

1. 引言 在当今数字化时代,互联网上存在着大量有价值的数据。然而,这些数据通常以不规则的格式存在,尤其是表格数据,可能包含复杂的表头、合并单元格、不规则布局等问题。传统的数据处理工具往往难以应对这些挑战。 网络爬虫技术可以帮助我们从网页上自动提取数据,而 mes…

Vue3的组件通信方式

通信方式适用层级数据流向复杂度Props/Emits父子组件单向/双向★☆☆v-model父子组件双向★☆☆Provide/Inject跨层级组件自上而下★★☆事件总线任意组件任意方向★★★Pinia/Vuex全局状态任意方向★★☆Refs模板引用父子组件父→子★☆☆作用域插槽父子组件子→父★★☆Web W…

创客匠人:大健康创始人IP如何用“社会责任”构建品牌护城河

一、商业与责任的失衡困局部分大健康IP将利润置于首位&#xff0c;甚至牺牲用户利益&#xff0c;导致品牌形象脆弱。某保健品公司因夸大宣传被曝光后&#xff0c;尽管销量曾达千万&#xff0c;却因缺乏社会认同&#xff0c;一夜之间崩塌&#xff0c;证明没有社会责任支撑的商业…

AI:机器人未来的形态是什么?

机器人未来的形态将受到技术进步、应用场景需求和社会接受度的综合影响&#xff0c;以下是对未来机器人形态的预测&#xff0c;涵盖技术趋势、设计方向和应用场景&#xff1a; 1. 形态多样化与通用化 人形机器人&#xff08;Humanoid Robots&#xff09;&#xff1a; 趋势&…

创建 UIKit 项目教程

一、打开 XCode&#xff0c;选择 iOS 下的 App&#xff0c;然后点 Next二、Interface 选择 Storyboard&#xff0c;然后点 Next三、删掉 Main.storyboard四、删掉 SceneDelegate.swift五、AppDelegate.swift 只保留第一个函数六、在 AppDelegate.swift 文件里的 application 函…

防爬虫君子协定 Robots.txt 文件

1.什么是robots.txt ? robots.txt是一个位于网站根目录的文本文件,用于指导搜索引擎爬虫如何访问和抓取网站内容。它遵循特定的语法规则,是网站与爬虫通信的重要工具。当搜索引擎访问一个网站时,它首先会检查该网站的根域下是否有一个叫做robots.txt的纯文本文件。Robots.…

浅谈 Python 中的 yield——生成器对象与函数调用的区别

我们来看这么一个例子&#xff1a; def greeter():name yield "你是谁&#xff1f;"yield f"你好&#xff0c;{name}"g greeter() print(next(g)) # → "你是谁&#xff1f;" print(g.send("张三")) # → "你好&#xf…

云端docker小知识

1、docker的三个关键概念image、container、dockerfile2、docker的container3、dockerfile4、docker制作image5、linux&#xff08;ubuntu&#xff09;安装docker&#xff08;步骤1和4&#xff09;6、docker基本命令docker images 查看全部镜像docker rmi -f 1e5f3c5b981a 删除…

【Elasticsearch】昂贵算法与廉价算法

在 Elasticsearch 里&#xff0c;“昂贵”并不单指“CPU 时间”&#xff0c;而是综合了 **CPU、内存、磁盘 I/O、网络传输** 以及 **实现复杂度** 的代价。下面把常见“昂贵算法”拆开说&#xff1a;1. **高计算密度的文本算法** • **match_phrase slop**&#xff08;带跨距…

深度学习-多分类

​开头摘要​​&#xff1a; 本文将深入探讨如何使用PyTorch实现基于Softmax回归的MNIST手写数字识别系统。从多分类问题的核心概念出发&#xff0c;详细解析​​One-Hot编码​​技术如何将类别标签向量化&#xff0c;剖析​​交叉熵损失函数​​的数学原理及其在训练中的优化机…

JVM 类加载过程

一、加载&#xff08;Loading&#xff09;目标&#xff1a;把字节码文件&#xff08;.class&#xff09;“读入 JVM”&#xff0c;生成类的 “半成品”&#xff08;Class 对象&#xff09;。Bootstrap ClassLoader&#xff08;启动类加载器&#xff09;&#xff1a;负责加载 JV…

通俗范畴论13 鸡与蛋的故事番外篇

通俗范畴论13 鸡与蛋的故事番外篇 在上一篇中,我们得到了鸡与蛋的Set局部小范畴如下: 鸡与蛋 SetSetSet 局部小范畴 如上图所示,每个鸡来自于一个蛋,每个蛋来自于一只鸡,如此循环,以至于无穷… 是的,假设鸡与蛋两个对象代表的集合,都是无穷集合,这个系统就没有问题…

记录跟随recyclerview滑动的指示器

老早之前做的一个功能&#xff0c;横向recyclerview滑动时&#xff0c;底部做跟随滑动指示器。今天代码不用了&#xff0c;记录下代码。<LinearLayoutandroid:layout_width"match_parent"android:layout_height"wrap_content"android:layout_marginTop&…

快速过一遍Python基础语法

前言 本文章是深度学习的前导课&#xff0c;对有编程基础的小伙伴更加的友好&#xff08;C、C&#xff09;&#xff0c;如果完全没有学过任何一门编程语言也没有关系&#xff0c;本文章不会涉及到晦涩难懂的原理&#xff0c;只是简单的带大家过一遍Python的基础语法。 下面的操…

[爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250

相关爬虫知识点&#xff1a;[爬虫知识] 深入理解多进程/多线程/协程的异步逻辑 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 逆向知识点合集 前言&#xff1a; 在之前文章中&#xff0c;我们深入探讨了多进程、多线程和协程这三大异步技术的工作…