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