matlab优化应用
§1 線性規(guī)劃模型
一、線性規(guī)劃課題:
實例1:生產(chǎn)計劃問題
假設(shè)某廠計劃生產(chǎn)甲、乙兩種產(chǎn)品,現(xiàn)庫存主要材料有A類3600公斤,B類2000公斤,C類3000公斤。每件甲產(chǎn)品需用材料A類9公斤,B類4公斤,C類3公斤。每件乙產(chǎn)品,需用材料A類4公斤,B類5公斤,C類10公斤。甲單位產(chǎn)品的利潤70元,乙單位產(chǎn)品的利潤120元。問如何安排生產(chǎn),才能使該廠所獲的利潤最大。
建立數(shù)學(xué)模型:
設(shè)x1、x2分別為生產(chǎn)甲、乙產(chǎn)品的件數(shù)。f為該廠所獲總潤。
?????? max f=70x1+120x2
?????? s.t? 9x1+4x2≤3600
??????? 4x1+5x2≤2000
??????? 3x1+10x2≤3000
??????? x1,x2≥0
實例2:投資問題
某公司有一批資金用于4個工程項目的投資,其投資各項目時所得的凈收益(投入資金锪百分比)如下表:
工程項目收益表
| 工程項目 | A | B | C | D |
| 收益(%) | 15 | 10 | 8 | 12 |
由于某種原因,決定用于項目A的投資不大于其他各項投資之和而用于項目B和C的投資要大于項目D的投資。試確定全文該公司收益最大的投資分配方案。
建立數(shù)學(xué)模型:
設(shè)x1、 x2 、x3 、x4分別代表用于項目A、B、C、D的投資百分?jǐn)?shù)。
????? max f=0.15x1+0.1x2+0.08 x3+0.12 x4
?????? s.t? x1-x2- x3- x4≤0
??????? x2+ x3- x4≥0
????????????? x1+x2+x3+ x4=1
????????????? xj≥0? j=1,2,3,4
實例3:運(yùn)輸問題
有A、B、C三個食品加工廠,負(fù)責(zé)供給甲、乙、丙、丁四個市場。三個廠每天生產(chǎn)食品箱數(shù)上限如下表:
| 工廠 | A | B | C |
| 生產(chǎn)數(shù) | 60 | 40 | 50 |
四個市場每天的需求量如下表:
| 市場 | 甲 | 乙 | 丙 | 丁 |
| 需求量 | 20 | 35 | 33 | 34 |
從各廠運(yùn)到各市場的運(yùn)輸費(元/每箱)由下表給出:
| 市? 場 | ||||||||
| 甲 | 乙 | 丙 | 丁 | ||||||
| 工 廠 | A | 2 | 1 | 3 | 2 | ||||
| B | 1 | 3 | 2 | 1 | |||||
| C | 3 | 4 | 1 | 1 | |||||
求在基本滿足供需平衡的約束條件下使總運(yùn)輸費用最小。
建立數(shù)學(xué)模型:
設(shè)ai j為由工廠i運(yùn)到市場j的費用,xi j 是由工廠i運(yùn)到市場j的箱數(shù)。bi是工廠i的產(chǎn)量,dj是市場j的需求量。
?????? ?
b= ( 60 40 50 )?? d= ( 20 35 33 34 )
??????
?????? s.t?
?????????????
??????? x i j≥0
?
當(dāng)我們用MATLAB軟件作優(yōu)化問題時,所有求maxf 的問題化為求min(-f )來作。約束g i (x)≥0,化為 –g i≤0來作。
上述實例去掉實際背景,歸結(jié)出規(guī)劃問題:目標(biāo)函數(shù)和約束條件都是變量x的線性函數(shù)。
形如:??? (1)? ????? min f T X
???????????????????? s.t? A X≤b
?????? Aeq X =beq
lb≤X≤ub
??? 其中X為n維未知向量,f T=[f1,f2,…fn]為目標(biāo)函數(shù)系數(shù)向量,小于等于約束系數(shù)矩陣A為m×n矩陣,b為其右端m維列向量,Aeq為等式約束系數(shù)矩陣,beq為等式約束右端常數(shù)列向量。lb,ub為自變量取值上界與下界約束的n維常數(shù)向量。
二.線性規(guī)劃問題求最優(yōu)解函數(shù):
?????? 調(diào)用格式:? x=linprog(f,A,b)
?????? ???????????????????? x=linprog(f,A,b,Aeq,beq)
??????????????????????????? x=linprog(f,A,b,Aeq,beq,lb,ub)
??????????????????????????? x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
??????????????????????????? x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
????????????? [x,fval]=linprog(…)
????????????? [x, fval, exitflag]=linprog(…)
????????????? [x, fval, exitflag, output]=linprog(…)
????????????? [x, fval, exitflag, output, lambda]=linprog(…)
?????? 說明:x=linprog(f,A,b)返回值x為最優(yōu)解向量。
?????? x=linprog(f,A,b,Aeq,beq) 作有等式約束的問題。若沒有不等式約束,則令A=[ ]、b=[ ] 。
?????? x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub為變量x的下界和上界,x0為初值點,options為指定優(yōu)化參數(shù)進(jìn)行最小化。
Options的參數(shù)描述:
Display?? 顯示水平。 選擇’off’ 不顯示輸出;選擇’iter’顯示每一 步迭代過程的輸出;選擇’final’ 顯示最終結(jié)果。
MaxFunEvals 函數(shù)評價的最大允許次數(shù)
Maxiter 最大允許迭代次數(shù)
TolX?? x處的終止容限?????
?????? [x,fval]=linprog(…) 左端 fval 返回解x處的目標(biāo)函數(shù)值。
[x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的輸出部分:
exitflag 描述函數(shù)計算的退出條件:若為正值,表示目標(biāo)函數(shù)收斂于解x處;若為負(fù)值,表示目標(biāo)函數(shù)不收斂;若為零值,表示已經(jīng)達(dá)到函數(shù)評價或迭代的最大次數(shù)。
output 返回優(yōu)化信息:output.iterations表示迭代次數(shù);output.algorithm表示所采用的算法;outprt.funcCount表示函數(shù)評價次數(shù)。
lambda 返回x處的拉格朗日乘子。它有以下屬性:
?????? lambda.lower-lambda的下界;
?????? lambda.upper-lambda的上界;
?????? lambda.ineqlin-lambda的線性不等式;
?????? lambda.eqlin-lambda的線性等式。
三. 舉例
例1:求解線性規(guī)劃問題:
????????????? max f=2x1+5x2
????????????? s.t
先將目標(biāo)函數(shù)轉(zhuǎn)化成最小值問題:min(-f)=- 2x1-5x2
程序:
f=[-2 -5];
A=[1 0;0 1;1 2];
b=[4;3;8];
[x,fval]=linprog(f,A,b)
f=fval*(-1)
結(jié)果:?? x = 2?
3
???????????????????? fval = -19.0000
maxf =? 19
例2:minf=5x1-x2+2x3+3x4-8x5
s.t? –2x1+x2-x3+x4-3x5≤6
??? 2x1+x2-x3+4x4+x5≤7
??? 0≤xj≤15? j=1,2,3,4,5
程序:
f=[5 -1 2 3 -8];
A=[-2 1 -1 1 -3;2 1 -1 4 1];
b=[6;7];
lb=[0 0 0 0 0];
ub=[15 15 15 15 15];
[x,fval]=linprog(f,A,b,[],[],lb,ub)
結(jié)果:x =
????? ?? ? 0.0000
??? ?????? 0.0000
??? ?????? 8.0000
??? ?????? 0.0000
?? ???????? 15.0000
minf =
? -104
例3:求解線性規(guī)劃問題:
???????????????????? minf=5x1+x2+2x3+3x4+x5
s.t? –2x1+x2-x3+x4-3x5≤1
??????? ??????? 2x1+3x2-x3+2x4+x5≤-2
??????????????????? 0≤xj≤1? j=1,2,3,4,5
程序:
?????? f=[5 1 2 3 1];
?????? A=[-2 1 -1 1 -3;2 3 -1 2 1];
?????? b=[1;-2];
?????? lb=[0 0 0 0 0];
?????? ub=[1 1 1 1 1];
?????? [x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb,ub)?????????????????????????? 運(yùn)行結(jié)果:????????
?????? Exiting: One or more of the residuals, duality gap, or total relative error
???????? has grown 100000 times greater than its minimum value so far:
???????? the primal appears to be infeasible (and the dual unbounded).
???????? (The dual residual < TolFun=1.00e-008.)
?
x = 0.0000
???????????? ????? 0.0000
???????????? ????? 1.1987
???????????? ????? 0.0000
? ????????????????? 0.0000
fval =
??? ????????????? 2.3975
exitflag =
??? ????????????? -1
output =
????? ??? iterations: 7
??? ?????? cgiterations: 0
?????? ? algorithm: 'lipsol'
lambda =
??? ????????????? ineqlin: [2x1 double]
????? ?????????? eqlin: [0x1 double]
????? ?????????? upper: [5x1 double]
????? ?????????? lower: [5x1 double]
?????? 顯示的信息表明該問題無可行解。所給出的是對約束破壞最小的解。
?????? 例4:求解實例1的生產(chǎn)計劃問題
建立數(shù)學(xué)模型:
設(shè)x1、x2分別為生產(chǎn)甲、乙產(chǎn)品的件數(shù)。f為該廠所獲總潤。
?????? max f=70x1+120x2
?????? s.t? 9x1+4x2≤3600
??????? 4x1+5x2≤2000
??????? 3x1+10x2≤3000
??????? x1,x2≥0
將其轉(zhuǎn)換為標(biāo)準(zhǔn)形式:
min f=-70x1-120x2
?????? s.t? 9x1+4x2≤3600
??????? 4x1+5x2≤2000
??????? 3x1+10x2≤3000
??????? x1,x2≥0
?
?????? 程序:?? f=[-70 -120];
???????????????????? A=[9 4 ;4 5;3 10 ];
???????????????????? b=[3600;2000;3000];
???????????????????? lb=[0 0];
???????????????????? ub=[];
??????????????????????????? [x,fval,exitflag]=linprog(f,A,b,[],[],lb,ub)
??????????????????????????? maxf=-fval
????????????? 結(jié)果:?? x =
? ???????????????????????? 200.0000
? ???????????????????????? 240.0000
fval =
????????????????????????????????? -4.2800e+004
exitflag =
??? 1
maxf =
? ??? 4.2800e+004
????? 例5:求解實例2
?????? 建立數(shù)學(xué)模型:
max f=0.15x1+0.1x2+0.08 x3+0.12 x4
?????? s.t? x1-x2- x3- x4≤0
??????? x2+ x3- x4≥0
????????????? x1+x2+x3+ x4=1
????????????? xj≥0? j=1,2,3,4???
將其轉(zhuǎn)換為標(biāo)準(zhǔn)形式:
min z=-0.15x1-0.1x2-0.08 x3-0.12 x4
?????? s.t? x1-x2- x3- x4≤0
??????? -x2- x3+ x4≤0
????????????? x1+x2+x3+ x4=1
????????????? xj≥0? j=1,2,3,4
?????? 程序:?? f = [-0.15;-0.1;-0.08;-0.12];
A =? [1 -1 -1 -1
????? ????????????????? ? 0 -1 -1 1];
b = [0; 0];
Aeq=[1 1 1 1];
beq=[1];
lb = zeros(4,1);
??????????????????? [x,fval,exitflag] = linprog(f,A,b,Aeq,beq,lb)
???????????????????? f=-fval
?????? 結(jié)果:x =
??? ???????????????????? 0.5000
??? ???????????????????? 0.2500
??? ???????????????????? 0.0000
??? ???????????????????? 0.2500
fval =
?? ?????????????????????? -0.1300
exitflag =
???? ????????????????????????? 1
f =
0.1300
?????? 即4個項目的投資百分?jǐn)?shù)分別為50%,25%,0,? 25%時可使該公司獲得最大的收益,其最大收益可到達(dá)13%。過程正常收斂。
?????? 例6:求解實例3
?????? 建立數(shù)學(xué)模型:
設(shè)ai j為由工廠i運(yùn)到市場j的費用,xi j 是由工廠i運(yùn)到市場j的箱數(shù)。bi是工廠i的產(chǎn)量,dj是市場j的需求量。
?????? ?
b= ( 60 40 50 )T?? d= ( 20 35 33 34 )T
??????
?????? s.t?
?????????????
??????? x i j≥0
?????? 程序:?? A=[2 1 3 2;1 3 2 1;3 4 1 1];
???????????????????? f=A(:);
???????????????????? B=[ 1 0 0 1 0 0 1 0 0 1 0 0
??????????????????????????? 0 1 0 0 1 0 0 1 0 0 1 0
??????????????????????????? 0 0 1 0 0 1 0 0 1 0 0 1];
???????????????????? D=[1 1 1 0 0 0 0 0 0 0 0 0
??????????????????????????? 0 0 0 1 1 1 0 0 0 0 0 0
??????????????????????????? 0 0 0 0 0 0 1 1 1 0 0 0
??????????????????????????? 0 0 0 0 0 0 0 0 0 1 1 1];
???????????????????? b=[60;40;50];
???????????????????? d=[20;35;33;34];
???????????????????? lb=zeros(12,1);
???????????????????? [x,fval,exitflag]=linprog(f,B,b,D,d,lb)
?????? 結(jié)果:?? x =
??? ???????????????????? 0.0000
?? ?????????????????????? 20.0000
??? ???????????????????? 0.0000
?? ?????????????????????? 35.0000
??? ???????????????????? 0.0000
??? ???????????????????? 0.0000
??? ???????????????????? 0.0000
??? ???????????????????? 0.0000
?? ?????????????????????? 33.0000
??? ???????????????????? 0.0000
?? ?????????????????????? 18.4682
?? ?????????????????????? 15.5318
fval =
??????????????????????????? 122.0000
exitflag =
???? 1
?????? 即運(yùn)輸方案為:甲市場的貨由B廠送20箱;乙市場的貨由A廠送35箱;丙商場的貨由C廠送33箱;丁市場的貨由B廠送18箱,再由C廠送16箱。
最低總運(yùn)費為:122元。
?
§2 非線性規(guī)劃模型
一.非線性規(guī)劃課題
實例1? 表面積為36平方米的最大長方體體積。
建立數(shù)學(xué)模型:
設(shè)x、y、z分別為長方體的三個棱長,f為長方體體積。
max f = x y (36-2 x y)/2 (x+y)
實例2? 投資決策問題
某公司準(zhǔn)備用5000萬元用于A、B兩個項目的投資,設(shè)x1、x2分別表示配給項目A、B的投資。預(yù)計項目A、B的年收益分別為20%和16%。同時,投資后總的風(fēng)險損失將隨著總投資和單位投資的增加而增加,已知總的風(fēng)險損失為2x12+x22+(x1+x2)2.問應(yīng)如何分配資金,才能使期望的收益最大,同時使風(fēng)險損失為最小。
建立數(shù)學(xué)模型:
?????? max f=20x1+16x2-λ[2x12+x22+(x1+x2)2]
?????? s.t? x1+x2≤5000
??????? x 1≥0,x2≥0
目標(biāo)函數(shù)中的λ≥0是權(quán)重系數(shù)。
由以上實例去掉實際背景,其目標(biāo)函數(shù)與約束條件至少有一處是非線性的,稱其為非線性問題。
非線性規(guī)劃問題可分為無約束問題和有約束問題。實例1為無約束問題,實例2為有約束問題。
二.無約束非線性規(guī)劃問題:
求解無約束最優(yōu)化問題的方法主要有兩類:直接搜索法(Search method)和梯度法(Gradient method).
1.fminunc函數(shù)
調(diào)用格式: x=fminunc(fun,x0)
???????????????????? x=fminunc(fun,x0,options)
???????????????????? x=fminunc(fun,x0,options,P1,P2)
????????????? [x,fval]=fminunc(…)
????????????? [x,fval, exitflag]=fminunc(…)
????????????? [x,fval, exitflag,output]=fminunc(…)
[x,fval, exitflag,output,grad]=fminunc(…)
[x,fval, exitflag,output,grad,hessian]=fminunc(…)
說明:fun為需最小化的目標(biāo)函數(shù),x0為給定的搜索的初始點。options指定優(yōu)化參數(shù)。
返回的x為最優(yōu)解向量;fval為x處的目標(biāo)函數(shù)值;exitflag描述函數(shù)的輸出條件;output返回優(yōu)化信息;grad返回目標(biāo)函數(shù)在x處的梯度。Hessian返回在x處目標(biāo)函數(shù)的Hessian矩陣信息。
例1 : 求
程序:編輯ff1.m文件
function f=ff1(x)
f=8*x(1)-4*x(2) +x(1)^2+3*x(2)^2;
通過繪圖確定一個初始點:
[x,y]=meshgrid(-10:.5:10);
z= 8*x-4*y +x.^2+3*y.^2;
surf(x,y,z)
選初始點:x0=(0,0)
x0=[0,0];
[x,fval,exitflag]=fminunc(@ff1,x0)
?
結(jié)果:x =
?? ???????? -4.0000??? 0.6667
fval =
? ?????????? -17.3333
exitflag =
???? ??????????? 1
例2:
程序:編輯ff2.m文件:
function f=ff2(x)
f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2;
取初始點:x0=(1,1)
x0=[1,1];
[x,fval,exitflag]=fminunc(@ff2,x0)
?????? 結(jié)果:??? x =
? ???????????????????????? 1.0e-007 *
?? ?????????????????????? -0.1721??? 0.1896
fval =
? ???????????????????????? 2.7239e-016
exitflag =
???? ?????????????????? ?????? 1
?????? 例3:將上例用提供的梯度g最小化函數(shù)進(jìn)行優(yōu)化計算。
修改M文件為:
function [f,g]=ff3(x)
f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2;
if nargut >1
???? g(1)=8*x(1)+5*x(2);
???? g(2)=5*x(1)+4*x(2);
end
通過下面將優(yōu)化選項結(jié)構(gòu)options.GradObj設(shè)置為’on’來得到梯度值。
?????? options=optimset(‘Gradobj’,’on’);
?????? x0=[1,1];
[x,fval,exitflag]=fminunc(@ff3,x0,options)
?????? 結(jié)果:?? x =
? ???????????????????????? 1.0e-015 *
?? ?????????????????????? -0.2220?? -0.2220
fval =
? ???????????????????????? 5.4234e-031
exitflag =
???? ?????????????????? 1
2. minsearch函數(shù)
調(diào)用格式: x=fminsearch(fun,x0)
???????????????????? x=fminsearch(fun,x0,options)
???????????????????? x=fminsearch(fun,x0,options,P1,P2)
????????????? [x,fval]=fminsearch(…)
????????????? [x,fval, exitflag]=fminsearch(…)
????????????? [x,fval, exitflag,output]=fminsearch(…)
[x,fval, exitflag,output,grad]=fminsearch(…)
[x,fval, exitflag,output,grad,hessian]=fminsearch(…)
說明:參數(shù)及返回變量同上一函數(shù)。對求解二次以上的問題,fminsearch函數(shù)比fminunc函數(shù)有效。????
?
3. 多元非線性最小二乘問題:
非線線性最小二乘問題的數(shù)學(xué)模型為:
其中L為常數(shù)。
調(diào)用格式:? x=lsqnonlin(fun,x0)
???????????????????? x=lsqnonlin(fun,x0,lb,ub)
x=lsqnonlin(fun,x0,options)
???????????????????? x=lsqnonlin(fun,x0,options,P1,P2)
????????????? [x,resnorm]=lsqnonlin(…)
????????????? [x,resnorm, residual,exitflag]=lsqnonlin(…)
????????????? [x,resnorm, residual , exitflag,output]=lsqnonlin(…)
[x,resnorm, residual,exitflag, output,lambda]=lsqnonlin(…)
[x,resnorm, r esidual,exitflag, output,lambda,jacobian]=lsqnonlin(…)
說明:x返回解向量;resnorm返回x處殘差的平方范數(shù)值:sum(fun(x).^2);residual返回x處的殘差值fun(x);lambda返回包含x處拉格朗日乘子的結(jié)構(gòu)參數(shù);jacobian返回解x處的fun函數(shù)的雅可比矩陣。
lsqnonlin默認(rèn)時選擇大型優(yōu)化算法。Lsqnonlin通過將options.LargeScale設(shè)置為’off’來作中型優(yōu)化算法。其采用一維搜索法。
例4.求 minf=4(x2-x1)2+(x2-4)2 ,選擇初始點x0(1,1)
程序:
f ='4*(x(2)-x(1))^2+(x(2)-4)^2'
[x,reshorm]=lsqnonlin(f,[1,1])
結(jié)果:?? x =
??? ????????????? 3.9896??? 3.9912
reshorm =
? ????????????????? 5.0037e-009
例5:求,選擇初始點x0(0.2,0.3)
求解:先編輯ff5.m文件:
????????????? function f=ff5(x)
????????????? k=1:10;
????????????? f=2+2*k-exp(k*x(1))-exp(k*x(2));
然后作程序:x0=[0.2,0.3];
???????????????????? [x,resnorm]=lsqnonlin(@ff5,x0)
結(jié)果 : x =
??? ????????????? 0.2578??? 0.2578
resnorm =
? ????????????????? 124.3622
二. 有約束非線性規(guī)劃問題:
數(shù)學(xué)模型:? min F(x)
s.t ?Gi (x) ≤0???????????? i=1,…,m
??? ? ?????????? Gj (x) =0???????? j=m+1,…,n
??? ? ?????????? xl≤x≤xu
其中:F(x)為多元實值函數(shù),G(x)為向量值函數(shù),
在有約束非線性規(guī)劃問題中,通常要將該問題轉(zhuǎn)換為更簡單的子問題,這些子問題可以求并作為迭代過程的基礎(chǔ)。其基于K-T方程解的方法。它的K-T方程可表達(dá)為:
?????? 方程第一行描述了目標(biāo)函數(shù)和約束條件在解處梯度的取消。由于梯度取消,需要用拉格朗日乘子λi來平衡目標(biāo)函數(shù)與約束梯度間大小的差異。
調(diào)用格式: ?? x=fmincon(f,x0,A,b)
?????? ???????????????????? x=fmincon(f,x0,A,b,Aeq,beq)
??????????????????????????? x=fmincon(f,x0,A,b,Aeq,beq,lb,ub)
??????????????????????????? x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon)
??????????????????????????? x=fmincon(f,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=fmincon(f,x0,A,b)返回值x為最優(yōu)解向量。其中:x0為初始點。A,b為不等式約束的系數(shù)矩陣和右端列向量。
?????? x=fmincon(f,x0,A,b,Aeq,beq) 作有等式約束的問題。若沒有不等式約束,則令A=[ ]、b=[ ] 。
x=fmincon(f, x0,A,b,Aeq,beq,lb,ub, nonlcon ,options) 中lb ,ub為變量x的下界和上界;nonlcon=@fun,由M文件fun.m給定非線性不等式約束c (x) ≤0和等式約束g(x)=0;options為指定優(yōu)化參數(shù)進(jìn)行最小化。
例6:求解:min 100(x2-x12 )2+(1-x1)2
????????? s.t? x1≤2;
x2≤2
程序:首先建立ff6.m文件:
function f=ff6(x)
f=100*(x(2)-x(2)^2)^2+(1-x(1))^2;
然后在工作空間鍵入程序:
x0=[1.1,1.1];
A=[1 0;0 1];
b=[2;2];
[x,fval]=fmincon(@ff6,x0,A,b)
結(jié)果:? x =
??? ??????????? 1.0000??? 1.0000
fval =
? ????? 3.1936e-011
??? 例7:求解:
??????? 首先建立目標(biāo)函數(shù)文件ff7.m文件:
??????????? function f=ff7(x)
??????????? f=-x(1)*x(2)*x(3)
??????? 然后將約束條件改寫成如下不等式:
??????????????? -x1-2x2-2x3≤0
??????????????? x1+2x2+2x3≤72
??? 在工作空間鍵入程序:
??????????? A=[-1 –2 –2;1 2 2];
??????????? b=[0;72];
??????????? x0=[10;10;10];
??????????? [x,fval]=fmincon(@ff71,x0,A,b)
??? 結(jié)果:? x =
?? ???????????? 24.0000
?? ???????????? 12.0000
?? ???????????? 12.0000
fval =
?????? ???????? -3456
例8求解:minf=ex1(6x12+3x22+2x1x2+4x2+1)
????????????? s.t ? x1x2-x1-x2+1≤0
??????????? -2x1x2-5≤0
程序:首先建立目標(biāo)函數(shù)文件ff8.m文件:
??????? function? f=ff8(x)
????????????? f=exp(x(1))*(6*x(1)^2+3*x(2)^2+2*x(1)*x(2)+4*x(2)+1);
?????? 再建立非線性的約束條件文件:ff8g.m
????????????? function [c,g]=ff8g(x)
????????????? c(1)=x(1)*x(2)-x(1)-x(2)+1;
????????????? c(2)=-2*x(1)*x(2)-5;
g=[];
然后在工作空間鍵入程序:
??????? x0=[1,1];
????????????? nonlcon=@ff8g
[x, fval] =fmincon(@ff8,x0,[],[],[],[],[],[], nonlcon)
結(jié)果:? x =
?? ???????? -2.5000??? 1.0000
fval =
??? ??????? 3.3244
exitflag =
???? ?????? 1
??? 當(dāng)有等式約束時,要放在矩陣g的位置,如上例中加等式約束:
??????? x(1)+2*x(1)=0
程序:首先建立 fun1.m文件:
??????? function[c,g]=ff8g1(x)
?????? c(1)=x(1)*x(2)-x(1)-x(2)+1;
?????? c(2)=-2*x(1)*x(2)-5;
?????? g(1)=x(1)+2*x(2);
然后在工作空間鍵入程序:
??????? x0=[-1,1];
?????? nonlcon=@ff8g1;
??????? [x, fval,exitflag] =fmincon(@ff8,x0,[],[],[],[],[],[], nonlcon)
結(jié)果:? x =
?? ???????????? -2.2361??? 1.1180
fval =
??? ??????????? 3.6576
exitflag =
??? ??????? ??? 1
§3 二次規(guī)劃模型
數(shù)學(xué)模型:
???????????
其中H為二次型矩陣,A、Aeq分別為不等式約束與等式約束系數(shù)矩陣,f,b,beq,lb,ub,x為向量。
??? 求解二次規(guī)劃問題函數(shù)為quadprog( )
調(diào)用格式: X= quadprog(H,f,A,b)
?????????? X= quadprog(H,f,A,b,Aeq,beq)
?????????? X= quadprog(H,f,A,b,Aeq,beq,lb,ub)
?????????? X= quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
?????????? X= quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
?????? [x,fval]= quadprog(…)
?????? [x,fval,exitflag]= quadprog(…)
?????? [x,fval,exitflag,output]= quadprog(…)
?????? [x,fval,exitflag,output,lambda]= quadprog(…)
說明:輸入?yún)?shù)中,x0為初始點;若無等式約束或無不等式約束,就將相應(yīng)的矩陣和向量設(shè)置為空;options為指定優(yōu)化參數(shù)。輸出參數(shù)中,x是返回最優(yōu)解;fval是返回解所對應(yīng)的目標(biāo)函數(shù)值;exitflag是描述搜索是否收斂;output是返回包含優(yōu)化信息的結(jié)構(gòu)。Lambda是返回解x入包含拉格朗日乘子的參數(shù)。
例1:求解:二次規(guī)劃問題
??????????? min f(x)= x1-3x2+3x12+4x22-2x1x2
??????????? s.t? 2x1+x2≤2
??????? ??????? -x1+4x2≤3
程序: f=[1;-3]
?????? H=[6 -2;-2 8]
??????????? A=[2 1;-1 4]
?????????? b=[2;3]
?????????? [X,fval,exitflag]=quadprog(H,f,A,b)
結(jié)果: X =
?? ???????????? -0.0455
??? ??????????? 0.3636
fval =
?? ???????????? -0.5682
exitflag =
???? ?????????????? 1
例2:求解:二次規(guī)劃問題
??????????? min? +x12+2x22-2x1x2-4x1-12x2
??????????? s.t? x1+x2≤2
??????? ??? -x1+2x2≤2
2x1+x2≤3
0≤x1, 0≤x2
??? 程序: H=[2 -2;-2 4];
?????????? f=[-4;-12];
?????????? A=[1 1;-1 2;2 1];
?????????? b=[2;2;3];
?????????? lb=zeros(2,1);
??? ?????? [x,fval,exitflag]=quadprog(H,f,A,b,[],[],lb)
??? 結(jié)果:? x =
??? ??????????????? 0.6667
??? ??????????????? 1.3333
fval =
? ????????????????? -16.4444
exitflag =
???? ?????????????? 1
§4 多目標(biāo)規(guī)劃模型
多目標(biāo)規(guī)劃定義為在一組約束下,多個不同的目標(biāo)函數(shù)進(jìn)行優(yōu)化設(shè)計。
數(shù)學(xué)模型:
????????????????????
?????? ??????? s.t? gj (x) ≤0?? j=1, 2, … ,k
??? 其中x=(x1 ,x2 , … ,xn)為一個n維向量;fi(x)為目標(biāo)函數(shù),i=1, 2, … ,m; gj (x)為系統(tǒng)約束, j=1, 2, … ,k。
??? 當(dāng)目標(biāo)函數(shù)處于沖突狀態(tài)時,不存在最優(yōu)解使所有目標(biāo)函數(shù)同時達(dá)到最優(yōu)。于是我們尋求有效解(又稱非劣解或非支配解或帕累托解)
??? 定義:若(∈Ω)的鄰域內(nèi)不存在Δx,使得(+Δx∈Ω),且
???????
則稱為有效解。
多目標(biāo)規(guī)劃問題的幾種常用解法:
(1)? 主要目標(biāo)法
其基本思想是:在多目標(biāo)問題中,根據(jù)問題的實際情況,確定一個目標(biāo)為主要目標(biāo),而把其余目標(biāo)作為次要目標(biāo),并且根據(jù)經(jīng)驗,選取一定的界限值。這樣就可以把次要目標(biāo)作為約束來處理,于是就將原來的多目標(biāo)問題轉(zhuǎn)化為一個在新的約束下的單目標(biāo)最優(yōu)化問題。
(2)? 線性加權(quán)和法
其基本思想是:按照多目標(biāo)fi(x) (i=1, 2, … ,m)的重要程度,分別乘以一組權(quán)系數(shù)λj(j=1, 2, … ,m)然后相加作為目標(biāo)函數(shù)而構(gòu)成單目標(biāo)規(guī)劃問題。即 ,其中
例1:某鋼鐵廠準(zhǔn)備用5000萬用于A、B兩個項目的技術(shù)改造投資。設(shè)x1、x2分別表示分配給項目A、B的投資。據(jù)專家預(yù)估計,投資項目A、B的年收益分別為70%和66%。同時,投資后總的風(fēng)險損失將隨著總投資和單項投資的增加而增加,已知總的風(fēng)險損失為0.02x12+0.01x22+0.04(x1+x2)2,問應(yīng)如何分配資金才能使期望的收益最大,同時使風(fēng)險損失為最小。
建立數(shù)學(xué)模型
???????????????????? max f1(x)=70x1+66x2
???????????????????? min f2(x)= 0.02x12+0.01x22+0.04(x1+x2)2
s.t?? x1+x2≤5000
????????????? 0≤x1, 0≤x2
線性加權(quán)構(gòu)造目標(biāo)函數(shù):? max f=0.5f1(x) –0.5f2(x)
化最小值問題:?????? min (-f)=- 0.5f1(x) +0.5f2(x)
首先編輯目標(biāo)函數(shù)M文件ff11.m
function? f=ff11(x)
f=-0.5*(70*x(1)+66*x(2))+0.5*(0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2);
調(diào)用單目標(biāo)規(guī)劃求最小值問題的函數(shù)
x0=[1000,1000]
???????????????????? A=[1 1];
b=5000;
lb=zeros(2,1);
[x,fval, exitflag]=fmincon(@ff11,x0, A,b,[],[],lb,[])
f1=70*x(1)+66*x(2)
f2=0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2
結(jié)果:x =
? ?????????? 307.1428? 414.2857
fval =
??????????????????? -1.2211e+004
exitflag =
???? 1
???????????????????? f1 =? 4.8843e+004
f2 =? 2.4421e+004
(3)? 極大極小法
其基本思想是:對于極小化的多目標(biāo)規(guī)劃,讓其中最大的目標(biāo)函數(shù)值盡可能地小為此,對每個 x∈R,我們先求諸目標(biāo)函數(shù)值fi(x)的最大值,然后再求這些最大值中的最小值。即構(gòu)造單目標(biāo)規(guī)劃:
(4)? 目標(biāo)達(dá)到法
對于多目標(biāo)規(guī)劃:
?????? ??????? s.t? gj (x) ≤0?? j=1, 2, … ,n
先設(shè)計與目標(biāo)函數(shù)相應(yīng)的一組目標(biāo)值理想化向量,
再設(shè)γ為一松弛因子標(biāo)量。設(shè)為權(quán)值系數(shù)向量。
于是多目標(biāo)規(guī)劃問題化為:
???????
在Matlab的優(yōu)化工具箱中,fgoalattain函數(shù)用于解決此類問題。
其數(shù)學(xué)模型形式為:
??????? min γ
??????? F(x)-weight ·γ≤goal
??????? c(x) ≤0
??????? ceq(x)=0
A x≤b
Aeq x=beq
lb≤x≤ub
??? 其中,x,weight,goal,b,beq,lb和ub為向量,A和Aeq為矩陣,c(x),ceq(x)和F(x)為函數(shù),
??? 調(diào)用格式:
x=fgoalattain(F,x0,goal,weight)
x=fgoalattain(F,x0,goal,weight,A,b)
x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq)
x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2)
[x,fval]=fgoalattain(…)
[x,fval,attainfactor]=fgoalattain(…)
[x,fval,attainfactor,exitflag,output]=fgoalattain(…)
[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(…)
說明:F為目標(biāo)函數(shù);x0為初值;goal為F達(dá)到的指定目標(biāo);weight為參數(shù)指定權(quán)重;A、b為線性不等式約束的矩陣與向量;Aeq、beq為等式約束的矩陣與向量;lb、ub為變量x的上、下界向量;nonlcon為定義非線性不等式約束函數(shù)c(x)和等式約束函數(shù)ceq(x);options中設(shè)置優(yōu)化參數(shù)。
x返回最優(yōu)解;fval返回解x處的目標(biāo)函數(shù)值;attainfactor返回解x處的目標(biāo)達(dá)到因子;exitflag描述計算的退出條件;output返回包含優(yōu)化信息的輸出參數(shù);lambda返回包含拉格朗日乘子的參數(shù)。
??? 例2:某化工廠擬生產(chǎn)兩種新產(chǎn)品A和B,其生產(chǎn)設(shè)備費用分別為2萬元/噸和5萬元/噸。這兩種產(chǎn)品均將造成環(huán)境污染,設(shè)由公害所造成的損失可折算為A為4萬元/噸,B為1萬元/噸。由于條件限制,工廠生產(chǎn)產(chǎn)品A和B的最大生產(chǎn)能力各為每月5噸和6噸,而市場需要這兩種產(chǎn)品的總量每月不少于7噸。試問工廠如何安排生產(chǎn)計劃,在滿足市場需要的前提下,使設(shè)備投資和公害損失均達(dá)最小。該工廠決策認(rèn)為,這兩個目標(biāo)中環(huán)境污染應(yīng)優(yōu)先考慮,設(shè)備投資的目標(biāo)值為20萬元,公害損失的目標(biāo)為12萬元。
??? 建立數(shù)學(xué)模型:
??? 設(shè)工廠每月生產(chǎn)產(chǎn)品A為x1噸,B為x2噸,設(shè)備投資費為f(x1),公害損失費為f(x2),則問題表達(dá)為多目標(biāo)優(yōu)化問題:
??????????? min f1(x)=2x1+5x2
??????????? min f2(x)=4x1+x2
??????????? s.t? x1≤5
??????????????? ?x2≤6
??????????????? x1+x2≥7
x1 ,x2≥0
??? 程序:首先編輯目標(biāo)函數(shù)M文件ff12.m
??????????? function f=ff12(x)
?????????? f(1)=2*x(1)+5*x(2);
???????????????????? f(2)= 4*x(1) +x(2);
?????? 按給定目標(biāo)取:
???????????????????? goal=[20,12];
???????????????????? weight=[20,12];
???????????????????? x0=[2,2]
???????????????????? A=[1 0; 0 1;-1 -1];
b=[5 6 -7];
lb=zeros(2,1);
[x,fval,attainfactor,exitflag]=fgoalattain(@ff12,x0,goal,weight,A,b,[],[],lb,[])
?????? 結(jié)果:?? x =
??? ???????????????????? 2.9167??? 4.0833
fval =
?? ?????????????????????? 26.2500?? 15.7500
attainfactor =
??? ???????????????????? 0.3125
exitflag =
???? 1
????????????????????
??? 例3:某工廠生產(chǎn)兩種產(chǎn)品甲和乙,已知生產(chǎn)甲產(chǎn)品100公斤需6個工時,生產(chǎn)乙產(chǎn)品100公斤需8個工時。假定每日可用的工時數(shù)為48工時。這兩種產(chǎn)品每100公斤均可獲利500元。乙產(chǎn)品較受歡迎,且若有個老顧客要求每日供應(yīng)他乙種產(chǎn)品500公斤,問應(yīng)如何安排生產(chǎn)計劃?
??? 建立數(shù)學(xué)模型:
??? 設(shè)生產(chǎn)甲、乙兩種產(chǎn)品的數(shù)量分別為x和x(以公斤計),要使生產(chǎn)計劃比較合理,應(yīng)考慮用工時盡量少,獲利盡量大,
??? 其用多目標(biāo)規(guī)劃描述這:
??????????????? min f1=6x1+8x2
??????????????????????????? max f2=100(x1+x2)
??????????????????????????? max f3=x2
??????????????????????????? s.t? 6x1+8x2≤48
?????????????????????????????????? ?x2≥5
?????????????????????????????????? ?x1 ,x2≥0
??? 將其標(biāo)準(zhǔn)化為:
??????????????? min f1=6x1+8x2
??????????????????????????? min - f2=-100(x1+x2)
??????????????????????????? min - f3=-x2
??????????????????????????? s.t? 6x1+8x2≤48
?????????????????????????????????? ?-x2≤-5
?????????????????????????????????? ?x1 ,x2≥0
??? 程序:首先編輯目標(biāo)函數(shù)M文件ff13.m
??????????? function f=ff13(x)
?????????? f(1)=6*x(1)+8*x(2);
?????? ????????????? f(2)= -100*(x(1) +x(2));
???????????????????? f(3)=-x(2);
?????? 按給定目標(biāo)取:
???????????????????? goal=[48 -1000 -5];
???????????????????? weight=[48 -1000 -5];
???????????????????? x0=[2 2];
???????????????????? A=[6 8; 0 -1];
b=[48 -5];
lb=zeros(2,1);
[x,fval,attainfactor,exitflag]=fgoalattain(@ff13,x0,goal,weight,A,b,[],[],lb,[])
?????? 結(jié)果:?? x =???
1.3333??? 5.0000
fval =
?? ?????????????????????? 48.0000 -633.3333?? -5.0000
attainfactor =
? ???????????????????????? 1.6338e-008
exitflag =
???? ?????????????????? 1
?????? 即生產(chǎn)計劃為每日生產(chǎn)甲產(chǎn)品133.33公斤,生產(chǎn)乙產(chǎn)品500公斤。
§5 最大最小化模型
??? 基本思想:在對策論中,我們常遇到這樣的問題:在最不利的條件下,尋求最有利的策略。在實際問題中也有許多求最大值的最小化問題。例如急救中心選址問題就是要規(guī)劃其到所有地點最大距離的最小值。在投資規(guī)劃中要確定最大風(fēng)險的最低限度等等。為此,對每個x∈R,我們先求諸目標(biāo)值fi(x)的最大值,然后再求這些最大值中的最小值。
??? 最大最小化問題的數(shù)學(xué)模型:
???????????????
??? 求解最大最小化問題的函數(shù)為 fmininax
??? 調(diào)用格式:
x=fminimax(F,x0,)
x=fminimax(F,x0,,A,b)
x=fminimax(F,x0,,A,b,Aeq,beq)
x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub)
x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon)
x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon,options)
x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2)
[x,fval]=fminimax(…)
[x,fval,maxfval]=fminimax(…)
[x,fval,maxfval,exitflag,output]=fminimax(…)
[x,fval,maxfval,exitflag,output,lambda]=fminimax(…)
說明:F為目標(biāo)函數(shù);x0為初值; A、b為線性不等式約束的矩陣與向量;Aeq、beq為等式約束的矩陣與向量;lb、ub為變量x的上、下界向量;nonlcon為定義非線性不等式約束函數(shù)c(x)和等式約束函數(shù)ceq(x);options中設(shè)置優(yōu)化參數(shù)。
x返回最優(yōu)解;fval返回解x處的目標(biāo)函數(shù)值;maxfval返回解x處的最大函數(shù)值;exitflag描述計算的退出條件;output返回包含優(yōu)化信息的輸出參數(shù);lambda返回包含拉格朗日乘子的參數(shù)。
例1 求解下列最大最小值問題:
?????
首先編輯M文件ff14.m
function f=ff14(x)
f(1)=3*x(1)^2+2*x(2)^2-12*x(1)+35;
f(2)=5*x(1)*x(2)-4*x(2)+7;
f(3)=x(1)^2+6*x(2);
f(4)=4*x(1)^2+9*x(2)^2-12*x(1)*x(2)+20;
?????? 取初值x0=(1,1)調(diào)用優(yōu)化函數(shù)
????????????? x0=[1 1];
[x,fval]=fminimax(@ff14,x0)
?????? 結(jié)果:x =
??? ????????????? 1.7637??? 0.5317
fval =
?? ??????????????? 23.7331??? 9.5621??? 6.3010?? 23.7331
?????? 例2:選址問題
?????? 設(shè)某城市有某種物品的10個需求點,第i個需求點Pi的坐標(biāo)為(ai,bi),道路網(wǎng)與坐標(biāo)軸平行,彼此正交。現(xiàn)打算建一個該物品的供應(yīng)中心,且由于受到城市某些條件的限制,該供應(yīng)中心只能設(shè)在x界于[5,8],y界于[5.8]的范圍之內(nèi)。問該中心應(yīng)建在何處為好?
?????? P點的坐標(biāo)為:??????????
| ai | 1 | 4 | 3 | 5 | 9 | 12 | 6 | 20 | 17 | 8 |
| bi | 2 | 10 | 8 | 18 | 1 | 4 | 5 | 10 | 8 | 9 |
?????? 建立數(shù)學(xué)模型:
?????? 設(shè)供應(yīng)中心的位置為(x,y),要求它到最遠(yuǎn)需求點的距離盡可能小,此處采用沿道路行走計算距離,可知每個用戶點Pi到該中心的距離為 |x-ai|+|y-bi|,于是有:
???
??????
編程:首先編輯M文件:ff15.m
?????? function f = ff15(x)
a=[1 4 3 5 9 12 6 20 17 8];
b=[2 10 8 18 1 4 5 10 8 9];
f(1) = abs(x(1)-a(1))+abs(x(2)-b(1));
f(2) = abs(x(1)-a(2))+abs(x(2)-b(2));
f(3) = abs(x(1)-a(3))+abs(x(2)-b(3));
f(4) = abs(x(1)-a(4))+abs(x(2)-b(4));
f(5) = abs(x(1)-a(5))+abs(x(2)-b(5));
f(6) = abs(x(1)-a(6))+abs(x(2)-b(6));
f(7) = abs(x(1)-a(7))+abs(x(2)-b(7));
f(8) = abs(x(1)-a(8))+abs(x(2)-b(8));
f(9) = abs(x(1)-a(9))+abs(x(2)-b(9));
f(10) = abs(x(1)-a(10))+abs(x(2)-b(10));
然后 用以下程序計算 :
????????????? x0 = [6; 6];????
AA=[-1 0
?? 1? 0
?? 0 -1
?? 0? 1];
bb=[-5;8;-5;8];
[x,fval] = fminimax(@ff15,x0,AA,bb)
?????? 結(jié)果:?? x =
???? ???? 8
???? ???? 8
fval =
??? 13???? 6???? 5??? 13???? 8???? 8???? 5??? 14???? 9???? 1
??? 即:在坐標(biāo)為(8,8)處設(shè)置供應(yīng)中心可以使該點到各需求點的最大距離最小,最小的最大距離為14單位。
總結(jié)
以上是生活随笔為你收集整理的matlab优化应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提高效率的几个软件和快捷键
- 下一篇: matlab中图像读写