2012-02-16 3 views
0

私はJavaで一様なクロスオーバーを実装する際に問題があります。これがアルゴリズムです。Javaの統一されたクロスオーバー

// Uniform Crossover 
public void UniformCrossover(Individual indi) { 
    if (RVGA.rand.nextDouble() < pc) { 

    // Put your implementation of uniform crossover here 

    // For each gene create a random number in   [0,   1]. 
    // If the number is less than   0.5, swap the gene values in 
    // the parents for this gene; other wise, no swapping . 
} 

は私が乱数を保存することができint tmpと知って、その後、if tmp < 0.5は、私は任意の助けが高く評価され起動させるために管理することができませんでしたループ

を続行します!

これは私のフォーマットを知っているだけの私の1ポイントクロスオーバーの例です。

クロスポイントを選択すると、染色体の先頭からクロスオーバーポイントまでのバイナリストリングが一方の親からコピーされ、残りは第2の親からコピーされます。

親1 =染色体および親2 = indi。

私は一様交叉では、インプレース

public void onePointCrossover(Individual indi) { 
    if (SGA.rand.nextDouble() < pc) { 
     int xoverpoint = SGA.rand.nextInt(length); 

     int tmp; 
     for (int i=xoverpoint; i<length; i++){ 
      tmp = chromosome[i]; 
      chromosome[i] = indi.chromosome[i]; 
      indi.chromosome[i] = tmp; 
     } 
    } 
} 
+2

宿題に質問するときは、「宿題」タグを追加してください。 – DNA

+0

私はちょうどそれを – Student

答えて

1

子供に両親を回しています、あなたは一般的にやりたいことはされています。あなたは1点の例から、に、思える

For each gene 
    if rand()<0.5 
    take from parent a 
    else 
    take from parent b 

両方の両親をその場で同時に修正すること。この場合:

For each gene 
    if rand()<0.5 
    leave both parents alone 
    else 
    swap chromosome[i] with indi.chromosome[i] as before 
関連する問題