机械优化设计复合形算法程序设计报告

更新时间:2023-03-19 05:00:01 阅读量: 人文社科 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、设计要求:

基于复合形算法思想,运用复合形法编写C语言程序,完成一次迭代。

已知条件:

1、目标函数:y=25/x1x2

2、初始值:

X1=[2.5,0.65],X2=[2.4,0.6],X3=[2.6,0.7],X4=[2.7,0.65]

反射点迭代求解:完成一次迭代并输出

二、方法原理

(1)

复合形算法是求解约束优化问题的一种重要的直接解法。它的基本思路是在可行域内构造一个具有K个顶点的初始复合形。对该复合形各顶点的目标函数值进行比较,找到目标函数值最大的顶点,然后按一定的法则求出目标函数值有所下降的可行的新点,并用此点代替最坏点,构成新的复合形,复合形的形状每改变一次,就向最优点移动一步,直至逼近最优点。

3

三、程序清单:

#include"stdafx.h"

#include "stdio.h"

void main()

{

double x[4][2],y[4],xc[2]={0,0},m,n=1.3,g[2],k; int i,j,r;

for(i=0;i<4;i++)

{

printf("input X%d:\n",i+1);

scanf("%lf,%lf",&x[i][0],&x[i][1]);

y[i]=25/(x[i][0]*x[i][1]*x[i][1]*x[i][1]); printf("y%d=%3.2f\n",i+1,y[i]);

}

for(i=0;i<3;i++)

{ for(j=i+1;j<4;j++)

if(y[i]>y[j])

{ m=y[i],k=y[j],y[j]=m,y[i]=k;

for(r=0;r<2;r++)

{ m=x[i][r],k=x[j][r],x[j][r]=m,x[i][r]=k; } }

}

printf("排序后,按函数值的优劣从小到大:"); for(i=0;i<4;i++)

printf("\ny%d=%3.2f

x%d=[%3.2f,%3.2f]",i+1,y[i],i+1,x[i][0],x[i][1]); for(j=0;j<2;j++)

for(i=0;i<3;i++)

xc[j]=xc[j]+x[i][j]/3;

printf(" \n中心xc=

[%3.2f,%3.2f]",xc[0],xc[1]);

i=1;

for(j=0;j<2;j++)

g[j]=xc[j]+n*(xc[j]-x[3][j]);

while(g[0]*g[1]*g[1]*g[1]<0.6||g[0]*g[1]>2.5) { n=n*0.7;

printf("\n 第%d次迭代后:xr=[%3.2f,%3.2f] ",i,g[0],g[1]);

m=25/(g[0]*g[1]*g[1]*g[1]);i++;

for(j=0;j<2;j++)

g[j]=xc[j]+n*(xc[j]-x[3][j]); } m=25/(g[0]*g[1]*g[1]*g[1]);

printf(" 第%d次迭代 Fr=%3.2f<Fh,计算完成",i,m);

}

四、实验结果(要求附上程序运行结果截图)

本文来源:https://www.bwwdw.com/article/2s2j.html

Top