網(wǎng)絡(luò)自適應(yīng)控制Matlab代碼實(shí)現(xiàn)與非線性逼近仿真)
最近在折騰RBF神經(jīng)網(wǎng)絡(luò)自適應(yīng)控制順手把兩個能直接跑的Matlab文件整理了出來。一個主程序一個控制器函數(shù)加起來不到一百行卻能解決一個很實(shí)際的問題被控對象里那個說不清道不明的非線性項f(x)到底怎么在線逼近它。網(wǎng)上聊RBF神經(jīng)網(wǎng)絡(luò)的資料不少但真正能直接落地、跑出仿真曲線的例子并不多。這篇不整虛的代碼貼出來、參數(shù)寫明白、仿真效果擺出來從控制律到權(quán)值更新一條線講透。如果你正在搞自適應(yīng)控制、滑??刂啤⒎床椒ɑ蛘呦氚焉窠?jīng)網(wǎng)絡(luò)控制加進(jìn)現(xiàn)有的Simulink流程這套小框架可以當(dāng)你的起點(diǎn)腳手架。1. RBF神經(jīng)網(wǎng)絡(luò)自適應(yīng)控制為什么值得花一下午去搭這兩段代碼1.1 自適應(yīng)控制最常見的痛點(diǎn)模型和實(shí)際對不上做控制的人基本上都經(jīng)歷過這個循環(huán)先根據(jù)機(jī)理建模簡化然后設(shè)計控制器仿真很好一上實(shí)物就拉胯。原因不是控制器設(shè)計得不行而是模型里一大堆非線性項——摩擦、死區(qū)、溫度漂移、負(fù)載耦合——根本寫不出精確表達(dá)式。經(jīng)典自適應(yīng)控制要求模型結(jié)構(gòu)已知、只有參數(shù)未知這在很多工程場景下是奢侈品。負(fù)載變化、機(jī)構(gòu)磨損、環(huán)境溫度改變都會讓模型參數(shù)偏離設(shè)計值甚至改變模型結(jié)構(gòu)。我舉一個例子給電機(jī)加負(fù)載摩擦從庫侖摩擦變到Stribeck效應(yīng)不同轉(zhuǎn)速下摩擦變化率完全不同。此時就算把PID參數(shù)調(diào)得再好換一個工況可能就失效。RBF神經(jīng)網(wǎng)絡(luò)在這里的價值是不用事先知道非線性項長什么樣只要有合適的輸入就可以在線逼近它。模型里的未知部分交給網(wǎng)絡(luò)去“頂著”控制器只需要管好誤差收斂這就是“自適應(yīng)”三個字的真正含義。1.2 RBF網(wǎng)絡(luò)在控制回路里扮演的角色RBF徑向基函數(shù)神經(jīng)網(wǎng)絡(luò)屬于典型的局部逼近網(wǎng)絡(luò)和高斯核函數(shù)思路類似每個神經(jīng)元只對輸入空間的一個小區(qū)域有響應(yīng)。這個性質(zhì)特別好輸入落在哪個區(qū)域哪個區(qū)域的神經(jīng)元就被激活權(quán)值更新只動和當(dāng)前輸入相關(guān)的分量其他神經(jīng)元不受影響收斂速度明顯快于BP這種全局調(diào)整的網(wǎng)絡(luò)??刂苹芈防锿ǔ0阉?dāng)函數(shù)估計器用輸入是系統(tǒng)狀態(tài)比如x1和x2輸出是對未知項f(x)的估計值權(quán)值不在離線階段訓(xùn)練而是在整個控制過程中在線更新。更新方向由李雅普諾夫函數(shù)來約束這也是自適應(yīng)控制最講究的地方——不是簡單把誤差丟給網(wǎng)絡(luò)學(xué)而是要用穩(wěn)定性理論保證“學(xué)習(xí)過程不會破壞系統(tǒng)穩(wěn)定性”。RBF的局部逼近特性讓這個在線學(xué)習(xí)過程非常穩(wěn)因為每個時刻只有少量權(quán)值被修改系統(tǒng)動態(tài)不容易被學(xué)習(xí)過程帶偏。1.3 這套代碼能干什么、適合誰兩個文件實(shí)現(xiàn)的是一個典型的二階非線性系統(tǒng)跟蹤控制。被控對象里含有一個控制器完全不知道的非線性函數(shù)f(x)RBF網(wǎng)絡(luò)在線估計它滑模面把位置誤差和速度誤差收斂到零附近最終讓輸出x1跟上參考軌跡xd 0.5*sin(2t)。被控對象、參考軌跡、網(wǎng)絡(luò)參數(shù)都可以隨意換框架本身是通用