复合形优化算法在VC环境下的开发与实践-Read.DOCVIP

  • 0
  • 0
  • 约1.3万字
  • 约 21页
  • 2018-12-25 发布于天津
  • 举报

复合形优化算法在VC环境下的开发与实践-Read.DOC

复合形优化算法在VC环境下的开发与实践-Read.DOC

复合形优化算法在VC环境下的开发与实践 摘要: 本文阐述了复合形法在VC环境下的设计和实现过程。通过将算法封装于一个单独的类(razor)中,本文实现的razor复合形法优化类可以适用于有任意维数、有任意数量约束方程、自变量取值在有限范围内的优化问题,且具有交互界面良好,使用方便等特点。 关键词:复合形法 优化算法 VC 目 录 1 绪论 1 1.1复合形法概述 1 1.2任务目标 1 1.3任务解决的主要问题 1 2 算法封装与使用方法 1 3 复合形优化算法流程 3 4 具体算法实现 6 4.1 razor类的结构设计 6 4.2 razor类的成员函数 8 4.2.1 razor(结构函数) 8 4.2.2 ~razor(析构函数) 8 4.2.3 Add_g(绑定约束函数) 8 4.2.4 random_vertex(生成一个随机顶点) 9 4.2.5 Is_fillin(检测顶点是否在可行域内) 9 4.2.6 optimize(优化总函数) 10 4.2.7 Init(交互设定及确定初始顶点(STEP 1)) 11 4.2.8 construct_shape(随机产生其它顶点,构成复形(STEP 2,3)) 12 4.2.9 get_queue(排队(STEP 4)) 13 4.2.10 get_XC(计算中点Xc(STEP 5)) 13 4.2.11 get_XR(计算反射点XR(STEP 6)) 14 4.2.12 compare(比较(STEP 7)) 14 4.2.13 get_XE(计算延伸点Xe(STEP 8)) 15 4.2.14 zoom(缩小(STEP 9)) 15 4.2.15 over(结束处理) 16 5 算例 16 6 总结 19 参考文献 19 1 绪论 1.1复合形法概述[1] 复合形法是单纯形法的扩展,是适用于不等式约束的一种直接算法。它的基本思路是在设计空间的可行域内,构造具有k个顶点的多面体,按顶点函数值大小排队,找出函数值最小的最好点和函数值最大的最坏点,并计算出最坏点的反射点,一般反射点都优于最坏点,故以反射点代替最坏点,构成新的复形,这样不断调整多面体的顶点,使多面体不断向最优点靠拢,最后搜索到最优点。 1.2任务目标 本次作业的自选题为利用VC编制复合形算法的通用程序包,该程序包可以提供良好的交互界面且便于使用者设置与调用。 1.3任务解决的主要问题 1.复合形法程序封装实现的具体形式 2.约束函数与目标函数的引入方法 3.算法编写 4.结果存储方式 5.用户交互性 2 算法封装与使用方法 由于具体算法的编写结构与封装方式关系密切,故首先考虑算法的封装方法。优化算法程序的一大特点是需要用户定制约束方程和目标方程。最好的方式是令程序具有优秀的公式解算器,为用户提供良好的交互界面,从用户的表达式输入中生成优化过程中需要的各个表达式,Matlab、ADAMS、AutoCAD及许多专业软件都具有这样的功能。 但是,本人不会编写这样的解算器,也不了解其解算过程。 于是,本人决定提供一个类,让这个类完成所有的复合形法优化过程,用户在需要使用该算法时调用该类即可。唯一遗憾的是,用户必须会Visual Studio的基本操作,知道怎样使用“#include”来包含该类的头文件,知道怎样写出约束函数和目标函数。值得庆幸的是,本程序需要读入的函数形式简洁明了,不比直接输入表达式要难。 本程序包的使用方法是: 在Visual Stidio中新建或在已有VC工程(交互需要使用win32控制台程序形式)中包含本算法所在的h和cpp文件 在需要的地方添加#include ”razor.h”,同时确保工程中已包含了iostream.h、time.h、math.h这几个库 编写一组函数作为约束函数,其格式为: double 函数名(double *x) { double y; y = 表达式 return y; } 其中,表达式为令y小于或等于0时状态。即,程序中,表达式令y小于或等于0时,认定表达式中涉及的空间坐标满足约束条件。 同样的方法和格式,编写一个函数作为目标函数。注意:程序中,优化方向为令表达式的值在实数域上最小的方向。 添加如下语句以便随机数生成: srand((unsigned)time(NULL)); 在程序中创建一个razor对象,格式为: razor 对象名(维数,复合形顶点数); 对象名任意,维数指优化问题中的自变量数目,顶点数为维数+1至2倍维数任意。 将约束函数分别与razor对象绑定,格式为: 对象名.Add_g(函数名); 将目标函数与razor对象绑定,格式为: body.targetFunc = 函数名; 运行优化程序 对象名.optimiz

文档评论(0)

1亿VIP精品文档

相关文档