本文將使用GPS方法尋找一個函數的最小值,這個例子中使用的目標函數是ps_example,該函數已經包含在遺傳演算法與直接搜尋工具箱中,可以使用edit ps_example來查看該函數的原始碼。
function f = ps_example(x)<br />for i = 1:size(x,1)<br /> if x(i,1) < -5<br /> f(i) = (x(i,1)+5)^2 + abs(x(i,2));<br /> elseif x(i,1) < -3<br /> f(i) = -2*sin(x(i,1)) + abs(x(i,2));<br /> elseif x(i,1) < 0<br /> f(i) = 0.5*x(i,1) + 2 + abs(x(i,2));<br /> elseif x(i,1) >= 0<br /> f(i) = .3*sqrt(x(i,1)) + 5/2 +abs(x(i,2));<br /> end<br />end
從原始碼中可以看出,ps_example是一個分段函數。
下面是這個函數的圖形
開始尋找這個函數的最小值
1.在命令列中輸入optimtool,斷行符號,在solver欄中選擇“Pattern Search”
2.在圖形化介面中的Objective function 欄中輸入@ps_example
3.在Start point 地區, 輸入起始點[2.1 1.7].
在約束地區保持空白
4.點擊“strat”按鈕,開始模式搜尋。
5.在Run solver and view results面板中顯示演算法啟動並執行結果。
搜尋一共經曆了60代的搜尋,獲得最小的目標函數值約為-2,獲得該最小值的變數的點是-4.712與0,演算法終止的原因是因為mesh網格的尺寸已經超過了該演算法能夠容忍的最小尺寸。
繪製圖形
在該工具圖形介面右邊的plot functions面板,選中best function value與Mesh size兩項
然後點擊“start”按鈕,開始模式搜尋。得到圖形
在上面的子圖形表示目標函數的最好結果的變化過程,下面的子圖形是網格大小變化的過程。