Tierra(日本語の解説)を知って、衝動的に作ってみたものです。
外の環境は0(halt)で埋まっています。個体の外に出たり、不正な処理を行うと即座にhaltがかかります。無限ループ対策として、一定時間内にコピーを完了(join)しないとhaltします。この仕組みは有用な変異以外を排除する目的で導入しましたが、命令セットや雛形が変異に弱く、少しの変異ですぐに絶滅してしまいます。
すでにデータある場所にコピーした場合、境界がゼロでないためコピー結果が予期できないものになります。これによって細胞融合の表現を狙ったのですが、有用には作用しませんでした。
当初はどのようなモデルでも生存競争を通せば有用な変異が現れるのではないかと思っていました。そのため単純なモデルで実験しようと思い立ってこれを作成してみたのですが、散々な結果に終わりました。Tierraのモデルが非常にうまく出来ていることを痛感しました。
自己進化はそう簡単ではないということが分かったので今回は打ち切ります。もし続きをやるとすれば、Tierraの仕様を忠実に真似てみようと思います。
Tierraを参考にしましたが、互換ではありません。現時点では有用な結果が得られない「劣化コピー」です。命令セットや雛形ともに短さを重視したモデルですが、冗長性がないため変異に弱いようです。
WikiPedia.ja:Brainfuckを参考にレジスタを増やしたものです。レジスタ: r0(8bit), r1(32bit), r2(32bit)
0x0: halt 0x1: inc r0 0x2: inc r1 0x3: inc r2 0x4: dec r0 0x5: dec r1 0x6: dec r2 0x7: mov r0, [r1] 0x8: mov r0, [r2] 0x9: mov [r1], r0 0xa: mov [r2], r0 0xb: while [r1] 0xc: while true 0xd: wend 0xe: rand r2 0xf: join r2
人工生命の雛形です。自分のコピーを繰り返します。増殖しながら変異させることで進化を狙ったものですが、うまくいきません。
0xc, // while true 0xb, // while [r1] 0x7, // mov r0, [r1] 0x2, // inc r1 0xa, // mov [r2], r0 0x3, // inc r2 0xd, // wend 0x5, // dec r1 0xb, // while [r1] 0x5, // dec r1 0x6, // dec r2 0xd, // wend 0x2, // inc r1 0xf, // join r2 0xe, // rand r2 0xd, // wend