群れをつくる魚たちに働く力

サイエンス記事

Ex-Gramプログラミング教室の上級コースではフロッキングと呼ばれる魚や鳥の群れを自律的に作りだすプログラムを扱っています。
中高生には難解ですが、分離、整列、結合という3つの単純なルールで魚たちを泳がすことで、下図のような群れが自然に形成されます。
単純な法則が複雑な世界を創る例です。

分離というのは近隣の魚との衝突を避ける力を与えることです。
整列というのは近隣の魚と同じ向きに進む力を与えることです。
結合というのは近隣の魚たちの中心に向かって進み集団を維持するような力を与えることです。

魚たちが泳いでいる様子だけでは、これらの力がどのように魚に及ぼされているかよくわからないため、力のベクトルを図示してみました。
ベクトルというのは大きさと向きを持った量のことです。下図で矢印の向きに矢印の大きさの力が加わっているということになります。

上記の3つの力以外にも魚の速度のベクトルも黒の矢印で表示してあります。
黄色の円は魚の守備範囲でこの円の中に他の魚が入ってきたら、必要な力を計算します。

赤の分離の力ベクトルは集団の外向きに向いていることが多く、まさに衝突を避けて外側に行こうとしているようです。
青の結合の力ベクトルは集団の中の方に向いていることが多く、集団を維持しようとしている様子がわかります。
緑の整列の力ベクトルは黒の速度ベクトルに比べて左右にずれていることが多くなっています。今進んでいる向きから左や右に舵をきって、みんなと同じ向きに進むように制御していることがわかります。

見えない力もビジュアルに図示してみることで理解が深まります。
動画もつけておきますので参考にしてください。