• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: C/C++
  • 标签: 复合形法  优化  C  

资源简介

优化设计中复合形法C语言程序,多维优化,你值得拥有

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define N 2               /*优化问题的维数N*/
#define K 4               /*复合形法顶点数K*/
#define N1 2              /*约束方程个数K*/
#define E 0.00000001       /*复合形法迭代精度*/
#define NM 500            /*寻找初始复合形的最大次数*/

int H=0L=0;                      /*H,L--复合形顶点坏点和好点顶点号*/
double f[K];                     /*程序顶点值从f[0]开始*/
struct
{
double x1[N];
}Tpoint[K]xcxr;     /*Tpoint存放K个点的坐标,xcxr分别为中心点和映射点坐标*/

/*目标函数子程序*/
double function(double x[])
{
double F;
F=x[0]*x[0]+x[1]*x[1]+4;
return(F);
}
/*约束条件子程序*/
int strain(double x[])
{
int ifin=1;
double g[N1];
g[0]=x[0];
g[1]=x[1];
for(i=0;i if(g[i]<0)
{
fin=0;
break;
}
return(fin);
}
/*初始可行点产生区间*/
void startab(double a[]double b[])
{
a[0]=0;b[0]=10.0;
a[1]=0;b[1]=10.0;
return;
}
/*初始复合形*/
int startfhx(double a[]double b[]int num)
{
int ii1iwkk=0;
int jj1mfh1=1;
double sum2[N];
double alfr;

srand( (unsigned)time( NULL ) ); /*srand()用来设置rand()产生随机数时的随机数种子*/
do                              /*产生第一个可行点*/
{
for(i=0;i {
r=rand()/32767.;   /*直接调用函数产生随机数rand()可生成一个0到32767之间的随机数*/
Tpoint[0].x1[i]=a[i]+r*(b[i]-a[i]);
}
iw=strain(Tpoint[0].x1);
kk=kk+1;
if(kk>num)
{
fh1=2;
return(fh1);
}
}while(iw==0);
for(j=1;j {
for(i=0;i {
r=rand()/32767.;      /*直接调用函数产生随机数*/
Tpoint[j].x1[i]=a[i]+r*(b[i]-a[i]);
}
iw=strain(Tpoint[j].x1);
if(iw==0)
{
m=j;
for(i1=0;i1 sum2[i1]=0.;
for(i1=0;i1 for(j1=0;j1 sum2[i1]+=Tpoint[j1].x1[i1];
for(j1=0;j1 xc.x1[j1]=sum2[j1]/m;
alf=0.5;
do         /*求中心的映射点*/
{
for(i=0;i Tpoint[m].x1[i]=xc.x1[i]+alf*(Tpoint[m].x1[i]-xc.x1[i]);
iw=strain(Tpoint[m].x1);
}while(iw==0);
}
}
return(fh1);
}
void suan()              /*找出好点和坏点*/
{

评论

共有 条评论