📄 mut.c
字号:
#define TEST o
#include "genet.h"
mutate()
{
int taken_col[N], taken_row[K], taken_row1[K], taken_col1[N];
int row_tab[K], col_tab[N];
int counter, counter_r, counter_c, sum, i,j,v;
int r,c, r1, c1;
for (i=0; i<k; ++i)
for (j=0; j<n; ++j)
chd[i][j] = par[i][j];
r = 0;
while (r < 2) r = random0(k);
c = 0;
while (c < 2) c = random0(n);
for (i = 0; i < k; ++i) {taken_row[i] = 0;}
for (j = 0; j < n; ++j) {taken_col[j] = 0;}
#if TEST
printf("enter select rows r = :%d\n",r);
#endif
counter = 0;
while (counter < r)
{
r1 = random0(k);
if (taken_row[r1] == 0) {counter++; taken_row[r1] = 1;}
}
#if TEST
printf("enter select cols c = :%d\n",c);
#endif
counter = 0;
while (counter < c)
{
c1 = random0(n);
if (taken_col[c1] == 0) {counter++; taken_col[c1] = 1;}
}
#if TEST
printf("enter sum rows r = :%d\n",r);
#endif
counter = -1;
for (r1 = 0; r1 < k; ++r1)
{
sum = 0;
if (taken_row[r1] == 1)
{
counter = counter + 1;
for (v=0; v<n; ++v) {if (taken_col[v] == 1) sum = sum + par[r1][v];}
row_tab[counter] = sum;
}
}
#if TEST
printf("enter sum cols c = :%d\n",c);
#endif
counter = -1;
for (c1 = 0; c1 < n; ++c1)
{
sum = 0;
if (taken_col[c1] == 1)
{
counter = counter + 1;
for (v=0; v<k; ++v){ if (taken_row[v] == 1) sum = sum + par[v][c1];}
col_tab[counter] = sum;
}
}
/* for (i=0; i<k; ++i){
/* for (j=0; j<n; ++j) {printf("%d ", par[i][j]);} printf("\n");} */
/* printf("\n\n\n"); */
/* printf("taken rows\n"); */
/* for (i=0; i<k; ++i) printf("%d ", taken_row[i]); */
/* printf("\n"); */
/* printf("taken columns\n"); */
/* for (i=0; i<k; ++i) printf("%d ", taken_col[i]); */
/* printf("\n\n\n"); */
/* printf("row sums\n"); */
/* for (i=0; i<r; ++i) printf("%d ", row_tab[i]); */
/* printf("\n\n\n"); */
/* printf("col sums\n"); */
/* for (i=0; i<c; ++i) printf("%d ", col_tab[i]); */
/* printf("\n\n\n"); */
#if TEST
printf("enter init population\n");
#endif
init_one_population(r,c, row_tab, col_tab);
#if TEST
printf("leave init population\n");
#endif
/* printf("\n i n i t i a l \n"); */
/* for (i=0; i<r; ++i){ */
/* for (j=0; j<c; ++j) printf("%d ", initial[i][j]); printf("\n");} */
/* printf("\n\n\n"); */
#if TEST
printf("enter copy back\n");
#endif
counter_r = -1;
for (i =0; i<k; ++i)
{
counter_c = -1;
if (taken_row[i] == 1)
{
counter_r = counter_r +1;
for (v=0; v<n; ++v)
{
if (taken_col[v] == 1)
{
counter_c = counter_c +1;
chd[i][v] = initial[counter_r][counter_c];
}
}
}
}
/* for (i=0; i<k; ++i){ */
/* for (j=0; j<n; ++j) printf("%d ", chd[i][j]); printf("\n");} */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -