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