Matlab學習系列25 非線性優化

2022-12-13 09:36:06 字數 4112 閱讀 1453

25. 非線性規劃

一、有約束非線性規劃

若規劃問題的目標函式或約束條件中包含非線性函式,則稱為非線性規劃。

非線性規劃的最優解(若存在)可能在其可行域的任一點達到,目前非線性規劃還沒有適合各種問題的一般解法,各種方法都有其特定的適用範圍。

matlab中非線性規劃的標準形式為

matlab實現:

[x, fval, exitflag, output, lambda, grad, hessian]

=fmincon(『fun』,x0, a,b,aeq,beq,vlb,vub,『nonlcon』, options)

其中,有些引數同線性規劃;

『fun』為用m-檔案定義的目標函式f(x);

『nonlcon』為用m-檔案定義的非線性向量函式[c(x), ceq(x)]。

例1求解下列非線性規劃問題:

**:目標函式(m檔案):

function f=fun1(x)

f=x(1)^2+x(2)^2+8;

非線性約束(m檔案):

function [c,ceq]=fun2(x)

c=-x(1)^2+x(2); % 非線性約束,若不止1個,則用c(1),c(2),...

ceq= x(1)+x(2)^2-2; % 等式約束, 若沒有等式約束,可令ceq=;

主程式:

x0 = rand(2,1);

vlb = zeros(2,1);

[x,fval,exitflag,output,lambda,grad,hessian] = ...

fmincon('fun1',x0vlb,,'fun2')

執行結果(部分):

exitflag = 1優化成功

x = 1.0000

1.0000最優解x

fval= 10.0000目標值f

grad = 2.0000

2.0000

hessian = 1.4338 0.4960

0.4960 0.5902

二、無約束非線性規劃

matlab中無約束非線性規劃的標準形式為:

matlab提供了3個不同的函式分別適合不同情形:

1. fminbnd函式

用於求解定區間上單變數函式的最小值點,呼叫格式為:

[x, fval, exitflag, output] = fminbnd(『fun』, x1, x2, options)

其中,fun為用m-檔案定義的目標函式。

2. fminunc函式

基於梯度的最優化演算法,用於求解單變數及多變數函式的最小值,呼叫格式為:

[x, fval, exitflag, output, lambda, grad, hessian]

= fminunc(『fun』, x0, options)

其中,x0為初始值;

options引數:

largescale,on或off設定大型中型優化演算法;

hessupdate,設定中型優化演算法的搜尋方向的演算法,』bfgs』(預設)為擬牛頓法的bfgs公式;』dfp』為擬牛頓法的dfp公式;』steepdesc』為最速下降法;

linesearchtype,設定中型優化演算法的步長一維搜尋的兩種演算法,』quadcubic』(預設)為混合的二次和三次多項式插值;』cubicpoly』為三次多項式插值。

3. fminsearch函式

是根據nelder演算法編寫的,用於求解多變數函式的極小值,呼叫格式為:

[x, fval, exitflag, output] = fminbnd(『fun』, x0, options)

其中,options的選項有:

display,』off』不顯示輸出;』iter』顯示每次迭代資訊;』final』只顯示最終結果;

maxfunevals,允許進行函式評價的最大次數;

maxiter,允許迭代的最大次數;

tolx,變數的容許誤差限;

tolfun,函式值的容許誤差限。

關於三個函式的說明:

(1)三個函式可能只輸出區域性最優解;

(2)三個函式均只對變數為實數的問題進行優化;

(3)fminunc函式要求目標函式必須連續。

例2 求解下列函式的極小值:

**:目標函式(m檔案):

function f=fun3(x)

f=1/abs(x);

主程式:

x=linspace(-pi,pi);

y=abs(1./x);

plot(x,y,'r');

gridon

x0=1;

x1=-3; x2=1;

[x,fval,exitflag] = fminbnd('fun3',x1,x2)

[x,fval,exitflag] = fminunc('fun3',x0)

[x,fval,exitflag] = fminsearch('fun3',x0)

執行結果:

x = -2.9999

fval = 0.3333

exitflag = 1

