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

📄 select.h

📁 多目标遗传算法的源代码
💻 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 + -