下面就舉一個遺傳演算法的具體執行個體,求Rastrigin函數的最小值。
1.Rastrigin's 函數
在遺傳演算法中,經常使用一個函數來測試遺傳演算法,這個函數就是Rastrigin函數,對於有兩個獨立變數的
Rastrigin函數,其定義的形式如下:
遺傳演算法工具箱中提供了一個M檔案,就是這個函數的實現,這個檔案是rastriginsfcn.m。下面是具有兩個獨立變數的Rastrigin函數圖形。
在圖形化表示中,該函數有非常多的局部極小點,而僅僅只有一個全域最小點,這個點就是[0 0],在這個點處的函數的值為0,該函數被用來測試遺傳演算法的主要原因是,對於傳統的基於梯度的演算法對付這個具有非常多局部極小點的函數來說,那是十分的困難呀。
下面給出該函數的等高線圖
2.尋找Rastrigin函數的最小值
本小節主要講述如何利用遺傳演算法來尋找Rastrigin函數的最小值。
2.1在命令列視窗輸入optimtool('ga')開啟最佳化工具的圖形介面
2.2在
Fitness function
函數地區輸入函數控制代碼@rastriginsfcn
2.3在
Number
of variables輸入獨立變數的個數2
2.4點擊“start”按鈕,開始演算法的運行
當演算法運行時,在Current
iteration
地區會顯示當前迭代的次數,你可以使用Pause,stop按鈕,暫停或者
停止演算法的運行。當演算法運行結束以後,在Run solver
and view results
地區會顯示啟動並執行結果。
演算法啟動並執行最後的結果是:Objective function value: 0.005160573464458196
取得該值時的點是[0.002 0.005]。演算法停止的原因是:average change in the fitness value less than options.TolFun.(適應度函數值的平均變化小於TolFun這個參數)。
3、使用命令列的方式來搜尋函數的最小值
在命令列中,輸入下面的命令:
[x fval exitflag] = ga(@rastriginsfcn, 2)
演算法啟動並執行結果如下所示:
Optimization terminated: average change in the fitness value less than options.TolFun.
x =
0.0000 0.0122
fval =
0.0294
exitflag =
1
上面結果各個欄位的意義就不過多解釋了,相信你能看懂。
4、圖形的顯示
在圖形化操作介面中,有一個
Plot functions
面板,在該面板中可以顯示出各種關於遺傳演算法資訊的圖形化表示,這些資訊能夠協助你調整演算法的選型,進而來提高演算法啟動並執行效果。例如,可以繪製出每次迭代過程中適應度函數的最優值與平均值,在面板中選擇
Best fitness
選項。
當你點擊“Start”按鈕時,適應度函數的最優值與平均值會在一個圖形視窗不斷的繪製出,等演算法運行結束,繪製的圖形如下所示。
在圖形中上面藍色的點表示適應度函數平均值的變化,而下面黑色的點表示了,每次迭代中最佳適應度值的變化。
因為遺傳演算法中很多地方使用了隨機的實現,所以每次啟動並執行結果可能都不太一樣,這個屬於正常現象,如果你為了這個而大驚小怪,或者懷疑運行結果有問題,那麼你應該看看有關遺傳演算法理論方面的知識。