實(shí)戰(zhàn):建模、控制與優(yōu)化全鏈路工程指南)
人工智能與智能系統(tǒng)這幾年從論文里的熱詞變成了工程現(xiàn)場天天要面對的東西。我最早接觸這個方向是從數(shù)學(xué)建模比賽開始的當(dāng)時做的是一個多變量耦合系統(tǒng)的控制優(yōu)化題調(diào)參調(diào)到凌晨三點(diǎn)最后發(fā)現(xiàn)真正卡住我的不是算法本身而是對系統(tǒng)建模的理解不夠深。后來陸續(xù)做了幾個工業(yè)控制、數(shù)據(jù)驅(qū)動優(yōu)化相關(guān)的項(xiàng)目才慢慢摸清楚這條鏈路建模是地基控制是骨架優(yōu)化是讓整個系統(tǒng)跑得更省、更穩(wěn)、更準(zhǔn)的那層潤滑劑。這篇內(nèi)容圍繞人工智能與智能系統(tǒng)的建模、控制與優(yōu)化展開把我在實(shí)際項(xiàng)目里踩過的坑、用過的工具、驗(yàn)證過的思路整理出來適合正在做相關(guān)課題的研究生、剛?cè)胄械乃惴üこ處熞约跋霃膫鹘y(tǒng)控制轉(zhuǎn)向智能控制的從業(yè)者參考。不管你是用MATLAB做仿真還是用Python搭數(shù)據(jù)驅(qū)動模型或者是在嵌入式平臺上跑實(shí)時控制這里面的思路都能直接拿去用。1. 從物理模型到數(shù)據(jù)驅(qū)動建模路線怎么選1.1 建模的本質(zhì)是找輸入輸出之間的映射關(guān)系很多人一上來就問“用神經(jīng)網(wǎng)絡(luò)還是用機(jī)理模型”這個問題本身就問偏了。建模的核心任務(wù)是找到一個能準(zhǔn)確描述系統(tǒng)行為的映射關(guān)系至于用什么工具取決于你對這個系統(tǒng)的先驗(yàn)知識有多少、能拿到多少數(shù)據(jù)、以及最終要拿這個模型干什么。我習(xí)慣把建模分成三條路線來看白箱建模系統(tǒng)的物理規(guī)律清楚比如電機(jī)控制里的電壓方程、磁鏈方程你能直接寫出微分方程。這種模型可解釋性最強(qiáng)外推能力好但參數(shù)辨識往往很麻煩尤其是非線性項(xiàng)和耦合項(xiàng)。黑箱建模完全靠數(shù)據(jù)驅(qū)動神經(jīng)網(wǎng)絡(luò)、高斯過程、支持向量回歸都屬于這一類。優(yōu)點(diǎn)是省去了推導(dǎo)機(jī)理的功夫缺點(diǎn)是外推能力差數(shù)據(jù)沒覆蓋到的工況基本靠猜。灰箱建模把已知的物理結(jié)構(gòu)和數(shù)據(jù)驅(qū)動的參數(shù)估計(jì)結(jié)合起來。比如你知道系統(tǒng)是一階慣性加純延遲但時間常數(shù)和增益隨工況變化那就用數(shù)據(jù)去擬合這兩個參數(shù)。這是我在工業(yè)項(xiàng)目里用得最多的方式。選哪條路線我一般看三個指標(biāo)數(shù)據(jù)量、可解釋性要求、實(shí)時性約束。數(shù)據(jù)少、要求可解釋走白箱或灰箱數(shù)據(jù)多、精度優(yōu)先、能接受黑箱那就上神經(jīng)網(wǎng)絡(luò)。實(shí)時性要求高的場景模型復(fù)雜度必須壓下來這時候一個辨識良好的低階傳遞函數(shù)比一個五層LSTM管用得多。1.2 數(shù)據(jù)驅(qū)動建模中最容易被忽略的預(yù)處理環(huán)節(jié)我見過太多人直接把原始數(shù)據(jù)丟進(jìn)模型然后抱怨效果不好。數(shù)據(jù)驅(qū)動建模里預(yù)處理的工作量至少占整個流程的一半而且這一步做不好后面調(diào)參調(diào)到天荒地老也沒用。幾個關(guān)鍵動作異常值處理。工業(yè)現(xiàn)場的數(shù)據(jù)經(jīng)常有跳變點(diǎn)可能是傳感器故障也可能是通信丟包。我一般用滑動窗口中位數(shù)濾波先過一遍再用3σ原則標(biāo)記異常點(diǎn)。注意標(biāo)記出來的異常點(diǎn)不要直接刪先看看是不是真實(shí)工況變化誤刪了反而丟信息。歸一化方式的選擇。Min-Max歸一化適合數(shù)據(jù)分布比較均勻的場景Z-Score標(biāo)準(zhǔn)化適合有離群點(diǎn)的情況。但如果你用的是神經(jīng)網(wǎng)絡(luò)而且激活函數(shù)是ReLU我建議用Z-Score因?yàn)镽eLU在負(fù)半軸梯度為零Min-Max把數(shù)據(jù)壓到[0,1]之后負(fù)值信息就丟了。時序?qū)R。多傳感器系統(tǒng)里不同傳感器的采樣率和延遲不一樣。做建模之前必須把時間戳對齊否則你拿t時刻的輸入去預(yù)測t時刻的輸出實(shí)際上輸入可能來自t-2時刻。這個坑我在一個溫度控制項(xiàng)目里踩過模型離線精度很高上線之后完全不能用查了兩天才發(fā)現(xiàn)是時序錯位。訓(xùn)練集和測試集的劃分。時序數(shù)據(jù)不能隨機(jī)劃分必須按時間順序切。而且測試集要和訓(xùn)練集在工況分布上有區(qū)分度否則你測出來的精度是虛高的。我通常的做法是前70%做訓(xùn)練中間15%做驗(yàn)證最后15%做測試并且確保測試集覆蓋了至少一種訓(xùn)練集中沒出現(xiàn)過的工況。1.3 模型驗(yàn)證不只看精度指標(biāo)很多人模型訓(xùn)練完看MSE和R2達(dá)標(biāo)了就收工。但實(shí)際項(xiàng)目里精度只是及格線真正決定模型能不能用的是下面這幾項(xiàng)驗(yàn)證維度檢查內(nèi)容常見問題殘差分析殘差是否白噪聲、有無自相關(guān)殘差有趨勢說明模型欠擬合外推能力超出訓(xùn)練數(shù)據(jù)范圍的預(yù)測表現(xiàn)黑箱模型外推基本失效魯棒性輸入加小擾動后輸出變化幅度過擬合模型對噪聲極度敏感計(jì)算耗時單次推理時間是否滿足實(shí)時要求復(fù)雜模型在嵌入式端跑不動參數(shù)敏感性關(guān)鍵參數(shù)變化對輸出的影響辨識參數(shù)物理意義不合理我特別想強(qiáng)調(diào)殘差分析。如果殘差圖里能看到明顯的周期性或趨勢說明模型結(jié)構(gòu)有問題不是調(diào)參能解決的。這時候要么增加模型階次要么換建模路線。另外外推能力測試一定要做尤其是你要拿這個模型去做預(yù)測控制的場景模型必須在訓(xùn)練數(shù)據(jù)沒覆蓋的工況下也能給出合理輸出哪怕精度下降也不能發(fā)散。2. 控制策略的工程落地從PID到智能控制2.1 PID依然是基本盤但整定方法要升級不管智能控制多火工業(yè)現(xiàn)場80%以上的回路還是PID。這不是因?yàn)镻ID多先進(jìn)而是因?yàn)樗煽?、好維護(hù)、工程師都懂。但傳統(tǒng)PID的問題在于面對非線性、時變、大延遲系統(tǒng)固定參數(shù)很難在全工況下都表現(xiàn)良好。我在項(xiàng)目里常用的整定思路是分工況整定增益調(diào)度。具體做法先把系統(tǒng)的工作范圍劃分成若干工況區(qū)間比如低負(fù)載、中負(fù)載、高負(fù)載。在每個區(qū)間內(nèi)單獨(dú)做階躍響應(yīng)實(shí)驗(yàn)用繼電反饋法或者Cohen-Coon法整定一組PID參數(shù)。運(yùn)行時根據(jù)工況變量如負(fù)載率、流量在線切換參數(shù)組切換時做平滑過渡避免參數(shù)跳變引起振蕩。注意增益調(diào)度不是簡單的查表切換參數(shù)之間要做插值或者用模糊規(guī)則過渡否則在切換點(diǎn)附近容易出現(xiàn)極限環(huán)。對于大延遲系統(tǒng)普通PID怎么調(diào)都不理想這時候可以考慮Smith預(yù)估器或者內(nèi)??刂?。Smith預(yù)估器的原理是在控制器旁邊并聯(lián)一個系統(tǒng)模型把延遲環(huán)節(jié)“移出”閉環(huán)讓控制器面對的是一個無延遲的對象。但它的致命弱點(diǎn)是依賴模型精度模型不準(zhǔn)的時候效果可能比普通PID還差。所以用Smith預(yù)估器之前先把模型辨識做扎實(shí)。2.2 模型預(yù)測控制MPC的落地門檻在哪里MPC這幾年在過程控制里用得越來越多它的核心思想是在每個控制周期求解一個有限時域的優(yōu)化問題得到最優(yōu)控制序列只執(zhí)行第一個控制量下一個周期重新優(yōu)化。理論上很美但落地時有幾個硬門檻計(jì)算量。MPC每個周期都要解QP或者NLP問題對于快速系統(tǒng)比如電機(jī)控制控制周期幾十微秒普通求解器根本來不及。解決方案有兩種一是顯式MPC離線把優(yōu)化問題的解算成查表形式在線只做查表二是用快速求解器比如OSQP、qpOASES配合代碼生成工具如ACADO、CasADi把求解時間壓到微秒級。模型精度。MPC對模型誤差的容忍度比PID低因?yàn)樗腔谀P妥鲱A(yù)測的。模型不準(zhǔn)預(yù)測就偏優(yōu)化出來的控制量可能反而讓系統(tǒng)發(fā)散。我的經(jīng)驗(yàn)是MPC的模型驗(yàn)證要比PID嚴(yán)格一個檔次殘差分析、外推測試一個都不能少。約束處理。MPC的一大優(yōu)勢是能顯式處理約束比如執(zhí)行器飽和、狀態(tài)安全邊界。但約束加多了會導(dǎo)致優(yōu)化問題不可行。處理不可行的方法有軟約束、約束松弛、優(yōu)先級分層等。我一般把安全相關(guān)的約束設(shè)為硬約束性能相關(guān)的設(shè)為軟約束并給軟約束加懲罰項(xiàng)。2.3 智能控制的真實(shí)定位補(bǔ)償而非替代現(xiàn)在很多論文把神經(jīng)網(wǎng)絡(luò)控制、模糊控制、強(qiáng)化學(xué)習(xí)控制說成是PID的替代品但我在實(shí)際項(xiàng)目里的體會是智能控制更適合做補(bǔ)償和優(yōu)化而不是完全替代傳統(tǒng)控制器。一個典型的架構(gòu)是底層用PID或者M(jìn)PC保證基本穩(wěn)定性和動態(tài)性能上層用神經(jīng)網(wǎng)絡(luò)或者模糊系統(tǒng)做前饋補(bǔ)償、參數(shù)自適應(yīng)或者工況識別。比如在一個溫度控制項(xiàng)目里我用PID做反饋控制用一個小型神經(jīng)網(wǎng)絡(luò)根據(jù)歷史數(shù)據(jù)預(yù)測環(huán)境熱擾動把預(yù)測值作為前饋量加到控制輸出上溫度波動從±2℃降到了±0.5℃。強(qiáng)化學(xué)習(xí)控制在工業(yè)里落地更難主要問題是訓(xùn)練需要大量交互數(shù)據(jù)而工業(yè)系統(tǒng)不允許你隨便探索。比較可行的路線是先在仿真環(huán)境里訓(xùn)練策略再用遷移學(xué)習(xí)或者在線微調(diào)適配真實(shí)系統(tǒng)同時保留一個傳統(tǒng)控制器作為安全兜底當(dāng)強(qiáng)化學(xué)習(xí)策略的輸出超出安全范圍時自動切換。3. 優(yōu)化問題的求解從凸優(yōu)化到啟發(fā)式算法3.1 凸優(yōu)化是首選但別硬套優(yōu)化問題分兩大類凸優(yōu)化和非凸優(yōu)化。凸優(yōu)化的好處是局部最優(yōu)就是全局最優(yōu)求解器成熟如CVXPY、Mosek、Gurobi求解速度快且穩(wěn)定。所以拿到一個優(yōu)化問題第一反應(yīng)應(yīng)該是能不能轉(zhuǎn)化成凸問題常見的凸化手段變量替換比如把非線性的乘積項(xiàng)通過變量替換變成線性約束。松弛把整數(shù)約束松弛成連續(xù)約束先求一個下界再用分支定界逼近。近似把非凸項(xiàng)用凸函數(shù)近似比如用二次函數(shù)近似高階項(xiàng)。但有些問題本質(zhì)上就是非凸的比如含整數(shù)變量的調(diào)度問題、多峰的目標(biāo)函數(shù)、非凸約束的軌跡優(yōu)化。這時候硬套凸優(yōu)化只會得到一個不可行的解或者嚴(yán)重偏離最優(yōu)的解。該用非凸方法就用非凸方法別為了追求理論上的優(yōu)雅而犧牲實(shí)際效果。3.2 啟發(fā)式算法的適用邊界遺傳算法、粒子群、模擬退火這些啟發(fā)式算法在論文里出現(xiàn)頻率極高但在工程里我用得比較謹(jǐn)慎。原因很簡單它們沒有收斂性保證每次跑出來的結(jié)果可能不一樣而且計(jì)算量大。啟發(fā)式算法適合的場景目標(biāo)函數(shù)不可導(dǎo)、不連續(xù)梯度類方法用不了。問題規(guī)模不大對求解時間不敏感比如離線參數(shù)優(yōu)化。作為其他算法的初始化手段先用啟發(fā)式算法找到一個不錯的起點(diǎn)再用梯度類方法精細(xì)搜索。不適合的場景實(shí)時控制計(jì)算時間不可控。高維優(yōu)化維度災(zāi)難種群規(guī)模指數(shù)增長。需要嚴(yán)格保證最優(yōu)性的場合。我在做參數(shù)辨識的時候經(jīng)常用粒子群先粗搜一遍把結(jié)果作為最小二乘的初值這樣既避免了陷入局部最優(yōu)又保證了最終的收斂精度。3.3 多目標(biāo)優(yōu)化的權(quán)衡策略實(shí)際工程問題幾乎都是多目標(biāo)的既要控制精度高又要能耗低還要執(zhí)行器動作平滑。這些目標(biāo)之間往往互相沖突不存在一個讓所有目標(biāo)同時最優(yōu)的解只能找Pareto最優(yōu)解集。處理多目標(biāo)優(yōu)化我常用的兩種方法加權(quán)求和法。給每個目標(biāo)分配權(quán)重合成一個標(biāo)量目標(biāo)。優(yōu)點(diǎn)是簡單缺點(diǎn)是權(quán)重不好定而且只能找到Pareto前沿上的凸部分。權(quán)重的確定我一般用層次分析法或者熵權(quán)法減少主觀性。NSGA-II等Pareto方法。直接求Pareto前沿然后根據(jù)實(shí)際需求從前沿上選一個解。優(yōu)點(diǎn)是能拿到完整的權(quán)衡信息缺點(diǎn)是計(jì)算量大。我通常用它做離線分析看看各個目標(biāo)之間的trade-off關(guān)系然后再決定用加權(quán)法在線運(yùn)行。方法優(yōu)點(diǎn)缺點(diǎn)適用場景加權(quán)求和簡單、快速權(quán)重主觀、只能找凸Pareto前沿在線優(yōu)化、目標(biāo)少ε-約束能找非凸前沿需要設(shè)定約束值離線分析NSGA-II前沿分布均勻計(jì)算量大離線多目標(biāo)分析MOEA/D分解思想、收斂快權(quán)重向量選擇敏感高維多目標(biāo)4. 工具鏈與實(shí)操環(huán)境搭建4.1 仿真環(huán)境MATLAB還是Python這個問題沒有標(biāo)準(zhǔn)答案取決于你的項(xiàng)目階段和團(tuán)隊(duì)習(xí)慣。MATLAB/Simulink的優(yōu)勢在于控制系統(tǒng)設(shè)計(jì)工具鏈完整PID Tuner、MPC Toolbox、System Identification Toolbox都是開箱即用Simulink的圖形化建模對復(fù)雜系統(tǒng)特別友好。缺點(diǎn)是部署到嵌入式平臺需要額外步驟而且license費(fèi)用不低。Python的優(yōu)勢在于生態(tài)開放scikit-learn、PyTorch、CasADi、CVXPY覆蓋了從建模到優(yōu)化的全鏈路部署也方便。缺點(diǎn)是控制系統(tǒng)設(shè)計(jì)的工具鏈不如MATLAB成熟很多功能需要自己搭。我的實(shí)際做法是前期用MATLAB做快速驗(yàn)證和系統(tǒng)辨識后期用Python做數(shù)據(jù)驅(qū)動建模和優(yōu)化求解最終部署用C/C。中間的數(shù)據(jù)交換通過.mat文件或者CSV雖然麻煩一點(diǎn)但各取所長。4.2 實(shí)時控制平臺的選型考量如果你要做硬件在環(huán)或者實(shí)際部署平臺選型要考慮這幾個因素計(jì)算能力MPC和神經(jīng)網(wǎng)絡(luò)推理需要一定的算力單片機(jī)跑不動就得上DSP或者FPGA。接口豐富度ADC、DAC、PWM、CAN、以太網(wǎng)根據(jù)你的傳感器和執(zhí)行器來定。開發(fā)工具鏈有沒有自動代碼生成有沒有實(shí)時調(diào)試接口。成本實(shí)驗(yàn)室階段可以用開發(fā)板量產(chǎn)要考慮BOM成本。我做過的一個電機(jī)控制項(xiàng)目最開始用STM32F4跑PID后來要加神經(jīng)網(wǎng)絡(luò)補(bǔ)償算力不夠換成了TI的C2000系列DSP配合Simulink的自動代碼生成開發(fā)效率高了不少。FPGA適合做超低延遲的并行計(jì)算比如相控陣的相位控制但開發(fā)門檻高算法驗(yàn)證周期長。4.3 版本管理與實(shí)驗(yàn)記錄這一點(diǎn)經(jīng)常被忽略但我覺得特別重要。做建模和控制優(yōu)化你會跑大量的實(shí)驗(yàn)參數(shù)組合、數(shù)據(jù)集版本、模型權(quán)重、實(shí)驗(yàn)結(jié)果如果沒有好的管理過兩周你自己都記不清哪個結(jié)果對應(yīng)哪組參數(shù)。我的做法代碼用Git管理每個實(shí)驗(yàn)開一個分支實(shí)驗(yàn)完成后合并到主分支并打tag。實(shí)驗(yàn)記錄用表格維護(hù)字段包括實(shí)驗(yàn)編號、日期、數(shù)據(jù)集版本、模型結(jié)構(gòu)、超參數(shù)、評價指標(biāo)、備注。模型權(quán)重和數(shù)據(jù)集用DVC或者簡單的文件命名規(guī)范管理避免版本混亂。提示實(shí)驗(yàn)記錄表不要只記成功的結(jié)果失敗的實(shí)驗(yàn)同樣有價值尤其是那些“看起來應(yīng)該work但實(shí)際不work”的案例往往能幫你排除錯誤方向。5. 典型場景拆解從需求到落地5.1 場景一工業(yè)過程的多變量控制某化工過程有四個被控變量溫度、壓力、流量、液位和三個操縱變量變量之間存在強(qiáng)耦合。傳統(tǒng)做法是每個回路單獨(dú)PID但耦合導(dǎo)致互相干擾一個回路調(diào)好了另一個又亂了。我的處理步驟相對增益陣列RGA分析確定變量配對把耦合最強(qiáng)的回路分開。解耦設(shè)計(jì)如果RGA顯示耦合嚴(yán)重設(shè)計(jì)前饋解耦器或者直接用多變量MPC。模型辨識對每個通道做階躍響應(yīng)辨識傳遞函數(shù)矩陣。MPC設(shè)計(jì)設(shè)定預(yù)測時域、控制時域、權(quán)重矩陣處理輸入輸出約束。在線調(diào)試先手動模式跑一段時間收集數(shù)據(jù)驗(yàn)證模型再切自動模式。這個項(xiàng)目最后用的是MPC控制周期1秒預(yù)測時域20步控制時域5步。投運(yùn)后溫度波動從±3℃降到±0.8℃能耗降低約7%。5.2 場景二嵌入式平臺的實(shí)時控制一個運(yùn)動控制項(xiàng)目要求控制周期100微秒被控對象是一個非線性伺服系統(tǒng)。PID在低速段表現(xiàn)可以高速段因?yàn)槟Σ练蔷€性導(dǎo)致跟蹤誤差大。解決方案是PID神經(jīng)網(wǎng)絡(luò)前饋底層PID保證穩(wěn)定性參數(shù)用繼電反饋法整定。神經(jīng)網(wǎng)絡(luò)用歷史數(shù)據(jù)離線訓(xùn)練輸入是位置、速度、加速度輸出是摩擦補(bǔ)償力矩。在線運(yùn)行時神經(jīng)網(wǎng)絡(luò)推理用定點(diǎn)化加速單次推理控制在20微秒以內(nèi)。安全兜底神經(jīng)網(wǎng)絡(luò)輸出限幅超出范圍時自動退化為純PID。實(shí)測跟蹤誤差從±0.05mm降到±0.015mm而且神經(jīng)網(wǎng)絡(luò)的計(jì)算開銷在DSP上完全可以接受。5.3 場景三數(shù)據(jù)驅(qū)動的參數(shù)優(yōu)化一個批次過程每批次有20個可調(diào)參數(shù)目標(biāo)是最大化產(chǎn)率同時保證質(zhì)量指標(biāo)在范圍內(nèi)。參數(shù)與產(chǎn)率之間的關(guān)系沒有明確的機(jī)理模型只能靠數(shù)據(jù)。我用的是高斯過程回歸貝葉斯優(yōu)化先做實(shí)驗(yàn)設(shè)計(jì)DOE用拉丁超立方采樣生成30組初始參數(shù)跑實(shí)驗(yàn)收集數(shù)據(jù)。用高斯過程回歸擬合參數(shù)到產(chǎn)率的映射同時給出預(yù)測不確定性。用貝葉斯優(yōu)化EI采集函數(shù)推薦下一組實(shí)驗(yàn)參數(shù)平衡探索和利用。迭代10輪后產(chǎn)率提升了12%而且找到了之前沒考慮過的參數(shù)組合。這個方法的優(yōu)勢是樣本效率高適合實(shí)驗(yàn)成本高的場景。缺點(diǎn)是不能處理高維參數(shù)超過50維效果下降明顯而且需要一定的先驗(yàn)知識來設(shè)定核函數(shù)。6. 踩坑記錄與排查思路6.1 模型離線精度高但上線效果差這是最經(jīng)典的坑。原因通常有三個數(shù)據(jù)泄漏。訓(xùn)練時用了未來信息比如歸一化的時候用了全量數(shù)據(jù)的均值和方差而不是只用訓(xùn)練集的。上線后新數(shù)據(jù)進(jìn)來歸一化參數(shù)不匹配模型輸出就偏了。解決辦法是歸一化參數(shù)只用訓(xùn)練集計(jì)算然后保存下來推理時直接調(diào)用。工況分布不一致。訓(xùn)練數(shù)據(jù)來自A工況上線后系統(tǒng)跑在B工況。模型在B工況下外推精度自然差。解決辦法是訓(xùn)練集要覆蓋盡可能多的工況或者加在線自適應(yīng)機(jī)制。時序錯位。前面提過輸入和輸出在時間上沒有對齊。排查方法是畫輸入輸出互相關(guān)圖看峰值在哪個延遲點(diǎn)。6.2 控制器振蕩的排查鏈路控制器振蕩是現(xiàn)場最常見的故障排查要按順序來先看執(zhí)行器閥門有沒有卡澀電機(jī)有沒有丟步PWM輸出是否正常。執(zhí)行器問題占振蕩原因的30%以上。再看傳感器信號有沒有噪聲采樣是否穩(wěn)定有沒有接地環(huán)路。傳感器噪聲會引起高頻振蕩。然后看控制器參數(shù)比例增益是不是太大積分時間是不是太短。用階躍響應(yīng)實(shí)驗(yàn)重新整定。最后看系統(tǒng)本身有沒有非線性如死區(qū)、飽和有沒有外部擾動源。我遇到過一個案例溫度控制振蕩查了半天控制器參數(shù)都沒問題最后發(fā)現(xiàn)是加熱器的固態(tài)繼電器在低頻開關(guān)時產(chǎn)生了周期性擾動。換了一個過零觸發(fā)的繼電器就好了。6.3 優(yōu)化算法不收斂的常見原因目標(biāo)函數(shù)尺度差異大一個目標(biāo)在10^6量級另一個在10^-2量級梯度下降會被大量級目標(biāo)主導(dǎo)。解決辦法是先歸一化。約束沖突多個約束互相矛盾可行域?yàn)榭?。檢查約束的物理意義看看是不是設(shè)錯了。初值太差非凸問題對初值敏感多試幾組初值或者先用啟發(fā)式算法粗搜。學(xué)習(xí)率不當(dāng)太大震蕩太小收斂慢。用自適應(yīng)學(xué)習(xí)率或者線搜索。7. 一些實(shí)用的經(jīng)驗(yàn)參數(shù)與配置7.1 神經(jīng)網(wǎng)絡(luò)建模的推薦配置對于工業(yè)過程建模我一般用這樣的配置起步網(wǎng)絡(luò)結(jié)構(gòu)3層MLP隱藏層神經(jīng)元數(shù)量取輸入維度的2-3倍。激活函數(shù)隱藏層用ReLU或Tanh輸出層用線性。優(yōu)化器Adam學(xué)習(xí)率1e-3配合余弦退火。正則化Dropout 0.1-0.2或者L2正則化系數(shù)1e-4。訓(xùn)練輪數(shù)早停法驗(yàn)證集損失連續(xù)10輪不下降就停。數(shù)據(jù)量至少是參數(shù)數(shù)量的10倍否則容易過擬合。如果數(shù)據(jù)量少優(yōu)先考慮高斯過程回歸或者支持向量回歸別硬上深度學(xué)習(xí)。7.2 MPC參數(shù)整定的經(jīng)驗(yàn)值參數(shù)推薦范圍說明預(yù)測時域20-50步覆蓋系統(tǒng)主要動態(tài)響應(yīng)時間控制時域5-10步太短控制保守太長計(jì)算量大輸出權(quán)重1-100根據(jù)各輸出重要性調(diào)整輸入權(quán)重0.01-1抑制控制量波動控制量變化率權(quán)重0.1-10讓控制動作平滑整定時先調(diào)輸出權(quán)重讓跟蹤性能達(dá)標(biāo)再調(diào)輸入權(quán)重和控制量變化率權(quán)重讓控制動作平滑。約束先不加跑通了再加。7.3 數(shù)據(jù)采集的注意事項(xiàng)采樣率至少是系統(tǒng)帶寬的10倍否則會丟失動態(tài)信息。采集時間要覆蓋完整的工況變化周期不能只采穩(wěn)態(tài)數(shù)據(jù)。加激勵信號時幅值要在安全范圍內(nèi)同時保證信噪比足夠。記錄時間戳和工況標(biāo)簽方便后續(xù)分析。8. 從項(xiàng)目到論文如何把工程經(jīng)驗(yàn)轉(zhuǎn)化為學(xué)術(shù)成果8.1 工程問題的學(xué)術(shù)化表達(dá)很多工程師手里有很好的項(xiàng)目數(shù)據(jù)但不知道怎么寫成論文。核心問題是工程問題關(guān)注“怎么解決”學(xué)術(shù)論文關(guān)注“為什么這樣解決”和“相比現(xiàn)有方法好在哪里”。轉(zhuǎn)化方法把工程需求抽象成數(shù)學(xué)問題明確目標(biāo)函數(shù)和約束。把解決方案和現(xiàn)有方法做對比突出創(chuàng)新點(diǎn)。補(bǔ)充理論分析比如收斂性證明、復(fù)雜度分析。用消融實(shí)驗(yàn)說明每個模塊的貢獻(xiàn)。8.2 實(shí)驗(yàn)設(shè)計(jì)要經(jīng)得起推敲審稿人最常質(zhì)疑的點(diǎn)對比方法是不是調(diào)到了最優(yōu)測試集是不是和訓(xùn)練集有重疊評價指標(biāo)是不是只選了對自己有利的統(tǒng)計(jì)顯著性有沒有驗(yàn)證我的建議是對比方法用官方代碼或者公認(rèn)的調(diào)參方法測試集嚴(yán)格劃分評價指標(biāo)多選幾個實(shí)驗(yàn)結(jié)果做多次重復(fù)取均值和標(biāo)準(zhǔn)差。8.3 數(shù)學(xué)建模競賽的經(jīng)驗(yàn)遷移華為杯數(shù)學(xué)建模大賽和研究生數(shù)學(xué)建模競賽的題目很多都涉及優(yōu)化和控制。我在帶學(xué)生參賽時發(fā)現(xiàn)獲獎?wù)撐牡墓餐攸c(diǎn)是問題拆解清晰、模型假設(shè)合理、求解方法匹配、結(jié)果驗(yàn)證充分。具體來說第一問通常是建立模型這時候不要追求復(fù)雜選一個能解釋清楚、能求解的模型最重要。第二問往往是求解和優(yōu)化注意算法的收斂性和計(jì)算效率。第三問通常是靈敏度分析或者推廣這時候要展示你對模型邊界的理解。比賽時間緊不要花太多時間在模型調(diào)參上把時間留給論文寫作和結(jié)果可視化。評委看的是你的思路和表達(dá)不是你的模型有多復(fù)雜。9. 跨學(xué)科建模的幾點(diǎn)體會9.1 生物群體行為的建模啟示鳥群、魚群這類群體行為用三條簡單規(guī)則就能模擬出壯觀的同步運(yùn)動分離、對齊、聚合。這個思路在工程上很有借鑒意義——復(fù)雜系統(tǒng)不一定需要復(fù)雜的控制規(guī)則局部簡單規(guī)則的交互可能涌現(xiàn)出全局有序行為。我在做多智能體協(xié)同控制的時候就借鑒了這類思路每個智能體只需要知道鄰居的狀態(tài)不需要全局信息通過局部規(guī)則就能實(shí)現(xiàn)編隊(duì)和避障。這種分布式控制架構(gòu)的魯棒性比集中式好單個智能體失效不會導(dǎo)致整個系統(tǒng)崩潰。9.2 跨領(lǐng)域方法的遷移邊界跨學(xué)科建模聽起來很美但遷移的時候要注意邊界條件。比如把生物群體的規(guī)則搬到無人機(jī)編隊(duì)要考慮無人機(jī)的動力學(xué)約束、通信延遲、避障安全距離不能直接照搬。我的經(jīng)驗(yàn)是先抽象出方法論層面的共性再結(jié)合具體領(lǐng)域的約束做適配。不要指望一個模型打天下每個領(lǐng)域都有自己的特殊性。10. 寫在最后的一些個人體會做建模、控制、優(yōu)化這條線這么多年最大的體會是工具和算法只是手段對系統(tǒng)的理解才是核心。你可以不會推導(dǎo)復(fù)雜的公式但你必須知道你的系統(tǒng)在什么工況下會出問題、哪些變量之間有強(qiáng)耦合、執(zhí)行器和傳感器的物理限制在哪里。另一個體會是不要追求一步到位。先跑通一個簡單方案哪怕性能一般然后在實(shí)際運(yùn)行中發(fā)現(xiàn)問題、迭代改進(jìn)。我見過太多項(xiàng)目卡在“追求完美方案”的階段最后連一個能用的版本都沒交付。還有一點(diǎn)記錄和復(fù)盤比埋頭干活更重要。每次實(shí)驗(yàn)的參數(shù)、結(jié)果、異常現(xiàn)象都記下來過一段時間回頭看你會發(fā)現(xiàn)很多當(dāng)時沒注意到的規(guī)律。這些積累才是你真正的競爭力。如果你正在做相關(guān)項(xiàng)目遇到模型不收斂、控制器振蕩、優(yōu)化效果不達(dá)預(yù)期的問題歡迎交流。很多坑我都踩過也許能幫你省點(diǎn)時間。