matlab最優化問題的函式(fminbnd),fmincon,globalsearch,multistart(全域性區域性最優)
在討論優化問題時我們先來討論全域性最優和區域性最優
全域性最優:問題所有的可能解中效果最好的解。
區域性最優:問題的部分可能解中效果最好的解。
一個針對的全域性,一個針對的部分。
就像我們設初值一樣,設定了以後函式開始迭代變化。
這時可能出現兩種現象
①迭代到一個解,該解距離初值較近,此處該值很有可能是區域性最優。
②迭代到一個解,該解距離初值相對較遠,此處該值很大可能是全域性最優,當然也可能是區域性最優。
上面這個圖相信大家看到過很多類似的,包括那個爬山坡的圖在內,但是這裡想強調的一點,這些圖雖然很直觀,但是也容易造成誤解。我去……我一個求最優幹嘛讓我看這些圖,我那些一堆公式,怎麼才能和這些圖對上呢???
這裡就需要解釋一下了:我們的求解其實都是迭代的過程,我們的函式在我們選擇的起始點進行多個方向的嘗試,看哪個反向能得到最優就向著哪個方向前進。那麼什麼是最優,這裡我們的理性告訴我們,其他方向都比我差,我就是最優。是這樣麼?你是不是進入了一個小溝溝?這裡就是區域性了,你只能說你在你附近方圓幾百裡是最好的,但是地球那麼大,你不想去看看麼,這裡就引入了全域性最優,你是中國第一不行,你需要是全世界第一才行。
下面我們開始介紹我們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 可能表現出慢收斂。
為了避免混淆,其他三個函式在接下來的部落格中講解,歡迎關注,部落格持續跟新。
相關文章
- 你的模型真的陷入區域性最優點了嗎?模型
- Laravel-自定義全域性函式-ChinaCircle 優化版Laravel函式優化
- 程式效能優化-區域性性原理優化
- 區域性性原理——各類優化的基石優化
- 非線性最優化最佳教材優化
- 數值最優化—優化問題的解(二)優化
- Tomcat全域性/區域性https訪問配置方法TomcatHTTP
- uni-app全域性樣式和區域性樣式APP
- 提醒一下技術人,你是不是陷入區域性最優了
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- 目標函式存在累加的非線性優化問題的求解思路zzzzzzzzzzzzzzzzzzzz(1)函式優化
- Just for fun——C/C++函式返回區域性變數的問題C++函式變數
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- matlab練習程式(Levenberg-Marquardt法最優化)Matlab優化
- matlab練習程式(高斯牛頓法最優化)Matlab優化
- test函式中的區域性變數函式變數
- 全域性變數與區域性變數變數
- 區域性變數和全域性變數變數
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- 貝葉斯全域性優化(LightGBM調參)優化
- python學習筆記 區域性和全域性作用域Python筆記
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- Java區域性變數與全域性變數Java變數
- java 全域性變數和區域性變數Java變數
- jmeter全域性變數和區域性變數JMeter變數
- 【c】全域性變數與區域性變數變數
- laravel 自定義全域性函式Laravel函式
- vue.js全域性元件和區域性元件區別Vue.js元件
- Python中的全域性變數和區域性變數Python變數
- 04 最優化方法優化
- 暫時性死區以及函式作用域函式
- Python區域性函式及用法詳解Python函式
- js-js的全域性變數和區域性變數JS變數
- Dotnet的區域性函式和委託的對比函式
- SpringBoot優雅的全域性異常處理Spring Boot
- 區域性代理ip與全域性代理ip怎麼用?
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- 記錄一次SQL函式和優化的問題SQL函式優化