私は遺伝的アルゴリズムを書いていて、ルーレットのホイールの選択からトーナメントの選択に移るつもりですが、私の理解に欠陥があるのではないかと思います。
母集団で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);
}
}
私はこれを正しく理解していますか?
トーナメントの選択では、選択された個人は母集団から削除されません。同じ個人を選択して、複数のトーナメントに参加することができます。
コードをもう少し詳しく見てみると、もう1つ誤解があるようです。通常、トーナメントのすべてのメンバーを変更またはクロスオーバーすることはありません。代わりに、トーナメントを実行し、そのトーナメントの勝者が突然変異/クロスオーバーを受ける個人として選択されます。つまり、突然変異の場合、トーナメントのサイズは少なくとも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);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加