ImageVerifierCode 换一换
格式:DOCX , 页数:59 ,大小:157.80KB ,
资源ID:8899933      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8899933.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第10章Matlab在最优化问题中的应用.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

第10章Matlab在最优化问题中的应用.docx

1、第10章Matlab在最优化问题中的应用第10章 Matlab在最优化问题中的应用 优化理论是一门实践性很强的学科,广泛应用于生产管理、军事指挥和科学试验等各种领域,Matlab优化工具箱提供了对各种优化问题的一个完整的解决方案。在数学上,所谓优化问题,就是求解如下形式的最优解: Min fun (x) Sub. to C.E. B.C.其中fun (x)称为目标函数,“Sub. to”为“subject to”的缩写,由其引导的部分称为约束条件。C.E.表示Condition Equations,即条件方程,可为等式方程,也可为不等式方程。B.C.表示Boundary Conditions,

2、即边界条件,用来约束自变量的求解域,以lbxub的形式给出。当C.E.为空时,此优化问题称为自由优化或无约束优化问题;当C.E.不空时,称为有约束优化或强约束优化问题。在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为:线性优化 目标函数和约束函数均为线性函数。二次优化 目标函数为二次函数,而约束条件为线性方程。线性优化和二次优化统称为简单优化。非线性优化 目标函数为非二次的非线性函数,或约束条件为非线性方程。多目标优化 目标函数并非一个时,称为多目标优化问题。本章将对以上几类优化问题在Matlab中的实现作比较详细的讲解。另外还将介绍两个利用优化方法解非线性方程的函数。通过

3、本章的介绍,用户可以不必掌握艰涩的各种优化算法而轻易地解决一些常用的最优化问题了。10.1 线性规划问题线性规划问题即目标函数和约束条件均为线性函数的问题。其标准形式为:min Cxsub. To Ax = b x0其中C, b, 0Rn,ARmn,均为数值矩阵,xRn。若目标函数为:max Cx,则转换成:min Cx。标准形式的线性规划问题简称为LP(Linear Programming)问题。其它形式的线性规划问题经过适当的变换均可以化为此种标准形。线性规划问题虽然简单,但在工农业及其他生产部门中应用十分广泛。在Matlab中,线性规划问题由linprog函数求解。函数:linprog

4、%求解如下形式的线性规划问题: such that 其中f, x, b, beq, lb, ub为向量,A, Aeq为矩阵。格式: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(.

5、)x,fval,exitflag,output,lambda = linprog(.)说明:x = linprog(f,A,b) 求解问题 min f*x,约束条件为A*x0 表示目标函数收敛于解x处;=0 表示已经达到函数评价或迭代的最大次数; f=-5;-4;-6; A=1 -1 1;3 2 4;3 2 0; b=20;42;30; lb=zeros(3,1); x,fval,exitflag,output,lambda=linprog(f,A,b,lb)Optimization terminated successfully.x = 0.0000 15.0000 3.0000fval =

6、 -78.0000exitflag = 1output = iterations: 6 cgiterations: 0 algorithm: lipsollambda = ineqlin: 3x1 double eqlin: 0x1 double upper: 3x1 double lower: 3x1 double lambda.ineqlinans = 0.0000 1.5000 0.5000 lambda.lowerans = 1.0000 0.0000 0.0000lambda向量中的非零元素表示哪些约束是主动约束。本例中,第2个和第3个不等式约束,第1个下界约束是主动约束(如这些解位

7、于约束边界上)。exitflag = 1表示过程正常收敛于解x处。例10-2 生产决策问题。某厂生产甲乙两种产品,已知制成一吨产品甲需资源A 3吨,资源B 4m3;制成一吨产品乙需资源A 2吨,资源B 6 m3;资源C 7个单位。若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200 m3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?解:令生产产品甲的数量为x1,生产产品甲的数量为x2。由题意可以建立下面的数学模型: sub. to 该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为 在Matlab中实现: f

8、=-7;-5; A=3 2;4 6;0 7; b=90;200;210; lb=0;0; x,fval,exitflag,output,lambda=linprog(f,A,b,lb)Optimization terminated successfully.x = 14.0000 24.0000fval = -218.0000exitflag = 1output = iterations: 5 cgiterations: 0 algorithm: lipsollambda = ineqlin: 3x1 double eqlin: 0x1 double upper: 2x1 double low

