优化工具箱.docx
- 文档编号:4597536
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:16
- 大小:135.13KB
优化工具箱.docx
《优化工具箱.docx》由会员分享,可在线阅读,更多相关《优化工具箱.docx(16页珍藏版)》请在冰豆网上搜索。
优化工具箱
六.优化工具箱(OptimizationToolbox)简介
6.1优化工具箱的功能及应用步骤
1.基本功能
(1)求解线性规划和二次规划问题;
(2)求解无约束条件非线性的极小值问题;
(3)求解带约束条件非线性的极小值问题;
(4)求解非线性方程组;
(5)求解带约束的线性最小二乘问题;
(6)求解非线性最小二乘逼近和曲线拟合问题。
2.应用步骤
(1)根据所提出的最优化问题,建立数学模型,确定变量、约束条件合目标函数;
(2)对数学模型进行分析研究,选择合适的最优求解方法;
(3)根据最优化方法的算法,选择最优化函数,编程计算。
6.2优化工具箱的函数使用方法
求解线性规划问题
(1)基本模型
其中x为向量,A1,A2为常数矩阵,C,b1,b2,lb,ub均为常数向量。
(2)数linprog调用
x=linprog(C,A1,b1);%决策变量无上下约束条件,并且只含有“≤“约束条件;
x=linprog(C,A1,b1,A2,b2);%决策变量无上下约束条件;
x=linprog(C,A1,b1,A2,b2,lb,ub);%决策变量有上下约束条件;
[x,fv]=linprog(…);%要求在迭代中同时返回目标函数值;
[x,fv,ef]=linprog(…);%要求返回程序结束标志;
[x,fv,ef,out]=linprog(…);%要求返回程序的优化信息;
(3)例子
例1求线性规划问题
subjectto
首先输入系数
C=[-5;-4;-6]
A=[1-11;324;32 0]
b=[20;42;30]
lb=zeros(3,1)
调用linprog函数
[x,fv,ef,out]=linprog(C,A,b,[],[],lb)
输出结果:
>>[x,fv,ef,out]=linprog(C,A,b,[],[],lb)
Optimizationterminatedsuccessfully.
x=
0.0000
15.0000
3.0000
fv=
-78.0000
ef=
1
out=
iterations:
6
cgiterations:
0
algorithm:
'lipsol'
例1求线性规划问题
maxz=2x1+3x2-5x3
s.t.x1+x2+x3=7
2x1-5x2+x3>=10,
x1,x2,x3>=0.
首先输入系数
C=[-2;-3;5]
A=[-251]
b=-10
Aeq=[111]
beq=7
lb=zeros(3,1)
调用linprog函数
[x,fv,ef,out]=linprog(C,A,b,Aeq,beq,lb)
输出结果:
>>[x,fv,ef,out]=linprog(C,A,b,Aeq,beq,lb)
Optimizationterminatedsuccessfully.
x=
6.4286
0.5714
0.0000
fv=
-14.5714
ef=
1
out=
iterations:
7
cgiterations:
0
algorithm:
'lipsol'
求解二次规划问题
(4)基本模型
其中x为向量,H,A1,A2为常数矩阵,C,b1,b2,lb,ub均为常数向量。
(2)函数quadprog调用格式
[x,fv,ef,out]=quadprog(H,C,A1,b1,A2,b2,lb,ub)
求解无约束条件非线性的极小值问题
(5)基本模型
其中x为n维向量,f(x)维非线性函数。
(6)函数fminunc调用格式
[x,fv,ef,out,grad,hess]=fminunc(fun,x0);
其中x0为迭代初值向量,opt为设置的可选参数值;
%grad返回函数在x处的梯度;
%hess返回函数在x处的海赛矩阵;
(7)函数fminsearch调用格式
[x,fv,ef,out]=fminsearch(fun,x0);
注:
fminunc是用拟牛顿法实现,需要用到函数的导数,而fminsearch是用单纯形搜索实现,不需要导数。
例1.求无约束非线性最小值问题
求解过程:
fun=inline('exp(x
(1))*(4*x
(1)^2+2*x
(2)^2+4*x
(1)*x
(2)+2*x
(2)+1)');
x0=[-1,1];
[x,fv,eg,out,grad,hess]=fminunc(fun,x0)
其中x0为选取的迭代初值;
输出结果:
Optimizationterminatedsuccessfully:
Currentsearchdirectionisadescentdirection,andmagnitudeof
directionalderivativeinsearchdirectionlessthan2*options.TolFun
x=
0.5000-1.0000
fv=
1.3028e-010
eg=
1
out=
iterations:
7
funcCount:
40
stepsize:
1
firstorderopt:
8.1998e-004
algorithm:
'medium-scale:
Quasi-Newtonlinesearch'
grad=
1.0e-003*
-0.4346
-0.8200
hess=
13.32656.7464
6.74646.8576
例2:
求
程序:
编辑ff1.m文件
functionf=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.00000.6667
fval=
-17.3333
exitflag=
1
4.求解有约束条件非线性的极小值问题
数学模型:
minF(x)
s.tGi(x)≤0i=1,…,m
Gj(x)=0j=m+1,…,n
Ax≤b;
Aeq*x≤beq
lb≤x≤ub
其中:
F(x)为多元实值函数,G(x)为向量值函数,
调用格式:
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为指定优化参数进行最小化。
例2求解:
minf=ex1(6x12+3x22+2x1x2+4x2+1)
s.tx1x2-x1-x2+1≤0
-2x1x2-5≤0
程序:
首先建立目标函数文件ff8.m文件:
functionf=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.50001.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.23611.1180
fval=
3.6576
exitflag=
1
5.多目标规划模型
多目标规划定义为在一组约束下,多个不同的目标函数进行优化设计。
数学模型:
s.tgj(x)≤0j=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,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。
建立数学模型
maxf1(x)=70x1+66x2
minf2(x)=0.02x12+0.01x22+0.04(x1+x2)2
s.tx1+x2≤5000
0≤x1,0≤x2
线性加权构造目标函数:
maxf=0.5f1(x)–0.5f2(x)
化最小值问题:
min(-f)=-0.5f1(x)+0.5f2(x)
首先编辑目标函数M文件ff11.m
functionf=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=[11];
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.1428414.2857
fval=
-1.2211e+004
exitflag=
1
f1=4.8843e+004
f2=2.4421e+004
(3)极大极小法
其基本思想是:
对于极小化的多目标规划,让其中最大的目标函数值尽可能地小为此,对每个x∈R,我们先求诸目标函数值fi(x)的最大值,然后再求这些最大值中的最小值。
即构造单目标规划:
(4)目标达到法
对于多目标规划:
s.tgj(x)≤0j=1,2,…,n
先设计与目标函数相应的一组目标值理想化向量
,
再设γ为一松弛因子标量。
设
为权值系数向量。
于是多目标规划问题化为:
在Matlab的优化工具箱中,fgoalattain函数用于解决此类问题。
其数学模型形式为:
minγ
F(x)-weight·γ≤goal
c(x)≤0
ceq(x)=0
Ax≤b
Aeqx=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),则问题表达为多目标优化问题:
minf1(x)=2x1+5x2
minf2(x)=4x1+x2
s.tx1≤5
x2≤6
x1+x2≥7
x1,x2≥0
程序:
首先编辑目标函数M文件ff12.m
functionf=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=[10;01;-1-1];
b=[56-7];
lb=zeros(2,1);
[x,fval,attainfactor,exitflag]=fgoalattain(@ff12,x0,goal,weight,A,b,[],[],lb,[])
结果:
x=
2.91674.0833
fval=
26.250015.7500
attainfactor=
0.3125
exitflag=
1
6. 最大最小化模型
基本思想:
在对策论中,我们常遇到这样的问题:
在最不利的条件下,寻求最有利的策略。
在实际问题中也有许多求最大值的最小化问题。
例如急救中心选址问题就是要规划其到所有地点最大距离的最小值。
在投资规划中要确定最大风险的最低限度等等。
为此,对每个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
functionf=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=[11];
[x,fval]=fminimax(@ff14,x0)
结果:
x=
1.76370.5317
fval=
23.73319.56216.301023.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
functionf=ff15(x)
a=[1435912620178];
b=[2108181451089];
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=[-10
10
0-1
01];
bb=[-5;8;-5;8];
[x,fval]=fminimax(@ff15,x0,AA,bb)
结果:
x=
8
8
fval=
1365138851491
即:
在坐标为(8,8)处设置供应中心可以使该点到各需求点的最大距离最小,最小的最大距离为14单位。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 工具箱