生物をつくりたい

はじめに

こんにちは、グレッゾ開発部エンジニアの山本です。
突然ですが生き物は好きでしょうか?
この世に存在している生き物で一番好きな動物は何でしょうか?
犬?猫?ペットを飼っている人はペットが一番なのでは????
私も実家に1匹犬を飼っていてこれがまた可愛いんですが、私は爬虫類が一番好きです!
サバクツノトカゲなどはピンチになった時に血を目から噴き出して身を守るのですが
私は生物がなぜそのように進化したのか…と想像するのが一番好きなんです。
実際に進化した経緯を観察することはできませんが、それが出来たらなと思いAIで出来ないかと彷徨っていたところ先輩に教えていただきました。
人工生命Tierraというものがあるらしいです!!

人工生命Tierraとは

Tierraとは、1990年代にトマス・S・レイさんが
開発した人工生命プログラムだそうです。(Wikipedia)
自分なりの解釈で簡単に説明できるように図で表してみましょう。
以下の画像はビットに当て嵌められた簡易版命令です。

Let’s生命創造

このビットに沿って設定された命令文表を見てください。
今回は簡易版ですが例としてこれを使います。
イメージとしては下記のように命令文一つ一つが
ビットに割り振られていることを想像してください!

上記の命令内容を一つ一つをつなげて生物Aと仮称した命令文の集合体を作ります!
そしてこの命令文たちを各メモリに格納します。
これでメモリという荒野に4バイトの生物が生まれました。
そしてこれを上から命令実行していき、この生物Aの後ろのアドレスからその結果の値をコピーしていくことでそのビットから生まれる新たな命令文で構成した子供を作ってもらいます!
生物で言うところの細胞分裂、子供に受け継がれる新たな遺伝子情報というやつです!

  • 生物A

そして以下の画像が上から命令文を実行し、その値をコピーをすることで生まれた子供の生物Bです。
実行順としては以下の通りです。
1. 1つ目の値(00000001)の下位1ビットを立てる→00000010にしてコピー。

2. 1つ下の情報(00000010)をコピー。

3. 3つ目の値(00000010)の下位1ビットを立ててコピー。

4. 下に4つ目の値(00000111)に複製を生成して自身はすべてのビットを降ろす。

ここで命令文に仕込んでおいた(生物の節目)が生成されることによって
この生物Bは一つの生命ではなく2つのAIからなる生物と表せるわけです。
かわいいですね…

  • 生物A→生物B

本来ならここから生物Aを先頭とし、A→Bという形で上から実行してBの後ろのアドレスからコピーしていきますが今回は複雑になるので省略。
Bのみ試しに実行して生物Cを生み出します!

  • 生物B→生物C

今回は説明のために用意していないビットまで数値が行ってしまったため
エラー扱いにしていますが本来ならここで新たなの命令文が呼ばれることになります。
この実行を繰り返すことで新たな変更が促され、新しい生命への扉が開く訳です!
これが自然界で言うところの突然変異です。

まとめ

今回は省きましたが、このAIの分裂時に
ランダムに命令文をビットを反転させて変化させたり、
環境の変化とし、全生物のどこかを同じようにビットをいじることによって
より生物は分裂、新たな種の誕生を繰り返していくようです。
環境や周りの生物の適応に応じて更新されていく姿はなかなか面白いものでした!
現実の生物もこうやって進化してきたんでしょうか…と思いを馳せながら
今回はここまでにしたいと思います!
今回初めて知りましたが、興味が沸いてきましたのでまた今度研究したいと思います!