1. 程式人生 > >MATLAB優化工具箱使用

MATLAB優化工具箱使用

轉自  http://blog.163.com/bingqingyujie..5/blog/static/755593612009103074651921/

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優化工具的介面

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

       分為三塊:

最左邊是優化問題的描述及計算結果顯示,中間為優化選項的設定,右邊是幫助(可隱藏,右上角的<<)。具體各選項的功能和作用不做記錄。

3.3 使用步驟

選擇求解器solver和優化演算法algorithm;

選定目標函式(objective function);

設定目標函式的相關引數;

設定優化選項;

單擊“start”按鈕,執行求解;

檢視求解器的狀態和求解結果;

將目標函式、選項和結果匯入\匯出。

具體的如圖二所示:

圖二:步驟示意圖

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

3.4 應用例項

3.4.1 無約束優化(fminunc求解器)

求f(x)=x^2+4*x-6極小值,初始點取x=0。

解:首先建立目標函式檔案FunUnc.m檔案:

function y=FunUnc(x)

y=x^2+4*x-6;

然後啟動優化工具(如圖):

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

Algorithm有兩個選擇:Large scale和Medium scale,設定完引數點選start即可得到如圖中的結果。

3.4.2 無約束優化(fminsearch求解器)

求f(x)=|x^2-3*x+2|的極小值,初始點取x=-7,比較fminunc和fminsearch的差別。

解:啟動優化工具;

用fminunc時設定引數如圖:

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

點選start得到結果。

用fminsearch時如下圖:

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

用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);

啟動優化工具,設定引數如圖:

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

3.4.4 非線性最小二乘優化(lsqnonlin求解器)

求minS=(x^2+x-1)^2+(2*x^2-3)^2 ,初始點為x=5 。

解:啟動優化工具,設定引數,點start得結果如下圖所示;

MATLAB優化工具箱 - bingqingyujie..5 - ~bluestart~O(∩_∩)O

3.4.5 線性規劃(linprog求解器)

       略,f處輸入函式多項式的係數。基本方法如前面幾類。

3.4.6 智慧優化演算法(ga求解器)

       略,要輸入變數的個數。基本方法如前面幾類。