自適應(yīng)調(diào)優(yōu)與Simulink仿真)
做控制的同學對滑模控制SMC的第一印象往往是魯棒性強、動態(tài)響應(yīng)快、但那一堆參數(shù)用起來是真麻煩。傳統(tǒng)方法里滑模面的斜率、指數(shù)趨近律的系數(shù)、切換增益基本靠試湊和經(jīng)驗換一個被控對象或者工況就得重新調(diào)一遍費時費力還不一定拿得到最優(yōu)解。也正是這個痛點讓“基于深度學習把調(diào)參這件事自動化”成了很多人瞄上的方向。這個項目標題最核心的落點是基于深度確定性策略梯度算法DDPG強化學習的滑??刂芐MC自適應(yīng)調(diào)參優(yōu)化算法Simulink仿真。拆開看就是三條線一是用滑??刂破魅タ刂颇硞€被控對象二是利用DDPG強化學習算法根據(jù)系統(tǒng)狀態(tài)在線調(diào)整SMC控制器的關(guān)鍵參數(shù)三是整條閉環(huán)鏈路由Simulink環(huán)境承載訓練和驗證。簡單講就是訓練一個智能體替你把滑??刂破鞯脑鲆婧褪諗肯禂?shù)調(diào)好調(diào)參這件事從“人工試錯”變成“自動學習”。這篇博文會把DDPG和SMC耦合起來的設(shè)計思路、原理拆解、Simulink搭建步驟、以及我踩過的一些坑都整理出來適合正在做智能控制、自適應(yīng)控制方向或者剛準備用強化學習工具箱做控制器設(shè)計的人參考。老規(guī)矩先講清楚整體設(shè)計再逐層拆原理最后給實操和排錯經(jīng)驗。1. 整體設(shè)計拆解DDPG SMC 到底解決什么問題1.1 SMC 控制器手動調(diào)參的三道坎滑??刂齐m然對參數(shù)攝動和外擾有天然的不變性但它的控制效果極度依賴幾個關(guān)鍵參數(shù)滑模面斜率、趨近律中的冪次和增益、切換項幅值。實際工程里痛點非常集中。第一道坎是參數(shù)相互耦合?;C嫘甭势髸屜到y(tǒng)更快收斂但微分噪聲會被放大切換增益太大能壓制擾動但抖振也跟著變大趨近律系數(shù)調(diào)快了超調(diào)量又會冒出來。這幾個參數(shù)不是獨立優(yōu)化關(guān)系它們共同決定系統(tǒng)的動態(tài)品質(zhì)單獨看任何一個都不行。第二道坎是工況魯棒性差。一組在某工作點調(diào)好的參數(shù)到了負載變化、參數(shù)漂移的工況下表現(xiàn)可能明顯下滑理想做法是參數(shù)要能跟著工況在線變。第三道坎是試湊成本高。每次實驗都要改參數(shù)、跑仿真、看響應(yīng)曲線迭代一輪光是人工盯圖就得不少時間多變量系統(tǒng)更是折磨。這三道坎就指向了一個明確的“自適應(yīng)調(diào)參”場景需要一個決策器它能在每一個控制周期根據(jù)系統(tǒng)狀態(tài)給出合適的SMC控制器參數(shù)且這個決策器要能應(yīng)對連續(xù)狀態(tài)空間中的連續(xù)決策問題。而DDPG剛好就是這類問題里的標準解決方案之一。1.2 為什么是 DDPG而不是 Q-Learning 或 PPO參數(shù)調(diào)優(yōu)本質(zhì)上是一個連續(xù)動作空間的決策問題。SMC 的滑模面斜率、趨近律系數(shù)都是連續(xù)量不是“開/關(guān)”“大/小”這樣的離散選項。如果硬用 DQN 這類離散動作算法要么把參數(shù)空間粗暴離散化精度受限維度一高動作爆炸要么就得精心設(shè)計動作集合把原本連續(xù)的設(shè)計自由度重新人為框死。PPO 雖然也能處理連續(xù)動作但它是 on-policy 算法樣本效率偏低每次策略更新之后還得重新采集數(shù)據(jù)。在 Simulink 仿真環(huán)境里一次采樣本身就包含完整的動力系統(tǒng)數(shù)值積分成本不低。DDPG 作為 off-policy 算法借助經(jīng)驗回放池能反復利用歷史數(shù)據(jù)樣本利用效率和實際工程落地體驗都要好不少。另外DDPG 采用 Actor-Critic 架構(gòu)因為有確定性策略在連續(xù)動作空間里訓練穩(wěn)定性相對更好控制。相比直接用強化學習輸出一整條控制律曲線DDPG 負責的是“輸出控制器參數(shù)”控制本身仍然交給 SMC這也大大降低了訓練難度——智能體要學的不是從零構(gòu)建控制信號而是調(diào)節(jié)幾個物理含義明確的參數(shù)。注意這個項目里 RL 的定位是“自整定器”不是替代控制器本身。SMC 保證控制系統(tǒng)的穩(wěn)定性和魯棒性DDPG 負責根據(jù)實時狀態(tài)修正 SMC 的參數(shù)兩者各干各的專業(yè)活耦合度低、可解釋性強。2. 核心技術(shù)原理滑模面與 Actor-Critic 網(wǎng)絡(luò)兩套邏輯怎么嵌套2.1 SMC 控制律的構(gòu)成與穩(wěn)定性條件先把 SMC 這邊說透。對一個常見的二階非線性系統(tǒng)滑模面通常設(shè)計為跟蹤誤差的線性組合s ? λ·e其中 e 是系統(tǒng)跟蹤誤差λ 是滑模面斜率?;C鏋榱銜r系統(tǒng)誤差按照指數(shù)收斂收斂速度由 λ 決定。控制律一般拆成兩項等效控制項和切換控制項。等效控制用于把系統(tǒng)狀態(tài)保持在滑模面上切換控制用于克服不確定性把狀態(tài)推回滑模面。典型的指數(shù)趨近律是? -ε·sign(s) - k·s對應(yīng)的控制量 u 里就帶上了切換增益 ε 和線性趨近增益 k。k 越大狀態(tài)逼近滑模面的速度越快ε 越大抗干擾能力越強但抖振也越劇烈。穩(wěn)定性分析依賴李雅普諾夫函數(shù) V 0.5s2只要保證 V? s·? ≤ 0系統(tǒng)就能在設(shè)計好的滑模面上穩(wěn)定滑動。這里值得專門說明的一點是仿真中離散化方式對 SMC 穩(wěn)定性有直接影響。連續(xù)域的趨近律在離散域里不一定滿足同樣的到達條件采樣周期過大會導致“穿越滑模面”后無法及時拉回抖振幅度明顯增大。所以仿真步長的取值必須結(jié)合 DDPG 的動作更新頻率一起考慮這一點后面實操部分會詳細展開。2.2 DDPG 的四個關(guān)鍵機制Actor、Critic、經(jīng)驗回放、目標網(wǎng)絡(luò)DDPG 屬于深度強化學習里的 actor-critic 連續(xù)控制算法核心是四個部分。Actor 網(wǎng)絡(luò)負責做“決策”輸入是系統(tǒng)觀測狀態(tài)輸出是確定性動作放在這個項目里就是SMC的參數(shù)向量λ, k, ε。Critic 網(wǎng)絡(luò)負責做“評價”輸入是觀測和動作輸出 Q 值衡量這個動作在當前狀態(tài)下到底值多少。訓練時 critic 提供價值信號引導 actor 往高 Q 值方向更新。經(jīng)驗回放是 DDPG 樣本效率高的原因之一。仿真過程中的大量轉(zhuǎn)移樣本狀態(tài)、動作、獎勵、下一狀態(tài)存入回放池訓練時隨機采一個小批量數(shù)據(jù)來更新網(wǎng)絡(luò)這打破了樣本之間的時間相關(guān)性也避免了策略剛更新就立刻被自己生成的新數(shù)據(jù)帶偏。目標網(wǎng)絡(luò)則是穩(wěn)定性的關(guān)鍵。DDPG 給 actor 和 critic 各配了一個緩慢更新的目標網(wǎng)絡(luò)在計算目標 Q 值時用目標網(wǎng)絡(luò)輸出而不是用當前網(wǎng)絡(luò)避免 Q 值估計自舉得過于劇烈。目標網(wǎng)絡(luò)參數(shù)通常按“軟更新”方式每步漸進逼近當前網(wǎng)絡(luò)更新系數(shù) τ 取值在 0.001~0.01 之間這個參數(shù)直接關(guān)系訓練穩(wěn)定性。探索機制上DDPG 采取的是確定性策略加噪聲的方式典型做法是添加 Ornstein-Uhlenbeck 噪聲因為 OU 噪聲是時間相關(guān)的能讓輸出動作持續(xù)在一段時間內(nèi)偏向某個方向更符合實際物理控制系統(tǒng)的探索需求。仿真調(diào)試時OU 噪聲的 σ 和 θ 參數(shù)會直接影響探索力度后面會單獨說。2.3 獎勵函數(shù)設(shè)計DDPG 調(diào)參好壞的唯一標尺整個耦合設(shè)計里最容易被忽略但最影響效果的其實是獎勵函數(shù)。很多第一次做的人上來就獎勵函數(shù)寫得很隨意結(jié)果訓練出來一個“能收斂但行為很奇怪”的智能體然后到處懷疑模型結(jié)構(gòu)有問題。這個場景里獎勵函數(shù)至少要納入三方面信息跟蹤誤差、滑模面狀態(tài)、控制量強度。我常用的形式是R -( w1·e2 w2·s2 w3·u2 ) bonus(s)其中 e2 懲罰跟蹤誤差讓智能體優(yōu)先保證控制精度s2 懲罰距離滑模面的偏差驅(qū)動參數(shù)讓系統(tǒng)真的“滑”起來u2 懲罰過強的控制能量防止智能體為了快速收斂把參數(shù)推到極大值導致輸入飽和。bonus(s) 是當滑模面絕對值小于某個閾值時給的正獎勵用來加速策略朝“進入滑模狀態(tài)”的方向收斂。權(quán)重 w1、w2、w3 的配比需要根據(jù)被控對象量綱來定。比如位置誤差的量級是 0.1誤差平方就是 0.01控制量量級可能是 50平方就是 2500不歸一化的話控制量懲罰會把另外兩項吞沒訓練基本上只會學到“把控制量壓到最小”這種沒用的行為。正確做法是先歸一化或者干脆把獎勵寫成誤差和控制量的標稱化比值形式。3. Simulink 仿真模型搭建與訓練實操3.1 整體模型結(jié)構(gòu)與控制律實現(xiàn)Simulink 搭建這個系統(tǒng)時我建議按三個模塊來組織被控對象模塊、SMC 控制器模塊、DDPG 決策模塊。被控對象直接用傳遞函數(shù)或者狀態(tài)空間建模。以最簡單的二階系統(tǒng)為例可以是典型的位置伺服系統(tǒng)或者電機模型在 Simulink 里用積分器和增益搭出來也可以直接放一個 State-Space 模塊。為了驗證魯棒性建議在模型里加一個參數(shù)攝動環(huán)節(jié)例如讓阻尼系數(shù)在仿真過程中按一定規(guī)律變化或者加一個外部擾動輸入這是后面檢驗 DDPG 調(diào)參效果的關(guān)鍵。SMC 控制器的實現(xiàn)要注意兩點。第一符號函數(shù) sign(s) 直接使用時抖振明顯工程上常用飽和函數(shù) sat(s/φ) 來替代邊界層厚度 φ 要合適太薄抖振抑制效果差太厚相當于把滑??刂仆嘶善胀ㄟB續(xù)控制魯棒性丟失。第二SMC 控制器的輸入不能只接誤差和誤差導數(shù)還需要把滑模面 s 單獨計算出來作為配給 RL 的觀測信號之一。DDPG 決策模塊有兩種集成方式一是使用 Reinforcement Learning Toolbox 提供的 RL Agent 模塊在模型里直接連線觀測和動作二是通過 MATLAB Function 塊寫一個接口把觀測向量傳入 MATLAB 工作空間在外部用訓練好的 actor 網(wǎng)絡(luò)推理輸出參數(shù)。前者適合訓練階段后者適合部署和推理階段。我的習慣是訓練時用 RL Agent 模塊訓練完導出 actor 網(wǎng)絡(luò)后用 MATLAB Function 塊做推理換參數(shù)驗證非常方便。3.2 DDPG Agent 的觀測、動作與網(wǎng)絡(luò)結(jié)構(gòu)設(shè)置觀測量的選擇決定智能體能感知的信息邊界。我的標準配置是四維觀測當前跟蹤誤差 e、誤差導數(shù) ?、滑模面 s、以及時間標記或外部擾動估計值。如果有條件測量負載或擾動盡量放進觀測里DDPG 能更快學到擾動與參數(shù)之間的對應(yīng)關(guān)系。動作向量設(shè)為三維(λ, k, ε)。注意動作是 SMC 控制器的“參數(shù)指令”不是直接的控制量。為了不出現(xiàn)過大的參數(shù)跳變一種做法是在 SMC 模塊內(nèi)部給三個動作量做限幅例如 λ 限制在 [0.1, 20]、k 限制在 [0.1, 50]、ε 限制在 [0.1, 10]這樣即使訓練初期 actor 網(wǎng)絡(luò)輸出異常系統(tǒng)仍能保持基本穩(wěn)定。網(wǎng)絡(luò)結(jié)構(gòu)方面Actor 和 Critic 各自用兩層隱藏層每層 64 個神經(jīng)元激活函數(shù)用 ReLU。Critic 網(wǎng)絡(luò)的輸出層不使用激活函數(shù)保持 Q 值尺度Actor 輸出層用 tanh 后再映射到動作范圍。隱藏層神經(jīng)元數(shù)量不用一上來就堆大網(wǎng)絡(luò)64×64 在這個任務(wù)里已經(jīng)夠用網(wǎng)絡(luò)再大反而增加過擬合風險。Reinforcement Learning Toolbox 里創(chuàng)建 agent 時rlDDPGAgentOptions 里有幾個關(guān)鍵參數(shù)值得單獨調(diào)mini-batch size 建議 128 或 256actor 學習率 1e-3critic 學習率 1e-3 或更低critic 學習率過大會導致 Q 值震蕩target update frequency 設(shè) 1目標網(wǎng)絡(luò)每步軟更新τ 設(shè) 0.001經(jīng)驗回放池容量 1e5 量級。3.3 仿真參數(shù)、訓練流程與結(jié)果觀察仿真時長的設(shè)置要把 SMC 的動態(tài)和 DDPG 的訓練節(jié)奏分開考慮。SMC 控制器以較快的采樣周期運行例如 1 msDDPG 決策則不需要每毫秒都更新一次參數(shù)可以每 10 ms也就是 10 個控制步長輸出一次新的參數(shù)。這樣既保證了控制器有足夠的實時性又讓 RL 有合理的決策時間尺度。訓練流程上在一個 episode 內(nèi)讓系統(tǒng)從初始誤差或者隨機初始狀態(tài)出發(fā)運行指定時長累積獎勵一個 episode 結(jié)束后重置系統(tǒng)狀態(tài)開始新一輪。為了加快收斂初始狀態(tài)可以加隨機擾動這樣 agent 見過更多工況策略泛化性更好。訓練過程要盯著累積獎勵曲線和 SMC 的跟蹤誤差曲線兩個指標獎勵曲線逐步上升并在某個區(qū)間穩(wěn)定波動說明策略在改進誤差曲線的超調(diào)峰值得以被持續(xù)壓低說明調(diào)參真正起效。訓練完成后把 actor 網(wǎng)絡(luò)導出放到一個純 Simulink 推理模型里去掉 RL Agent 模塊和探索噪聲用 MATLAB Function 塊加載網(wǎng)絡(luò)參數(shù)驗證智能體在新工況下的表現(xiàn)。這一步一定要做因為訓練環(huán)境下有 OU 噪聲介入表現(xiàn)和推理環(huán)境下往往有明顯差別直接用訓練環(huán)境里的曲線說明效果是不夠嚴謹?shù)摹?. 訓練調(diào)試過程與常見問題速查4.1 訓練不收斂或獎勵長期停滯的排查我調(diào)試這個項目時遭遇的第一類問題就是訓練半天獎勵曲線紋絲不動連負值都漲不上去。逐個排查下來發(fā)現(xiàn)大概率出在三個地方。第一個是獎勵尺度問題。誤差平方的數(shù)量級如果特別小例如 1e-4乘上權(quán)重后整個獎勵函數(shù)數(shù)值極小critic 對 Q 值的估計誤差會被淹沒在數(shù)值誤差里。這時候把獎勵整體乘一個縮放系數(shù)比如放大 1000 倍讓獎勵在可觀察的數(shù)值范圍內(nèi)訓練往往立刻就有了反應(yīng)。這跟神經(jīng)網(wǎng)絡(luò)輸入要歸一化是同樣的邏輯。第二個是動作范圍與控制器穩(wěn)定性沖突。訓練初期 actor 網(wǎng)絡(luò)隨機初始化輸出參數(shù)可能沖到限幅值SMC 在極端參數(shù)下直接發(fā)散系統(tǒng)狀態(tài)變成 NaNepisode 異常終止經(jīng)驗回放池里全是無效樣本。解決方法是把動作限幅范圍設(shè)得更保守一些同時給狀態(tài)做異常檢測一旦 |e| 超過閾值強制中止 episode 并給一個探測性的大懲罰獎勵讓智能體學會避免失控區(qū)域。第三個是探索噪聲過大或過小。OU 噪聲的 σ 初始值我習慣設(shè) 0.1~0.2θ 設(shè) 0.15。σ 太大會讓動作在參數(shù)邊界上反復橫跳系統(tǒng)被激勵得過狠σ 太小則探索不足agent 很快收斂到一個局部最優(yōu)參數(shù)就不再往別處走。訓練過程中可以設(shè)置噪聲衰減讓探索力度隨訓練進度逐步減小這是保證后期精細收斂的常用手段。4.2 訓練后性能不如手動調(diào)參的典型原因還有一種比較打擊人的情況訓練完成了獎勵也收斂了但把 agent 給出的 SMC 參數(shù)放到常規(guī)控制器里驗證性能反而不如自己手動試出來的那組參數(shù)。我復盤后發(fā)現(xiàn)了兩個關(guān)鍵原因。一是獎勵函數(shù)沒有精確表達設(shè)計意圖。如果只看重跟蹤誤差從訓練出來的參數(shù)曲線看智能體會傾向用很大的趨近增益快速壓誤差但代價是控制量尖峰非常大甚至不斷越過飽和限幅。在 Simulink 里加一個飽和度模塊后再觀察實際被控對象因為輸入飽和性能并不會按理想線性模型那樣提升。對策就是在獎勵里加控制量的懲罰權(quán)重并且把被控對象輸入端的飽和模塊建進模型中讓 agent 從一開始就感受到非線性飽和的存在。二是觀測信息不充分導致策略過擬合單一工況。如果你只在固定初始條件下訓練agent 完全可能記住“在這個初始誤差下用什么參數(shù)”而換一組初始值后推理參數(shù)就很差。解決方法是訓練時隨機化初始狀態(tài)和擾動讓 agent 學到的是“根據(jù)狀態(tài)參數(shù)做出決策”的映射關(guān)系而不是死記硬背一條軌跡。4.3 常見問題速查表現(xiàn)象可能原因處理手段獎勵全程不增長獎勵數(shù)值過小或過大對獎勵整體縮放保證量級在 1~100 之間訓練初期系統(tǒng)頻繁發(fā)散動作限幅過寬SMC 參數(shù)過激收緊動作范圍添加狀態(tài)異常檢測與終止邏輯Q 值曲線劇烈震蕩critic 學習率過大降低 critic 學習率至 1e-4 量級加大 mini-batch訓練收斂但驗證性能差過擬合固定初始狀態(tài)訓練時引入隨機初始狀態(tài)和隨機擾動滑模面收斂慢但誤差已經(jīng)很小切換增益 ε 被獎勵壓得太低提高 s2 或切換抖振項在獎勵中的權(quán)重推理階段控制量抖動嚴重符號函數(shù) sign 直接使用換成飽和函數(shù) sat(s/φ)調(diào)整邊界層厚度拿其中的抖振問題單獨多說一句。很多人在 Simulink 里看到控制量的高頻振蕩第一反應(yīng)就是調(diào) SMC 參數(shù)但實際上這個問題常常是 sign(s) 的離散仿真數(shù)值剛性造成的不是控制邏輯本身的問題。邊界層厚度 φ 取滑模面量級的 1%~5% 通常能明顯改善配合變步長求解器用 ode45 或者定步長 ode4抖振表現(xiàn)會有可感知的差別。調(diào)試時先在純 SMC 模塊上驗證抖振水平再接入 DDPG 訓練隔離變量排查效率高得多。5. 這套方案還可以怎么延伸做完 DDPG 給 SMC 調(diào)參這個閉環(huán)之后你會發(fā)現(xiàn)這套思路本質(zhì)上是一個“參數(shù)整定器”的框架它跟具體的 SMC 變體不是強綁定的。我后來在這個基礎(chǔ)上做過的延伸有兩個方向。第一個方向是把 SMC 本身升級成自適應(yīng)滑模或終端滑模DDPG 的動作輸出從三個參數(shù)擴展到五個參數(shù)例如同時調(diào)整滑模面冪次和邊界層厚度。動作維度變高訓練難度會有明顯上升但獎勵函數(shù)設(shè)計邏輯完全不用變觀測信息也仍然沿用誤差、誤差導數(shù)、滑模面這組狀態(tài)量。第二個方向是把被控對象換成更高階的柔性系統(tǒng)比如帶彈性負載的機電系統(tǒng)。這種對象的特點是模型階次高、諧振峰明顯手動調(diào) SMC 參數(shù)更加痛苦DDPG 自動調(diào)參的優(yōu)勢體現(xiàn)得更充分。不過要注意高階對象的觀測里最好加入速度或者加速度信息不然 agent 等于盲人摸象很難學到合理的參數(shù)映射關(guān)系。我實際的體會是DDPG SMC 這套組合最大的價值不是做到“最優(yōu)控制”而是把“能用但調(diào)參煩”的控制器變成“自適應(yīng)可遷移”的控制器。只要獎勵函數(shù)把設(shè)計約束表達清楚訓練時間和 Simulink 模型架構(gòu)基本可以復用換對象、換 SMC 變體都只是換殼不換骨。最后再提醒一個細節(jié)訓練過程里留意把每個 episode 的參數(shù)曲線保存下來你會發(fā)現(xiàn)智能體前幾十輪的動作模式和后面相差巨大這些數(shù)據(jù)對理解獎勵函數(shù)設(shè)置是否合理非常有幫助比只看累積獎勵曲線直觀得多。