半变异函数拟合指数模型.doc_第1页
半变异函数拟合指数模型.doc_第2页
半变异函数拟合指数模型.doc_第3页
半变异函数拟合指数模型.doc_第4页
半变异函数拟合指数模型.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

半边也函数的应用半变异函数拟合指数模型程序(c+代码)#include #include #include #include #include #define S 1 /*试验次数 */#define G 2000 /*混合迭代次数*/#define P 200 /*个体总数*/#define M 20 /*族群数*/#define I 10 /*因此,一个族群中的个体数是10*/#define V 3 /*个体维数*/#define N 10 /*族群内更新次数*/#define MAX 10#define MIN 0double DMAX=1.0; /*蛙跳的最大值*/double DMIN=0.4; /*蛙跳的最大值*/double D=MAX/1; /*蛙跳的最大值*/int i1,i2,i3,i4,ii;int try_number=0;int try_max=5;double C=1.0;#define R (double)(rand()%10000)/10000)/0-1之间的随机数,精度为1/10000/#define R1 rand()%100/100.0static int kk;double PI=3.14159265;double Tolerance=0.0000001;/收敛精度double c3=0.03;/扰动幅度double e=2.718281828459;/自然对数底数int sm=3;int bz=0;/扰动因子标志double awV;double nihe172=1115.658026,8.70628355,1915.362904,8.20840555,2467.305693,9.1856689,2952.330784,9.0543057,5095.207855,9.132906445,5418.830566,8.852431395,4146.89209,9.45153145,6037.806376,9.103558859,4818.459044,7.2313171,5143.558017,9.0538129,5459.844361,9.74985695,5762.570046,8.6310193,6060.453719,9.194387,6356.051127,10.398948,6651.015103,9.8449629,6941.254523,7.2279982,7223.868903,6.579128;typedef struct double dV;double fitness;Individal;typedef struct double hV;heli;Individal pwM;/*族群中个体最差位置*/Individal pbM;/*族群中个体最好位置*/Individal px;/*全体中最好位置*/Individal individualP;/*全部个体*/Individal popMI;/*排序后的群组*/Individal tempM;Individal temp1I;Individal tem;Individal temxS;/*计算标准差*/*选择测试函数为Sphere*/double fitness(double a)int i;double sum=0.0;double sum1=0.0;double s1=0.0,h1=0.0;double x1V+1;for(i=0;iV;i+)x1i=ai;for(i=0;iV;i+) for(i=0;ix12)sum1=x10+x11;elsesum1=nihei1-(x10+x11*(1.5*nihei0-0.5*pow(nihei0,3)/pow(x12,3); sum=sum+sum1;return sum; /*对每一个个体初始化*/void init() int i,j; srand(unsigned)time(NULL)+kk+);for(i=0;iP;i+)for(j=0;jV;j+)individuali.dj=R*(MAX-MIN)+MIN;individuali.fitness=fitness(individuali.d);px.fitness=individualP-1.fitness;/*按照适应度降序对全部个体进行排序和族群划分*/void sort()int i,j,k;for(i=1;iP;i+)for(j=0;jP-i;j+)if(individualj.fitnessindividualj+1.fitness) tem=individualj;individualj=individualj+1;individualj+1=tem; k=0;/*按照规则分组*/ for(i=0;iI;i+) for(j=0;jindividualP-1.fitness)px=individualP-1;for(i=0;iM;i+)pwi=popi0;pbi=popiI-1;/*对某个群组中的个体进行重新排序*/void sortPop(int b)int i,j;for(i=1;iI;i+)for(j=0;jI-i;j+)if(popbj.fitnesspopbj+1.fitness) tem=popbj; popbj=popbj+1; popbj+1=tem; /*群组内更新*/void update()int i,j,k,l,n;double a;double b; for(n=0;nN;n+) for(i=0;iM;i+) /temp1I=popi; a=0.0; b=0.0;/fitnessFw(i);/D=DMIN+(DMAX-DMIN)*(G-i2)/G; /D=DMIN+(DMAX-DMIN)*pow(e,-30*pow(i2/G,sm); for(j=0;jD) if(tempi.dj0) tempi.dj=D;else tempi.dj=-D; tempi.dj+=pwi.dj;if(tempi.djMAX)tempi.dj=MAX; if(tempi.djMIN)tempi.dj=MIN; a=fitness(tempi.d); tempi.fitness=a; if(apwi.fitness) popi0=tempi; sortPop(i); pwi=popi0; pbi=popiI-1; else/标志 for(k=0;kD) if(tempi.dk0.0) tempi.dk=D; else tempi.dk=-D; tempi.dk+=pwi.dk;if(tempi.dkMAX)tempi.dk=MAX; if(tempi.dkMIN)tempi.dk=MIN; / a+=tempi.dk*tempi.dk;/适应度值计算/z=z+(x1i*x1i-10*cos(2*PI*x1i)+10); a=fitness(tempi.d); tempi.fitness=a; if(apwi.fitness) popi0=tempi; sortPop(i); pwi=popi0; pbi=popiI-1; else for(l=0;lV;l+) popi0.dl=R*(MAX-MIN)+MIN; / b+=popi0.dl*popi0.dl;/适应度值计算 /popi0.fitness=b; popi0.fitness=fitness(popi0.d); sortPop(i); pwi=popi0; pbi=popiI-1; /标志 /*M循环 for(ii=0;iipbii.fitness) px=pbii;/*N循环/*将popMI复制到individual*/void copy()int i,j,k;i=0;for(j=0;jM;j+) for(k=0;kI;k+) individuali=popjk; i+;void report()printf(第%d次试验极值为%.10en,i1+1,px.fitness);double sigma() int j; double f=0.0; double fitness_avg=0.0; for (j=0;jS;j+) / printf(极值e为%16fn,temxj.fitness);fitness_avg=fitness_avg+temxj.fitness; fitness_avg=fitness_avg/S; printf(平均值为%.16en,fitness_avg); /printf(%d极值e为%.16fn,j,temxj.fitness); for (j=0;jS;j+) f=f+fabs(temxj.fitness-fitness_avg)*fabs(temxj.fitness-fitness_avg); / printf(极值e为%.16fn,f); f=sqrt(f/(S-1); return f;void main() clock_t start,end; double ave,sigmax; FILE *f=fopen(result(SFLA).txt,w); ave=0.0;start=clock(); for(i1=0;i1S;i1+) init(); for(i2=0;i2G;i2+) sort(); update(); copy();temxi1=px;report(); ave=ave+px.fitness; sigmax=sigma(); end=clock(); ave=ave/S; /printf(平均极值为n%.16fnCompleted!,ave);printf(50次试验标准差为%.16en,sigmax); printf(50次试验平均运行时间=%.2fsecondsn,(double)(end-start)/(S*(double)CLOCKS_PER_SEC); printf(50次试验的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论