MATLAB 遺傳算法工具箱的入門使用


在做摩擦力辨識中,因為需要用對非線性模型的參數進行辨識,在上一篇博客中使用了非線性最小二乘的辨識方法,但是其辨識結果的精准度受辨識參數初值的選取影響很大,很容易陷入局部最優解,而不能得到全局最優解,所以使用遺傳算法來進行辨識,遺傳算法是可以得到全局最優解的。

最開始是自己編寫的遺傳算法程序來進行辨識,但是得到的結果有些瑕疵,所以嘗試使用MATLAB工具箱來做一次。下面是入門使用的方法(MATLAB版本是201b):

1. 打開MATLAB遺傳算法工具箱:(1)點擊狀態欄的APP;(2)找到Optimization並打開,如下圖所示:

在Solver后面的下拉框中,選擇遺傳算法:ga-Genetic Algorithm,下邊分別就遺傳算法的幾個步驟進行說明。

2. fitness function 適應度函數

在學習遺傳算法后我們知道中間一個步驟是需要確定適應度函數,而適應度函數一般是通過目標函數轉換而來,在一些解決函數最大值和最小值的問題中,可以直接把函數輸出作為目標函數和適應度函數。經過測試驗證,在改工具箱中,適應度函數的輸出結果越小標明越准確。下面介紹摩擦力模型及適應度函數:

我要辨識的摩擦力模型為:

需要辨識其中的 A,B,C 和 D 四個參數,通過實驗采集到的實際輸入數據 v 和輸出數據 F。因為工具箱要求的適應度函數是輸出結果趨小的,所以我這里選擇目標函數為適應度函數,如下:

其中

為辨識誤差。

將該目標函數以函數的形式寫到 MATLAB 的m文件中,如下:

% 使用遺傳算法工具箱的適應度函數
function result = steadyfitness(a)
    load SteadyData.mat;
    u = (up+abs(un))/2/4;
    Fi =u';                % 均勻實驗測得摩擦力的實測值
    w = vd';               % 速度輸入值
    N = size(w,1);
    for i = 1:1:N
       F_GA(i) =  (a(1)+a(2)*exp(-(w(i)/a(3))^2))*sign(w(i)) + a(4)*w(i);
       Ji(i) = Fi(i) - F_GA(i);
       J(i) = 0.5*Ji(i)*Ji(i);
    end
    result = sum(J);
end

而后將函數句柄 “@steadyfitness" 寫到工具箱界面的 fitness function 后面。

3. Number of variables:輸入參數個數

這里待辨識參數有A,B,C和D這四個,所以這里填寫 4。

4. bounds:辨識參數的上下界

此處設置為,Lower:[0 0 0 0],Upper:[0.5 0.5 0.1 0.5]。

5. 點擊 Start,開始遺傳算法求解

結束后結果會顯示在 Final point中

 

下圖見完整的配置:

6. 利用辨識參數的結果,繪制摩擦力模型

完結。

 

注:MATLAB工具箱的簡單使用,上述幾個步驟就夠用了,如果要修改默認算法部分,就要學習遺傳算法原理,修改工具箱右側的參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM