1. 程式人生 > >Matlab optimtool優化(Optimization)工具箱

Matlab optimtool優化(Optimization)工具箱

 1 工具箱概述
1.1 功能
       (1)求解無約束條件非線性極小值;
       (2)求解約束條件下非線性極小值,包括目標逼近問題、極大-極小值問題和半無限極小值問題;
       (3)求解二次規劃和線性規劃問題;
       (4)非線性最小二乘逼近和曲線擬合;
       (5)非線性系統的方程求解;
       (6)約束條件下的線性最小二乘優化;
       (7)求解複雜結構的大規模優化問題。
1.2 工具箱的新特色
       MATLAB R2008b使用的是4.1版本的優化工具箱,較3.x的變化在於:
(1)    fmincon、fminimax和fgoalattain中引入了並行機制,加快梯度計算速度;
(2)    函式gatool和pserchtool整合到優化工具箱GUI中;
(3)    函式fmincon的求解器中新增內點演算法;
(4)    提供了KNITRO優化庫的介面;
(5)    函式lsqcurvefit、lsqnonlin和fsolve的優化選項引數PrecondBandWinth預設值由0變為inf;
(6)    優化選項引數TolConSQP的預設值改為1e-6;
(7)    輸出結構中引入了引數constrviolation。
2 工具箱函式
常用函式:
一元函式極小值X=fminbnd(‘F’,x1,x2)
無約束極小值X=fminunc(‘F’,X0)X=fminsearch(‘F’,X0)
線性規劃X=linprog(c,A,b)
0-1整數規劃X=bintprog(F)
二次規劃X=quadprog(H,c,A,b)
約束極小值(非線性規劃)X=fmincon(‘FG’,X0)
非線性最小二乘X=lsqnonlin(F,X0)
目標達到問題X=fgoalattain(‘F’,x,goal,w)
極小極大問題X=fminimax(‘FG’,x0)
輸入引數中可以用options,用於所有函式,其中包括有一下引數。
(1)              Display:結果顯示方式,off不顯示,iter顯示每次迭代的資訊,final為最終結果,notify只有當求解不收斂的時候才顯示結果。
(2)              MaxFunEvals:允許函式計算的最大次數,取值為正整數。
(3)              MaxIter:允許迭代的最大次數,正整數。
(4)              TolFun:函式值(計算結果)精度,正整數。
(5)              TolX:自變數的精度,正整數。
而且可以用函式optimset建立和修改。
       模型輸入時需要注意問題:
(1)    目標函式最小化;
(2)    約束非正;
(3)    避免使用全域性變數。
3 GUI優化工具
3.1 啟動
命令列輸入optimtool;
       Start->Toolboxes->Optimization->Optimization tool(optimtool)。
3.2 介面
圖一:GUI優化工具的介面
       分為三塊:
最左邊是優化問題的描述及計算結果顯示,中間為優化選項的設定,右邊是幫助(可隱藏,右上角的<<)。具體各選項的功能和作用不做記錄。
3.3 使用步驟
選擇求解器solver和優化演算法algorithm;
選定目標函式(objective function);
設定目標函式的相關引數;
設定優化選項;
單擊“start”按鈕,執行求解;
檢視求解器的狀態和求解結果;
將目標函式、選項和結果匯入\匯出。
具體的如圖二所示:
圖二:步驟示意圖
Algorithm有兩個選擇:Large scale和Medium scale,設定完引數點選start即可得到如圖中的結果。
3.4.2 無約束優化(fminsearch求解器)
求f(x)=|x^2-3*x+2|的極小值,初始點取x=-7,比較fminunc和fminsearch的差別。
解:啟動優化工具;
用fminunc時設定引數如圖:
點選start得到結果。
用fminsearch時如下圖:
用fminunc時結果是1.5,而用fminsearch時結果是2。計算原等式有極小值為2,由此有對於非光滑優化問題fminunc可能求不到正確的結果,而fminsearch卻能很好地解決這類問題的求解。
3.4.3 約束優化(fmincon求解器)
可用演算法有Trust region reflective(信賴域反射演算法)、Active set(有效集演算法)、Interior point(內點演算法)。
求f(x)=-x1*x2*x3的極小值,約束條件是-x1-2*x2-2*x3<=0且x1+2*x2+2*x3<=72,初始點(10,10,10)。
解:首先見M檔案,約定FunUnc(x)=-x(1)*x(2)*x(3):
function y=FunUnc(x)
y=-x(1)*x(2)*x(3);
啟動優化工具,設定引數如圖:
3.4.4 非線性最小二乘優化(lsqnonlin求解器)
求minS=(x^2+x-1)^2+(2*x^2-3)^2 ,初始點為x=5 。
解:啟動優化工具,設定引數,點start得結果如下圖所示;
3.4.5 線性規劃(linprog求解器)
       略,f處輸入函式多項式的係數。基本方法如前面幾類。
3.4.6 智慧優化演算法(ga求解器)
       略,要輸入變數的個數。基本方法如前面幾類。