1

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

考えp1 = {1, 2, 5, 6, 3, 4}てみるとp2 = {2, 6, 5, 4, 1, 3}

、クロスオーバーの 1 つは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;
}
4

1 に答える 1

0

問題に応じて、クロスオーバーを行うためのさまざまな手法があります。

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

使用している方法では、値の重複が許可されています。それを避けるために、次のさまざまなアルゴリズムに従うことをお勧めします。

p1={1,2,3,4,5,6} および p2={a,b,c,d,e,f}

  1. 最初の方法:

    • mid染色体 p( )の長さの数に制限されたランダムなインデックスを選択します

    • p1 を 0 インデックスからmidインデックスにコピーし、p3にコピーします

    • 次に、p2 をループし、まだ p3 にない値をコピーします

  2. 2番目の方法

    • 2 つのランダムなインデックス (開始、終了) を選択

    • p1 の値をstarttoendインデックスから p3 にコピーします

    • p2 をループし、まだ p3 にない値をコピーします

したがって、値の重複を避けるための基本的な考え方は、単純にループして、値が配列に既に存在するかどうかを確認することです。

start2番目の方法は、p1をインデックスからインデックスにコピーendし、同じインデックスでp3に貼り付けてから、p3をループして空/null値を取得し、まだp3にない値をp2からコピーする必要があるため、より困難です。

人工知能に本当に興味があるなら、まだステージング中ですが、人工知能 StackExchangeをフォローしていると思います。

于 2016-05-31T07:31:34.443 に答える