1、void mutation(void);void revise(void); /* avoid obstacle*/void judge(void); /* whether inside or outside obstacle*/void sort_newpop(void);void sort_oldpop(void);int random(int n) return (rand() % n);double objfunc(double x) double f; f=0*x1+1*x2; /* whether the x2 is needed*/ return(f);int pop_size,
2、maxgen,gen,mN+1,mt, sign=-1; double pc,pm,uxN+1,lxN+1;POP oldpopMAX_POP,newpopMAX_POP;void main(void) int i; mp.mpop.eval = 9999; gen=0; srand( (unsigned)time( NULL ) );、 ofstream fout1(f01.dat); initialize(); for(i = 1; i = pop_size; i+) newpopi = oldpopi; do gen+; generation(); statistics(newpop);
3、 sort_newpop(); fout1gen =gen ; for (i=1;i=20;i+) fout1vnewpopi.evalendlendl; select();select oldpopi = newpopi; while(genmaxgen); coutbest chromosome =mp.it coutv (= mt;mp.mpop.chromi;)f ( cout.flags(ios:fixed); /*以定点方式显示float*/ cout.precision(6); /*当格式为ios:fixed时,精度为6*/mp.mpop.x1,mp.mpop.x2mp.mpop
4、.eval fout1.close();void initialize(void) initdata(); mt=26; initpop(); statistics(oldpop);void initdata(void) pop_size=1900; pc=0.40; pm=0.70; maxgen=400;void initpop(void) int i,j; i+) for(j = 1; j stati.eval) minpop = stati.eval; npop = i; if(mp.mpop.eval statnpop.eval) mp.it = gen; mp.mpop = sta
5、tnpop;sign=signgen=number=npopstatnpop.chromj;statnpop.x1statnpop.x2statnpop.evalvoid generation(void) crossover(); mutation(); newpopi.x1 = decode1(newpopi.chrom); newpopi.x2 = decode2(newpopi.chrom); newpopi.eval = objfunc(newpopi.x); judge () ;void select(void) int i=1,j=1,t=1; POP tempMAX_POP; s
6、ort_oldpop(); while (t = pop_size ) /*sort newpop*/ if (oldpopi.eval=newpopj.eval) tempt+=oldpopi+; else tempt+=newpopj+;i newpopi=tempi;void crossover(void) int i,j,fl,cpop,pos,tmpMAX_STRING; double rMAX_POP; ri = (double) rand()/RAND_MAX; for(fl = 0,i = 1; if(fl = 0) & (ri = pc) cpop = i; fl = 1;
7、else if(fl = 1) &= pc) pos = random(mt-1)+1; for(j = pos+1; j+) tmpj = newpopcpop.chromj; newpopcpop.chromj = newpopi.chromj; newpopi.chromj = tmpj; fl = 0;void mutation(void) int i,j,cpop,pos1,pos2,tmp,pos; double r; POP tempopMAX_POP; r = (double) rand()/RAND_MAX; if (r = pm) pos = random(mt)+1; /
8、* ? */ newpopi.chrompos = random(10); pos = random(mt)+1; for (j = 1;= 3; tempop1.chromj=newpopi.chromj; for (j = 4;= 5 ; tempop1.chromj=newpopi.chromj+21; for (j = 6;= 9 ; tempop1.chromj=newpopi.chromj-2; for (j = 10;= 15 ; tempop1.chromj=newpopi.chromj+7; for (j = 16;= 24 ; tempop1.chromj=newpopi.
9、chromj-8; for (j = 25;= 26 ; pos1 = random(5)+1; /*1-5*/ pos2 = random(5)+1; tmp = tempop1.chrompos1; tempop1.chrompos1 = tempop1.chrompos2; tempop1.chrompos2 = tmp; pos1 = random(10)+6; /*6-15*/ pos2 = random(10)+6; pos1 = random(9)+16; /*16-24*/ pos2 = random(9)+16; pos1 = random(2)+25; /*25-26*/
10、pos2 = random(2)+25; newpopi.chromj= tempop1.chromj;= 5; newpopi.chromj+21= tempop1.chromj;= 9; newpopi.chromj-2= tempop1.chromj;= 15; newpopi.chromj+7= tempop1.chromj; for (j = 16;= 24; newpopi.chromj-8= tempop1.chromj; for (j = 25;= 26;void revise(void) /* obstacle avoidance */ switch(j) case 4: c
11、ase 5: case 6: case 7: case 17: case 18: case 19: case 20: case 21: case 22: if(0 = oldpopi.chromj)&(oldpopi.chromj = 5 ) /*inside obstacle*/ oldpopi.chromj= random(4)+6; break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16:= oldpopi.chromj) & (oldpopi.chromj = 7 ) ol
12、dpopi.chromj=random(2)+8; case 23: case 24:= 4 ) oldpopi.chromj= random(5)+5; case 1: case 2: case 3: case 25: case 26: oldpopi.chromj= random(10); default: break;void judge(void) /* whether inside or outside obstacle*/= newpopi.chromj) & (newpopi.chromj newpopi.eval = 9999;= 3 ) newpopi.eval = 9999
13、;void sort_newpop(void) /*newpop+oldpop from best to worst*/ int i,j,k; i+) /*sort newpop*/ minpop = newpopi.eval; k=i+1; for (j=k;j newpopj.eval) minpop = newpopj.eval; temp1 = newpopj; newpopj = newpopi; newpopi = temp1; void sort_oldpop(void) /*newpop+oldpop from best to worst*/ minpop = oldpopi.eval; oldpopj.eval) minpop = oldpopj.eval; temp1 = oldpopj; oldpopj = oldpopi; oldpopi = temp1;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1