matlab最優化問題的函式(fminbnd),fmincon,globalsearch,multistart(全域性區域性最優)

三眼二郎發表於2018-12-04

在討論優化問題時我們先來討論全域性最優和區域性最優

全域性最優:問題所有的可能解中效果最好的解。
區域性最優:問題的部分可能解中效果最好的解。

一個針對的全域性,一個針對的部分。
就像我們設初值一樣,設定了以後函式開始迭代變化。
這時可能出現兩種現象
①迭代到一個解,該解距離初值較近,此處該值很有可能是區域性最優。
②迭代到一個解,該解距離初值相對較遠,此處該值很大可能是全域性最優,當然也可能是區域性最優。

在這裡插入圖片描述
上面這個圖相信大家看到過很多類似的,包括那個爬山坡的圖在內,但是這裡想強調的一點,這些圖雖然很直觀,但是也容易造成誤解。我去……我一個求最優幹嘛讓我看這些圖,我那些一堆公式,怎麼才能和這些圖對上呢???
這裡就需要解釋一下了:我們的求解其實都是迭代的過程,我們的函式在我們選擇的起始點進行多個方向的嘗試,看哪個反向能得到最優就向著哪個方向前進。那麼什麼是最優,這裡我們的理性告訴我們,其他方向都比我差,我就是最優。是這樣麼?你是不是進入了一個小溝溝?這裡就是區域性了,你只能說你在你附近方圓幾百裡是最好的,但是地球那麼大,你不想去看看麼,這裡就引入了全域性最優,你是中國第一不行,你需要是全世界第一才行。

下面我們開始介紹我們matlab優化求解的函式
說到求解引數,我們需要先介紹下在求解最初設定的優化項。(下面兩張圖來自matlab官方)
在這裡插入圖片描述
在這裡插入圖片描述
下面介紹一下如何使用,以及常用項
①設定容差

options.TolX = 1e-15;%當前點 x 的終止容差。
options.TolFun = 1e-15;%函式值的終止容差。

②設定最大迭代次數

options.MaxIter=1000;

③設定求解上下限和初始值

%上邊界
LB = [100,0,0,0.50,1,-1,700];
% 下邊界
UB = [20000,900,360,11,20,20,90];
% 優化初始值
x0 = [1000 500 270 200 9 15 80 ];

設定完這些,我們就可以開始我們的待優化函式構造+優化程式編寫了。

①fminbnd(求單變數非線性的極小值)(區域性最優)

單變數非線性——現在很多問題都是多變數的,這個函式不知道大家用不用,我是用的比較少的
演算法介紹
fminbnd 是一個函式檔案。演算法基於黃金分割搜尋和拋物線插值方法。除非左端點 x1 非常靠近右端點 x2,否則 fminbnd 從不計算 fun 在端點處的值,因此只需要為 x 在區間 x1 < x < x2 中定義 fun。

示例
x = fminbnd(fun,x1,x2) 返回一個值 x,該值是 fun 中描述的標量值函式在區間 x1 < x < x2 中的區域性最小值。
x = fminbnd(fun,x1,x2,options) 使用 options 中指定的優化選項執行最小化計算。使用 optimset 可設定這些選項。
x = fminbnd(problem) 求 problem 的最小值,其中 problem 是一個結構體。

fun = @cos;%% 或者fun = @(x)cos(x);
x1 = -pi;%下限
x2 = pi;%上限
options = optimset('Display','iter');%該設定表示在求取中,顯示迭代過程。
options = optimset('PlotFcns',@optimplotfval);%該設定表示在求取中,繪製迭代圖。
[x,fval] = fminbnd(fun,x1,x2,options)%x是取最值的x,最值是fval。

結果分析
[x,fval,exitflag,output] = fminbnd(___)
x - 解
實數標量

fval - 解處的目標函式值
實數

exitflag - fminbnd 停止的原因
整數
在這裡插入圖片描述
output - 有關優化過程的資訊
結構體
在這裡插入圖片描述

該演算法的侷限性
1.要計算最小值的函式必須是連續的。
2.fminbnd 只能給出區域性解。
3.當解在區間的邊界上時,fminbnd 可能表現出慢收斂。

為了避免混淆,其他三個函式在接下來的部落格中講解,歡迎關注,部落格持續跟新。

相關文章