0

VB.NET で対称 TSP の遺伝的アルゴリズムに取り組んでいます。選択手順を実行する正しい方法を知りたいです。少なくとも 2 つの異なる可能性があるようです。

1)

-create a "reproduction pool" of size R by using SELECTION(pop) function
-do offspring creation cycle
-randomly (uniformly) select two parents from that pool for each offspring 
 that needs to be created in each iteration

2)

-do offspring creation cycle
-use modified SELECTION(pop) function that will return two different parents from pop
-perform crossover to produce a child

おまけの質問: 2 つの親を選択した後、2 つの異なる子孫を生成することができます (交叉演算子が mot 可換の場合): CROSS(p1, p2) と CROSS(p2, p1)。両方の子をすぐに挿入するか、1 つずつ生成する必要がありますか? これは違いを生むでしょうか?

母集団のばらつきが大きくなると思うので、現在は1つずつ作成しています。

4

2 に答える 2

1

それは成文化に依存します。

現在の母集団の中で最も適した 2 人の個人を考慮することができます。

または、ルーレット ホイール選択 (Google it) を使用して、各個体を再生率に関連付けることもできます。これが通常の方法です。

于 2013-05-28T19:09:45.820 に答える
1

遺伝的アルゴリズムでは、個別の生殖プールを使用しませんが、母集団からサンプリングします (|N| から |N| の子を作成する 2*|N| の親になるまで)。複製プール R のサイズが 2*|N| の場合 そのプールからランダムにサンプリングすると、基本的に同じ動作になりますが、より多くの乱数が必要になり、計算にコストがかかります (RNG によって異なります)。2 つの異なる親を持つことを気にする必要はないことに注意してください。それ自体で交配された親は、親と同じ子を生成します (クロスオーバーがべき等の場合)。交差確率の使用に似ています。また、2 つの親が異なるかどうかのチェックは、構造的に比較すると非常にコストがかかる場合があります。適合度によってそれらを比較することもできますが、多くの場合、同じ品質のソリューションが非常に異なる場合があります。

2 番目の質問については、大した問題ではないと思います。簡単にするために、子を 1 つだけ返すことを選択します。2 つの解を取り、1 つの解を返すメソッドは、解の配列を返すメソッドよりも扱いが簡単です。両方を返すことは、2 つの異なるソリューションを作成できる場合にのみ興味深いと言えます。これは、バイナリまたは実数値エンコーディングの場合です。ただし、順列を使用すると、このプロパティを保証できず、クロスオーバーで一部の遺伝情報が失われます。

于 2013-06-01T18:55:36.377 に答える