一、什麼是直接搜尋演算法
什麼是直接搜尋演算法?這個是我們將面對的第一個問題,如果連直接搜尋是什麼都不知道,還談什麼應用與解決問題呢?
直接搜尋演算法是一種不需要任何關於目標函數梯度資訊的最佳化方法。與傳統的最佳化方法比較起來,傳統的最佳化方法往往需要目標函數的梯度或者高階導數的資訊來搜尋一個最優點。直接搜尋演算法搜尋當前點周圍的一系列的點,然後找到一個目標函數的值低於當前點函數值的點。你可以使用直接搜尋演算法解決目標函數不可微甚至不連續的問題。
遺傳演算法與直接搜尋工具箱中主要包含兩種直接搜尋演算法:一種是通用模式搜尋演算法(generalized pattern search ,GPS)),另一個是網格自適應搜尋演算法( the mesh adaptive search (MADS) algorithm)。二者都屬於計算最優點附近一系列點的模式搜尋演算法。在演算法的每一步會搜尋當前點附近的一系列點,這些點組成一個小的單元,稱這個小的單元為網格(Mesh),網格是通過增加當前點到一系列向量的某些倍數中而形成的。這一系列的向量有一個專有名詞叫“模式”。如果演算法在網格中找到了一個點,這個點能改善目標函數的結果,那麼這個點就會替換當前步的當前點而成為演算法下一步的當前點。
MADS演算法是GPS演算法的一個變化版本。兩個演算法的不同點在於形成網格的計算方式不同。GPS使用的是固定方向的向量,而MADS使用的是向量隨機播放方法來定義網格(Mesh)的。
二、執行一個模式搜尋
2.1在命令列中調用模式搜尋
首先,對於一個無約束的問題,在命令列中執行模式搜尋調用patternsearch函數,使用的文法如下:
[x fval] = patternsearch(@objfun, x0)
@objfun是目標函數的控制代碼,x0是搜尋的開始點。x是最後得到的自變數的值,fval是目標函數最後的解。
2.2使用最佳化工具進行模式搜尋
在命令列中輸入optimtool('patternsearch'),或者在matlab的start菜單中選擇Toolboxes中的Optimization工具的Optimization Tool。操作
經過這些操作會出現下面的介面
在介面中輸入目標函數(Objective function)與開始點(Start point),在Constraints面板中輸入目標函數的約束,這些約束的內容在上面的筆記三中已經介紹過了。如果這個目標函數沒有約束,那麼就保持該地區空白的狀態。點擊“start”按鈕,
演算法的運行結果在Run solver and view results面板中顯示出來。在Options面板, 可以設定模式搜尋的一些參數。