蟻の挙動をプログラムしてみた
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1174592376
これを見て面白そうなので作ってみた。言語はC++,ステップ数はヘッダとソー
スで1200行位。上記質問だと仕様がはっきりしないから自分なりにモデルを考
えた。
モデルを考えるとき問題になりそうなのは
Q1.蟻の進み方。ランダムウォークって言っても実際はどんな風にランダムなの?
Q2.エサ探しは何匹で出かけるの?
Q3.エサ探しは巣の近くと遠くで進み方が異なる?
Q4.エサ探しはいつ帰って来るの?永遠に探し続けるのは変だ。
Q5.誰かがエサを取ってきたときエサ取りに出かけるのは何匹か?
Q6.エサ探しの蟻がエサを見つけたとき,他のエサ探しの蟻がそれに反応するか?
Q7.蟻同士の重なりは?
Q8.巣に帰るとき自分の足跡を辿るのか仲間の足跡を辿るのか?
Q9.フェロモンは?
上記疑問点について自分なりに適当に考えてみた。
A1.進み方は確率を定義できるようにした。
A2.定数で定義。
A3.実際の蟻を見ていると最初は巣から離れるように進んでいくようだけど,近くと遠くで一緒の動作にした。
A4.巣からの歩数で一定数を超えたら帰巣する。
A5.定数で定義。エサ1の増量に対して出て行く蟻の数を定義する。
A6.反応しないことにした。エサ探しをしている蟻はエサ探しに専念する。
A7.蟻同士の重なりはなし。一つのマス目に1匹の蟻。
A8.仲間の足跡で一番巣に近いのを辿る。
A9.フェロモンは使わないことにした。足跡フェロモンは巣からの歩数で代用,食料フェロモン(あるとして)はエサからの歩数で代用。
今回のポイントと結果は以下の通り
・エサまでの行列は出来るか => 出来た
・行列は太くなるか => 太くならない
・ショートカットは出来るか => 偶然出来る
・最後に行列は消えるか => 消える
・デッドロックしないようにする =>
なんとかデッドロックは回避
・2箇所エサ場があるとき両方無くなるか =>
ダメだった。一箇所限定。
巣からエサ場までの行列はこんな感じになりました。

左上が巣で右下のピンクがエサ場です。黄色いのはエサを持って蟻が通った跡<br>
です。小さすぎて良く見えませんが,青い点がエサ取りに出かけた蟻,赤い点<br>
がエサを探している状態,緑が何も持たずに巣に帰り,薄い青がエサを持って<br>
帰る所です。<br>
不満点はエサの近くでの挙動です。実際の蟻を見ているとエサの周りを取り囲
むようになりますが,それが出来ない。
最初に作った状態より蟻っぽく見えてきたので公開します。
ソースファイルは ants-20111115.zip
に置いておきます。使いたい人は自由に使ってください。ソースファイルにGUI部分は付いていません。
今回作成したプログラムは学術的な知見に基づいているわけではありません。
今回作成したプログラムと実際の蟻を見ての私の個人的な感想。
- 蟻の歩き方(進み方)は本当にランダムなんだろうか。
直進が多いのは見ていれば判る。それ以外に,餌を探しに出かけるとき巣に近いところと遠いところで同じ行動を取るのか。
巣から出たときはしばらく直進を続けるように感じる。
それと柳の下のドジョウを狙うようなことはしないんだろうか。昨日餌があった場所に行ってみるとか。蟻に記憶力があるかどうかということにも関連するか。
- 餌を見つけることが出来なかった蟻は何時巣に帰るんだろうか。午前の部と午後の部とか別れているのか。時間が経過したら帰ってくるのか,それとも歩数か。
- 餌を探し当てたとき,食いついて直ぐに巣に戻るようなことはしないで,くるっと時計回りに回転して大きさを把握するようなことをしているように見える。あの行動は餌の量を把握しようとしているのか,それともそういう習性なのか。あの行動があるから餌の周りを取り囲むように出来るのか。
- 餌を最初に探した蟻が巣に戻るまで,その蟻が通った後を他の蟻が追跡を始める(餌を取りに行く)ことはないように見える。つまり餌探しをしている蟻は餌探しに専念するのではないか。とすると,餌を持ってきた蟻が巣に入り何らかの行動を起こした結果別の蟻が巣から出て餌を取りに行くのではないか。
今回のプログラムは餌探しと餌取りは別行動とした。
- 餌探しは大体何匹くらいで行うのだろう。巣の中の蟻が全て餌探しをしているようには思えない。全蟻のパーセンテージで決まっているのか,それとも巣の中の餌の量に依存するのか。餌が少なくなると多く出かけるのか,天候に依存するのか,それとも一定の数なのか,時間帯は関係するのか気になる。気温とかは確実に影響しそうだ。
- 餌場を2箇所作ると実際の蟻はどうやって行動するのだろう。2箇所同時に攻めに行くのか,一方が終了してからもう一方を攻めるのか。
2箇所同時のような気がする。これは来年蟻が出てきたら観察してみたいものだ。
2箇所同時に攻めに行くとするのなら,出口から先を「餌の匂い」で識別するのか,個体毎のフェロモンに違いがあって「フェロモンの違い」で認識するのか興味がある。それとも単にフェロモンを追跡するとき出口から出て偶然一方を追いかけることになるのか。
- 実際の蟻を観察していると巣に戻る蟻が全て餌を持っているわけではない。「お前は何をやっているんだ」といいたくなるような蟻が沢山いる。今回のプログラムでは意図せずそのようなインプリメントになってしまった。実際の蟻もある程度時間が経過して餌を取ることが出来ないときは,一旦巣に帰るのだろうか。行動原理が単純だとすると,それが自然な気がする。別の蟻が巣に餌を持ってきたら,また出かければ良いではないかということだ。
- 餌取りの経路はどの程度外れるものなのか。外れるのは偶然か。餌を持ち帰る蟻が経路を外れて帰巣する以外にショートカットの発見は無いような気がする。今回のプログラムでは隘路を通過する蟻の数が多すぎではみ出してしまった蟻が偶然ショートカットを発見するようなインプリメントになった。実際の蟻は誰がショートカットを見つけるのだろうか。
- 行列は何時無くなるのか,餌が無くなる前に行列は小さくなるのか。実際の蟻を見ていると餌が無くなる前に行列が小さくなるように見える。ただ餌が無くなってからもしばらくウロウロしている蟻はいる。
蟻について最近思ったこと。
- 氷砂糖は食べない/食べられない?
氷砂糖は砂糖の塊だから寄ってきそうだけど,何故か封を切った氷砂糖は無事だ。水に濡らしてしまうとダメみたいだけど。砂糖を雑巾で拭いてそのままにしていたら蟻が寄ってきた。砂糖には蟻が寄ってくる印象があるけど,水気がないとダメなのか。
- 塩入のキャラメルを食べない?
キャラメルが落ちていても蟻が付かない。だから何時までも地面に残ったままになる。最初人工甘味料入りかと思ったら最近人気の塩入キャラメルだった。
キャラメルが地面に落ちると蟻が寄ってきて直ぐになくなってしまうという印象があったので意外感がある。