今までの流れと今後の方針
しばらくの間Webにまとめていなかったため改めてこれまでの流れを踏まえて現在の状況をまとめる。
これまでの流れ
女王アリがすべてのワーカーに出会うために最も効率のよい動き方はどのようなものかを数学的に求める。しかし、実際のトゲオオハリアリのビデオを見るといくらでも主観的に見ることができる。例えば
- ・ある一定数のワーカーが女王にくっ付いていくように見える
- ・女王がワーカーを追いかけているように見える
- ・女王に追いかけられた追いかけられたワーカーの何匹かは女王から逃げているように見える
- ・ワーカー同士が触覚をぶつけ合い情報交換をしているように見える
そこでその中で必要最小限の要素のみを取り出しシンプルな因果関係から順番に考えていくことにしている。
実験1 最も単純な場合(以前まとめたもの)
実験条件として
- ・女王・ワーカーの動き方に区別をしない
- ・女王・ワーカー共に進行方向は上下左右ランダムに動く
- ・アリ同士が重なることを認める(排除体積効果を無視する)
以上の条件を踏まえてた上でコロニー内で何%のアリが活動している場合に女王と接触するために掛かるステップ数が最も少なくなるのかを実験した。結果としてはコロニー内の活動中のアリの割合が増えれば増えるほど女王と接触に掛かるステップ数が少なくなるという結果となった。詳細はURL:
実験2 排除体積効果の考慮
実験1に対して、排除体積効果、すなわちアリ同士が重ならないように条件をつけてシミュレーションを行う。 シミュレーション上でアリが活動モードの場合は上下左右4方向にそれぞれ25%の確率で移動する。しかし、となりの座標に他のアリが存在していた場合、その方向には進まずそのアリは現在いる座標に留まるようにする。(下図)意図としては、は以上堆積効果を考えた場合はコロニー内に占める活動中のアリの割合が一定以上になると接触に掛かるステップ数が増加しないのではないかと仮説を立てたからである。
上記プログラムを組んでいる際の問題点
上記のようなプログラミングを組んで、ためしに極端な例である10×10の枠内に100匹のアリを入れてシミュレーションしてみた。プログラムが正常に動くのであればアリは動けないはずである。しかし、なぜかアリが動いていた。
原因
原因を調べていくうちに初期条件でアリの座標をランダムで振るのだが、その際に座標が重なったままスタートしているということがわかった。つまり、スタート後のアリ同士の重なりは回避できるが、もともと重なっている部分を修正できていなかったのだ。
対策
図のように重なっているかどうかをプログラム開始初期の段階で確かめ移動させていく 今後プログラムに組み込む要素が増えていくにつれてバグ取り対策の重要性があがってくることを感じた。このような対処として
- ・自分の作るバグのパターンを認識する
- ・OpenGL上でゆっくりとプログラムを動かし視覚的にバグを見つける
- ・極端な例、シミュレーションせずともわかる条件で確かめてみる
などの点を考慮して研究を進めていきたい