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

📄 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 + -