LoginSignup
21
16

More than 5 years have passed since last update.

作って動かすALife 雑感

Last updated at Posted at 2018-08-09

この記事は、書籍「作って動かすALife」を読んだ雑感を書いたもの。

著者によりソースが公開されている。
Pythonで実装されている。コメントもあり可読性が高い。

■ 人工生命とは何か?

 人工生命とは実験数学。つまり、コンピュータや化学実験、ロボット実験のような実践的手法を使って「生命とは何か?」を探求する学問が人工生命。
 面白いのは、既存の生命をなぞるのではなく、その既存の生命を一部として含むような「ありえたかもしれない生命」の可能性を考えているところ。

 コンピュータを触っていれば、度々目にするアラン・チューリングやジョン・フォン・ノイマンなどの偉大な科学者が、生命現象を数理的に解き明かそうとしていたことも、また感慨深いものがある。

■ 生命のパターンを作る

 生きているものに限らず、自然界に見られるパターンを各種モデルに基づいて実験する。ここでいうパターンとは、秩序のあるものという定義で解釈すると分かりやすい。たとえば、乾いた地面のひび割れ、雲、渦巻き、といった「秩序」を感じるもの。

自己組織化というキーワード

 青写真なしでも、秩序のある構造を作り出すことを自己組織化と呼ぶ。誰に指図されるわけでもなく、完成図面を持っているわけでもなく、自律的に秩序のある構造を作り出していく、ということ。

Gray-Scottモデル

実行例


 反応拡散系モデルの一つであるGray-Scottモデルの実行例。

wikipedia

反応拡散系(はんのうかくさんけい、英: reaction-diffusion system)とは、空間に分布された一種あるいは複数種の物質の濃度が、物質がお互いに変化し合うような局所的な化学反応と、空間全体に物質が広がる拡散の、二つのプロセスの影響によって変化する様子を数理モデル化したものである。

 濃度変化を表す式のパラメータを変えることで、多様な模様が出現する。そこには「意図」は存在しない。誰かが完成図面を用意したのではなく、自律的に構造が作り出されている。ALifeの面白さをなんとなく実感。

 ここで、昔読んだ「流れとかたち」という本を思い出した。コンストラクタル法則とかいうもの。

セルラー・オートマトン

実行例


 離散的な時間経過にともない、セル(構成要素)の状態が一定のルールに従い更新されていくモデル。色んなルールがある。ライフゲームもこれの一種。はじめてライフゲームを実装したのはCommonLispだったが、その時は、セルラー・オートマトンなんてことは微塵も考えていなかった(考える余裕もなかった)。

 セルの状態は、自分自身の状態と、周辺のセルの状態によって決定される。よくあるオートマトンにセルの概念をくっつけただけのものなので難しくはない。
 二次元における「周辺」には、8方向を見るムーア近傍と、上下左右の4方向を見るフォン・ノイマン近傍がある。書では8方向を近傍としている。

■ 個と自己複製

 完全なる密室は個を創れない。かといって、開放的すぎる空間では個を保てない。そのへん、うまい塩梅で閉じている状態と開いている状態のバランスを取らなければ、個の創発は生まれない。
 つまり、「個」とは、安定性と不安定性の間にあって、外部環境の変化に適応できるぐらいの不安定性は持っている存在と言える。

SCLモデル

実行例


 SCLモデルの目的は、オートポイエーシスを構成的に理解すること。

 オートポイエーシスとは、自己組織化の一種。自己組織化のうち、自己言及性を持つのがオートポイエーシス。自己言及性とは、読んで字のごとく、それ自身がそれ自身に言及し、指示を与えるということ。プログラムでよくある再帰構造も自己言及にあたる。
 オートポイエーシスの例で分かりやすいのは、生物の生殖がある。このへんは、自分でいろいろ調べたほうが「自己言及」の意味するところがよく分かる。
 

■ 生命としての群れ

 魚の群れとか、鳥の群れの動きを探る。以前、魚の群れの動きはこれこれの条件を考えることで再現できる、みたいな本を立ち読みしたことがあったため、似たような感じかな?と思ったら似たような感じだった。
 個体間に作用する「小さな相互作用」が、全体として、群れの動きのパターンを生むという構造。つまり、ミクロな相互作用の結果、マクロな現象が生まれている。

