我正在阅读关于遗传算法的介绍性文本,目前我仍然遇到了运动问题。此问题中的个体是20位二进制字符串,其适应度只是字符串中1的数量。
我使用健身比例选择进行突变和交叉(轮盘赌方法是我认为的术语)。然而,本书中的问题要求报告哪一代出现了一个非常合适的字符串(所有1连续),即使在指定的20次迭代之后,我的程序也不会发生这种情况。我无法发现问题。
以下是两个人交叉轮盘选择的代码(n_life表示个人数量):
//selecting members for crossover (roulette wheel)
int sum=0;
int[] temp1 = new int[20];
int[] temp2 = new int[20];
int[][] result = new int[2][20];
for(int i=0; i<n_life; i++){
sum=sum+findex[i];
}
int pointer = new Random().nextInt(sum);
int partsum=0;
for(int b=0; b<n_life; b++){
partsum=partsum+findex[b];
if(partsum>pointer){for(int i=0; i<20; i++){
temp2[i]=initial[b][i];
}break;}
}
pointer = new Random().nextInt(sum);
partsum=0;
for(int a=0; a<n_life; a++){
partsum=partsum+findex[a];
if(partsum>pointer){for(int i=0; i<20; i++){
temp1[i]=initial[a][i];
}break;}
}
最后,n_life = 10的输出如下。第一个矩阵是初始种群。第二个矩阵显示了特定一代中所有个体的适应性。第三个矩阵是最终的人口。
1 0 0 0 1 0 0 1 1 1 0 0 1 0 0 1 1 1 1 0
0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 1 0
0 1 0 0 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 1
1 0 0 1 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0
0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0 1
1 1 1 1 0 0 1 0 1 1 0 0 0 1 1 1 0 0 1 0
0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 1 1 0
0 0 1 1 1 1 1 0 0 1 0 1 0 1 0 1 0 1 1 1
0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 0 0
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 0 0 1
10 8 11 9 6 11 8 12 7 14
10 8 11 9 9 11 8 12 11 14
10 9 11 10 9 11 8 12 11 14
10 14 11 10 14 11 8 12 11 14
15 14 11 15 14 11 8 12 11 14
15 14 15 15 14 15 8 12 11 14
15 14 15 15 14 15 15 12 15 14
15 14 15 15 14 15 15 12 15 14
15 15 15 15 15 15 15 12 15 14
15 15 15 15 15 15 15 13 15 16
15 15 15 15 15 15 15 13 15 16
16 16 15 15 15 15 15 13 15 16
16 16 16 16 15 15 15 13 15 16
16 16 16 16 15 15 15 13 15 16
16 16 16 16 13 13 15 13 15 16
16 16 16 16 13 13 15 13 15 16
16 16 16 16 13 13 15 13 15 16
16 16 16 16 16 16 15 13 15 16
16 16 16 16 16 16 16 15 15 16
16 16 16 16 16 16 16 15 15 16
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0
0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1
GA在16岁时饱和但从未达到20的适应度。有人可以指出问题吗?感谢。