控制MATLAB仿真實(shí)現(xiàn)與對比分析)
做控制算法驗(yàn)證我最不喜歡的工作就是每換一套被控對象就要重新推一遍模型更不用說在模型失配之后再去調(diào)一堆觀測器和狀態(tài)估計(jì)參數(shù)。這套數(shù)值驗(yàn)證仿真程序解決的就是這個痛點(diǎn)MFAPC無模型自適應(yīng)預(yù)測控制和 MFAILC無模型自適應(yīng)迭代學(xué)習(xí)控制在理論上都不需要顯式建模只靠輸入輸出數(shù)據(jù)就能在線或迭代地調(diào)整控制律。我用 MATLAB 把兩個算法從公式落成了可運(yùn)行的代碼能在同一框架下對比跟蹤誤差、抗干擾能力和參數(shù)敏感度。自動化專業(yè)學(xué)生、剛開始接觸數(shù)據(jù)驅(qū)動控制的研究生以及想快速驗(yàn)證算法效果的工程師都可以拿這套程序做基線。下面從原理到實(shí)現(xiàn)再到調(diào)試經(jīng)驗(yàn)和結(jié)果解讀把整個程序講透。1. 從模型依賴到數(shù)據(jù)驅(qū)動這兩種算法到底在解決什么問題1.1 傳統(tǒng)控制為什么繞不開建模大多數(shù)經(jīng)典控制方法的第一步都是建模。PID 雖然不需要精確模型但參數(shù)整定嚴(yán)重依賴工程經(jīng)驗(yàn)MPC 需要預(yù)測模型滑模、反步法更是離不開對象微分方程。真實(shí)工業(yè)對象往往有強(qiáng)非線性、參數(shù)時變和未建模動態(tài)模型越精細(xì)計(jì)算開銷和辨識成本越高模型一旦失配控制性能掉得比誰都慘。無模型自適應(yīng)控制MFAC的出發(fā)點(diǎn)很直接既然精確模型難拿那就干脆放棄模型把被控對象在每一個工作點(diǎn)附近用一個非常簡單的時變線性關(guān)系近似出來。這個“時變線性關(guān)系”不是我們對物理機(jī)理的假設(shè)而是一種數(shù)學(xué)上的等價轉(zhuǎn)化。只要對象滿足一定的有界性和光滑性條件在相鄰兩個采樣時刻之間輸入變化和輸出變化之間就存在一個時變系數(shù)。1.2 緊格式動態(tài)線性化與偽偏導(dǎo)數(shù)MFAC 家族里最常用的是緊格式動態(tài)線性化Compact Form Dynamic LinearizationCFDL。對離散時間非線性系統(tǒng)CFDL 說的是Δy(k1) φ(k)·Δu(k)其中 Δy(k1) y(k1) - y(k)Δu(k) u(k) - u(k-1)。這里的 φ(k) 叫作偽偏導(dǎo)數(shù)Pseudo Partial DerivativePPD。注意它并不是對象的真實(shí)偏導(dǎo)數(shù)而是一個吸收了對象非線性、時變特性和外部擾動影響的時變參數(shù)本質(zhì)上可以看成當(dāng)前工作點(diǎn)附近的“等效增量增益”。這個式子有什么好處好處特別大控制器設(shè)計(jì)不再需要知道 f 的具體形式只需要在線估計(jì) φ(k)。一個標(biāo)量參數(shù)用差分?jǐn)?shù)據(jù)就能遞推辨識出來這就是整個程序的核心底層。只要 φ 估計(jì)得準(zhǔn)控制律就可以設(shè)計(jì)成“用當(dāng)前預(yù)測誤差除以等效增益”的形式。1.3 MFAPC 和 MFAILC 的分工邏輯MFAPC 和 MFAILC 雖然都建立在 CFDL 基礎(chǔ)上解決的是兩類不同問題。MFAPC 針對的是實(shí)時在線控制系統(tǒng)在同一個時間軸上連續(xù)運(yùn)行控制器每個采樣周期都要決策一個控制增量。它把預(yù)測控制里的“滾動優(yōu)化、反饋校正”思想搬到了無模型框架下用預(yù)測時域內(nèi)的輸出偏差來反推當(dāng)前控制量。因?yàn)?PPD 是隨時間在線更新的對象特性變了φ(k) 會跟著變控制律也隨之調(diào)整所以它對時變系統(tǒng)有天然的適應(yīng)能力。MFAILC 針對的是重復(fù)運(yùn)動過程機(jī)械臂每次執(zhí)行同一個軌跡、注塑機(jī)每個批次走同樣的工藝曲線、電機(jī)反復(fù)跟蹤同一個速度曲線。這類系統(tǒng)的特點(diǎn)是時間軸不再單獨(dú)存在而是嵌套在“批次數(shù)”里面。迭代學(xué)習(xí)控制每一次運(yùn)行結(jié)束后用本次的跟蹤誤差去修正下一輪的輸入軌跡讓誤差隨迭代次數(shù)逐步衰減。它的控制作用不是采樣時刻的瞬時調(diào)整而是整個輸入序列在“迭代軸”上的演進(jìn)。說白了MFAPC擅長對象特性在變、任務(wù)實(shí)時變化的情況MFAILC擅長任務(wù)固定、重復(fù)運(yùn)行、希望越跑越準(zhǔn)的情況。仿真程序同時實(shí)現(xiàn)這兩個算法最大的價值就是可以把同一套被控對象放進(jìn)兩種運(yùn)行模式里直接量化它們的差異。2. 仿真程序整體架構(gòu)與驗(yàn)證指標(biāo)設(shè)計(jì)2.1 程序模塊劃分整套程序按模塊拆分會更清楚我實(shí)際編寫時分成四塊對象模塊被控對象的差分方程、非線性算式、時變參數(shù)切換邏輯統(tǒng)一封裝成函數(shù)方便替換??刂破髂KMFAPC 主循環(huán)和 MFAILC 雙層循環(huán)分別實(shí)現(xiàn)兩者共用 PPD 估計(jì)器函數(shù)。信號模塊參考軌跡生成、干擾疊加、噪聲注入、輸入約束限幅。分析模塊誤差指標(biāo)計(jì)算、曲線繪制、迭代收斂趨勢統(tǒng)計(jì)。這種劃分的好處是改對象不用動控制器調(diào)控制器不用動對象。仿真實(shí)驗(yàn)最怕的就是把對象邏輯和控制邏輯耦合在一起后面想換一個被控對象改代碼改到懷疑人生。2.2 驗(yàn)證對象與基線設(shè)計(jì)程序里建議至少準(zhǔn)備三個被控對象線性定常系統(tǒng)用于理論驗(yàn)證檢測算法實(shí)現(xiàn)是否準(zhǔn)確。非線性時變系統(tǒng)用于驗(yàn)證自適應(yīng)能力比如參數(shù)在運(yùn)行中途突變。帶輸出噪聲和外部干擾的系統(tǒng)用于驗(yàn)證魯棒性。我個人用的典型線性對象是y(k1) 1.2·y(k) - 0.4·y(k-1) 1.0·u(k) 0.8·u(k-1)非線性對象則用經(jīng)典算例y(k1) y(k)/(1 y(k)^2) u(k) 0.7·u(k-1)第二個對象在 y 接近零點(diǎn)時增益變化明顯能比較充分地考察 PPD 估計(jì)器跟不跟得上。參考軌跡可以選方波、正弦、斜坡或者梯形速度曲線。這里建議不要只用階躍因?yàn)殡A躍參考對預(yù)測控制太友好了不容易暴露問題。我習(xí)慣用帶突變的正弦組合比如 0~200 步正弦200~400 步切換成方波這樣可以一次看夠穩(wěn)態(tài)跟蹤和瞬態(tài)響應(yīng)。2.3 評價指標(biāo)如何設(shè)計(jì)指標(biāo)直接影響結(jié)論的可信度不要只看最后一張圖。RMSE 用于衡量整體跟蹤精度公式不用多說就是誤差平方和開根號。MaxAbsError 用于衡量峰值偏差特別能反映突變點(diǎn)的表現(xiàn)??刂颇芰?ΣΔu2 用于衡量控制量抖動程度。兩個算法精度差不多的時候誰的輸入更平穩(wěn)工程上更重要。迭代收斂速度MFAILC專用定義第一次滿足 RMSE 閾值所需迭代次數(shù)。評價時建議固定對象和參考軌跡單獨(dú)變化算法參數(shù)記錄指標(biāo)到二維表里。沒有量化對比就直接畫曲線說“效果不錯”的基本等于沒做驗(yàn)證。3. 核心算法與 MATLAB 實(shí)現(xiàn)細(xì)節(jié)3.1 被控對象離散模型與信號生成MATLAB 里被控對象直接寫成函數(shù)比如非線性對象function y_next plant_nonlinear(y, y_prev, u, u_prev, a_noise) y_next y / (1 y^2) u 0.7 * u_prev a_noise * randn; end對象函數(shù)建議把噪聲強(qiáng)度作為參數(shù)傳進(jìn)來這樣在對比算法時可以保持完全相同的一組隨機(jī)種子結(jié)果才有可對比性。仿真中不要每次運(yùn)行都改變隨機(jī)種子否則你很難判斷性能差異來自算法還是噪聲。我習(xí)慣在腳本開頭用 rng(2024) 固定隨機(jī)流確保重復(fù)實(shí)驗(yàn)得到一致結(jié)果。3.2 MFAPC 控制器實(shí)現(xiàn)MFAPC 的核心循環(huán)分三步PPD估計(jì)、構(gòu)建預(yù)測矩陣、求解控制增量。PPD 估計(jì)器采用帶重置的遞推格式φ?(k) φ?(k-1) η·Δu(k-1)·(Δy(k) - φ?(k-1)·Δu(k-1)) / (μ Δu(k-1)2)重置條件為 |φ?(k)| 小于閾值、Δu(k) 過小或者 φ? 符號跳變此時令 φ?(k) φ??。這里的 μ 是個很小的正數(shù)主要防止分母為零。沒有重置機(jī)制的 PPD 估計(jì)器很容易在對象增益接近零時把參數(shù)沖到很大。預(yù)測模型的構(gòu)造是 MFAPC 與普通 MFAC 的核心區(qū)別。CFDL 一次只給出了 Δy(k1) 和 Δu(k) 的關(guān)系若要預(yù)測未來 N_y 步需要假設(shè) PPD 在預(yù)測時域內(nèi)近似不變。于是?(ki) y(k) φ?(k)·[Δu(k) Δu(k1) ... Δu(ki-1)]寫成矩陣形式就是Y Y? Φ·ΔU其中 Φ 是 N_y × N_u 的下三角矩陣行越往下包含的 Δu 項(xiàng)越多。目標(biāo)函數(shù)選經(jīng)典預(yù)測控制形式J ‖Yr - Y‖2 λ·‖ΔU‖2對 ΔU 求極值得到ΔU(k) (Φ?Φ λI)?1·Φ?·(Yr - Y?)實(shí)際只取 ΔU(k) 第一項(xiàng)作為當(dāng)前控制增量。核心代碼大致是這樣for k 3 : Nsim dy y(k) - y(k-1); du u(k-1) - u(k-2); % 1. PPD 估計(jì) denom mu du^2; phihat(k) phihat(k-1) eta * du / denom * (dy - phihat(k-1) * du); % 2. 重置機(jī)制 if abs(phihat(k)) eps_phi || abs(du) eps_du phihat(k) phihat0; end % 3. 構(gòu)建預(yù)測矩陣 Phi: Ny x Nu Phi zeros(Ny, Nu); for i 1 : Ny for j 1 : min(i, Nu) Phi(i, j) phihat(k); end end Y0 y(k) * ones(Ny, 1); Yr ref(k1 : kNy); dU (Phi * Phi lambda * eye(Nu)) \ (Phi * (Yr - Y0)); u(k) u(k-1) rho * dU(1); % rho 是步長因子 end這里面最容易被忽略的是矩陣維度。預(yù)測時域 N_y 必須大于等于控制時域 N_u否則 Φ 不是“列滿秩×帶寬三角”的正常結(jié)構(gòu)求解時數(shù)值性質(zhì)很差。一般推薦 N_y 取 3~5N_u 取 1~2不是越大越好。3.3 MFAILC 控制器實(shí)現(xiàn)MFAILC 的結(jié)構(gòu)跟 MFAPC 完全不同它是雙層循環(huán)外層是迭代次數(shù) j內(nèi)層是時間 k。每一輪迭代先用當(dāng)前輸入軌跡跑一遍對象記錄完整的輸出軌跡然后按時間點(diǎn)逐個更新輸入序列。PPD 在迭代軸上的估計(jì)方式是φ??(k) φ????(k) η·Δu???(k)·(Δy???(k1) - φ????(k)·Δu???(k)) / (μ Δu???(k)2)注意這里每個時間點(diǎn) k 都有自己獨(dú)立的 φ?(k)不能像 MFAPC 那樣只維護(hù)一個標(biāo)量。因?yàn)檩斎胲壽E上的每個點(diǎn)在不同迭代中會反復(fù)修正它們各自的“輸入增量到輸出增量”的映射關(guān)系不一樣必須分別估計(jì)。學(xué)習(xí)律采用帶步長的形式u???(k) u?(k) ρ·φ??(k) / (λ φ??(k)2)·e?(k1)其中 e?(k1) y_r(k1) - y?(k1)。分母里的 λ 不光是防止 φ?0 時除零更重要的是調(diào)節(jié)學(xué)習(xí)增益φ? 大時分母近似 φ?2學(xué)習(xí)律趨于 1/φ?φ? 小時分母被 λ 主導(dǎo)學(xué)習(xí)增益被限制住避免參數(shù)估計(jì)不準(zhǔn)時把輸入軌跡改得亂七八糟。一段可運(yùn)行的循環(huán)結(jié)構(gòu)如下u_cur zeros(Nsim, 1); % 初始輸入軌跡也可以先跑一次得到基線 for j 1 : MaxIter % 使用當(dāng)前輸入軌跡運(yùn)行對象 y zeros(Nsim, 1); for k 1 : Nsim-1 y(k1) plant(y(k), y(k-1), u_cur(k), u_cur(k-1), noise_on); end % 計(jì)算跟蹤誤差 e ref(2:Nsim) - y(2:Nsim); % 按時間點(diǎn)更新輸入軌跡 u_next u_cur; for k 1 : Nsim-1 du u_cur(k) - u_cur(k-1); dy y(k1) - y(k); phihat(k) phihat_prev(k) eta * du / (mu du^2) * (dy - phihat_prev(k) * du); if abs(phihat(k)) eps_phi || abs(du) eps_du phihat(k) phihat_init(k); end u_next(k) u_cur(k) rho * phihat(k) / (lambda_ilc phihat(k)^2) * e(k); phihat_prev(k) phihat(k); end u_cur u_next; record_rmse(j) sqrt(mean(e.^2)); endMFAILC 的初始輸入軌跡非常影響收斂速度。如果初始輸入全為零第一次迭代誤差可能很大但一般也能收斂。比較聰明的做法是先跑一次普通 MFAC把得到的輸入軌跡作為初始 u_cur這樣迭代次數(shù)能省一半。3.4 參數(shù)整定經(jīng)驗(yàn)匯總兩個算法的參數(shù)含義不一樣但調(diào)參邏輯有相通之處。下表是我反復(fù)實(shí)驗(yàn)后的建議范圍參數(shù)所屬算法作用建議范圍調(diào)整方向η兩者共用PPD 估計(jì)步長0.1~1太大易發(fā)散太小收斂慢μ兩者共用防止分母為零0.0001~1越小估計(jì)越靈敏但抗噪差ρ兩者共用控制/學(xué)習(xí)步長0.4~1太大系統(tǒng)易振蕩λMFAPC控制能量懲罰0.001~1越大控制越保守、響應(yīng)越慢N_yMFAPC預(yù)測時域3~5越大滾動優(yōu)化效果越弱越慢N_uMFAPC控制時域1~2太大容易加劇抖動λ_ilcMFAILC學(xué)習(xí)律分母0.01~1越大學(xué)習(xí)增益越低MaxIterMFAILC迭代次數(shù)50~200依據(jù)收斂曲線判斷這些數(shù)字是經(jīng)驗(yàn)值不是定理。不同被控對象對參數(shù)敏感度差別很大調(diào)參時一次只動一個變量。我最常犯的錯誤就是兩個參數(shù)一起調(diào)出了問題根本不知道是誰引起的。4. 數(shù)值結(jié)果與性能對比分析4.1 三種場景下的仿真結(jié)果我用固定參考軌跡在三個對象上做了對比實(shí)驗(yàn)。線性定常系統(tǒng)上MFAPC 在 N_y4、N_u2、λ0.01、η0.6 的條件下RMSE 大約在 0.012 附近控制量平滑沒有明顯抖動。MFAILC 第一次迭代 RMSE 約 0.35到第 25 次迭代降到 0.005跟蹤精度略優(yōu)于 MFAPC畢竟它可以反復(fù)利用整條軌跡的誤差信息。但要注意MFAILC 的精度優(yōu)勢來自離線學(xué)習(xí)的“重復(fù)紅利”如果任務(wù)只跑一次它沒有任何優(yōu)勢。非線性時變對象上我把對象增益在中間時刻切換讓參數(shù)發(fā)生跳變。MFAPC 的 PPD 估計(jì)器能在大約 10 到 20 個采樣周期的在線調(diào)整后重新鎖定RMSE 會短暫惡化之后恢復(fù)。MFAILC 因?yàn)檎麄€輸入軌跡是在迭代軸上學(xué)習(xí)的如果參考軌跡和對象都變了前一迭代學(xué)到的輸入軌跡基本作廢得重新學(xué)習(xí)。這個對比很能說明問題MFAPC 適合變化的在線環(huán)境MFAILC 適合固定任務(wù)。帶噪聲和輸出干擾的情況下MFAPC 的控制量會出現(xiàn)明顯高頻分量。這是預(yù)期的因?yàn)?PPD 估計(jì)把噪聲當(dāng)成了真實(shí)輸出變化。解決辦法不是把 η 調(diào)小到學(xué)習(xí)能力變差而是對輸出做先濾波或者在 PPD 估計(jì)的差分項(xiàng)里加一個平滑。MFAILC 因?yàn)檎麄€軌跡是批量處理的噪聲在迭代平均中會被部分抵消所以它在強(qiáng)噪聲下的收斂趨勢反而比 MFAPC 穩(wěn)。4.2 結(jié)果背后反映的算法特性從結(jié)果可以提煉出幾條對實(shí)際選型有用的結(jié)論。MFAPC 本質(zhì)上是“在線辨識等效增益 滾動預(yù)測優(yōu)化”所以它對初始參數(shù)不敏感對時變對象有自適應(yīng)能力但性能上限受限于 PPD 估計(jì)精度。當(dāng)對象在相鄰采樣點(diǎn)之間的變化過于劇烈比如快速切換方向CFDL 近似會變差控制量容易沖過頭。MFAILC 本質(zhì)上是“批量修正輸入軌跡”它把整個時間的跟蹤誤差都利用上了所以穩(wěn)態(tài)精度可以非常高。但它有兩個先天弱點(diǎn)一是不能處理迭代之間的任務(wù)變化二是對初始狀態(tài)偏移敏感——如果每一輪的初始狀態(tài)不一樣學(xué)習(xí)到的輸入軌跡很難對新的一次任務(wù)有好的效果。仿真程序把兩種算法放在同一套代碼框架里最重要的意義就在這里不是告訴你哪個算法更好而是讓你直觀看到它們適用邊界在哪里。5. 常見問題與排查技巧5.1 PPD 估計(jì)發(fā)散這是仿真里出現(xiàn)頻率最高的問題。表現(xiàn)是 phihat 曲線突然沖到幾十上百控制量跟著劇烈波動系統(tǒng)很快跑飛。排查順序按概率排列先看 Δu 是否長時間保持為零。如果輸入長時間不變化PPD 估計(jì)的信息來源就斷了分母 μ Δu2 里只有 μ 撐著估計(jì)只會漂移。對策是給輸入疊加持續(xù)激勵信號或者在重置條件里增加對 Δu 的檢查。再看 μ 是否設(shè)得太小。μ 太小會讓估計(jì)對噪聲過于敏感尤其輸出帶高斯噪聲時差分 dy 的信噪比很差。最后看 ηη 最好從 0.3 起步先確認(rèn)不發(fā)散再加到 0.8。還要強(qiáng)調(diào)一點(diǎn)重置條件不是擺設(shè)。對象增益穿過零附近時φ? 會出現(xiàn)符號跳變?nèi)绻恢刂每刂屏糠柨赡芊戳讼到y(tǒng)直接發(fā)散。我的程序里重置閾值取 0.01 到 0.05同時判斷 |φ?(k)| 與 Δu 的邊界寧可多重置幾次也別讓它自由漂移。5.2 控制量高頻抖動MFAPC 控制量抖動的根因通常是預(yù)測模型把噪聲當(dāng)成了可以優(yōu)化掉的偏差。理想情況下PPD 估計(jì)器只建模輸入變化到輸出變化的因果關(guān)系但輸出噪聲會混入 dy污染 φ???刂屏恳欢断乱慌牡?dy 又受影響形成正反饋。我的處理習(xí)慣一是把 λ 從 0.001 調(diào)到 0.05 起用控制能量懲罰壓住抖動二是減小 ρ從 1 降到 0.6 左右三是在輸出端加一階慣性濾波比如 y_filtered α*y (1-α)*y_filteredα 取 0.7。濾波帶來的相位滯后在仿真里通??山邮艿茨愕尿?yàn)證目標(biāo)——如果驗(yàn)證重點(diǎn)是高頻跟蹤能力濾波會掩蓋問題這時候還是優(yōu)先調(diào) λ。5.3 MFAILC 收斂慢MFAILC 跑了很多次迭代誤差還在 0.1 以上基本是學(xué)習(xí)增益太小或初始軌跡太差。對應(yīng)措施把初始輸入軌跡改為零階保持的參考軌跡縮放值不要全零起步適當(dāng)加大 ρ但同時要小心第二次迭代輸入就可能振蕩把 λ_ilc 減小到 0.01 到 0.1增強(qiáng)學(xué)習(xí)強(qiáng)度。還有一個容易被忽略的因素參考軌跡在時間軸上提前一個采樣點(diǎn)。學(xué)習(xí)律用的是 e(k1)對應(yīng)的是 u(k) 到 y(k1) 的時序關(guān)系。如果代碼里不小心對錯了索引誤差和輸入之間隔了兩個周期學(xué)習(xí)律就會學(xué)混亂。我在調(diào)試時就踩過這個坑跟蹤誤差曲線在 100 次迭代里幾乎不動仔細(xì)查才發(fā)現(xiàn)是 e(k1) 寫成了 e(k)。5.4 快速排查速查表現(xiàn)象優(yōu)先排查參數(shù)處理建議phihat 發(fā)散Δu激勵不足、μ太小、η太大疊加激勵信號μ上調(diào)至0.1η降到0.3控制量抖動λ太小、ρ太大、噪聲混入λ調(diào)至0.05ρ降至0.6輸出濾波跟蹤穩(wěn)態(tài)誤差大PPD重置太頻繁、N_y太小放寬重置閾值N_y調(diào)至5MFAILC不收斂索引錯位、初始軌跡差、ρ太小嚴(yán)格校核時延初始軌跡設(shè)為參考值預(yù)測矩陣奇異N_y小于N_u保證N_y ≥ N_u因?yàn)槌绦蚴欠帜K的定位問題很快對象函數(shù)單獨(dú)跑一遍看輸出是否合理PPD 估計(jì)單獨(dú)畫出來看曲線是否平滑最后再疊加控制器閉環(huán)。逐層排除比直接在閉環(huán)里猜快得多。6. 把仿真程序用起來的一些體會6.1 從仿真到實(shí)驗(yàn)的過渡仿真驗(yàn)證只是第一步。我經(jīng)??吹接腥朔抡媲€調(diào)得很漂亮一到實(shí)物就翻車最典型的是把仿真里無限帶寬的控制量直接丟給執(zhí)行器。程序里最好一開始就加入控制輸入限幅和變化率限幅比如 u ∈ [-1, 1]、Δu 限幅在 0.05 以內(nèi)。這樣仿真結(jié)果更接近實(shí)物的真實(shí)邊界避免“仿真能用、實(shí)物超限”的尷尬。另一個仿真與實(shí)驗(yàn)差距的重要來源是對象時延。仿真對象常常忽略純時延但實(shí)際系統(tǒng)都有測量延遲建議在對象函數(shù)里加入一到兩個采樣周期的延遲環(huán)節(jié)提前考察算法在這種“相位損失”下的穩(wěn)定性。6.2 后續(xù)可以擴(kuò)展的方向這套程序可以繼續(xù)加裝幾塊內(nèi)容。一是把 PPD 估計(jì)器從緊格式換到全格式動態(tài)線性化加入更多歷史輸入輸出數(shù)據(jù)適應(yīng)更復(fù)雜的對象。二是給 MFAPC 增加輸入約束處理把二次規(guī)劃引入優(yōu)化步讓控制增量受限時仍有可行解。三是把 MFAILC 的固定學(xué)習(xí)增益改成自適應(yīng)遺忘因子迭代到后期自動放慢學(xué)習(xí)速度避免輸入軌跡在噪聲激勵下反復(fù)橫跳。我個人實(shí)際使用中的體會是MFAPC 的參數(shù)初值對快速調(diào)試非常重要第一次跑通時不追求最優(yōu)先用大 μ、小 η、中等 λ 讓系統(tǒng)穩(wěn)定再逐步收緊參數(shù)逼近精度極限。MFAILC 則建議每次修改對象模型后都清空上一輪的 φ? 和輸入軌跡歷史千萬不要在舊軌跡上硬疊新對象的學(xué)習(xí)結(jié)果。仿真驗(yàn)證的目的不是刷出“看起來很好”的曲線而是幫你理解算法在什么條件下會失靈后續(xù)到了實(shí)驗(yàn)平臺才不至于手足無措。