多 Agent 強化學習實踐指南(一):CTDE PPO 在合作捕食者-獵物游戲中的應用詳解

我們來詳細講解如何在合作捕食者-獵物游戲中結合 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-1?1),鼓勵它們盡快完成任務。
    • 碰撞懲罰 (可選):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??(ai?oi?)
  • 每個捕食者 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,t?oi,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,t?oi,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,t?oi,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,t?oi,t?)Pnew?(ai,t?oi,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(rt?A^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=1NP??Lipolicy?
  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})?c2??i=1NP??H(πθ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+c1??Lvalue?c2??i=1NP??H(πθ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;我們深入探討了多進程、多線程和協程這三大異步技術的工作…