收藏 分销(赏)

用MATLAB优化工具箱解线性规划.doc

上传人:仙人****88 文档编号:11227292 上传时间:2025-07-08 格式:DOC 页数:7 大小:196KB 下载积分:10 金币
下载 相关 举报
用MATLAB优化工具箱解线性规划.doc_第1页
第1页 / 共7页
用MATLAB优化工具箱解线性规划.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
用MATLAB优化工具箱解线性规划 模型: 命令: [1] [x,fval]=linprog(c,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0) 注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 编写M文件xxgh3.m如下: f = [13 9 10 11 12 8]; A = [0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3]; b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; beq=[400 600 500]; vlb = zeros(6,1); vub=[]; [x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub) Matlab优化工具箱简介 1. MATLAB求解优化问题的主要函数 2. 优化函数的输入变量 使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表: 3. 优化函数的输出变量下表 变量 描 述 调用函数 x 由优化函数求得的值.若exitflag>0,则x为解;否则,x不是最终解,它只是迭代制止时优化过程的值 所有优化函数 fval 解x处的目标函数值 linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd exitflag 描述退出条件: l exitflag>0,表目标函数收敛于解x处 l exitflag=0,表已达到函数评价或迭代的最大次数 l exitflag<0,表目标函数不收敛 output 包含优化结果信息的输出结构. l Iterations:迭代次数 l Algorithm:所采用的算法 l FuncCount:函数评价次数 所有优化函数 4.控制参数options的设置 Options中常用的几个参数的名称、含义、取值如下: (1) Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为’final’. (2) MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数. (3) MaxIter: 允许进行迭代的最大次数,取值为正整数 控制参数options可以通过函数optimset创建或修改。命令的格式如下: (1) options=optimset(‘optimfun’) 创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构options. (2)options=optimset(‘param1’,value1,’param2’,value2,...) 创建一个名称为options的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值. (3)options=optimset(oldops,‘param1’,value1,’param2’, value2,...) 创建名称为oldops的参数的拷贝,用指定的参数值修改oldops中相应的参数. 例:opts=optimset(‘Display’,’iter’,’TolFun’,1e-8) 该语句创建一个称为opts的优化选项结构,其中显示参数设为’iter’, TolFun参数设为1e-8. 5用Matlab解无约束优化问题 一元函数无约束优化问题: 常用格式如下: (1)x= fminbnd (fun,x1,x2) (2)x= fminbnd (fun,x1,x2 ,options) (3)[x,fval]= fminbnd(...) (4)[x,fval,exitflag]= fminbnd(...) (5)[x,fval,exitflag,output]= fminbnd(...) 其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。 函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。 例1 求在0<x<8中的最小值与最大值 主程序为wliti1.m: f='2*exp(-x).*sin(x)'; fplot(f,[0,8]); %作图语句 [xmin,ymin]=fminbnd (f, 0,8) f1='-2*exp(-x).*sin(x)'; [xmax,ymax]=fminbnd (f1, 0,8) 运行结果: xmin = 3.9270 ymin = -0.0279 xmax = 0.7854 ymax = 0.6448 多元函数无约束优化问题 标准型为:min F(X) 命令格式为: (1)x= fminunc(fun,X0 );或x=fminsearch(fun,X0 ) (2)x= fminunc(fun,X0 ,options); 或x=fminsearch(fun,X0 ,options) (3)[x,fval]= fminunc(...); 或[x,fval]= fminsearch(...) (4)[x,fval,exitflag]= fminunc(...); 或[x,fval,exitflag]= fminsearch (5)[x,fval,exitflag,output]= fminunc(...); 或[x,fval,exitflag,output]= fminsearch(...) 说明: • fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明: [1] fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控制: LargeScale=’on’(默认值),使用大型算法 LargeScale=’off’(默认值),使用中型算法 [2] fminunc为中型优化算法的搜索方向提供了4种算法,由 options中的参数HessUpdate控制: HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式; HessUpdate=’dfp’,拟牛顿法的DFP公式; HessUpdate=’steepdesc’,最速下降法 [3] fminunc为中型优化算法的步长一维搜索提供了两种算法, 由options中参数LineSearchType控制: LineSearchType=’quadcubic’(缺省值),混合的二次和三 次多项式插值; LineSearchType=’cubicpoly’,三次多项式插 • 使用fminunc和 fminsearch可能会得到局部最优解. 例4 Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2 的最优解(极小)为x*=(1,1),极小值为f*=0.试用 不同算法(搜索方向和步长搜索)求数值最优解. 初值选为x0=(-1.2 , 2). 1. 为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令: [x,y]=meshgrid(-2:0.1:2,-1:0.1:3); z=100*(y-x.^2).^2+(1-x).^2; mesh(x,y,z) 2. 画出Rosenbrock 函数的等高线图,输入命令: contour(x,y,z,20) hold on plot(-1.2,2,' o '); text(-1.2,2,'start point') plot(1,1,'o') text(1,1,'solution') 3.用fminsearch函数求解 输入命令: f='100*(x(2)-x(1)^2)^2+(1-x(1))^2'; [x,fval,exitflag,output]=fminsearch(f, [-1.2 2]) 运行结果: x =1.0000 1.0000 fval =1.9151e-010 exitflag = 1 output = iterations: 108 funcCount: 202 algorithm: 'Nelder-Mead simplex direct search' 4. 用fminunc 函数 (1)建立M-文件fun2.m function f=fun2(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2 (2)主程序wliti44.m [x,fval,exitflag,output]= fminunc(fun,X0 ,options) Rosenbrock函数不同算法的计算结果 可以看出,最速下降法的结果最差.因为最速下降法特别不适合于从一狭长通道到达最优解的情况. 非线性规划 1、 二次规划 标准型为: Min Z= XTHX+cTX s.t. AX<=b VLB≤X≤VUB 用MATLAB软件求解,其输入格式如下: 1. x=quadprog(H,C,A,b); 2. x=quadprog(H,C,A,b,Aeq,beq); 3. x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB); 4. x=quadprog(H,C,A,b,Aeq,beq ,VLB,VUB,X0); 5.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options); 6. [x,fval]=quaprog(...); 7. [x,fval,exitflag]=quaprog(...); 8. [x,fval,exitflag,output]=quaprog(...); 一般非线性规划 标准型为:    min F(X) s.t AX<=b G(X) Ceq(X)=0 VLBXVUB 其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步: 1. 首先建立M文件fun.m,定义目标函数F(X): function f=fun(X); f=F(X); 2. 若约束条件中有非线性约束:G(X)或Ceq(X)=0,则建立M文件nonlcon.m定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=... Ceq=... 3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下: (1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB) (4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’) (5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) (6) [x,fval]= fmincon(...) (7) [x,fval,exitflag]= fmincon(...) (8)[x,fval,exitflag,output]= fmincon(...) 注意: [1] fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。 [2] fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。 [3] fmincon函数可能会给出局部最优解,这与初值X0的选取有关。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服