私はC ++で遺伝的アルゴリズムをプログラミングしていて、GA'a演算子を実行するためのあらゆる種類の方法(選択、クロスオーバー、突然変異)を検索した後、疑問を思いつきました。私の初期人口が500人だとしましょう。私の選択は、上位20%を取得することです(最高のフィットネスに基づく)。だから私は100人の個体を交尾させます。クロスオーバーを行うと、2人の子供が生まれ、両方が一緒になって生存率が50%になります。ここまでは順調ですね。私は突然変異を開始し、すべてが大丈夫です。次の世代を選択し始めると、私にはたくさんの子供がいることがわかります(この場合、知りたい場合は4950)。GAを実行するたびに、すべての子を次の世代に送ると、世代ごとの個人の数が指数関数的に増加します。
私がここで求めているのは、新しい世代を埋めるために子供を選ぶ方法があるかどうか、または私が最終的にそれほど多くの子供を獲得しないように、どうにかして親を交配するように選ぶべきか(そしておそらく減らすべきか)です。
ありがとう:)
一般に、GAの場合、母集団のサイズが固定されたままになるように、交配アルゴリズムを選択します。したがって、人口サイズが500の例では、交配するのに適した個体の250ペアを選択して、ペアごとに2つの子孫を作成するか、500ペアを選択して1つの子孫を作成します。
あなたの例では、上位20%(100)の個人だけを各世代に「適合する」と見なしたいように思われるので、子供を産むのは彼らだけです。別の方法は、親ペアのランダムな選択に重みを付けて、より適切な個体が選択される可能性が高くなるようにすることです(したがって、より多くの仲間になります)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加