目次
はじめに
2022年がスタートしました。新年最初の科学技術計算講座を開講したいと思います。科学技術計算講座も早いもので第8回目のシリーズとなりました。
今回の講座のテーマは「Boidモデルで魚の群れをシミュレーション」です。この講座では過去の講座で作成したプログラムを応用して魚が群れて泳いで行く様子をシミュレーションしてみたいと思います。
魚の群れのシミュレーション
早速ですが、今回のシリーズで作成するシミュレーションの完成形を示しておきましょう。
開いたウインドウで画像の下の[再生/停止]ボタンを押してみてください。青い点は魚を表しています。最初ランダムに散らばっていた魚が次第に群れて泳ぐ様子をシミュレーションしています。
では、魚の群れの中にマウスのカーソルを置いてみてください。カーソルめがけて魚がよってきます。カーソルを動かすと魚もそれにつられて移動する様子がわかります。
このシミュレーションでは、魚一匹一匹の行動を計算しています。一匹一匹はある簡単な規則によって行動をプログラムされていますが、全体として群れになったり、集団行動をするようになるので、とても面白いシミュレーションです。
今日はまずこのシミュレーションのモデルについて説明しましょう。
Boidモデルとは
Boid(ボイド)モデルは、1987年にCraig Reynoldsによって発表されたモデルです。このモデルは、もともと鳥の群れをシミュレーションするために開発されました。boidは、bird-oidを略した造語です。-oidは、android(アンドロイド:人造人間)のように、「~のようなもの」という接尾語で、それが鳥に接続して、「鳥のような物体」という意味合いになっています。
このモデルの基本はとても簡単です。鳥一羽一羽は、次のような簡単な3つの規則で行動するものとしてモデル化されています。
分離(Separation)
鳥は自分の近くにいる別の鳥と離れようとします。これは他の鳥と衝突しないようにするための行動です。
整列(Alignment)
鳥は自分の近くにいる群れと同じ方向に飛ぼうとします。よく群れで飛んでいる鳥を見かけますが、これを群れが進む方向に自分も進むという規則で表現します。
結合(Cohesion)
鳥は自分の近くにいる群れの中心に集まろうとします。群れようとする習性を表すためのものです。
他にも様々な規則を考えることができますが、この3つの行動規則がもとになっています。
シミュレーションを行うためには、これらの規則を数学的に表す必要があります。これは、後で説明していきます。
ちなみに、Boidモデルは鳥の群れをシミュレーションするために開発されたモデルですが、今回は魚の群れとしましょう。別に鳥でも魚でも何でもよいのですが、先程見ていただいたシミュレーションは、鳥の群れというより魚っぽい動きなので、魚とします(ただそれだけで深い意味はありません。。。)。
エージェントベースモデル
Boidモデルは、個々の個体の運動をモデル化し、複数の個体を同時に計算することで、全体の様子をシミュレーションするものです。このようなモデルをエージェントベースモデルと言います。
当サイトの以下のページでは、牧羊犬のシミュレーションを行っていますが、これもBoidモデルと同様のエージェントベースモデルです。
羊と犬が個々に計算され、ある決まった行動規則に則って羊の群れを犬が追いかけていく様子がシミュレーションされています。規則はそれほど難しいものではありませんが、犬がうまく羊の群れを誘導していく様子が計算されています。
エージェントベースモデルは、他にも災害時の避難の様子や金融市場の動向など個々人がある規則に基づいて行動する様子を計算することで、全体のシステムがどのように稼働していくかをシミュレーションするのに使われています。
まとめ
Boidモデルについて簡単にお話ししました。このようなシンプルな規則を適用するだけで、全体として何かまとまった行動をするようになります。シミュレーションとしては、見ているだけでも面白いものです。
次回からは、Boidモデルを数学的にどう表すかについてお話ししていきたいと思います。