9、er: 2x1 double由上可知,生产甲种产品14吨、乙种产品24吨可使创造的总经济价值最高为218万元。exitflag = 1表示过程正常收敛于解x处。例10-3 厂址选择问题。考虑A、B、C三地,每地都出产一定数量的原料也消耗一定数量的产品(见下表)。已知制成每吨产品需3吨原料,各地之间的距离为:AB:150km,AC:100km,BC:200km。假定每万吨原料运输1km的运价是5000元,每万吨产品运输1km的运价是6000元。由于地区条件的差异,在不同地点设厂的生产费用也不同。问究竟在哪些地方设厂,规模多大,才能使总费用最小?另外,由于其它条件限制,在B处建厂的规模(生产的产品

10、数量)不能超过5万吨。A、B、C三地出产原料、消耗产品情况表地点年产原料(万吨)年销产品(万吨)生产费用(万元/万吨)A207150B1613120C240100解:令为由i地运到j地的原料数量(万吨),为由i地运到j地的产品数量(万吨),i,j = 1,2,3(分别对应A、B、C三地)。根据题意,可以建立问题的数学模型(其中目标函数包括原料运输费、产品运输费和生产费用(万元):min sub.to 在Matlab中实现: f=75;75;50;50;100;100;150;240;210;120;160;220; A=1 -1 1 -1 0 0 3 3 0 0 0 0 -1 1 0 0 1

11、-1 0 0 3 3 0 0 0 0 -1 1 -1 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 1 1 0 0; b=20;16;24;5; Aeq=0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1; beq=7;13; lb=zeros(12,1); x,fval,exitflag,output,lambda=linprog(f,A,b,Aeq,beq,lb)Optimization terminated successfully.x = 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 7.0

12、000 0.0000 0.0000 5.0000 0.0000 8.0000fval = 3.4850e+003exitflag = 1output = iterations: 8 cgiterations: 0 algorithm: lipsollambda = ineqlin: 4x1 double eqlin: 2x1 double upper: 12x1 double lower: 12x1 double因此,要使总费用最小,需要B地向A地运送1万吨原料,A、B、C三地的建厂规模分别为7万吨、5万吨、8万吨。最小总费用为3485万元。10.2 非线性规划问题10.2.1非线性无约束规划

13、问题无约束规划由3个功能函数fminbnd、fminsearch、fminunc实现。10.2.1.1 fminbnd函数函数:fminbnd功能:求取固定区间内单变量函数的最小值,也就是一元函数最小值问题。数学模型: 式中,和为标量,为函数,返回标量。格式:x = fminbnd(fun,x1,x2)x = fminbnd(fun,x1,x2,options)x = fminbnd(fun,x1,x2,options,P1,P2,.)x,fval = fminbnd(.)x,fval,exitflag = fminbnd(.)x,fval,exitflag,output = fminbnd(

14、.)说明:fminbnd 求取固定区间内单变量函数的最小值x = fminbnd(fun,x1,x2) 返回x1, x2区间上fun参数描述的标量函数的最小值点x。x = fminbnd(fun,x1,x2,options) 用options参数指定的优化参数进行最小化。x = fminbnd(fun,x1,x2,options,P1,P2,.) 提供另外的参数P1,P2等,传输给目标函数fun。如果没有设置options选项,则令options = 。x,fval = fminbnd(.) 返回解x处目标函数的值。x,fval,exitflag = fminbnd(.) 返回exitflag

15、值描述fminbnd函数的退出条件。x,fval,exitflag,output = fminbnd(.) 返回包含优化信息的结构输出。fun:需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如 x = fminbnd (inline (sin (x*x), x0)同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun = myfun, 则x = fminbnd(myfun,x0)其中M文件函数myfun.m必须为下面的形式 function f = myfun (x) f = %计算x

16、处的函数值。options:优化参数选项。你可以用optimset函数设置或改变这些参数的值。Options参数有以下几个选项: Display 显示的水平。选择off,不显示输出;选择iter,显示每一步迭代过程的输出;选择final,显示最终结果; MaxFunEvals 函数评价的最大允许次数; MaxIter 最大允许迭代次数; TolX x处的终止容限。exitflag:描述退出条件: 0 表示目标函数收敛于解x处; 0 表示已经达到函数评价或迭代的最大次数; x,y_min=fminbnd(sin(x),0,2*pi)x = 4.7124y_min = -1.0000或 x,y_m

17、in=fminbnd(sin,0,2*pi)x = 4.7124y_min = -1.0000例10-5 对边长为3m的正方形铁板,在四个角处剪去相等的小正方形以制成方形无盖盒子,问如何剪法使盒子容积最大?解:设剪去的正方形的边长为x,则盒子容积为 f (x) = (3-2x)2 x现在要求在区间(0, 1.5)上确定x,使f (x)最大化。因为优化工具箱中要求目标函数最小化,所以需要对目标函数进行转换,即要求-f (x)最小化。在Matlab中实现: x,f_min=fminbnd(-(3-2*x)2*x,0,1.5)x = 0.5000f_min = -2.0000或编写M文件Ex1005

18、.m x,f_min=fminbnd(Ex1005,0,1.5)x = 0.5000f_min = -2.0000即剪去边长为0.5 m的正方形,最大容积为2 m3。10.2.1.2 fminsearch函数函数:fminsearch功能:求解多变量无约束函数的最小值。数学模型: 其中,为向量,为一函数,返回标量。 格式:x = fminsearch(fun,x0)x = fminsearch(fun,x0,options)x = fminsearch(fun,x0,options,P1,P2,.)x,fval = fminsearch(.)x,fval,exitflag = fminsear

19、ch(.)x,fval,exitflag,output = fminsearch(.)说明:fminsearch 求解多变量无约束函数的最小值。该函数常用于无约束非线性最优化问题。x = fminsearch(fun,x0) 初值为x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。x = fminsearch(fun,x0,options) 用options参数指定的优化参数进行最小化。x = fminsearch(fun,x0,options,P1,P2,.) 将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。x,fv

20、al = fminsearch(.) 将x处的目标函数值返回到fval参数中。x,fval,exitflag = fminsearch(.) 返回exitflag值,描述函数的退出条件。x,fval,exitflag,output = fminsearch(.) 返回包含优化信息参数output的结构输出。各变量的意义同前及下面fminunc函数。注意:(1)应用fminsearch函数可能会得到局部最优解;(2)fminsearch函数只对实数进行最小化,即x必须由实数组成,f (x)函数必须返回实数。如果x为复数,则必须将它分为实数部和虚数部两部分;(3)对于求解二次以上的问题,fminu

21、nc函数比fminsearch函数有效,但对于高度非线性不连续问题时,fminsearch函数更具稳键性。(4)fminsearch函数不适合求解平方和问题,用lsqnonlin函数更好一些。例10-6 求2x13+4x1x23-10x1x2+x22的最小值。解:在Matlab中实现如下: f=2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2; x0=0,0; x,f_min=fminsearch(f,x0)x = 1.0016 0.8335f_min = -3.3241或在Matlab编辑器中编辑M文件Ex1006.m:function f=Ex1006(x)f

22、=2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2;x0=0,0;命令窗口运行: x,f_min=fminsearch(Ex1006,x0)x = 1.0016 0.8335f_min = -3.3241运行后结果一致。10.2.1.3 fminunc函数函数:fminunc功能:求多变量无约束函数的最小值。数学模型: 其中,为向量,为一函数,返回标量。 格式:x = fminunc(fun,x0)x = fminunc(fun,x0,options)x = fminunc(fun,x0,options,P1,P2,.)x,fval = fminunc(.)x,f

23、val,exitflag = fminunc(.)x,fval,exitflag,output = fminunc(.)x,fval,exitflag,output,grad = fminunc(.)x,fval,exitflag,output,grad,hessian = fminunc(.)说明:fminunc 给定初值,求多变量标量函数的最小值。常用于无约束非线性最优化问题。x = fminunc(fun,x0) 给定初值x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。x = fminunc(fun,x0,options) 用options参数指定的优化参数进行最小化。x

24、= fminunc(fun,x0,options,P1,P2,.) 将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。x,fval = fminunc(.) 将x处的目标函数值返回到fval参数中。x,fval,exitflag = fminunc(.) 返回exitflag值,描述函数的退出条件。x,fval,exitflag,output = fminunc(.) 返回包含优化信息参数output的结构输出。x,fval,exitflag,output,grad = fminunc(.) 将解x处fun函数的梯度值返回到grad

25、参数中。x,fval,exitflag,output,grad,hessian = fminunc(.) 将解x处目标函数的Hessian矩阵信息返回到hessian参数中。fun变量:为目标函数。需要最小化的目标函数。fun函数需要输入向量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如x = fminunc(inline(norm(x)2),x0)同样,fun函数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun = myfun,则x = fminunc(myfun,x0)其中M文件函数myfun.m必须有下面的形式:function f = myfun (x)f = %计算x处的函数值。若fun函数的梯度可以算得,且options.GradObj设为on(用下式设定) options = optimset (GradObj, on)则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。注意,当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值而不需要其梯度值时),可以通过核对nargout的值来避免

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2