⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repl.c

📁 遗传算法的一个源码集成
💻 C
字号:
#define TEST 0#include "genet.h"replace_population(){	int p,q,i,j,z,v,w, cross_no,m1,m2,found, no_of_dif_par;	int mut_vec[POP], inv_vec[POP], cro_vec[POP];		i=0;	for (j=0; j<pop; ++j)	   if (parents[j] != 0) i++;	no_of_dif_par = i;		for (j=0; j<pop; ++j)	{	   mut_vec[j] = 0;	   inv_vec[j] = 0;	   cro_vec[j] = 0;	 }	 	     z = mutat;       while (z > 0)    {    v = random0(no_of_dif_par);    for (p=0; p<pop; ++p)       {       if (parents[p] != 0)          {          if (v == 0) {mut_vec[p]++; parents[p]--;}           v = v - 1;          }        }     z = z-1;     i=0;	 for (j=0; j<pop; ++j)	    if (parents[j] != 0) i++;	 no_of_dif_par = i;     }         z = inver;       while (z > 0)    {    v = random0(no_of_dif_par);    for (p=0; p<pop; ++p)       {       if (parents[p] != 0)          {          if (v == 0) {inv_vec[p]++; parents[p]--;}           v = v - 1;          }        }     z = z-1;     i=0;	 for (j=0; j<pop; ++j)	    if (parents[j] != 0) i++;	 no_of_dif_par = i;     }         z = cross;       while (z > 0)    {    v = random0(no_of_dif_par);    for (p=0; p<pop; ++p)       {       if (parents[p] != 0)          {          if (v == 0) {cro_vec[p]++; parents[p]--;}           v = v - 1;          }        }     z = z-1;     i=0;	 for (j=0; j<pop; ++j)	    if (parents[j] != 0) i++;	 no_of_dif_par = i;     }        /*		printf("\nmutation\n");	for (i=0; i<pop; ++i)	   printf("%d ", mut_vec[i]);	printf("\n");	printf("\ninversion\n");	for (i=0; i<pop; ++i)	   printf("%d ", inv_vec[i]);	printf("\n");	printf("\ncrossover\n");	for (i=0; i<pop; ++i)	   printf("%d ", cro_vec[i]);	printf("\n");*/						for (p=0; p<pop; ++p)	{	   while (mut_vec[p] != 0)	   {			for (i=0; i<k; ++i)			for (j=0; j<n; ++j)				par[i][j] = pp[p]->sol[i][j];				   mutate();						q=0;			while (dead[q] == 0 && q < pop) ++q;			if ( q >= pop  )				{ printf ("replace_population error: no dead left\n"); return(2);}			dead[q] = 0;			for (i=0; i<k; ++i)			for (j=0; j<n; ++j)				pp[q]->sol[i][j] = chd[i][j];					        	        mut_vec[p]--;	  		}		 		 	while (inv_vec[p] != 0)	   {			for (i=0; i<k; ++i)			for (j=0; j<n; ++j)				par[i][j] = pp[p]->sol[i][j];					       	           		   inverse();						q=0;			while (dead[q] == 0 && q < pop) ++q;			if ( q >= pop  )				{ printf ("replace_population error: no dead left\n"); return(2);}			dead[q] = 0;			for (i=0; i<k; ++i)			for (j=0; j<n; ++j)				pp[q]->sol[i][j] = chd[i][j];			        inv_vec[p]--;	  		}      }           cross_no = 0;      z = cross;            while (z > 0)      {         for (p = 0; p < pop; ++p)         {            if (cro_vec[p] != 0)		    {  cro_vec[p] = cro_vec[p] -1; 	           z = z -1;		       cross_no = cross_no + 1;		       		       if ((cross_no % 2) == 0)		       {			   for (i=0; i<k; ++i)			   for (j=0; j<n; ++j)				  par_b[i][j] = pp[p]->sol[i][j];				           crossover();	       	           q=0;			   while (dead[q] == 0 && q < pop) ++q;			   if ( q >= pop  )				{ printf ("replace_population error: no dead left\n"); return(2);}			   dead[q] = 0;			   for (i=0; i<k; ++i)			   for (j=0; j<n; ++j)				  pp[q]->sol[i][j] = chd_a[i][j];				           	           q=0;			   while (dead[q] == 0 && q < pop) ++q;			   if ( q >= pop  )				  { printf ("replace_population error: no dead left\n"); return(2);}			   dead[q] = 0;			   for (i=0; i<k; ++i)			   for (j=0; j<n; ++j)				  pp[q]->sol[i][j] = chd_b[i][j];				           } 	     	        else	      	           { 	           	           for (i=0; i<k; ++i)			   for (j=0; j<n; ++j)				  par_a[i][j] = pp[p]->sol[i][j];					          	           } 	      	        		 }	  }	    }		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -