ボイドアプレット
2000.07.27 中田豊久
このアプレットは、1980年代後半頃に、ロスアンジェルスのシンボリックス・
コーポレーションのグレイグ・レナルズの作成した
「ボイド」を実装してみたものである。
ボイドとは、鳥もどき(birdroid)の略であり、飛んでいる鳥の群れ
をシミュレーションしたものである。
このシミュレーションにおいて興味深い点は、個々のボイドと呼ばれる鳥に以下の
簡単な機能を実装するのみで、実現したことにある。
- 環境内にある他の物体との距離をある最小値に保とうとする。ここでいう他の物体には、他のボイド
も含まれる。
- 近隣のボイドたちと速度を合わせようとする。
- 近隣のボイドたちの質量中心を知覚し、そこへ向かって移動しようとする。
ボイドについての説明は、「新潮社 『複雑系』 M・ミッチェル・ワードロップ 著 田中三彦+遠山峻征 訳」
により紹介されている。その中では、上の3つの規則の特徴は、そのどれもが「群れを作れ」
とは言っていないことである、と紹介されている。
レイノルズのボイドは上の規則を実装したといっているが、このボイドアプレットは
以下の規則を実装している。
- 近隣の物体たちとの距離を一定に保とうとする。
- 近隣の物体たちと速度を合わせようとする。
レイノルズのボイドとの違いは、ルール1はレイノルズのボイドでは、影響を受ける物体を「近隣」とは言っていない
ことである。ルール2は同じである。そしてルール3を実装していない。ルール3は
「群れを作れ」という明示的な規則ではないが、このルールがあると群れが作られるのが自明なよう
な気がする。よって、ルール3を外すことにした。
ボイドアプレットには以下の種類のボイドが登場する。
他のボイドと群れを作ろうとするボイド(これが上の2つの規則を実装しているボイド)
他のボイドから嫌われるボイド
他のボイドに好かれる動かないボイド
他のボイドから嫌われる動かないボイド
各ボイドの表示方法は、ボイドアプレットの下にある[help]ボタンを押すと
その説明が出る。
このボイドアプレットはオブジェクト指向で作成されている。
画面に登場する4つのボイドは、他の種類のボイドとどういった関係にあるか
を1つのクラスで表現している。
例えば、他のボイドと群れを作ろうとするボイドは、
CNodeInfluenceという名前で定義されている。また、他のボイドから嫌われるボイドは、
CNodeHateという名前である。CNodeInfluence
がCNodeHateに影響を受けるコードはCNodeInfluence_CNodeHate
という名前で作成されているとシステムは理解してそのクラスを検索する。
もしもクラスが見つかる場合、そのコードを実行するが、無い場合はCNodeInfluence
とCNodeHateは無関係と理解して、ボイドが影響を受けることはない。
これは、バイナリレベルでプログラムのカスタマイズが出来ることを意味している。
javaのクラスは1クラス1ファイルで作成されるため、CNodeInfluence_CNodeHateクラスの
ようなボイド間の関係を示すクラスは、メインクラスになるComplex.classから見えないところ
に配置すれば(ファイルを削除すれば)関係がないと判断されるのみで実行上問題が
あるわけではない。
この機能により、各ボイド間の関係を再コンパイルなしで変更すること
が出来る。
javadocフォーマットの、このボイドアプレットのドキュメントは以下。
ソースファイルは、以下。このアプリケーションは、アプレットと
フレームの両方で動作します。アプレットのトップがComplexApplet.javaファイル。
フレームのトップがComplexFrame.javaファイルです。