群れをシミュレートする

Life is Beautiful という blog サイトに縁日の金魚すくいを模したサンプルがあったので、試みに作ってみたものです。 元は2005年春学期のプログラミングA演習のために作ったものであり、そのためにこの演習授業が終了した時点で受講生たちが知りうる範囲の文法と記述方法で作ってみました。

なお Reynolds の論文を元にしてやっていますので、アルゴリズムは借り物です。 これを参考に演習の課題を作ろうとしている人たちへの注意ですが、やはり既存のアルゴリズムを利用するのはオリジナルで何か作るのに較べたら簡単です。 もちろん先人の知恵を援用するのは重要なことですが、対象となる演習授業ではオリジナルのアイディアを実装する能力を求めているのか、そうではないのか、といったことに注意しながら参考にして下さい。

3 時間ほどでおおよそ作成し、 あと二日ほどに分けて空き時間を 2 時間ほど投入して色とシッポを付けることができました。 プログラミングお基礎演習クラス終了時点ではこの位のことができるまでには到達している、という参考までに。

プログラム


高速化

元のアルゴリズムは大変シンプルに総当たりチェックを掛けていたのですが、さすがにこれは計算量が爆発します。 (計算量、O^2 オーダー、といった表現で学ぶはずです) そこで魚の数の二乗では計算量が増えないように、近くの相手との影響だけを判定するように修正しました。

2007.6.4 Yutaka Yasuda.