通过简单的GA实现完美健身

时间:2016-10-19 14:23:45

标签: java genetic-algorithm

我正在阅读关于遗传算法的介绍性文本,目前我仍然遇到了运动问题。此问题中的个体是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的适应度。有人可以指出问题吗?感谢。

0 个答案:

没有答案