【摘要】規(guī)劃問題是數(shù)學建模中最常見的問題,本文全面系統(tǒng)的闡述各種類型規(guī)劃問題的MATLAB解法,包括線性規(guī)劃、二次規(guī)劃、無約束優(yōu)化、有約束優(yōu)化等。
【關鍵詞】數(shù)學建模;規(guī)劃問題;計算機求解;MATLAB語言
規(guī)劃即最優(yōu)化問題就是求最大(小)值問題,是數(shù)學建模中最常見的問題,幾乎每個建模問題都離不開優(yōu)化。建模中的優(yōu)化問題主要有四種類型,即線性規(guī)劃、二次規(guī)劃、無約束優(yōu)化和有約束優(yōu)化。
一、線性規(guī)劃問題(linprog)
min""f(x)x屬于R
s.t:" A*xlt;=b;
Aeq*x=beq;
lblt;=xlt;=ub;
其中f、x、b、beq、lb、ub為向量,A、Aeq為矩陣。
函數(shù)""linprog
格式:
x = linprog(f,A,b)""""""""" %求min"f "s.t "線性規(guī)劃的最優(yōu)解。
x = linprog(f,A,b,Aeq,beq) "%不等式約束,若沒有不等式約束,則A=[],b=[]。
x = linprog(f,A,b,Aeq,beq,lb,ub)%指定x的范圍,若沒有等式約束",則Aeq=[],beq=[]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)%設置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options為指定的優(yōu)化參數(shù)
[x,fval]= linprog(…)% 返回目標函數(shù)最優(yōu)值,即fval= f
[x,lambda,exitflag]= linprog(…)% lambda為解x的Lagrange乘子。
[x,lambda,fval,exitflag]= linprog(…)% exitflag為終止迭代的錯誤條件。
說明:若exitflaggt;0表示函數(shù)收斂于解x,exitflag=0表示超過函數(shù)估值或迭代的最大數(shù)字,exitflaglt;0表示函數(shù)不收斂于解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式約束,lambda=eqlin表示等式約束,lambda中的非0元素表示對應的約束是有效約束。
二、二次規(guī)劃(quadprog)
標準型為:
Min Z= XTHX+cTX
s.t.AXlt;=b""
VLB≤X≤VUB
用MATLAB軟件求解,其輸入格式如下:
1.x=quadprog(H,C,A,b);
2.x=quadprog(H,C,A,b,Aeq,beq);
3.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);
4.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0);
5.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0,options);
6.[x,fval]=quaprog(...);
7.[x,fval,exitflag]=quaprog(...);
8.[x,fval,exitflag,output]=quaprog(...);
三、無約束最優(yōu)化(fminunc)
命令""利用函數(shù)fminunc求無約束函數(shù)最小值
函數(shù)""fminunc
格式:
x = fminunc(fun,x0)%返回給定初始點x0的最小函數(shù)值點
x = fminunc(fun,x0,options)% options為指定優(yōu)化參數(shù)
[x,fval]= fminunc(…)%fval最優(yōu)點x處的函數(shù)值
[x,fval,exitflag]= fminunc(…)% exitflag為終止迭代的條件,與上同。
[x,fval,exitflag,output]= fminunc(…)%output為輸出優(yōu)化信息
四、有約束最優(yōu)化(fmincon)
min f(x)
s.t"""""" "C(x)lt;=0
Ceq(x)=0
A*xlt;=b
Aeq*x=beq
lblt;=xlt;=ub
其中:x、b、beq、lb、ub是向量,A、Aeq為矩陣,C(x)、Ceq(x)是返回向量的函數(shù),f(x)為目標函數(shù),f(x)、C(x)、Ceq(x)可以是非線性函數(shù)。函數(shù)""fmincon
格式:
x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval]= fmincon(…)
[x,fval,exitflag]= fmincon(…)
[x,fval,exitflag,output]= fmincon(…)
[x,fval,exitflag,output,lambda]= fmincon(…)
[x,fval,exitflag,output,lambda,grad]= fmincon(…)
參數(shù)說明:fun為目標函數(shù),它可用前面的方法定義;
x0為初始值;
A、b滿足線性不等式約束,若沒有不等式約束,則取A=[],b=[];
B、Aeq、beq滿足等式約束,若沒有,則取Aeq=[],beq=[];
C、lb、ub滿足,若沒有界,可設lb=[],ub=[];
D、nonlcon的作用是通過接受的向量x來計算非線性不等約束 和等式約束 分別在x處的估計C和Ceq,通過指定函數(shù)柄來使用,
如:x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
先建立非線性約束函數(shù),并保存為mycon.m:function[C,Ceq]= mycon(x)
C = …" " % 計算x處的非線性不等約束 的函數(shù)值。
Ceq = …" % 計算x處的非線性等式約束 的函數(shù)值。
參考文獻:
[1]卓金武.MATLAB在數(shù)學建模中的應用.北京航空航天大學出版社.2011年
[2]孫祥、徐流美、吳清.MATLAB7.0基礎教程.清華大學出版社.2011年
[3]林雪松、周婧、林德新.MATLAB7.0應用集錦.機械工業(yè)出版社.2012年
[4]邱李華.MATLAB7及工程問題解決方案.機械工業(yè)出版社.2012年
作者簡介:張小紅(1974~),男,江西新余人,計算機副教授、網(wǎng)絡工程師。