最优化方法MATLAB4.docx
- 文档编号:10784790
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:18
- 大小:24.08KB
最优化方法MATLAB4.docx
《最优化方法MATLAB4.docx》由会员分享,可在线阅读,更多相关《最优化方法MATLAB4.docx(18页珍藏版)》请在冰点文库上搜索。
最优化方法MATLAB4
最优化方法的Matlab实现_4
matlab2008-07-1211:
38:
41阅读153评论0字号:
大中小订阅
9.2.6目标规划问题
9.2.6.1基本数学原理
前面介绍的最优化方法只有一个目标函数,是单目标最优化方法。
但是,在许多实际工程问题中,往往希望多个指标都达到最优值,所以它有多个目标函数。
这种问题称为多目标最优化问题。
多目标最优化问题的数学模型为:
i=1,…,me
i=me+1,…,m
其中F(x)为目标函数向量。
由于多目标最优化问题中各目标函数之间往往是不可公度的,因此往往没有唯一解,此时必须引进非劣解的概念(非劣解又称为有效解或帕累托解)。
定义:
若x*(x*∈Ω)的邻域内不存在Δx,使得(x*+Δx)∈Ω,且
i=1,…,m
对于某些j
则称为x*非劣解。
多目标规划有许多解法,下面列出常用的几种:
1.权和法
该法将多目标向量问题转化为所有目标的加权求和的标量问题,即
加权因子的选取方法很多,有专家打分法、α方法、容限法和加权因子分解法等。
该问题可以用标准的无约束最优化算法进行求解。
2.ε约束法
ε约束法克服了权和法的某些凸性问题。
它对目标函数向量中的主要目标Fp进行最小化,将其它目标用不等式约束的形式写出:
sub.i=1,…,mi≠p
3.目标达到法
目标函数系列为F(x)={F1(x),F2(x),…,Fm(x)},对应地有其目标值系列。
允许目标函数有正负偏差,偏差的大小由加权系数向量W={W1,W2,…,Wm}控制,于是目标达到问题可以表达为标准的最优化问题:
sub.i=1,…,m
指定目标{},定义目标点P。
权重向量定义从P到可行域空间Λ(γ)的搜索方向,在优化过程中,γ的变化改变可行域的大小,约束边界变为唯一解点F1s、F2s。
4.目标达到法的改进
目标达到法的一个好处是可以将多目标最优化问题转化为非线性规划问题,但是,在序列二次规划(SQP)过程中,一维搜索的目标函数选择不是一件容易的事情,因为在很多情况下,很难决定是使目标函数变大好还是使它变小好。
这导致许多目标函数创建过程的提出。
可以通过将目标达到问题变为最大最小化问题来获得更合适的目标函数。
其中
i=1,…,m
9.2.6.2相关函数介绍
fgoalattain函数
功能:
求解多目标达到问题
数学模型:
其中x,weight,goal,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x),ceq(x)和F(x)为函数,返回向量。
F(x),c(x)和ceq(x)可以是非线性函数。
语法:
x=fgoalattain(fun,x0,goal,weight)
x=fgoalattain(fun,x0,goal,weight,A,b)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,...
lb,ub,nonlcon,options)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,...
lb,ub,nonlcon,options,P1,P2,...)
[x,fval]=fgoalattain(...)
[x,fval,attainfactor]=fgoalattain(...)
[x,fval,attainfactor,exitflag]=fgoalattain(...)
[x,fval,attainfactor,exitflag,output]=fgoalattain(...)
[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(...)
描述:
fgoalattain求解多目标达到问题。
x=fgoalattain(fun,x0,goal,weight)试图通过变化x来使目标函数fun达到goal指定的目标。
初值为x0,weight参数指定权重。
x=fgoalattain(fun,x0,goal,weight,A,b)求解目标达到问题,约束条件为线性不等式A*x<=b。
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)求解目标达到问题,除提供上面的线性不等式以外,还提供线性等式Aeq*x=beq。
当没有不等式存在时,设置A=[]、b=[]。
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)为设计变量x定义下界lb和上界ub集合,这样始终有lb<=x<=ub。
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)将目标达到问题归结为nonlcon参数定义的非线性不等式c(x)或非线性等式ceq(x)。
fgoalattain函数优化的约束条件为(x)<=0和ceq(x)=0。
若不存在边界,设置lb=[]和(或)ub=[]。
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,...options)用options中设置的优化参数进行最小化。
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,...options,P1,P2,...)将问题参数P1,P2等直接传递给函数fun和nonlcon。
如果不需要参数A,b,Aeq,beq,lb,ub,nonlcon和options,将它们设置为空矩阵。
[x,fval]=fgoalattain(...)返回解x处的目标函数值。
[x,fval,attainfactor]=fgoalattain(...)返回解x处的目标达到因子。
[x,fval,attainfactor,exitflag]=fgoalattain(...)返回exitflag参数,描述计算的退出条件。
[x,fval,attainfactor,exitflag,output]=fgoalattain(...)返回包含优化信息的输出参数output。
[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(...)返回包含拉格朗日乘子的lambda参数。
变量:
goal变量
目标希望达到的向量值。
向量的长度与fun函数返回的目标数F相等。
fgoalattain函数试图通过最小化向量F中的值来达到goal参数给定的目标。
nonlcon参数:
该函数计算非线性不等式约束c(x)<=0和非线性等式约束ceq(x)=0。
nonlcon函数是一个包含函数名的字符串,该函数可以是M文件、内部函数或MEX文件。
nonlcon函数需要输入向量x,返回两个变量—x处的非线性不等式向量c和x处的非线性等式向量ceq。
例如,若nonlcon='mycon',则M文件的形式如下:
function[c,ceq]=mycon(x)
c=...%计算x处的非线性不等式。
ceq=...%计算x处的非线性等式。
若约束函数的梯度可以计算,且options.GradConstr设为'on',即
options=optimset('GradConstr','on')
则函数nonlcon也必须在第三个和第四个输出变量中输出c(x)的梯度GC和ceq(x)的梯度GCeq。
注意,可以通过核对nargout参数来避免计算GC和GCeq。
function[c,ceq,GC,GCeq]=mycon(x)
c=...%x处的非线性不等式。
ceq=...%x处的非线性等式。
ifnargout>2%被调用的nonlcon函数,有4个输出。
GC=...%不等式的梯度。
GCeq=...%等式的梯度。
end
若nonlcon函数返回m元素的向量c和长度为n的x,则c(x)的梯度GC是一个n*m的矩阵,其中GC(i,j)是c(j)对x(i)的偏导数。
同样,若ceq是一个p元素的向量,则ceq(x)的梯度Gceq是一个n*p的矩阵,其中Gceq(i,j)是ceq(j)对x(i)的偏导数。
options变量
优化参数选项。
你可以用optimset函数设置或改变这些参数的值。
DerivativeCheck–比较用户提供的导数(目标函数或约束函数的梯度)和有限差分导数。
Diagnostics–打印将要最小化或求解的函数的诊断信息。
DiffMaxChange–变量中有限差分梯度的最大变化。
DiffMinChange-变量中有限差分梯度的最小变化。
Display–显示水平。
设置为'off'时不显示输出;设置为'iter'时显示每一次迭代的输出;设置为'final'时只显示最终结果。
GoalExactAchieve–使得目标个数刚好达到,不多也不少。
GradConstr–用户定义的约束函数的梯度。
GradObj–用户定义的目标函数的梯度。
使用大型方法时必须使用梯度,对于中型方法则是可选项。
MaxFunEvals–函数评价的允许最大次数。
MaxIter–函数迭代的允许最大次数。
MeritFunction–如果设为'multiobj',则使用目标达到或最大最小化目标函数的方法。
若设置为'singleobj',则使用fmincon函数计算目标函数。
TolCon–约束矛盾的终止容限。
TolFun–函数值处的终止容限。
TolX–x处的终止容限。
weight变量
为权重向量,可以控制低于或超过fgoalattain函数指定目标的相对程度。
当goal的值都是非零值时,为了保证活动对象超过或低于的比例相当,将权重函数设置为abs(goal)(活动对象为阻止解处目标改善的对象集合)。
注意:
1.当目标值中的任意一个为零时,设置weight=abs(goal)将导致目标约束看起来更象硬约束,而不象目标约束。
2.当加权函数weight为正时,fgoalattain函数试图使对象小于目标值。
为了使目标函数大于目标值,将权重weight设置为负。
为了使目标函数尽可能地接近目标值,使用GoalsExactAchieve参数,将fun函数返回的第一个元素作为目标。
attainfactor变量
attainfactor变量是超过或低于目标的个数。
若attainfactor为负,则目标已经溢出;若attainfactor为正,则目标个数还未达到。
其它参数意义同前。
注意:
当特征值为复数时,本问题不连续,这也说明了为什么收敛速度很慢。
尽管原始方法假设函数是连续的,该法仍然可以向解的方向前进,因为在解的位置上,没有发生不连续的现象。
当对象和目标为复数时,fgoalattain函数将试图得到最小二乘意义上的目标。
算法:
多目标优化同时涉及到一系列对象。
fgoalattain函数求解该问题的基本算法是目标达到法。
该法为目标函数建立起目标值。
多目标优化的具体算法在前面进行了更详细的介绍。
本次实现过程中,使用了松弛变量γ作为模糊变量同时最小化目标向量F(x);goal参数是一系列目标达到值。
在进行优化之前,通常不知道对象是否会达到目标。
使用权向量weight可以控制是没有达到还是溢出。
fgoalattain函数使用序列二次规划法(SQP),前面已经进行了比较多的介绍。
算法中对于一维搜索和Hessian矩阵进行了修改。
在一维搜索中,将精确目标函数和文献[2]、[3]中的目标函数一起使用。
当有一个目标函数不再发生改善时,一维搜索终止。
修改的Hessian矩阵借助于本问题的结构,也被采用。
详细内容可参见文献[5]、[6]。
attainfactor参数包含解处的γ值。
γ取负值时表示目标溢出。
局限性:
目标函数必须是连续的。
fgoalattain函数将只给出局部最优解。
参见:
fmincon,fminimax,optimset
9.2.6.3应用实例
[例二]某化工厂拟生产两种新产品A和B,其生产设备费用分别为:
A,2万元/吨;B,5万元/吨。
这两种产品均将造成环境污染,设由公害所造成的损失可折算为:
A,4万元/吨;B,1万元/吨。
由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。
试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。
该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。
设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f1(x),公害损失费为f2(x),则这个问题可表达为多目标优化问题:
首先需要编写目标函数的M文件opt26_2o.m,返回目标计算值
functionf=myfun(x)
f
(1)=2*x
(1)+5*x
(2);
f
(2)=4*x
(1)+x
(2);
给定目标,权重按目标比例确定,给出初值
goal=[2012];
weight=[2012];
x0=[25];
给出约束条件的系数
A=[10;01;-1-1];
b=[56-7];
lb=zeros(2,1);
[x,fval,attainfactor,exitflag]=…
fgoalattain(@opt26_2o,x0,goal,weight,A,b,[],[],lb,[])
磁盘中上面程序段的M文件为opt26_2.m。
计算结果为
x=
2.91674.0833
fval=
26.250015.7500
attainfactor=
0.3125
exitflag=
1
故工厂每月生产产品A为2.9167吨,B为4.0833吨。
设备投资费和公害损失费的目标值分别为26.2500万元和15.7500万元。
达到因子为0.3125,计算收敛。
[例三]某厂生产两种产品A和B,已知生产A产品100kg需8个工时,生产B产品100kg需10个工时。
假定每日可用的工时数为40,且希望不雇临时工,也不加班生产。
这两种产品每100kg均可获利100元。
此外,有个顾客要求每日供应他B种产品600kg。
问应如何安排生产计划?
设生产A、B两种产品的数量分别为x1和x2(均以100kg计),为了使生产计划比较合理,要求用人尽量少,获利尽可能多,另外B种产品的产量尽量多。
由题意建立下面的数学模型:
首先需要编写目标函数的M文件opt26_3o.m,返回目标计算值
functionf=myfun(x)
f
(1)=8*x
(1)+10*x
(2);
f
(2)=-100*x
(1)-100*x
(2);
f(3)=-x
(2);
给定目标,权重按目标比例确定,给出初值
goal=[40–800-6];
weight=[40–800-6];
x0=[22];
给出约束条件的系数
A=[810;0-1];
b=[40-6];
lb=zeros(2,1);
options=optimset('MaxFunEvals',5000);%设置函数评价的最大次数为5000次
[x,fval,attainfactor,exitflag]=…
fgoalattain(@opt26_3o,x0,goal,weight,A,b,[],[],lb,[],[],options);
磁盘中上面程序段的M文件为opt26_3.m。
计算结果为
x=
2.04291.9458
fval=
35.8007-398.8648-1.9458
attainfactor=
-0.0646
exitflag=
0
经过5000次迭代以后,生产A、B两种产品的数量各为204.29kg和194.58kg。
[例四]某工厂因生产需要欲采购一种原材料,市场上的这种原料有两个等级,甲级单价2元/千克,乙级单价1元/千克。
要求所花总费用不超过200元,购得原料总量不少于100千克,其中甲级原料不少于50千克,问如何确定最好的采购方案。
设x1、x2分别为采购甲级和乙级原料的数量(千克),要求采购总费用尽量少,采购总重量尽量多,采购甲级原料尽量多。
由题意可得:
首先需要编写目标函数的M文件opt26_4o.m,返回目标计算值
functionf=myfun(x)
f
(1)=2*x
(1)+x
(2);
f
(2)=-x
(1)-x
(2);
f(3)=-x
(1);
给定目标,权重按目标比例确定,给出初值
goal=[200–100-50];
weight=[2040–100-50];
x0=[5555];
给出约束条件的系数
A=[21;-1–1;-10];
b=[200-100-50];
lb=zeros(2,1);
[x,fval,attainfactor,exitflag]=…
fgoalattain(@opt26_4o,x0,goal,weight,A,b,[],[],lb,[]);
磁盘中本问题的M文件为opt26_4.m。
输出计算结果
x=
5050
fval=
150-100-50
attainfactor=
1.3235e-023
exitflag=
1
所以,最好的采购方案是采购甲级原料和乙级原料各50千克。
此时采购总费用为150元,总重量为100千克,甲级原料总重量为50千克。
9.2.7最大最小化
9.2.7.1基本数学原理
通常我们遇到的都是目标函数的最大化和最小化问题,但是在某些情况下,则要求最大值的最小化才有意义。
例如城市规划中需要确定急救中心、消防中心的位置,可取的目标函数应该是到所有地点最大距离的最小值,而不是到所有目的地的距离和为最小。
这是两种完全不同的准则,在控制理论、逼近论、决策论中也使用最大最小化原则。
最大最小化问题的数学模型为
其中x,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x),ceq(x)和F(x)为函数,返回向量。
F(x),c(x)和ceq(x)可以是非线性函数。
Matlab优化工具箱中采用序列二次规划法求解最大最小化问题。
9.2.7.2相关函数介绍
fminimax函数
功能:
求解最大最小化问题。
语法:
x=fminimax(fun,x0)
x=fminimax(fun,x0,A,b)
x=fminimax(fun,x0,A,b,Aeq,beq)
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
[x,fval]=fminimax(...)
[x,fval,maxfval]=fminimax(...)
[x,fval,maxfval,exitflag]=fminimax(...)
[x,fval,maxfval,exitflag,output]=fminimax(...)
[x,fval,maxfval,exitflag,output,lambda]=fminimax(...)
描述:
fminimax使多目标函数中的最坏情况达到最小化。
给定初值估计,该值必须服从一定的约束条件。
x=fminimax(fun,x0)初值为x0,找到fun函数的最大最小化解x。
x=fminimax(fun,x0,A,b)给定线性不等式A*x<=b,求解最大最小化问题。
x=fminimax(fun,x,A,b,Aeq,beq)给定线性等式,Aeq*x=beq,求解最大最小化问题。
如果没有不等式存在,设置A=[]、b=[]。
x=fminimax(fun,x,A,b,Aeq,beq,lb,ub)为设计变量定义一系列下限lb和上限ub,使得总有lb<=x<=ub。
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)在nonlcon参数中给定非线性不等式约束c(x)或等式约束ceq(x),fminimax函数要求c(x)<=0且ceq(x)=0。
若没有边界存在,设置lb=[]和(或)ub=[]。
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)用options给定的参数进行优化。
x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)将问题参数P1,P2等直接传递给函数fun和nonlcon。
如果不需要变量A,b,Aeq,beq,lb,ub,nonlcon和options将它们设置为空矩阵。
[x,fval]=fminimax(...)返回解x处的目标函数值。
[x,fval,maxfval]=fminimax(...)返回解x处的最大函数值。
[x,fval,maxfval,exitflag]=fminimax(...)返回exitflag参数,描述函数计算的退出条件。
[x,fval,maxfval,exitflag,output]=fminimax(...)返回描述优化信息的结构输出output参数。
[x,fval,maxfval,exitflag,output,lambda]=fminimax(...)返回包含解x处拉格朗日乘子的lambda参数。
变量:
maxfval变量
解x处函数值的最大值,即,maxfval=max{fun(x)}。
注意:
1.在options.MinAbsMax中设置F最坏绝对值最小化了的目标数。
该目标应该放到F的第一个元素中去。
例如,考虑上面的问题,需要找到x值,
使得下式的最大绝对值最小化:
通过调用fminimax函数来进行求解
x0=[0.1;0.1];%设置初值
options=optimset('MinAbsMax',5);%最小化绝对值
[x,fval]=fminimax(fun,x0,[],[],[],[],[],[],[],options);
经过7次迭代以后,得到问题的解
x=
4.9256
2.0796
fval=
37.2356-37.2356-6.8357-7.0052-0.9948
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 方法 MATLAB4