机械优化设计随机法程序设计

  • 格式:doc
  • 大小:27.00 KB
  • 文档页数:3

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
double objf(double x[])
{double ff;
ff=pow((x[0]-4),2)+pow((x[1]-5),2);
return(ff);
}
/*约束条件子程序*/
double strain(double x[])
{int i;
double g[3];
g[0]=x[0]-1;
g[1]=x[1]-1;
g[2]=8-x[0]-x[1];
for (i=0;i<3;i++)
{if(g<0)
return(0);
}
return(1);
}
double rn(double *r)
{int m;
double s,u,v,p;
s=65536.0;u=2053.0;v=13849.0;
*r=u*(*r)+v;
m=(int)(*r/s);
*r=*r-m*s;
p=*r/s;
return(p);
}
double randopti(double x[],double xl[],double xh[],double a0,double eps,int n,int nmax)
{int i,iw,k,jj=0;
double *x0,*s,a,f0,f,rr=0,ss;
x0=(double *)malloc(n*sizeof(double));
s=(double *)malloc(n*sizeof(double));
do
{for(i=0;i*(x0+i)=xl[i]+rn(&rr)*(xh[i]-xl[i]);
jj=jj+1;
iw=strain(x0);
if(jj>2000)
{printf("找不到初始可行点!");
return(-1);
}
}
while(iw!=1);
a=a0;
f0=objf(x0);
for(;;)
{k=1;
jj=0;
L1:
ss=0;
for(i=0;i*(s+i)=rn(&rr);
for(i=0;iss+=*(s+i)*(*(s+i));
for(i=0;i{*(s+i)=*(s+i)/sqrt(ss);
*(x+i)=*(x0+i)+a*(*(s+i));
}
do
{iw=strain(x);
if(iw==1)
{f=objf(x);
if(f{for(i=0;i{*(x0+i)=*(x+i);
*(x+i)=*(x0+i)+a*(*(s+i));
}
f0=f;
jj=1;
}
else
break;
}
}
while(iw==1);
if(jj==0)
{k+=1;
if(k>nmax)
{if(a>eps)
a=a *0.5;
else
{free(x0);
free (s);
return(objf(x));
}
}
else
goto L1;
}
}
}
void main()
{double a[]={0,0};
double b[]={8,9};
double c,x[2];
c=randopti(x,a,b,1,0.00001,2,50);
printf("输出最优点及其目标函数值:\n");
printf("x[0]=%f,x[1]=%f,ff=%f \n",x[0],x[1],c);
getchar();
}