1

コザがここで説明しているように、遺伝的プログラミングを使用して食物採餌行動が可能な進化中のアリを見ています。時間ステップごとに、各アリをループして、そのコンピューター プログラムを実行します (コロニー内のすべてのアリで同じプログラムが使用されます)。MOVE-ONE-STEP現在、TURN-LEFT、 、 などの単純な命令を定義していますが、引数を順番に実行するTURN-RIGHT関数もあります。PROGN私が抱えている問題は、PROGN命令を順番に実行できるため、アリは単一の時間ステップで複数のアクションを実行できることです。自然とは異なり、アリを並行して走らせることはできません。つまり、他のすべてのアリが自分の順番を待っている間に、1 つのアリがいくつかのアクションを実行して環境を操作する可能性があります。

これが通常の方法なのか、それとももっと良い方法があるのか​​ 疑問に思っています。コザはそれについて何も言及していないようです。つまり、シナリオを拡張して、単一の時間ステップで一度だけ発生するものに依存する可能性のある他のエージェント (敵など) を使用したいと考えています。

4

3 に答える 3

2

私は Koza の仕事に精通していませんが、合理的なアプローチは、各アリに時間ステップ全体で持続する独自の命令キューを与えることだと思います。これを行うことで、アリにPROGNタイム ステップごとに 1 つの命令で関数を実行させることができます。たとえば、アリの時間ステップの高レベル ロジックは次のようになります。

Do-Time-Step(ant):
1. if ant.Q is empty:  // then put the next instruction(s) into the queue
2.     instructions <- ant.Get-Next-Instructions()
3.     for instruction in instructions:
4.         ant.Q.enqueue(instruction)
5.     end for
6. end if
7. instruction <- ant.Q.dequeue()  // get the next instruction in the queue
8. ant.execute(instruction)        // have that ant do its job
于 2011-10-03T06:35:19.167 に答える
0

命令をキューに入れる別の同様のアプローチは、命令セットを前処理し、PROGN のインスタンスをコンポーネント命令セットに拡張することです。PROGN が他の PROGN を呼び出せるようにする場合は、これを再帰的に行う必要があります。これの欠点は、候補プログラムが少し肥大化することですが、これは実行時のみです。一方で、デバッグは簡単で、迅速で、非常に簡単です。

例: PROGN1 = {inst-p1 inst-p2} とします。

次に、候補プログラムは {inst1 PROGN1 inst2} として開始され、シミュレーションで評価する準備ができたときに {inst1 inst-p1 inst-p2 inst2} に展開されます。

于 2011-10-05T13:07:37.080 に答える
0

それはすべて、特定の GP 実装に依存します。

私の GP カーネルでは、プログラムは繰り返しまたは並行して評価されます。つまり、このシナリオでの「アトミック」操作は、単一のプログラム評価です。したがって、集団内のすべての個体は、次のプログラムを評価する前に順番に n 回繰り返されます。または、すべての個体が 1 回だけ実行され、次に n 回実行されます。

このレベルの同時実行性を使用した仮想エージェントで、かなり良い結果が得られました。さらに分解することは間違いなく可能ですが、その時点でアルゴリズムのスケーラビリティが低下します。

プログラムの評価を複数の CPU またはコアに分散するのは簡単ですが、ノードごとの評価で同じことを行うのは、すべてのプログラム間で必要な同期の量が原因で、ほぼ無意味になります。

最近のシステム (スマートフォンでさえも) で急速に増加している CPU/コアの数と、GP の「CPU 飢餓」を考えると、アプローチを再考する必要があるかもしれません。プログラムに移動/回転命令を本当に含めたいですか?

プログラムの評価中にいくつかのレジスタ/変数に方向と速度のパラメータを格納するプリミティブを使用するように再設計してみませんか? シミュレーション ステップでは、これらのパラメーターを使用して、プログラムによって保存された命令に基づいてエージェントを実際に移動/回転させます。

  1. プログラムを評価する (並行して)
  2. シミュレーションを実行する
  3. n回繰り返す
  4. 適性、選択の評価、...

乾杯、ジェイ

于 2011-12-11T12:35:38.383 に答える