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