优化上机指导1B(优化编程)(c版)6hnew

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《优化编程实验(1B)》上机指导书(C版)
适用专业:机械工程
课程代码: 6015589
编写单位:机械工程与自动化学院
编写人:张晓洪
审核人:
审批人:
目录
实验1.1 优化设计基础例程编制 (2)
实验1.2 一维搜索方法编程 (5)
实验1.3 Powell法无约束优化编程 (7)
注释 (8)
主要参考文献 (8)
实验1.1 优化设计基础例程编制
一、上机目的
1、了解、掌握优化设计编程中常用的基础例程(C函数);
2、调试指定的过程。

二、原理和方法
通过一给定目标函数,编制实现的代码,并调试通过。

代码的编写应提前写好,上机时录入调试。

三、上机内容
1、数据定义
为便于编程的有序进行及代码的高效利用,推荐采用如下的数据结构(仅供参考):(1)typedef enum
{ STOP_DOTNEAR,
STOP_ABSDESC,
STOP_RELDESC,
STOP_GRADZERO
}WHENSTOP;
WHENSTOP用于定义终止准则,即点距准则,函数值绝对下降准则,函数值相对下降准则及零梯度准则.
(2)typedef struct
{int n; /*dim number */
float *dir; /*direction */
float *start;
float *end;
float alfa; /*iterate step */
int counter; /*number of iterate */
WHENSTOP stop; /*terminating style */
float precision;
char s1dmeth; /*g:goldcut r:grid i:interp */
float targetvalue;
}S1DPARA;
S1DPARA用于定义线搜索的参数。

上述定义可存放在一个h文件中。

2、应编写的基础C函数包括:
1)int initzone1d(float (*tf)(), S1DPARA *apara);
用于确定一维搜索的初始区间, 返回的端点值存放在start及end中.
2)void movefblk(float *d, float *s, int n);
用于n维坐标点数据的拷贝或转移,s和d分别表示源数据和目的数据.
3)void newdot1d(float *d, float *s, int n, float *dir, float alfa);
用于在点s按方向dir及步长alfa获取新点,存入点d.
4)void dotinzone(float *d, float *a, float *b, int n, float pos);
用于获取a,b连线上的某点,该点距a的位置为pos(相对),a指向b为正向.
5)float distsqu(float *a, float *b, int n);
两点间距离的平方值.
6)int stopsearch(float *x0, float *x1, float (*f)(), WHENSTOP stop, float prec, int n);
搜索终止条件测试,若返回非零,则终止.
7)float zxhgrad(float (*f)(), float *dot, float *g, int n);
梯度函数,梯度向量存入g,函数返回值为梯度向量的模.
上述代码要求提前编写,可存放在一个C文件中。

3、编写调用程序以调试上述子过程或函数。

四、调试用例
约束优化问题:
min f(x) = 60-10x1-4x2+x12+x22-x1x2
s.t. g1(x) = -x1≤0
g2(x) = -x2≤0
g3(x) = x1-6≤0
g4(x) = x2-8≤0
g5(x)=x1+x2-11≤0
五、上机步骤
1、打开VC6.0,产生一个控制台程序;
2、在其中编写main函数代码;
3、编写目标函数的代码。

4、调试程序,用以下检验数据检查程序的正确与否。

检验数据如下:
(1)f(x)在点[1 2]T处的值为45;在[4 6]T处的值为24;
(2)f(x)在点[0 1]T处的梯度为[-11 -2]T;
(3)g3(x)在任意位置处的梯度为[1 0]T。

实验1.2 一维搜索方法编程
一、上机目的
1、掌握优化设计中一维搜索方法编程;
2、调试指定的过程。

二、原理和方法
通过一给定目标函数,编制实现的代码,并调试通过。

代码的编写应提前写好,上机时录入调试。

三、上机内容
1、编写的C函数包括:
1)int search1d(float (*tfunc)(), S1DPARA *apara);
一维搜索函数,tfunc为目标函数指针,alfa存初始步长,apara->start用于存放起点,调用后alfa为最优步长,end为最优点,targetvalue可用,counter存放迭代次数,start被破坏.
2)int goldcut(float (*tf)(), S1DPARA *apara) ;
一维搜索用的黄金分割法,结果在end中.
3)int gridchoice(float (*tf)(), S1DPARA *apara);
格点法一维搜索函数,选做。

4)int intervalue(float (*tf)(), S1DPARA *apara);
二次插值法一维搜索.
上述代码要求提前编写。

2、编写调用程序以调试上述子过程或函数。

四、调试用例
无约束优化问题:
min f(x) = 60-10x1-4x2+x12+x22-x1x2
五、上机步骤
略。

调试用例的检验数据如下:
(1)以(6 3)为起点,(1 -1)为方向,初始步长为1,则一维搜索的初始区间为a=[7 2]T和b=[5 4]T;
(2)同上,一维搜索最优点为[5.5 3.5]T。

实验1.3 Powell法无约束优化编程
一、上机目的
1、掌握优化设计中Powell法无约束优化方法和编程;
2、调试指定的过程。

二、原理和方法
通过一给定目标函数,编制实现的代码,并调试通过。

代码的编写应提前写好,上机时录入调试。

三、上机内容
1、数据结构
typedef struct
{ int n;
float *start,*end,alfa;
int turn,loop;
WHENSTOP stop;
float precision;
char s1dmeth;
WHENSTOP stop1d;
float prec1d;
float targetvalue;
}POWELLPARA;
2、编写函数包括:
int powell(float (*f)(),POWELLPARA *ap);
四、调试用例
无约束优化问题:
min f(x) = 60-10x1-4x2+x12+x22-x1x2
五、上机步骤
略。

调试用例的检验数据如下:全局最优点为[8 6]T。

注释
1、为简化编程,优化模型的表达采用规定名称的函数过程来实现,如objfunc、gg、hh等;无论哪个优化问题,均需新建一个vb工程,再装入存放优化模型的模块OptModel.bas和存放通用过程的模块OptFuncs.bas,然后在其它模块(标准模块或窗体模块)中编写调用代码。

2、为便于求梯度的操作,将优化模型中各个函数的调用交给一个统一的过程funcval(放在OptModel 模块中)来实现,而objfunc、gg、hh等过程则设置成私有过程。

3、涉及一维搜索的各个过程,需要能够解决多元问题条件下的一维搜索,而不是一元搜索。

4、上机指导中要求编写的各过程是通用的,在后面的实验中还要用到,故最好按要求的名称编写,当然,同学们也可以按自己的习惯给各过程取名。

主要参考文献
1、陈立周.机械优化设计方法.北京:冶金工业出版社,2005
2、刘惟信. 机械最优化设计.北京:清华大学出版社,1994
3、王国彪. 机械优化设计方法微机程序与应用. 北京:机械工业出版社, 1994
4、赵汝嘉编.机械结构有限元分析.西安交通大学出版社.1990。

相关文档
最新文档