13

私は遺伝的プログラミング(GP)システムを書いています(C言語ですが、それは些細なことです)。多くの文献 (Koza、Poli、Langdon、Banzhaf、Brameier など) を読みましたが、説明されていない実装の詳細がいくつかあります。例えば:

私は世代別のアプローチではなく定常状態の人口を使用しています。これは主に、暫定的な人口のために半分を予約するのではなく、コンピューターのメモリのすべてを使用するためです。

Q1. GP では GA とは異なり、クロスオーバーを実行するときに 2 つの親を選択しますが、1 つまたは 2 つの子を作成するか、それとも自由に選択できますか?

Q2. 定常状態の GP では、世代システムとは対照的に、クロスオーバーによって作成された子供たちは人口のどのメンバーに取って代わりますか? これは私が議論したのを見たことがないものです。2 人の親ですか、それとも他の 2 人のランダムに選択されたメンバーですか? 後者の場合は理解できますし、代わりのメンバーを選ぶためにネガティブ トーナメント セレクションを使用するかもしれませんが、それは時期尚早の収束を生み出しませんか? (クロスオーバー イベントの後、母集団には 2 つの元の親とそれらの親の 2 つの子が含まれ、他の 2 つのランダムなメンバーが削除されます。エリート主義は固有のものです。)

Q3. GP に焦点を当てた Web フォーラムまたはメーリング リストはありますか? 奇妙なことに、私はそれを見つけていません。Yahoo の GP グループはほぼアナウンスのみに使用され、Poli/Langdon フィールド ガイド フォーラムはほとんど沈黙しており、gamedev.net のような一般/ゲーム プログラミング サイトでの GP ディスカッションは非常に基本的なものです。

ご協力いただきありがとうございます。

4

8 に答える 8

8

まず、リラックスしてください。

GP には「正しい」メソッドはありません。GP は科学というより芸術です。多くのスキームを試して、最も効果的なものを選択してください。

Q1: 1 つ、2 つ、または複数。選んで。

Q2: 交換、1、2、すべて。または、いくつかのエリート主義を試してください。

Q3: おそらく、これらの質問について議論するフォーラムを見つけることはないでしょう。正しい答えや最良の答えはありません。ごめん。

PS。私の研究では、クロスオーバーは実際にはうまく機能しませんでした...

于 2010-01-12T08:54:23.710 に答える
1

Q1があなたの選択ですが、一人っ子がおそらくもっと一般的でしょう。あなたが親の宝くじの選択をするたびに、あなたはあなたが望むものである選択圧を適用しています。

Q2:ネガティブトーナメントの選択はまさに正しいアプローチです。はい、人口の低フィットネスメンバーを失うと、最初は急速に収束しますが、人口がソリューションスペースの検索が難しい部分に入ると、トーナメントに負けるのはカットアンドドライではありません/宝くじ。注意しなければならないのは、遺伝子プールの停滞です。ゲノムのエントロピーを監視して、その不均一性を追跡することをお勧めします。「エリート主義は内在している」-そうですね、それがポイントです!;-)

Q3:comp.ai.geneticがおそらく最善の策です。時々、このトピックは、Gamasutraのように、ゲーム開発フォーラムで取り上げられます。

PS Cでの遺伝的プログラミング?!?子孫の生存能力をどのように保証していますか?非同像性言語で遺伝的プログラミングを行うことは、本当の挑戦です。

于 2010-01-24T00:43:33.220 に答える
1

スタックのニーズについては、 MetaOptimize.comをご覧ください。

于 2010-10-11T13:02:38.137 に答える
1

Python を読める場合は、Pyevolveを参照してください。私は主にGA側で関わっていますが、GPにも対応しています。そこで何かヒントが得られるかもしれません。

于 2010-01-12T14:00:56.870 に答える
0
  1. レイが言うように、それはほとんどあなた次第ですが、通常、定常状態のセットアップでは、単一の子孫しか作成しません.

  2. 繰り返しますが、オプションがあります。親の代わりにはなりません。彼らが適応度に基づいて親として選ばれた場合、母集団の中で最も適応度の高いメンバーの一部を除外することになる可能性があります。最も簡単なのは、置換する個人をランダムに選択することです。または、最も適合度の低い個体を置き換えることもできますが、それは早期収束につながる可能性があります。もう 1 つのオプションは、親の選択に使用するのと同じ選択戦略を使用することですが、逆適応度を使用して、適応度の低い個体を優先することです。

  3. USENET (およびGoogle グループ)で comp.ai.genetic を試すことができます。

于 2010-01-12T11:32:05.243 に答える
0
Q1. In GP, as opposed to GA, when you perform crossover you select two parents but 
do you create one child or two, or is that a free choice you have?

はい、あなたの選択です。しかし、一般的に、同じ親を持つ多くの個人を作成することはお勧めできません。なぜなら、同じ親によって作成された個人の傾向の違いは非常に限られており、異なる傾向を示す他の個人に費やされた可能性のある処理速度とメモリが犠牲になる可能性があるためです。分析が必要な行動(ただし、進化プロセスが終点に近づいている場合、より多くの個体を作成することは問題になりません).

Q2. In steady state GP...

採用したフィットネス関数によって提供されるランキングに基づいて、個人を置き換えることをお勧めします。

于 2014-05-12T10:14:12.360 に答える
0

私は無制限の数の子孫を作りますが、成功に基づいてのみ、人口の古いメンバーを死なせます. 運動不足も早死にの原因になります。これは自然な順序に従っているようです。

于 2011-06-19T01:43:44.417 に答える
0

あなたの質問のいくつかは、必ずしも遺伝的プログラミングに固有のものではないようです。それが本当なら、 NEAT Users Groupの人たちに聞いてみるのもいいかもしれません。

彼らは主に、ニューラル ネットワークを進化させるために使用される遺伝的アルゴリズムである Neuroevolution of Augmenting Topologies (または NEAT) アルゴリズムについて説明します。しかし、エリート主義やクロスオーバー戦略などのトピックはかなり一般的であり、GA アルゴリズムと GP アルゴリズムの両方に適用できます。

そうでなければ、Dan と Ray が言ったように、これらの決定の多くは、特定のソフトウェアとドメインで実験した後に行われます。アルゴリズムをさまざまな問題に適用してみて、その動作に注意してください。しばらくすると、何が機能し、何が機能しないかについて直感的に理解できるようになるでしょう。

于 2010-01-12T20:20:29.213 に答える