Evoパート2-クロッシングについて

こんにちは、ハラジテリ!



ポスト「ゲームの類似物ライフ」-Evoの続きで、 Evoで使用される「遺伝子言語」のコマンドのより詳細な説明を行い、このゲームで個人を横断する方法についての私の考えを共有したいと思います。



遺伝暗号



Evoの個人の遺伝暗号は、ほぼ無制限の長さの一連のバイトです。 さらに、各バイトはセルオートマトンのコマンドとして扱われます。 マシンには、コマンドとメモリの2つのテープがあります。 したがって、2つのポインターcmd_ptrおよびmem_ptrがあります。 動物のRAMとして、1バイト(8ビット)の次元を持つ変数データが使用されます。

現在、次のコマンドがあります。





プログラム例



原則として、このようなコマンドのセットは、ループと分岐を行うのに十分です。 もう1つの疑問は、そのような言語でアルゴリズムを記述することは、たとえばC ++ほど便利ではないということです。

しかし、例として、生物を正方形のらせん状に動かすプログラムを示します。

start action_split load_from_mem //load from var1 move_mem_right //save var2 data_dec save_to_mem move_mem_right //save to var3 data_dec save_to_mem //right action_move_right data_dec jump_to_ifnz AnimalCommand(-3) //up load_from_mem data_dec save_to_mem action_move_up data_dec jump_to_ifnz AnimalCommand(-3) //left load_from_mem data_dec save_to_mem action_move_left data_dec jump_to_ifnz AnimalCommand(-3) //down load_from_mem data_dec save_to_mem action_move_down data_dec jump_to_ifnz AnimalCommand(-3) //dec var2 move_mem_left load_from_mem data_dec save_to_mem jump_to_ifnz AnimalCommand(-33) move_mem_left // restore var1 end;
      
      





メモリには、10、0、0の3つの値がロードされます。アルゴリズムについては説明しません。 私の意見では、すべてがかなり明白です。

このコードはmainwindow.cppにあります:117。



突然変異について



ゲーム内の突然変異は現在、このように実装されています。 生物の要求に応じて、クローンを作成し、突然変異を伴うクローンを作成します。 クローンは、0から9の量の突然変異を受けます(大きなランダムの裁量で)。 各突然変異について、グランドランダムは4つのオプションのいずれかを選択します。





交配について



それでは、2つの生物の交配方法について考えてみましょう。 コードの長さは異なっていても、メモリが異なっていてもかまいません。

それはおそらく、すぐに私の頭に浮かぶすべてのオプションです。 記憶の継承についてはまだ考えていません。

あ! ここで私が忘れていたものです。 何が良いと思いますか?

  1. Xラウンド後、最もYを取り、それらをクロスします。 同時に、全人口を殺し、これらのY個人とその子孫を世界に住まわせます。
  2. すべてのXラウンドは、Y(2から5など)を最も強く取り、それらをクロスして、子孫を人口に追加します。
  3. 3番目のオプションは、あなたが思いついてコメントを書くオプションです。


もちろん、このトピックに関する考えは緻密ではありませんが、行商人の豊かな想像力を願っています。

ありがとう フィードバックを待っています。




All Articles