什麼是遺傳演算法?
遺傳演算法是基於生物進化過程中的自然選擇機制而解決最佳化問題的一種演算法。在解決的最佳化問題中既包含無約束最佳化問題又包含具有約束的最佳化問題。遺傳演算法不斷的更新修改潛在解組成的種群。在演算法迭代的每一步中,演算法在當前種群中隨機的選擇一些個體作為父代,讓後讓這些父代產生一些子代。經過連續世代的運行,種群將向最優解的方向進化。你可以使用遺傳演算法解決各種傳統方法不能解決的各種各樣的最佳化問題。這些問題包括目標函數是離散的、不可微的、高度非線性、隨機的等問題。
在當前種群中,
遺傳演算法主要使用3種類型的規則來產生下一代:
1.選擇:選擇父代。
2.交叉:結合父代中的兩個個體,產生下一代中的個體,這些個體是父代的孩子。
3.變異:隨機的改變一些父代個體,讓其成為下一代中的子個體。
執行遺傳演算法
執行遺傳演算法有兩種方法:1命令列方式,2.圖形介面方式
1.命令列方式
在命令列中輸入下面格式的語句
[x fval] = ga(@fitnessfun, nvars, options)
其中:@fitnessfun是適應度函數的控制代碼(如果你還不知道控制代碼的概念,那麼你需要補充一下Matlab的知識) ,
nvars是適應度函數中獨立變數的個數,options是演算法執行過程中,所有的可選項,當然你完全可以不
輸入這個參數,因為遺傳演算法工具箱會給我們提供一些預設的選項,這些預設的選項針對於大多數問題都是
可行的,除非你要實現自己的一些特有的方法時才會需要修改這些選項。
傳回值中:
x是演算法在活著最優值時的點的座標。
fval是適應度函數最後的結果。
2.圖形介面方式
如果你想使用圖形介面方式,可以在命令列視窗中輸入:optimtool('ga'),或者在matlab的開始菜單中
選擇最佳化工具,具體的啟動方式可以參考筆記四。這樣你就會得到遺傳演算法的圖形化使用者介面。
這個介面是不是很熟悉呢,呵呵,對了,這個在模式搜尋中也見到過,只是在Solver一欄中這裡選擇的是'ga',
在圖形介面的右邊依然是演算法一些可選項的控制台,如果你想對遺傳演算法的運行參數進行調整的話,就可以
在該圖形介面的右邊尋找。
好了,下面還是繼續進行吧!
在下面的圖形中
填入適應度函數的控制代碼以及適應度函數中獨立變數的個數。還記得我們在筆記二中寫過一個函數叫myTest,
下面我們依然使用這個函數來實驗一下。在第一個輸入框輸入@myTest,在第二個輸入欄中輸入2,好了,
點擊“Start”按鈕,運發開始運行,結果如下:
遺傳演算法找到的最小值是-8.99999,得到該值的點是[-0.536,2.463],為了比較與驗證結果,
我使用模式搜尋的方法運行了同一個函數,起始點從[0 0]開始,下面就是模式搜尋得到的結果
結果基本差不多,這裡好像模式搜尋更好一點。