📄 realcross2.h
字号:
/*This is the file used for crossover for Real Coded GA*/void realcross(population *new_pop_ptr,population *mate_pop_ptr);void realcross(population *new_pop_ptr,population *mate_pop_ptr){ int i,j,y,n,r; float rnd,par1,par2,chld1,chld2,betaq,beta,alpha; float y1,y2,yu,yl,expp; y=0; n=0; for(i = 0; i < popsize/2; i++) { rnd = randomperc(); /*Check Whether the cross-over to be performed*/ if(rnd <= pcross) { /*Loop over no of variables*/ for(j = 0;j < nvar;j++) { /*Selected Two Parents*/ par1 = mate_pop_ptr->ind[y].xreal[j]; par2 = mate_pop_ptr->ind[y+1].xreal[j]; yl = lim_r[j][0]; yu = lim_r[j][1]; rnd = randomperc(); /* Check whether variable is selected or not*/ if(rnd <= 0.5) { /*Variable selected*/ ncross++; if(fabs(par1 - par2) > 0.000001) // changed by Deb (31/10/01) { if(par2 > par1) { y2 = par2; y1 = par1; } else { y2 = par1; y1 = par2; } /*Find beta value*/ if((y1 - yl) > (yu - y2)) { beta = 1 + (2*(yu - y2)/(y2 - y1)); //printf("beta = %f\n",beta); } else { beta = 1 + (2*(y1-yl)/(y2-y1)); //printf("beta = %f\n",beta); } /*Find alpha*/ expp = di + 1.0; beta = 1.0/beta; alpha = 2.0 - pow(beta,expp); if (alpha < 0.0) { printf("ERRRROR %f %d %d %f %f\n",alpha,y,n,par1,par2); exit(-1); } rnd = randomperc(); if (rnd <= 1.0/alpha) { alpha = alpha*rnd; expp = 1.0/(di+1.0); betaq = pow(alpha,expp); } else { alpha = alpha*rnd; alpha = 1.0/(2.0-alpha); expp = 1.0/(di+1.0); if (alpha < 0.0) { printf("ERRRORRR \n"); exit(-1); } betaq = pow(alpha,expp); } /*Generating two children*/ chld1 = 0.5*((y1+y2) - betaq*(y2-y1)); chld2 = 0.5*((y1+y2) + betaq*(y2-y1)); } else { betaq = 1.0; y1 = par1; y2 = par2; /*Generation two children*/ chld1 = 0.5*((y1+y2) - betaq*(y2-y1)); chld2 = 0.5*((y1+y2) + betaq*(y2-y1)); } // added by deb (31/10/01) if (chld1 < yl) chld1 = yl; if (chld1 > yu) chld1 = yu; if (chld2 < yl) chld2 = yl; if (chld2 > yu) chld2 = yu; } else { /*Copying the children to parents*/ chld1 = par1; chld2 = par2; } new_pop_ptr->ind[n].xreal[j] = chld1; new_pop_ptr->ind[n+1].xreal[j] = chld2; } } else { for(j = 0;j < nvar;j++) { par1 = mate_pop_ptr->ind[y].xreal[j]; par2 = mate_pop_ptr->ind[y+1].xreal[j]; chld1 = par1; chld2 = par2; new_pop_ptr->ind[n].xreal[j] = chld1; new_pop_ptr->ind[n+1].xreal[j] = chld2; } } n = n+2; y=y+2; } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -