8

私は遺伝的アルゴリズムを書いていて、ルーレットホイールの選択からトーナメントの選択に移行する予定ですが、私の理解に欠陥があるのではないかと思います。

母集団の中でn/2の最良のソリューションのみを選択している場合、確かに私は母集団をすぐに使い果たしますか?

アルゴリズムについての私の理解は次のとおりです。

for(Member m in currentPopulation){
    Member randomMember1 = random member of currentPopulation which is then removed from currentPopulation
    Member randomMember2 = as above;
    //Mutate and crossover

    if(randomMember1.getScore() > randomMember2.getScore()){
        nextGeneration.add(randomMember1);
    } else {
        nextGeneration.add(randomMember2);
    }
}

私はこれを正しく理解していますか?

4

3 に答える 3

9

トーナメントの選択では、選択された個人は母集団から削除されません。同じ個人を選択して、複数のトーナメントに参加することができます。

コードをもう少し詳しく見てみると、別の誤解があることがわかります。通常、トーナメントのすべてのメンバーを変異/クロスオーバーすることはありません。代わりに、トーナメントを実行し、そのトーナメントの勝者が突然変異/クロスオーバーを受ける個人として選択されます。つまり、突然変異の場合、トーナメント サイズは少なくとも 2 である必要があり、クロスオーバーの場合、サイズは少なくとも 3 で、上位 2 人が勝利する必要があります (または、2 つの別々のトーナメントを実行して、クロスオーバーする親のそれぞれを選択することもできます)。

いくつかの疑似コードが役立つ場合があります。

while (nextPopulation too small) {
    Members tournament = randomly choose x members from currentPopulation

    if(crossover){
        Member parents = select best two members from tournament
        Member children = crossover(parents)
        nextPopulation.add(children);
    } else {
        Member parent = select best one member from tournament
        Member child = mutate(parent)
        nextPopulation.add(child);
    }
}
于 2011-02-02T10:26:39.913 に答える
1

すべての世代で母集団から n/2 の個人を選択している場合、最終的に母集団が 1 になるポイントに到達します。選択に加えてやりたいことは、突然変異または突然変異を使用して次世代の新しいメンバーを作成することです。クロスオーバー、一般的にトーナメントの勝者でした。

したがって、世代ごとに、サイズ n の個体群があります。これを選択によって n/2 に減らします。次に、これらの n/2 メンバーが複製および/または突然変異して、次の世代のためにおよそ n/2 のメンバーを生成します (これは、平均して、前の世代から進歩しなかったものよりも「フィット」します)。

于 2011-02-02T10:40:16.637 に答える