最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【花師小哲】遺傳算法PID自整定(2)-遺傳算法介紹與自整定思路

2021-01-26 01:18 作者:花師小哲-中二  | 我要投稿

ok,正片開始。這一部分也會在RM論壇進行更新(哎,老版主昨天久違的登了一下論壇,感覺現(xiàn)在的論壇好冷清?。瑑蛇呏饕膬?nèi)容是相同的,只是在bilibili我可能會塞一點私貨。

其實要用遺傳算法做PID參數(shù)的自整定只需要搞懂兩個問題:什么是遺傳算法以及怎么樣將遺傳算法用過來。

以防萬一,還是稍微說一下自整定的意思。所謂自整定即是說我們可以用程序的方式調(diào)整參數(shù),使得我們的控制器可以自適應(yīng)不同的系統(tǒng),而不需要我們?nèi)斯とヒ粋€參數(shù)一個參數(shù)地試。上一篇已經(jīng)說過,調(diào)PID參數(shù)是一個非常辛苦和困難的工作,于是一個改進方法就是找個東西幫我們來調(diào)參數(shù)。

?

先談第一個問題,什么是遺傳算法。遺傳算法其實還算是一種比較常見的算法了,可以認為遺傳算法是進化算法的一種,當然,這里就不談進化算法了。

遺傳算法的算法流程如下:

?


遺傳算法是一種模擬生物在自然環(huán)境中的遺傳、變異與進化而形成的一種自適應(yīng)概率優(yōu)化算法,它會根據(jù)一些啟發(fā)規(guī)則逐步尋求一個最優(yōu)或者近似最優(yōu)的解。在達爾文的進化論中,物種進化的基本單位是種群(雖然目前很多研究進化論的學者是認為進化的基本單位其實是個體),種群可以通過繁殖的方式將自己的部分基因傳給下一代,種群中也會存在一定的變異,這就是遺傳算法的思想源頭。首先,我們可以生成一些初始值(這些值一般被稱為個體的染色體),組成一個種群,然后我們可以讓其中的一些個體進行一定的變異(染色體的值發(fā)生突變,變異也是防止種群收斂到局部最優(yōu)解的一個保護措施),也可以讓其中的幾個個體進行“交配”(自然狀態(tài)下一般是兩個個體,這里其實也沒那么大關(guān)系),即交換自己的部分信息。再之后,我們就可以從中選擇一些“更加適應(yīng)環(huán)境”的個體組成下一代的種群,這樣不斷迭代就可以得到一個較好的新的種群。

染色體這個詞還是很形象的,因為經(jīng)典的種群編碼方式就是二進制編碼,每個個體的值都是一串二進制,和DNA單鏈很像,交叉和變異也是在每個二進制位上操作的。當然,遺傳算法發(fā)展到現(xiàn)代,其他編碼方式,例如實數(shù)編碼等也很常見了。

要實現(xiàn)遺傳算法,很重要的函數(shù)就是適應(yīng)度函數(shù),這是我們進行下一代種群選擇的依據(jù),是判斷一個解是否優(yōu)秀的標準。

?

接下來就是把遺傳算法應(yīng)用到PID參數(shù)自整定上來了,幾個點我們一一來說(以下的一些函數(shù)僅供參考,最終還是要根據(jù)實際被控對象來進行設(shè)計):

(1)怎么編碼。因為我們最終的結(jié)果是三個浮點數(shù),用二進制編碼的話比較麻煩,所以個人建議用實數(shù)編碼,需要注意的是,PID有三個參數(shù),這三個參數(shù)是作為一組存在的,即每條染色體其實都是一個三元組。

(2)怎么進行交叉。需要注意的是,我們不一定要讓所有個體都參與到交叉中,變異的個體就更少了。交叉的策略比較多,交叉的意義主要是交換信息,例如我們選擇一種隨機交換算法(p是隨機值):

?


(3)怎么進行變異。實數(shù)編碼下最簡單的方式就是下圖了(需要注意的是,PID的三個參數(shù)一般都是非負數(shù),注意限定邊界):

?


4怎么進行選擇。選擇也是具有隨機性的,并不是說適應(yīng)度高的個體就一定會留存到下一代,只是留存的概率高而已。這個還是稍微有點復(fù)雜的,例如輪盤賭算法等,這里不展開了。

(5)適應(yīng)度函數(shù)如何選擇。這是真正的最重要的問題,即我們要如何判斷一個解是否優(yōu)秀?;氐絇ID控制本身,我們的目的是使得被控對象能夠在盡量短的時間內(nèi)達到我們預(yù)期的狀態(tài)并且使得總體的誤差(誤差的絕對值的和)盡量小,更進階的一些目標包括盡量減少超調(diào)等,這里先不考慮。

當然,一般的適應(yīng)度函數(shù)都是值越大表示解更優(yōu),這也沒關(guān)系,把我們之前得到的函數(shù)取個倒數(shù)就可以了,適應(yīng)度函數(shù)的樣子大概如下:

?

關(guān)于這些東西的選擇知網(wǎng)能找到一大推論文的,倒不用太擔心寫不出好的算法。

這樣其實就可以構(gòu)建一個完整的系統(tǒng)了,當然,即使是用了遺傳算法,它給出的解也只是一個近似解,最終可能還需要微調(diào)。

?

就是上一篇的那張圖


當然前面這些算是理論分析,雖然可以寫出代碼來證明其有效性,但是實際系統(tǒng)中還會碰到各種各樣的問題。在實際控制中,被控對象往往是未知的,而計算適應(yīng)度函數(shù)的過程需要每個個體都實際地控制被控對象,這會導(dǎo)致被控對象的狀態(tài)發(fā)生改變,甚至一些很差的參數(shù)會對被控對象造成損傷。實際工程中解決這種情況的一種方法是通過定義一個初始狀態(tài),并且在每次計算適應(yīng)度函數(shù)值后都盡量回到這個初始狀態(tài),并且,這樣的方法還適合于遺傳算法在PID控制過程中動態(tài)地調(diào)整PID參數(shù)。

?

其實做這個項目的時候,我也得到了一個已經(jīng)退隊的學弟的幫助,遺傳算法做PID自整定是可以在實際系統(tǒng)中進行使用的。

【花師小哲】遺傳算法PID自整定(2)-遺傳算法介紹與自整定思路的評論 (共 條)

分享到微博請遵守國家法律
永安市| 新巴尔虎右旗| 肃宁县| 静宁县| 竹溪县| 阿鲁科尔沁旗| 塘沽区| 武宁县| 鄂尔多斯市| 仁怀市| 广元市| 天水市| 文成县| 琼结县| 称多县| 深泽县| 务川| 东乌珠穆沁旗| 金湖县| 郴州市| 渭源县| 鹤庆县| 吉木萨尔县| 铁岭县| 昌都县| 永德县| 临朐县| 福安市| 霍邱县| 馆陶县| 洪洞县| 临清市| 白银市| 海盐县| 昌黎县| 平果县| 大冶市| 金山区| 柳江县| 门源| 射洪县|