本節主要講述模式搜尋的工作細節。
模式搜尋演算法就是尋找x0, x1, x2,...,這樣的一系列的點,這些點逐漸在靠近最優值。在這個點的序列中,後一個點相對於前一個點在逐漸減小(輪詢成功)或者保持不變(輪詢失敗)。本節就詳細介紹在例子ps_example(筆記五)中尋找最優解過程的工作細節。
為了描述上的簡單,我們只考慮下面的情況:
1.使用GPS演算法。
2.GPS演算法使用的模式是最大正交基組成的模式。
3.在圖形化使用者介面中MESH面板中,Scale設定為“off”
一、成功的輪詢
GPS在提供的x0=[2.1 1.7]起始點開始運行。
1.1第一次迭代
第一次迭代,網格尺寸(SIZE)是1,演算法將起始點與模式向量相加,得到下面的結果
[1 0] + x0 = [3.1 1.7]
[0 1] + x0 = [2.1 2.7]
[-1 0] + x0 = [1.1 1.7]
[0 -1] + x0 = [2.1 0.7]
演算法然後計算目標函數在網格點中的函數值,計算點的順序就如上面式子的順序。
下面的圖形表示了起始點與網格點的目標函數值
演算法開始輪詢搜尋網格點,因為x0=[2.1 1.7]點的函數值是4.6347,所以第一個比4.6247小的點是[1.1 1.7],這個點的函數值是4.5146,因此第一輪輪詢是成功的,因此將當前點x1設為[1.1 1.7]。即x1=[1.1 1.7]。
1.2 第二次迭代
經過一次成功的輪詢,演算法將當前的網格尺寸(1)乘以2,這樣在本次的迭代中,網格尺寸將是2,有些人可能問了,演算法中這個膨脹的倍數2是不是固定的,能不能修改呢?當然可以修改了,在optimtool操作介面中,在MESH面板中Expansion factor(膨脹係數)就是用來控制這個數位。在第二次迭代過程中,網格包含以下的一些點。
2*[1 0] + x1 = [3.1 1.7]
2*[0 1] + x1 = [1.1 3.7]
2*[-1 0] + x1 = [-0.9 1.7]
2*[0 -1] + x1 = [1.1 -0.3]
按照第一步的方法,畫出圖形
在本次輪詢中,發現點[-0.9 1.7]的函數值3.25比較優秀,因此x2=[-0.9 1.7]。因為本次輪詢成功,所以演算法在第三次迭代時,會將網格的尺寸變為4.
二、不成功的輪詢
在演算法進行第四次迭代時,x3 = [-4.9 1.7],此時網格尺寸是8,因此網格包含下面的點
8*[1 0] + x3 = [3.1 1.7]
8*[0 1] + x3 = [-4.9 9.7]
8*[-1 0] + x3 = [-12.9 1.7]
8*[0 -1] + x3 = [-4.9 -1.3]
下面的圖顯示了各個點的目標函數值
在本次輪詢中,沒有一個點的函數值能夠比當前點的函數值還要小,因此輪詢失敗,當前點還是x3,沒有發生改變,因此x4=x3.
在下一次迭代中,演算法會首先將網格尺寸乘以0.5,然後再輪詢網格點。這裡的0.5叫收縮係數,這個係數可以在mesh面板中的Contraction factor 選項進行修改。
三、顯示每步迭代的詳細資料
其實演算法每步迭代的詳細資料都可以顯示出來,可以通過設定Display to command window面板中Level of display為iterative。如
這將使你詳細瞭解演算法啟動並執行詳細過程
在命令視窗中顯示的演算法啟動並執行詳細過程是
Iter f-count f(x) MeshSize Method
0 1 4.63474 1
1 4 4.29487 2 Successful Poll
2 7 0.324468 4 Successful Poll
3 11 0.324468 2 Refine Mesh
4 15 0.324468 1 Refine Mesh
至於每一列的詳細的介紹就不多介紹了,其中在Method列下面的Refine Mesh就是輪詢失敗的情況。
四、模式搜尋的停止標準
模式搜尋挺值的標準都列在模式搜尋圖形化使用者介面的Stopping criteria面板中,見
在上面列舉中的標準中,只要演算法運行過程中,有一項符合標準,演算法就會停止運行,並把停止啟動並執行原因在運行結果的視窗告訴你。
好了,這一節到這裡就結束吧,太長了,寫的有點累了。