第10章MATLAB优化设计jsp.docx
- 文档编号:12456843
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:16
- 大小:49.73KB
第10章MATLAB优化设计jsp.docx
《第10章MATLAB优化设计jsp.docx》由会员分享,可在线阅读,更多相关《第10章MATLAB优化设计jsp.docx(16页珍藏版)》请在冰豆网上搜索。
第10章MATLAB优化设计jsp
第10章优化设计中的应用
在优化问题中,根据变量、目标函数和约束数的不同,可以将问题大致分为:
●线性优化目标函数和约束函数均为线性。
●二次优化目标函数为二次函数,而约束条件为线性方程:
线性优化和二次优化统称为简单优化。
●非线性优化目标函数为非二次的非线性函数,或约束条件为非线性方程。
●多任务目标优化目标函数并非一个时,称为多任务优化问题。
本章将对以上几类优化问题材在MATLAB中的实现作比较详细的讲解。
另外,还将介绍两个利用优化方法解非线性方程的函数。
(一)线性优化
线性优化问题即目标函数和约束条件均为线性的问题
其标准形式为:
MinC'xxRn
Sub.toAx=b
x≥0
其中ARm×n,m≤n(通常m<n=,bRn,CRn均为数值矩阵.
标准形式的线性优化问题简称LP(LinearProgramming)为问题。
其他形式的线性优化问题经过适当的变换均可以化为此种标准型。
线性优化问题在工农业及其他生产部门中应用十分广泛。
在MATLAB中,线性优化问题由lp函数求解。
1.函数介绍
●lp线性规划函数
Øx=lp(f,A,b)解如下形式的线性规划问题。
minf'x
x
Subjectto:
Ax≤b
Øx=lp(f,A,b,vlb,vub)参数vlb,vub给出设计变量的上下边界约束,即vlb≤x≤vub.
Øx=lp(f,A,b,vlb,vub,x0)设置初值x0.
Øx=lp(f,A,b,vlb,vub,x0,N)指出由A、b定义的约束中前N个为等式约束。
Øx=lp(f,A,b,vlb,vub,x0,N,DISPLAY)控制警告信息显示,当时DISPLAY=-1不显示警告信息。
Ø[x,LAMBDA]=lp(f,A,b)返回解的一组拉格朗日积。
Ø[x,LAMBDA,HOW]=lp(f,A,b)返回信息,指出最终迭代的错误条件。
注意当解为无边界或非真实时,lp产生警告信息。
2.应用举例
求下面的优化问题。
Min-5x1+4x2+2x3
Sub.to6x1-x2+x3≤8
X1+2x2+4x3≤10
3≥x1≥-1
2≥x2≥0
x3≥0
此问题即为线性优化的标准型问题。
解:
●MATLAB实现
>>c=[-5,4,2];a=[6,-1,1;1,2,4,];b=[8,10];
>>vlb=[-1,0,0];vub=[3,2];
>>[x,lam]=lp(c,a,b,vlb,vub)
x=
1.3333
0
0
lam=
0.8333
0
0
3.1667
2.8333
0
0
说明x解为最优解;lam说明条件6x1-x2+x3≤8和x2≥0及x3≥0发挥了作用。
下成再看一个实际中的应用问题。
例10.2某车间生产A和B两种产品。
为了生产A和B,所需的原料分别为2个和3个单位,而所需的工时分别为4个和2个单位,现在可以应用的原料为100个单位,工时为120个单位,每生产一台A和B分别可获得利润6元和4元,应当安排生产A、B各多少台,才能获得最大的利润?
●分析:
此问题的数学表达式为,设该车间应安排生产的A、B的数量分别为x1台,x2台,那么问题是求解最大值函数z=6x1+4x2.
x1,x2应满足如下条件:
原材料方面2x1+3x2≤100
工时方面4x1+2x2≤120
非负条件x1,x2≥0
即:
maxz=6x1+4x2minz=-6x1-4x2
Sub.to2x1+3x2≤100Sub.to2x1+3x2≤100
4x1+2x2≤1204x1+2x2≤120
x1,x2≥0x1,x2≥0
经过此变换化为标准型。
●MATLAB实现
c=[-6,-4];
a=[2,3;4,2];
b=[100,120];
vlb=[0,0];
vub=[];
[x,lam]=lp(c,a,b,vib,vub)
(二)二次优化
二次优化问题简称为QP(QuadraticProgramming)问题。
标准形式如下:
Minq(x)=xTGx+qTx
Sub.toA1x1=b1
A2x2≥b2
[B.C.]
其中x∈Rn,GRn×n为对称阵,q∈Rn,下标1表不等式约束,下标2表示不等式约束。
若G正定,则问题为凸二次规划问题,它有惟一的全局解。
在实际问题中遇到的绝大多数都是此类问题。
在MATLAB中,二次优化问题可由函数qp求解。
1.函数介绍
●qp二次规划函数
Øx=qp(H,f,A,b)解决如下形式的二次规划问题
min0.5x'Hx+f'x
x
Sub.to:
Ax≤b
Øx=qp(H,f,A,b,vlb,vub)参数vlb、vub给出设计变量的上下边界约束,
即vlb≤x≤vub
Øx=qp(H,f,A,b,vlb,vub,x0)设置初值x0.
ØX=qp(H,f,A,b,vlb,vub,x0,n)指出由A、b定义的约束中前n个为等式约束。
ØX=qp(H,f,A,b,vlb,vub,x0,n,DISPLAY)控制警告信息显示,当DISPLAY=-1时不显示警告信息。
Ø[x,LAMBDA]qp(H,f,A,b)返回解的一组拉格朗日积LAMBDA.
Ø[x,LAMBDA,HOW]=qp(H,f,A,b)返回信息,指出最终迭代的错误条件。
注意当解为无边界或非真实时,产生警告信息。
2.应用举例
【例10.3】求解如下二次优化问题。
解:
此即为二次优化的标准型。
Sub.tox1+x2≤2
-x1+2x2≤2
2x1+x2≤3
x1,,x2≥0
●MATLAB实现
h=[1,-1;-1,2];
c=[-2;-6]
a=[11;-12;21]
b=[2;2;3]
[x,l]=qp(h,c,a,b,zreros(2,1))
当所给函数并非标准确性型时,需要作一些变换,看下面的例子。
【例10.4】求解如下二次优化问题。
minf(x)=x12+x22-4x1+4
Sub.tox1-x2+2≥0
-x1+x2-1≥0
x1,x2≥0
解:
可以看出目标函数并非标准型,需要作以下变换
其中常数项与优化计算无关。
●MATLAB实现
>>h=[2,0;0,1];
>>c=[-4,0];
>>a=[-1,1;1,-1];
>>b=[2;-1];
>>x=qp(h,c,a,b,zeros(2,1))
x=
1.5000
2.5000
(三)非线性无约束优化问题
1、fmin单变量的最小函数值
格式1:
fmin(’F’,x1,x2)
功能:
返回自变量x在区间(x1,x2)上函数F取最小值时的x值。
F为目标函数的函数名。
格式2:
fmin(’F’,x1,x2,options)
其中:
options为控制参数向量,可查foptions得到具体的值。
如:
options
(1)为负值时,则显示计算过程,默认值options
(1)为0
options
(2)为结果x的误差范围,默认值1.e-4
options(3)为优化函数精度控制,默认值1.e-4
options(4)为违反约束的结束标准,默认值1.e-6
options(5)策略选择,不常用
options(6)优化程序方法选择,值为0时为BFGS算法,值为1时为DFP算法。
options(7)线性查值算法选择,值为0时为混合插值算法,值为1时为立方查找算法。
options(8)函数值显示(目标达到问题中的Labmda)
options(9)若需要检测用户提供的导数,则设为1
options(10)函数和约束求值的数目
options(11)函数导数求值的个数
options(12)约束求值的数目
options(13)约束求值的数目
options(14)函数求值的最大次数
options(15)用于目标-达到问题的特殊目标
options(16)优化过程变量的最小梯度值
options(17)优化过程变量的最小梯度值
options(18)步长设置(默认为1或更小)
例1:
求п的近似值
fmin(‘cos’,3,4)
例2:
计算函数
在(0,1)范围内的最小值点
fmin(‘(x^3+cos(x)+x*log(x))/exp(x))’,0,1)
2、fmins多变量最小函数值
格式1:
x=fmins(’F’,x0)
格式2:
x=fmins(’F’,x0,options)
例3:
计算
的最小值点。
x=fmins(’2*x
(1)^3+4*x
(1)*x
(2)^3-10*x
(1)*x
(2)^2’,[0,0])
3、fminu多变量最小值时函数的变量值
格式1:
x=fminu(’F’,x0),以矩阵x0为初值,求函数F的最小值
格式2:
x=fminu(’F’,x0,options)
格式3:
x=fminu(’F’,x0,options,‘gradfun’),gradfun为点x的偏导函数Df/dx
注意:
默认的算法为二次三次混合线搜索过程的BFGSQuasi-Newton方法
例:
求函数
的最小值
fun=‘exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)’
x0=[-11]
options=[]
[x,options]=fminu(fun,x0,options)
x%最优解
options(8)%解处的函数值
options(10)%函数的调用次数
例分别用BFGS方法和DFP方法求解如下函数的最小值点
pfun.m
functionf=pfun(x)
f=(x
(1)+x
(2)^2+5*(x(3)-x(4))^2+(x
(2)-2*x(3))^4+10*(x
(1)-x(4))^4)
x0=[3,-1,0,1]
●BFGS方法:
BFGS方法是一个著名的解无约束最优化问题的拟牛顿方法。
采用混合插值法:
options(6)=0
options(7)=0
fminu(‘pfun’,x0,options)
采用立方插值法:
options(6)=0
options(7)=1
fminu(‘pfun’,x0,options)
●DFP方法:
采用混合插值法:
options(6)=1
options(7)=0
fminu(‘pfun’,x0,options)
采用立方插值法:
options(6)=1
options(7)=1
fminu(‘pfun’,x0,options)
(四)最小二乘优化问题
非线性最小二乘问事处题材,简称LS(LeastSqaures)问题,它的标准形式如下:
minF(x)=∑ri(x)=r’'r,x∈Rn,mn
其中r=r(x)=(r1(x)r2(x)…,rm(x))'称为剩余量,某些ri(x)为非线性函数。
最小二乘问题大量应用实际拟合问题中,它固然可以用无约束优化的方法解,然而,由于此问题目标函数的特殊结构,因此可以对某些方法进行改造,使之更简单或更有效。
另外,也可由此构造一些针对此问题的特殊方法。
在MATLAB中,最小二乘问题的求解可由函数leastsq进行。
1、leastsq
(1)函数介绍
●leastsq解决非线性最小二乘问题。
●leastsq可解决以下形式的问题:
Øminsum{fun(x)2}函数fun和x可以为向量或矩阵。
(2)使用说明
Øx=leastsq('fun',x0)以x0为初值,寻找M文件中fun(x)返回的函数值的平方和的最小值,fun返回目标函数的向量。
注意,fun返回fun(x),而非平方和。
Øx=leastsq('fun',x0,options)函数输入选择参数由向量options定义。
●options
(2)为解x的精度要求参数。
●options(3)为求解过程的目标函数的精度要求参数,参见helpfoptions。
Øx=leastsq('fun',x,options,'gradfun')输入参数函数gradfun可以返回在点x(以列保存)的偏导数函数dF/dx,gf=gradrun(x).
ØX=leastsp('fun',x,options,'gradfun',p1,p2…)输入参数p1,p2…并直接输给函数run和gradfun,形式为fun(x,xdata,p1,p2…)和gradfun(x,xdata,p1,p2…)。
使用options和gradfun默放值时输入空矩阵。
Ø[x,options,F,J]=ieastsp('fun',x0…)返回F在解x处函数fun(x)的值和在解点处的Jacobi矩阵J。
2、curvefit
(1)函数介绍
curvefit解非线性小二乘问题。
curvefit解决形如下式的问题:
minsum{(fun(x,xdata)-ydata)2}
x
其中fun.xdata和ydata为向量。
(2)函数说明
Øx=xurvefit('fun',x0,xdata,ydata)以x0为初值寻找非线性方程fun(x,xdata)对数据ydata的小二乘最佳系数x。
run为计算以x和xdata为参数的函数,返回目标函数值向量F=fun(x,xdata)。
Øx=curvefit('fun',x0,xdata,ydata,options)函数输入选择参数由向量options定义。
如:
options
(2)为解x的精度要求参数。
options(3)为求解过程的目标函数的精度要求参数,参见helpfoptions.
Øx=curvefit('fun',x,xdata,ydata,options,'gradfun')函数gradfun是返回在解点x处(以列保存)的编导数函数dF/dx,即gf=gradfun(x,xdata,ydata).
ØX=curvefit('fun',x,xdata,ydata,options,'gradfun’,p1,p2,…)参数p1、p2,…直接输出给函数fun和gradfun,即fun(x,xdata,p1,p2,…)和gradfun(x,xdata,p1,p2…)。
使用options和gradfun默认值时输入空矩阵。
Ø[x,options,F,J]=curvefit('fun',x0,xdata,ydata,…)返回F在解x处函数fun(x,xdata)-ydata的值、Jacobi矩阵J和在解点处的fun值。
(五)强制约束问题
除了自由约束外,还有一种带有约束条件的优化问题,即为强约束问题。
本节介绍“罚函数法”在求解非线性优化问题中的MATLAB实现。
1、函数介绍
●constr求解多变量的强约束最小值问题
调用格式:
Øx=constr(‘fun’,x0)
Øx=constr(‘fun’,x0,options)
Øx=constr(‘fun’,x0,options,vlb,vub)
Øx=constr(‘fun’,x0,options,vlb,vub,‘gradfun’)
Øx=constr(‘fun’,x0,options,vlb,vub,‘gradfun’,p1,p2,……)
(1)函数返回两个函数值F和约束矩阵G[F,G]=fun(x)
(2)x0为初值
(3)options,可选参数,同前
(3)vlb,vub为x的上下限
(4)函数gradfun返回函数的偏导数和在x的约束的偏导[GF,GC]=gradfun(x)
(5)p1,p2等是输入函数的参数值,直接输入给函数fun(x,p1,p2)和gradfun(x,p1,p2)
Ø[x,options]=constr(‘fun’,x0,……)
能够返回使用优化方法的参数值
2、举例
funf=‘f=exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)’
fung=‘g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]’
fun=[funf,fung]
x0=[-11]
options=[]
[x,options]=constr(‘fun’,x0,options)
options(8)%查看解处的函数值
解处的约束:
g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]
例边界问题:
funf=‘f=exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)’
fung=‘g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]’
fun=[funf,fung]
x0=[-11]%初值
options=[]%默认参数
vlb=zeros(1,2)%边界
vub=[]
[x,options]=constr(‘fun’,x0,options,vlb,vub)
options(8)%查看解处的函数值
解处的约束:
g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]
例:
用户提供导数:
funf=‘f=exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)’
fung=‘g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]’
fun=[funf,fung]
x0=[-11]%初值
options=[]%默认参数
%偏导数
dfdx1=’exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)+4*exp(x
(1))*(2*x
(1)*x
(2));’
dfdx2=’4*exp(x
(1)*(x
(1)+x
(2)+0.5);’
GF=[dfdx1,dfdx2]
FC=’[x
(2)-1,-x
(2);x
(1)-1,-x
(1)];’
grad=[GF,FC]
[x,options]=constr(‘fun’,x0,options,[],[],grad)
options(8)%查看解处的函数值
g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]%解处的约束值
例:
加上一个等式:
x1+x2=0
funf=‘f=exp(x
(1)*(4*x
(1)^2+2*x
(2)^2+4(x
(1)*x
(2)+2*x
(2)+1)’
fung=‘g=[1.5+x
(1)*x
(2)-x
(1)-x
(2)-x
(1)*x
(2)-10]’
fun=[funf,fung]
x0=[-11]&初值
options(13)=1%默认参数
[x,options]=constr(‘fun’,x0,options)
options(8)%查看解处的函数值
(六)目标-达到问题的优化
attgoal求解多任务-到达优化问题
x=attgoal(‘fun’,x0,goal,weight)
x=attgoal(‘fun’,x0,goal,weight,options)
[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub)
[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub,’gradfun’)
[x,options]=attgoal(‘fun’,x0,goal,weight,options,vlb,vub,’gradfun’,p1,p2,……)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 MATLAB 优化 设计 jsp