- 0
- 0
- 约1.3万字
- 约 21页
- 2018-12-25 发布于天津
- 举报
复合形优化算法在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)