2016-05-17 25 views
0

私の質問は、クロスオーバーを実行し重複を避ける方法です。

あなたは重複が見たようp1 = {1, 2, 5, 6, 3, 4}p2 = {2, 6, 5, 4, 1, 3} クロスオーバーの

一つはres = {1, 2, 5 , 6, 1 ,3}

です...

は、我々はそれを避けることができます考えてみましょうか?遺伝的アルゴリズムによるソート、クロスオーバーでの重複データ



は、ここで問題に応じて、クロスオーバーを行うためのさまざまなテクニックがあります

private static Chromosome crossover(Chromosome chromosome1, Chromosome chromosome2) { 
    Chromosome newChromosome = new Chromosome(); 
    for (int i = 0; i < chromosome1.size(); i++) { 
     if (Math.random() < uniformRate) { 
      newChromosome.addGene(chromosome1.getGene(i)); 
     } else { 
      newChromosome.addGene(chromosome2.getGene(i)); 
     } 
    } 
    return newChromosome; 
} 
+0

Hmm - no。ユニークな値の2つの配列では、交換された要素が同一である場合にのみ要素を交換し、結果に重複はなく、交換を無意味にします。これが運動であれば問題の定式化を見ることができますか? –

+0

@ 500-InternalServerErrorこれは宿題ではなく、ちょっと傾いているだけです...問題は遺伝的アルゴリズムを使用して配列をソートすることです、それだけでなく、遺伝的アルゴリズムではクロスオーバーを使用する必要があります... –

+0

ソートはGAのための良いアプリケーションだと思いますか? –

答えて

0

マイコードです。

重複する可能性があるかどうかは問題です。

使用しているメソッドによって重複する値が許可されます。私は示唆しているであろうことを回避するために、様々なアルゴリズムは、次のとおりです。

P1 = {1,2,3,4,5,6}とP2 = {A、B、C、D、Eは、F}

  1. 最初の方法:

    • に染色体P(mid)0インデックスから

    • コピーP1の長さの数に制限ランダムインデックスを選択指標P2をループ次いで

    • P3およびP3

  2. に既にない値を第二の方法

    • コピー(始端)2ランダムインデックスを選択

    • コピーp1からp3へのコピーstartからだから、

P3

重複した値を避けるために、基本的な考え方にはまだ入っていないインデックス

  • ループP2を介して、値をコピーするには、単に以上のループと値が既に存在するかどうかを確認されるだろう配列かどうか。あなたはendインデックスにstartインデックスからP1をコピーして、同じインデックスでP3に貼り付け、その後、空の/ NULL値のためにP3をループする必要があるとp2から値をコピーするので

    第二の方法はまだなっていないことがより困難ですp3で。

    あなたが本当に人工知能に興味があるのなら、私はまだArtificial Intelligence StackExchangeに従っていると思います。

  • 関連する問題