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

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

#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;i

ss+=*(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();

}

相关文档
最新文档