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

📄 select.h

📁 NSGA-II 多目标遗传算法 c语言编写
💻 H
字号:
/*This is the file to get the different individuals selected*/void nselect(population *old_pop_ptr,population *pop2_ptr);void nselect(population *old_pop_ptr,population *pop2_ptr){  int *fit_ptr1,*fit_ptr2;  float rnd2,*f1_ptr,*f2_ptr;    int *s1_ptr,*s2_ptr,*select_ptr,*ptry;  float *select_ptr_r, *s1_ptr_r, *s2_ptr_r;    void *j,*j1;    int c,i,rnd,rnd1,k,n,j2,r,s,r1;    old_pop_ptr->ind_ptr = &(old_pop_ptr->ind[0]);    pop2_ptr->ind_ptr= &(pop2_ptr->ind[0]);     j =  &(old_pop_ptr->ind[popsize-1]);    old_pop_ptr->ind_ptr = &(old_pop_ptr->ind[0]);   j2 = 0;  r = popsize;  s = chrom;    for(n = 0,k = 0;n < popsize;n++,k++)    {      pop2_ptr->ind_ptr = &(pop2_ptr->ind[k]);      select_ptr = &(pop2_ptr->ind_ptr->genes[0]);      select_ptr_r = &(pop2_ptr->ind_ptr->xreal[0]);      rnd2 = randomperc();       rnd2 = popsize* rnd2;       rnd = floor(rnd2);      if(rnd == 0)	rnd = popsize - k;      if(rnd == popsize)	rnd = (popsize-2)/2;            /*Select first parent randomly*/	      j = &(old_pop_ptr->ind[rnd-1]);            rnd2 = randomperc();             rnd2 = popsize * rnd2;             rnd1 = floor(rnd2);            if (rnd1 == 0)	rnd1 = popsize - n;      if(rnd1 == popsize)	rnd1 = (popsize - 4)/2;                  /*Select second parent randomly*/      j1 = &(old_pop_ptr->ind[rnd1-1]);            old_pop_ptr->ind_ptr = j;            s1_ptr = &(old_pop_ptr->ind_ptr->genes[0]);      s1_ptr_r = &(old_pop_ptr->ind_ptr->xreal[0]);      fit_ptr1 = &(old_pop_ptr->ind_ptr->rank);      f1_ptr = &(old_pop_ptr->ind_ptr->cub_len);            old_pop_ptr->ind_ptr = j1;      s2_ptr = &(old_pop_ptr->ind_ptr->genes[0]);      s2_ptr_r = &(old_pop_ptr->ind_ptr->xreal[0]);      fit_ptr2 = &(old_pop_ptr->ind_ptr->rank);      f2_ptr = &(old_pop_ptr->ind_ptr->cub_len);/*--------------------------------------------------------------------------*/      /*------------------SELECTION PROCEDURE------------------------------------*/            /*Comparing the fitnesses*/            if(*fit_ptr1 > *fit_ptr2)	{	  for(i = 0;i < chrom;i++)	    *select_ptr++=*s2_ptr++;	  for(i = 0;i < nvar;i++)	    *select_ptr_r++=*s2_ptr_r++;	}      else	{	  if(*fit_ptr1 < *fit_ptr2)	    {	      for(i = 0;i < chrom;i++)		*select_ptr++=*s1_ptr++;	      for(i = 0;i < nvar;i++)		*select_ptr_r++=*s1_ptr_r++;	    }	  else	    {	      if(*f1_ptr < *f2_ptr)		{		  for(i = 0;i < chrom;i++)		    *select_ptr++=*s2_ptr++;		  for(i = 0;i < nvar;i++)		    *select_ptr_r++=*s2_ptr_r++;		}	      else		{		  for(i = 0;i < chrom;i++)		    *select_ptr++=*s1_ptr++;		  for(i = 0;i < nvar;i++)		    *select_ptr_r++=*s1_ptr_r++;		}	    }	}    }  return;}

⌨️ 快捷键说明

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