アリ観察
餌を置き、壁を描いて、アリが道をつくる様子を観察できます。
- 経過時間
- 残りの餌
- 0個
- 運搬中のアリ
- 0匹
- 巣に運んだ餌
- 0個
仕組みと凡例
道具とサイズを選び、箱の中をタップまたはドラッグして編集できます。巣や餌がある場所には壁を描けません。
青は餌へのフェロモン、オレンジは巣へのフェロモンです。探索中は青をたどってオレンジを残し、運搬中はオレンジをたどって青を残します。探索中は近くの餌のにおいにも反応します。フェロモンは時間とともに薄れます。
240×160セルに区切った空間に300匹のアリを置き、モデル内の1/30秒ごとに状態を更新します。アリの位置と向きは連続値で表し、餌の量、壁の有無、フェロモンの濃度はセルごとに記録します。初期状態ではフェロモンはありません。
移動と採餌
- まず、現在位置で餌を取るか、巣に届けるかを判定します。探索中に餌のあるセルへ入ると1個取り、180度向きを変えて運び始めます。巣の半径5セル以内に戻ると餌を届け、再び180度向きを変えて探索に戻ります。
- 探索中は青の「餌へのフェロモン」、運搬中はオレンジの「巣へのフェロモン」の濃度を読み取ります。センサは正面と左右0.7rad(約40度)の3点です。感知する距離は個体によって異なり、3.5~6.5セル先の濃度を調べます。アリと感知する点の間に壁があれば、その点の濃度は0として扱います。
- 左右の濃度差に応じて滑らかに向きを変え、正面の濃度が高いほど直進を保ちます。下の式ではL・F・Rが左・正面・右の濃度、Δθが1回の更新で向きを変える角度(rad)を表します。この式は、センサの最大濃度が0.0001を超えた場合に使います。
- 探索中は8セル未満の距離にある餌のにおいにも反応します。近くに多く残っている餌ほど、旋回する方向への影響が強くなります。複数の餌からの影響を合わせた方向に、最大1.2rad/秒の旋回を加えます。壁の向こうの餌や、食べ尽くした餌には反応しません。
- ランダムな旋回を加えてから、5.85~12.15セル/秒の範囲で前進します。移動先までの間に壁や外周があればその場にとどまり、90~270度の範囲でランダムに向きを変えます。アリ同士は衝突しません。
個体差は、最初に個体ごとに決める係数q(0.7~1.3)で表します。感知距離は5×q、濃度への反応を計算する指数はk=0.9/qです。qが大きい個体ほど遠くを感知し、濃い道へ偏りにくくなります。移動速度のゆらぎはqとは別に、個体ごとに変化します。
k = 0.9 / q
Δθ = (R^k - L^k) / (L^k + 2F^k + R^k) × (4.5 / 30)
フェロモンを残す条件
探索中は巣へのフェロモンを、運搬中は餌へのフェロモンを、更新のたびに現在のセルへ残します。残す量は下の式で計算します。式のdは実際に歩いた距離で、探索中は最後に巣にいた位置、運搬中は最後に餌を取った位置から数えます。歩いた距離が長いほど、残す量は減ります。
1匹が1回の更新で残す量 = 2.5 × exp(-d / 35)
全個体が移動した後、既存のフェロモンを上下左右の通れるセルへ拡散させ、蒸発させます。その後、各アリが新たに残した分を足します。拡散係数は0.6、蒸発率は0.12/秒です。更新ごとに濃度にexp(-0.12/30)を掛けるため、新たに残されなければ総量は約5.8秒で半減します。フェロモンは壁を通り抜けません。各セルの濃度の上限は100です。
ランダムな動きと経路の変化
旋回のゆらぎwは、更新のたびに「w=0.9×前のw+0.1×一様乱数[-1,1]」で計算します。さらに別の乱数で計算した「0.09×(一様乱数[-1,1]+2w)」を旋回に加えます。センサで感知したフェロモンの最大濃度が0.001を超えるか、餌のにおいを感知しているときは、このランダムな旋回量を1.5倍にします。それ以外は2.4倍です。道があるときもゆらぎは残ります。決まった割合のアリを探索役にする方式は使いません。
アリは巣や餌の方角を直接知りません。近くで感知した情報だけを頼りに動き、別の道へ進んだ個体がフェロモンを残すと経路が変わります。短い経路は往復が早いうえ、歩く距離が短くフェロモンを多く残せるため、道が強まりやすくなります。使われない道は蒸発で薄れます。最短経路が必ず見つかるわけではありません。
編集・リセット・時間
餌はブラシ内の各セルに100個ずつ追加します。壁は巣と餌を避けて描き、消しゴムは壁と地面の餌だけを消します。リセット横のメニューで初期マップを選ぶと、その配置にリセットして停止します。その後も「リセット」を押すと、選択中のマップの初期状態に戻ります。餌と壁の配置、フェロモン、運搬中の餌、搬入数、経過時間を初期化し、速度と道具の設定は保ちます。
経過時間はモデル内の時間を表します。再生速度を変えると更新の回数が変わりますが、更新ごとの計算条件は同じです。停止中やタブが非表示の間は時間が進みません。乱数の種は固定しているため、同じマップで同じ操作を同じ更新回数の時点で行うと、同じ結果になります。