ボイドモデル

 Bird-Oid(鳥っぽいもの)からのボイド。

 個体間に3つの作用を適用する

1. 分離(Separation) :周りの個体とぶつからない
2. 整列(Alignment)  :周りの個体と同じ方向に飛ぶように合わせる
3. 結合(Cohesion)  :周りの個体の中心方向へ向かうように向きを揃える

 このあたり、どうやって実装するのか章の2,3行読んだ時点ですでに気になっていた。こういうとき、コードに適切なコメントが書いてあるとストレスなく読めて助かる。著者ソース

実行例


 「隣接可能領域」という概念をはじめて知った。簡潔に言うと、「新しいものは、以前の新しいものをベースにして創られる」ということ。これは、ネットワーク全盛の現代社会において知っておくべき概念の一つなのだろう(たぶん)。

■ 身体性を獲得する

身体性とは何か?

 ロボットにはまだ実装できていない、生命のもつカラダの働き全般。

サブサンプション・アーキテクチャ

 ロボット業界では超有名なロドニー・ブルックスの考案した仕組み。掃除ロボット「ルンバ」にも使われている。モジュールを階層構造化している
 この仕組みのうえでは、状況に応じて使われるモジュールが変わる。難しいことはさておき、周辺情報を考えながら、優先して使うべきモジュールを選択している、ぐらいの理解でいい。

wikipedia

サブサンプション・アーキテクチャ(以下、SA)は、複雑な知的振る舞いを多数の「単純」な振る舞いモジュールに分割し、振る舞いのモジュールの階層構造を構築する。各層は何らかの目的に沿った実装であり、上位層に行くに従ってより抽象的になる。各層の目的は下位層の目的を包含している。例えば、食物-食事層による前進行動という決定は、最も低レベルな障害-逃避層の決定でもある。それまでのAIの技法とは異なり、SAではボトムアップ設計を採用する。

実行例


■ 個体の動きが進化する

 GA(遺伝的アルゴリズム)のもとに最適化を実行する場合、単純な遺伝子情報のコピーだけではなく、遺伝子情報の突然変異や交叉といったノイズを組み込む必要がある。この、「ノイズ」に焦点を当てている。

エージェントモデル

蟻がエサを探索するシミュレーション。
エサが黄緑、赤い丸が蟻。

学習後の世代を保存し忘れたので、一世代目の探索。
実行例


 周辺情報を入力データとするDNNをKerasで構築している。特別なテクニックはない単純なDNNなので読めば分かる。あとは適当にGA。

 いまさらながら、進化におけるノイズの重要性を実感した。よく「多様性」が叫ばれる世の中になったが、そりゃこんだけノイズが散乱するネット社会になればさもありなん…なんだろうか。こうした「ゆらぎ」こそが、隣接可能性領域を開拓していく源泉の一つなのかもしれない。

■ 相互作用

 すべては相手あってこそのもの。

■ 全体を通して感じたこと

 なんでこんなに面白いもの(学問)を今まで見落としていたのか。

 常日頃、自分なりのフレームなんかを使って物事を考えたりしている。そのフレームのなかに「異なるキャラクター同士の相互作用」について考えるフェーズがある。そして、考察の核となるものは、ほぼすべてその部分から生まれているように感じていた。それと符合する内容の書籍でもあった。

 ちなみに、以下のような感じでよく物事を整理している。

  1. 問題の明確化
  2. 場の形成
  3. 枠組みの建設
  4. 中身の充実および体系化

 このうちの「場の形成」において、その「場」で主体的な動きをもつ「キャラクター」を考えて、あれこれ思考のトライをしている。そして、一番難しいのは問題の明確化である。まあ、そのへんは規模をあれこれ変えてフィードバックしてどうこうしていればなんとなく浮いてくるものだと感じている。

 話がそれた。

 機械学習への期待が最高潮に高まる現代社会において、「身体性」を考慮している人工生命の学問領域の動向は追跡していてハズれはないだろう、と思う。というか、ハズれたとしても面白いから別にいい。

21
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16