蟻の巣作りアルゴリズム

蟻は,あの小さな体でありながら,多くの個体と協力して,おそろしく巨大な巣を齟齬なく作り,運営する。 それが各個の蟻が,まるで全体を見通して計画を立てて行動しているように見えることから,しばしば蟻の行動は社会的な行動と呼ばれたりする。

だが当然,あのような小さな体では,神経はせいぜい神経瘤程度にしか集積されておらず,高度な認識・判断を行うための脳組織があるわけもない。

これを情報処理分野風にいうと,蟻は,記憶能力・処理能力が著しく制限されモバイルエージェントだ,となる。 そんな貧弱なプログラム群から蟻の巣作りのような一見高度な仕事が可能なのだろうか。

蟻の巣は多くの部屋からなり,その用途は卵,幼虫,蛹などの各発育段階ごとの世話や,えさの蓄積,時には葉っぱを蓄積してキノコを栽培するのにも使われるなど,多岐にわたる。 だが,数多くある部屋は,えさの蓄積部屋ばかりになったりすることはないし,空き部屋だらけにもならない。 実にバランスよく過不足なく使われる。

これを状態遷移モデルでシンプルに書いてみる。 まず状態。

S0
何も咥えていない(汎用モード)
S0'
何も咥えていない(穴作りモード)
S1
何か咥えている(汎用モード)
S1'
砂粒を咥えている(穴作りモード)

状態遷移はこんなかんじ。

T1
発見した不純物を咥えて取り去る(S0→S1)
T2
凹んでいる壁から砂粒を取ってさらに凹ます。 凹みが部屋の大きさになるまで有効(S0,S0'→S1')
T3
咥えているものは,同じものがあるところで離す。 適切な場所がなければ空の部屋を探してそこで離す。 空き部屋もないと咥えているものは離せない。(S1→S0)
T4
巣のすぐ外で咥えているものを離す。(S1'→S0')
T5
作っていた穴が十分な大きさになった。(S0'→S0)

これだけでうまくいきそうな気がする。

卵から孵った幼虫はT1で取り除かれ,その幼虫はT3によって幼虫の部屋に運ばれる。 幼虫の部屋がなければ,空き部屋がひとつ幼虫用の部屋に供される。 空き部屋がなければうろうろし続ける(そのうちいつか,S'系の蟻によって新しい部屋ができる)。

この系に「外部から餌を持ち込む蟻部隊」を持ち込めば,餌はその種類ごとに分類格納されるようになり,蟻の巣マネジメントシステムが完成する。

葉っぱキノコ栽培はこうだ。 葉っぱの収集・蓄積が行われたのち,葉っぱからキノコが生える。 S0の蟻が,キノコを発見したときにT1によってキノコを運び出す。 運び出したキノコはT3によって餌部屋に持ち込まれる。

おお,うまくいきそうだ。

あとには,全ての蟻が穴作りに励んでしまいやしないか,というバランスの危惧が残る。 だが,蟻には,彼らは自分の周囲にいる個体がどのような職掌に携わっているかという割合を知る能力があるので,この危惧は問題なさそうだ。

これは,外部で餌を求めて働く蟻が,単純に全体に対する割合で決まっているという事実から導かれている。 蟻は一般的に全体の3割が外部で精勤するが,その3割を取り除けば,残りの蟻の3割が巣の外で働くようになるのだ。 この能力で職掌分担のオートバランスができるのならば,なにも問題ないだろう。 空き部屋を複数目にするようになったら穴掘りをやめるといったフィードバックモデルも有効かもしれない。

以上,蟻の巣作りをモデルにして,単純な動作によって複雑なモノを形成する例を示した。 「複雑なものの背後に潜む単純さを抽象化する作業」が学問だとすると,こうして蟻の巣のマネジメントルールを明らかにすることも学問といえるかもしれない。 もちろん,まだシミュレーションも実験もしていないので,学術的ではないけれども,考えるのは楽しい。 この楽しさが経済学や物理学なんかに結びついていくのだなぁ。