とりあえずALife実装を実行してみた

#はじめに

池上高志やドミニク・チェンなど、ALife Labの中心メンバーによって執筆されたオライリー本[『作って動かすALife』](https://www.amazon.co.jp/%E4%BD%9C%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99ALife-%E2%80%95%E5%AE%9F%E8%A3%85%E3%82%92%E9%80%9A%E3%81%97%E3%81%9F%E4%BA%BA%E5%B7%A5%E7%94%9F%E5%91%BD%E3%83%A2%E3%83%87%E3%83%AB%E7%90%86%E8%AB%96%E5%85%A5%E9%96%80-%E5%B2%A1-%E7%91%9E%E8%B5%B7/dp/4873118476/ref=sr_1_1?s=books&ie=UTF8&qid=1532458427&sr=1-1&keywords=%E4%BD%9C%E3%81%A3%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99alife+%E5%AE%9F%E8%A3%85%E3%82%92%E9%80%9A%E3%81%97%E3%81%9F%E4%BA%BA%E5%B7%A5%E7%94%9F%E5%91%BD%E3%83%A2%E3%83%87%E3%83%AB%E7%90%86%E8%AB%96%E5%85%A5%E9%96%80)では、紹介されているモデルのPython実装がgithubで公開されており、クローンしてくればすぐ動かして結果を確認できます。<br>
この本の中でどんなモデルが紹介されているのか、実行結果（元々は動画）の画像を使って紹介したいと思います！

#ALife（人工生命）の面白さ

人工知能は、人間のとある機能を代替するような「役に立つ」モデルが目的ですが、人工生命は「生命の特徴を持ったもの」を生みだすことが目的と言えるでしょう。<br>
アートが「人間が美しいと感じる作品を実際に作ることにより、美しさとは何か、人間の特徴とは？」を問うているのに似ていて、「生命の本質がよくわからんから、生命っぽいものを作っていく中で理解しようや！」というのが１つの目的です。<br>
本を読むか、この記事で紹介している本なんかを読んでくれたら面白さを理解してもらえるはず...！

# チューリングパターン

これはおなじみですね！
動物なんかの模様を再現できるモデルです。


<img width="559" alt="スクリーンショット 2018-07-25 2.03.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/9605a47d-a5af-e003-b80c-45d5aaa9627e.png">

パラメータを変えると、

<img width="592" alt="スクリーンショット 2018-07-25 2.06.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/e268e84e-93ff-7138-c9be-8c6cb474bcb0.png">

こんなバブルパターンや、

<img width="593" alt="スクリーンショット 2018-07-25 2.07.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/649c87ea-f436-e0fe-ae65-ec2b54acdded.png">

波模様が生成できます！

# セル・オートマトン

<img width="586" alt="スクリーンショット 2018-07-25 2.10.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/b6fafd51-a855-310f-33c5-9f7bfe0f74a5.png">

これ、よく教科書に載ってるやつやんか！<br>
今のは一次元のセル・オートマトンでしたが、二次元のものは「ライフゲーム」と呼ばれていて、こっちの方がおなじみですかね。
こちらも実装されていました。

<img width="566" alt="スクリーンショット 2018-07-25 2.13.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/3921f66f-8536-42ca-9ca3-08ff0d7adbff.png">

# SCLモデル

SCLって初めて聞いたやん！
「Substrate Catalyst Link」の略だとか。
直訳すると「基質触媒リンク」！？<br>
本を読んでみると、「基質分子」「触媒分子」「膜分子」のことらしい。<br>
なんとこれ、オートポイエーシスの概念に結びつくモデルらしい。
オートポイエーシスって確か、自己と周りの環境を隔てる境界がどうやって作られるのか、みたいな話だったはず。<br>
実行してみると、こんな感じ。

<img width="583" alt="スクリーンショット 2018-07-25 2.23.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/60594579-60cc-b4e9-4d0e-765a29a806f3.png">

水色（触媒）・紫色（基質）が生成・消滅しながら青いブロック（膜）が位置も変化していくのがわかりました！

#自己複製
生命の大きな機能として、自己複製が挙げられます。
チューリングパターンを生みだす数式を少しだけ複雑にした式を使うことで、ロバストな自己複製モデルを考えたらしい。

<img width="562" alt="スクリーンショット 2018-07-25 2.42.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/21521bac-9c98-b492-8ed0-77426acc2f12.png">

#ボイド
鳥の群れでおなじみのボイドモデル！

<img width="554" alt="スクリーンショット 2018-07-25 2.48.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/c5555c45-8f62-dfe4-f533-46cf4d3fda69.png">

「エサ」が用意されたバージョンも実装されとる！

# ブライテンベルクのビークル
それってなんぞや！？という方は東大・池上高志教授の[『動きが生命を作る』](https://www.amazon.co.jp/%E5%8B%95%E3%81%8D%E3%81%8C%E7%94%9F%E5%91%BD%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B%E2%80%95%E7%94%9F%E5%91%BD%E3%81%A8%E6%84%8F%E8%AD%98%E3%81%B8%E3%81%AE%E6%A7%8B%E6%88%90%E8%AB%96%E7%9A%84%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81-%E6%B1%A0%E4%B8%8A-%E9%AB%98%E5%BF%97/dp/4791763513)という本を読んでみてな！<br>
要点としては、両端に電気信号を感じると電気が流れやすくなったりする導線でロボットのセンサーとモーターを結んであげたり、単純な工夫だけで、「こいつ好き嫌いとか賢さとか持ってるロボットやん！？」と思わせるロボット（ビークル）が作れるってわけ。<br>
単純な仕掛けで複雑な動きをするという話なら、[『野生の知能』](https://www.amazon.co.jp/%E9%87%8E%E6%80%A7%E3%81%AE%E7%9F%A5%E8%83%BD-%E8%A3%B8%E3%81%AE%E8%84%B3%E3%81%8B%E3%82%89%E3%80%81%E8%BA%AB%E4%BD%93%E3%83%BB%E7%92%B0%E5%A2%83%E3%81%A8%E3%81%AE%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A%E3%81%B8-%E3%83%AB%E3%82%A4%E3%83%BC%E3%82%BA%E3%83%BB%E3%83%90%E3%83%AC%E3%83%83%E3%83%88/dp/4772695362/ref=sr_1_1?s=books&ie=UTF8&qid=1532457729&sr=1-1&keywords=%E9%87%8E%E7%94%9F%E3%81%AE%E7%9F%A5%E8%83%BD)という本も面白かった。

<img width="612" alt="スクリーンショット 2018-07-25 2.55.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/cf76be80-3fa7-3e60-34ec-df91f8622900.png">

ここの章の、「avoid層＋wander層＋explore層」という考え方は知らんかったな。

# エージェントの進化

アリが餌を効率的に食べ尽くしていく状況をシミュレーションしたんやって！
tensorflow実装のニューラルネットワークを使ってますが、学習は遺伝アルゴリズム。

<img width="580" alt="スクリーンショット 2018-07-25 3.09.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/428106d4-d6e3-6fe6-edf5-f97f9374d9c1.png">

緑〜黄色っぽいのが餌で、赤丸がアリを表してます。

# 相互作用

先ほどのアリが複数になり、さらに通った道に分泌された物質を垂らしていくことで、他のアリの行方を追うこともできるようになモデルが考えられています。<br>
まさに、本物のアリみたいやね！

<img width="579" alt="スクリーンショット 2018-07-25 3.17.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/211271/6966776e-e781-8bfb-aa69-12ee1a892f95.png">

失敗する個体は悲しいかな、自分が残した分泌物質を追いかけて同じ場所をぐるぐる回るだけになってしまうんや。
そして、実際にそんな行動をとってしまうアリも存在するらしい...<br>
相互作用や相互予知については、郡司ペギオ幸夫教授の本を読むともっと面白く感じるはず！
[『群れは意識をもつ』](https://www.google.co.jp/search?q=%E7%BE%A4%E3%82%8C%E3%81%AF%E6%84%8F%E8%AD%98%E3%82%92%E3%82%82%E3%81%A4&oq=%E7%BE%A4%E3%82%8C%E3%81%AF&aqs=chrome.1.69i57j0l5.7424j0j7&sourceid=chrome&ie=UTF-8)という本ではダチョウ倶楽部の例で個体と集団の関係性が説明されていた。

# 最後に

githubで公開されているコードの大部分を回した結果を紹介しましたが、本の中ではそのほかにも様々なモデルなどが紹介されています。<br>
この記事だけ読むと、あんまり大した内容ではないように思われるかもしれませんが、本ではもっともっと深い内容になってますので安心してください！
そして、Pythonを最低限わかっている人がソースコードの構造を理解するのに充分かつ簡潔な説明があるのは嬉しいポイントでした！<br>
分量的にも、「作って動かす」にはちょうどよく、かつ人工生命の面白さ・奥深さがちゃんと紹介されていてvery goodでした！！！（ステマじゃないよ）<br>
正直、今までの人工生命本（日本語に限る）は古いか浅いかのどっちかだったので、あまり満足できるものはなかったんだよね...<br>
Beyond AI!　Beyond AI!　Beyond AI!