机械优化设计随机法程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(); }