課題: JAVAによるライフゲーム


平面上で格子状にセルが配置されている2次元セルオートマトンの一種であるライフゲームでは、各セルは1(ON)か0(OFF)の2状態をとり、あるセルの時刻t+1における状態は時刻tにおける8近傍(上下左右と斜め4方向)、及びそのセル自身の状態によって決まる。
各セルが次の時刻にとる状態を決めるルールは次の通りである。
このルールは、各セルに生息する生物が、まわりに生物が多すぎても、あるいは少なすぎても死んでしまうこと、また、適度な数になると新たに生物が誕生すると解釈することができる。ライフゲームは、このように生態の一側面をとらえた挙動を作り出すという点、単純なルールから複雑な挙動を産み出すといういわゆる「複雑系」的な視点に合致する点、グライダーや不動パターンなどをうまく構成すると実現不可能なほど巨大なセル平面が必要ではあるが論理的にはわれわれの使っているような計算機と同じ計算能力を持った計算機を構成できることが証明されている点などから、重要な意味を持ち続けていると言える。
さて、このライフゲームをJAVAで書いたアプレット(大学院の小鹿君作成+鈴木君が拡張中)がここにあるので、実際に試してみる。マウスで初期状態(クリックするとそのセルが状態1に変わる)を適当に設定し、<Start>をクリックすると、上記ルールに基づいて、刻々と状態が平面上で変わっていく様子がわかる。また、時刻が1経過するごとに止めたい場合は、<Step>をクリックする。
このアプレットを用いて以下のことを試みよ。
  1. グライダーパターンを作り、実際に期待する動きをすることを確認する。
  2. 動きがなくなってしまう(しまった)パターンを探し、そのようなもののうち(構成するセル数が)最小と思われるものを3つ示せ。
  3. 1ステップ後にすべて消えてしまい、しかも些細なものでない(混雑で死ぬセルが最低ひとつはある)最小のパターンをみつけよ。
次に、JAVAプログラムのソースリストがここにあるので、大ざっぱにプログラムの流れをつかんだ上で、各自が自由に拡張せよ。たとえば、1) セルの大きさを自由に選べるようにする、2) 平面の端が現在はたえず0をとるようになっているがトーラス状(上と下、右と左がつながっているような)の設定を選べるようにする、3) 各時刻における1状態のセルの数などを表示する、などでもよいし、難しければ、見かけを変えるなどでもよい。