外点罚函数优化实例.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精品Word文档,知识共享! 外点罚函数优化实例 一、优化问题 如图1所示,为某一桁架的一部分,杆2距O点30cm处有一支点C。为了固定桁架,现欲在杆1和2上设置支点A和B,用来连接杆3(可拆卸)。已知当桁架固定时,杆1和2成直角;而且,杆1右边有一段长为20cm的重要部位,不能设置支点。卸去杆3、收起桁架时,支点A的位置不能高于BC段中点D。求取支点A、B的位置,使得杆3的长度尽量小,以节省材料。 图1 桁架结构示意图 二、数学模型 设A、B两点距离O点的长度分别为和,而桁架固定时杆1和2成直角。所以杆3的长度为。 由图1可知,且,即且。 设,取。因此,数学模型为: 极小化目标函数 约束条件 三、求解数学模型 (1)外点罚函数法求解 构造外点法罚函数,如下: 程序流程图如图2所示: 给定、 给定、、c、 k=0 i=0 求与Hessian矩阵 输出和 Y N i=i+1 k=k+1 Y N 结束 牛顿法求的极 值点 图2 外点罚函数法程序流程图 程序步骤: ①选择适当的初始罚因子、初始点、收敛精度和罚因子系数c。在本程序中分别取,,,c=8。令迭代步数k=0。 ②采用牛顿法求无约束问题的极值点。 ③检验迭代终止准则,若满足 及 则停止迭代计算,输出最优点;否则,转入步骤④。 ④取,,k=k+1,转入步骤②继续迭代。 具体程序请看附一。 运行结果: X*=[20.0000,10.0000] f(X*)=500.0000 因此,A、B两支点与O的距离分别为20cm、10cm,杆3的最小长度为cm。 目标函数曲线图与目标函数等值线图分别如图3和图4所示。优化路径如图4所示。 图3 目标函数曲线图 图4 目标函数等值线图 (2)Matlab优化工具fmincon求解 利用Matlab文件编辑器为目标函数编写M文件(goalfun.m): function f=goalfun(x) f=x(1)^2+x(2)^2; 编写约束条件的M文件(confun.m): function [c, ceq]=confun(x) c=[2*x(1)-x(2)-30; 20-x(1)]; ceq=[]; 编写主函数的M文件(opt.m): close all clear all clc x0=[20,20]; lb=[]; ub=[]; options=optimset('LargeScale','off','display','iter','tolx',1e-6); [x,fval,exitflag,output]=fmincon('goalfun',x0,[],[],[],[],[],[],'confun',options); x fval 运行结果: x=[20,10] fval=500 同样地,利用Matlab优化工具解得,支点A、B与O的距离分别为20cm、10cm,杆3的最小长度为cm。 四、结论分析 (1)罚因子系数c对外点罚函数法的影响 本次程序中,c取值为8,运行步数k=11。若取c=4,则运行步数k=16;取c=16,则运行步数k=9;取c=32,则运行步数k=8;取c=64,则运行步数k=7。由此可知,罚因子系数c的大小会影响程序的迭代次数k。c的值取得越大,运行步数k越小,程序收敛速度越快,效率越高。但对于c的其他一些取值,如5、7、9等,会导致罚函数形态变坏,使迭代出现问题,导致程序运行失败。因此,需选取合适的罚因子系数c。 (2)外点罚函数法与Matlab优化工具fmincon的比较 通过opt.m的运行结果可知,fmincon的运行步数k=3,这一运行效率明显比外点法函数法的效率高。对于相同的收敛精度和初始点,虽然优化结果相同,但是M文件WaiDianNiuDun.m中外点罚函数法的运行效率仍有待提高。 附一 外点罚函数matlab程序 close all clear all clc syms x1 x2 M; %M为罚因子。 m(1)=1; c=8; %c为递增系数。赋初值。 a(1)=20; b(1)=20; f=x1^2+x2^2+M*((20-x1)^2+(2*x1-x2-30)^2);%外点罚函数 f0(1)=500; %求偏导、Hessian元素 fx1=diff(f,'x1'); fx2=diff(f,'x2'); fx1

文档评论(0)

哆啦 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档