fminbnd函式優化成功,是正確解。

x = 889.4311

fval = 0.0011

exitflag = 1

fminunc函式優化成功,但解是錯誤的(fminunc的目標函式必須是連續函式,本例目標函式不連續)

x = 6.3383e+28

fval = 1.5777e-29

exitflag = 0

fminsearch函式優化失敗,因為該函式只能求解多變數目標函式。

2. 懲罰函式法

利用懲罰函式法,可將非線性規劃問題的求解轉化為一系列無約束非線性規劃問題。

懲罰函式法求解非線性規劃問題,是利用問題中的約束函式做出適當的懲罰函式,由此構造出帶引數的增廣目標函式,將問題轉化為無約束非線性規劃問題。下面介紹外懲罰函式法。

求解如下極小值問題:

取乙個充分大的數m>0,建構函式

或者用向量表示:

其中,,,。

則以增廣目標函式p(x,m)為目標函式的無約束極值問題:min p(x,m) 的最優解x也是原問題的最優解。

例3求解下列非線性規劃問題:

**:增廣目標函式(m檔案):

function g=ex25_fun4(x)

m=50000;

f=x(1)^2+x(2)^2+8;

g=f-m*min(x(1)^2-x(2),0)+m*abs(-x(1)-x(2)^2+2)-m*min(x(1),0) - m*min(x(2),0);

主程式:

[x,fval,exitflag] = fminunc('ex25_fun4',rand(2,1))

執行結果:

x = 1.0467

0.9764

fval = 10.0489

exitflag = 5(說明重要方向導數小於規定的容許範圍並且約束違背小於options tolcom)

注:最優解是(1,1), 上述結果也可以接受。另外,初始值的選取不同,會得到不同的區域性最優解。

三、二次規劃

若非線性規劃的目標函式為自變數x的二次函式,約束條件又全是線性的,就稱為二次規劃。

matlab中的二次規劃的標準形式為:

其中,h為實對稱矩陣,f, b為列向量,a為相應維數的矩陣。

matlab實現:

[x,fval,exitflag, output]=quadprog(h,f,a,b,aeq,beq,lb,ub,x0,options)

例4求解下列二次規劃問題:

**:h=[4,-4;-4,8];

f=[-6;-3];

a=[1,1;4,1];

b=[3;9];

[x,fval,exitflag]=quadprog(h,f,a,b,,,zeros(2,1))

執行結果:

x = 1.9500

1.0500

fval = -11.0250

exitflag = 1

四、最小二乘優化

資料擬合時的實際值與擬合值之差,稱為殘差。擬合效果的好壞,通常是用殘差平方和的大小來刻畫的,即以殘差平方和為目標函式,求最佳的擬合引數使得目標函式取到極小值。這就是擬合的最小二乘原理。

用MATLAB優化工具包解非線性規劃

2.8.2 程式fmincon輸入引數 其中輸入變數的含義為 x0為初始解 預設時程式自動取x0 0 a1,b1,a2,b2,v1,v2 含義見模型 nlp fun.m給出目標函式,當gradobj on 時必須給出其梯度,當hessian on 時還必須給出其jacobi矩陣,一般形式為 func...

第8章MATLAB在非線性系統中的應用

1 狀態反饋與極點配置 狀態反饋是指從狀態變數到控制端的反饋,如圖3所示。設原系統動態方程為 引入狀態反饋後,系統的動態方程為 圖3 狀態反饋 狀態反饋極點配置問題就是 通過狀態反饋矩陣k的選取,使閉環系統式 4.2 的極點,即的特徵值恰好處於所希望的一組給定閉環極點的位置上。線性定常系統可以用狀態...

Matlab學習系列27多目標規劃

27.多目標規劃 一 線性規劃的侷限性 1.線性規劃要求所求解問題必須滿足全部的約束,而實際問題中並非所有約束都需要嚴格的滿足 2.線性規劃只能處理單目標的優化問題,從而對一些次目標只能轉化為約束處理,而實際問題中,目標和約束是可以相互轉化的,處理時不一定要嚴格區分 3.線性規劃在處理問題時,將各個...