ライフゲームのルール
バクテリアやウィルスが世代を重ねて、どんどん増殖するように生物の成長や死滅をシミュレーションする一種の生態系ゲームがあります。無数のセルが格子状に並んだ二次元のマトリクスの中で、生物に見立てた個々のセルが誕生と死滅を繰り返します。
初めは少なかった生物の仲間たちが様々なパターンを描いて増殖し、死滅する様子は、まるで文明の黎明期から衰退期までを思わせるようです。悠久の時間がコンピュータ上では走馬灯のようにアッという間に過ぎていきます。
例を挙げてみましょう。以下のたった5つのセルが、24世代目には大きく成長しています。
□□□□□□□□□■□□□
□■■■■□□□□■□□□
■■□■■□□□■□■□□
0世代 ■□□□■□□□■□□□□
□■■ ■■□□□□□□■■■□□
■■□ ⇒ □□□□□■■□□■■□□ ⇒ ?
□■□ □□□■■■□□□□■■□
□□□■■□■□□□■■□
□□□□□□□■■■□■■
□□□□□□□□■■■■□
□□□□□□□□□■■□□
その後どのように変化していくのか、直感では分かりません。生物の盛衰にも文明の盛衰にも思えてくるこの不思議なゲームをライフゲームといいます。まるで自分が神にでもなったかのように世界を創造・破壊できます。
この5つのセルパターンはRペントミノと呼ばれ、なんと1103世代まで変化を続け、最終的には108×51のマトリクスで固定化します。
ライフゲームとは
ライフゲームは、1970年にケンブリッジ大学の数学者コンウェイが発明し、ガードナーが雑誌に紹介したことで当時、世界中で大流行となりました。ゲームとしては0人ゲームの形式であり、初期パターンを与えれば後はルールに従ってコンピュータが永遠に次のパターンを作り続けます。
ルールの基本は生物の増殖パターンと類似しています。周りに仲間が少ないと孤独で死滅し、仲間が多すぎても過密で死滅します。適切な仲間の数だと生き残ることができ、新しい仲間も誕生します。
コンウェイは正方形のセルが縦横無限にある二次元で、自セルと周りの8セルとの関係で、次世代のパターンが決まるようなルールを模索しました。
様々なルールを実験したコンウェイは、できるだけ単純なルールでかつ出現パターンがなるべく予測しづらいものを選択しています。実際、そのルールは直感的に理解できる簡単なものです。
ライフゲームのルール
まず、セルは生きている状態と死んでいる状態に分けられます。セル=生物、セル=文明、セル=仲間と考えてもかまいません。生きているセルは■で、死んでいるセル(空のセル)は□で表します。以下にセルの世代交代ルールが分かるように典型的な6パターンを記します。
□□□ □□□
□■□ 周りのセルに仲間は0 □■■ 周りのセルに仲間は1
□□□ □□□
(3) (4)
□□■ □□■
□■■ 周りのセルに仲間は2 □■■ 周りのセルに仲間は3
□□□ □■□
(5) (6)
□□■ □□■
■■■ 周りのセルに仲間は4 □□■ 周りのセルに仲間は3
□■□ □■□
3×3のマトリクスの中央のセルには、以下のルールが適用されます。
- セルが生きている状態で、周りのセルに仲間が2つか3ついれば次世代に生き残れます。
- セルが空状態で、周りのセルに仲間が3ついれば次世代に新しい生命が誕生します。
- それ以外のパターンでは中央のセルは死滅します。
上記のルールに従うと(1)、(2)、(5)の中央のセルは死滅します。(3)と(4)の中央のセルは生き残り、(6)の中央のセルには新しい生命が誕生します。たった、これだけのルールで二次元のマトリクス上に、想像もできない不思議なパターンが生まれてくるのです。
ライフゲームが提起した3つの疑問
ところで、このライフゲーム。永遠に増殖していくパターンは存在するのでしょうか。ライフゲームは微視的に見れば簡単に予測可能なのに(次の世代がどんなパターンなのかは計算すれば分かる)、巨視的に見るとパターンの変化が容易に推測できません(数世代後のパターンが直感で想像できない)。
ライフゲームが発表された頃、ゲームに興じている人達に以下の3つの疑問が湧いてきました。
- パターンの変化を記述する方法があるのか。
- 際限なく成長するパターンはあるのか。
- 全てのパターンはいずれ固体化するのか。
どれも簡単には答えられない疑問です。実際、これらの疑問に容易に答えることができないようにコンウェイはルールを慎重に決めたと言われています。
rpnでライフゲーム!
では早速、rpnでライフゲームを楽しんでみましょう。本格的な大規模マトリクスによる超高速シミュレーションは無理ですが、簡易なものなら電卓ソフトのrpnで挑戦できます。
lifeプログラムのダウンロード
- lifeプログラムのZIPファイルをダウンロードしてください。
- ダウンロードしたZIPファイルをダブルクリックするとlife.objとlife'.objが表示されます。
- life.objとlife'.objを格納したいフォルダにドラッグすると以下のダイアログが出てきます。
- パスワードを入力してください。一致していれば、life.objとlife'.objが解凍されます。
| パスワードの入力 |
+-------------------------------------------------+
| +-----+ |
| ファイル'life.obj'はパスワードで保護されて | OK | |
| います。 パスワードを入力してください。 +-----+ |
| |
| +----------------------+ +-----+ |
| パスワード(P): | | |キャンセル| |
| +----------------------+ +-----+ |
+-------------------------------------------------+
※パスワードは講座サポートのpasteプログラムのダウンロードと同じです。
ここでは、c:\rpnディレクトリにobjファイルが保存してあるものとして説明します。DOSプロンプトを起動して、c:\rpnまで移動してください。以下のrpn式がlifeプログラムの使い方です。
実際に起動するのは、次のコンソール版とエスケープ版を読んでからのほうがいいでしょう。
最初の10は世代数を表します。この例では10なので10世代までパターンを形成します(世代交代が10回)。次の1は世代間の表示間隔を空ける秒数です。例では1秒待っていますが、rpnを使ったライフゲームは計算スピードがそれほど速くないので、ほとんどのケースで0秒でいいでしょう。
最後のlife.datはマトリクスの初期パターンを格納したファイルです。ファイル内容は以下のように簡単です。
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 1 1 0 0
0 0 1 1 0 0 0
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1が生きているセルで、0が空のセルを示します。このデータを作っておけば後はlifeプログラムがルールに従って世代交代させていきます。
この物体は冒頭に出てきたパターンですが、周りをセルを2つずつで囲んでいるので、7×7のマトリクスになっています。マトリクスの大きさは任意で構いませんが、3×3のマトリクスではすぐに行き詰まります。パターンの成長を疎外しない程度の大きさのマトリクスにしておくのが肝心です。
rpnのライフゲームはマトリクスの総セル数が1000個までになっていますので、32×32のマトリクスは実行できません。なお、マトリクスは正方形である必要はありません。40×20でも構いません。総数が1000セル以内なら問題ありません。
コンソール版とエスケープシーケンス版
rpnのライフゲームにはコンソール版とエスケープシーケンス版があります。コンソール版はマトリクスがスクロールするタイプで、エスケープシーケンス版はマトリクスが上書きされるタイプです。
ゲームらしく遊べるのはエスケープシーケンス版なのですが、ゲームの流れが分かりやすいコンソール版から先に説明していきます。
コンソール版のライフゲームは以下のようにrpn式を入力します。1秒ごとにマトリクスが上方にスクロールしていきます。指定した10世代になると終了します。
世代(0)
□□□□□□□
□□□□□□□
□□□■■□□
□□■■□□□
□□□■□□□
□□□□□□□
□□□□□□□
世代(1)
□□□□□□□
□□□□□□□
□□■■■□□
□□■□□□□
□□■■□□□
□□□□□□□
□□□□□□□
:
(中略)
:
世代(10)
□□□□□□□
■■□□□□□
■□□□□□□
■■□□□□□
□■■■□□□
□□□■□□□
□□□■□□□
終了
次にエスケープシーケンス版の使い方ですが、以下のようにrpn式を入力してください。
先ほどのコンソール版のプログラム名がlife'だったのに対して、lifeとダッシュ記号が消えているだけの違いです。後はすべて同じ仕様なので、以下に上記と同じように画面の動きを示しておきます。
世代(0) 世代(1) 世代(10)
□□□□□□□ □□□□□□□ □□□□□□□
□□□□□□□ □□□□□□□ ■■□□□□□
□□□■■□□ □□■■■□□ ■□□□□□□
□□■■□□□ → □□■□□□□ → … → ■■□□□□□
□□□■□□□ 1秒 □□■■□□□ 1秒 1秒 □■■■□□□
□□□□□□□ □□□□□□□ □□□■□□□
□□□□□□□ □□□□□□□ □□□■□□□
終了
(同じ場所で表示されるので前のパターンは残らない)
ライフゲームのエスケープシーケンス版は、画面左上端に固定で表示されます。rpnのライフゲームは処理速度が速くないので世代の表示間隔が0秒でも問題はないでしょう。どちらかと言えば、こちらの方がライフゲームの醍醐味が味わえます。
エスケープシーケンス版を使用するには、事前に環境設定が必要です。技術サポートのnpdのエスケープシーケンス設定を参考にしてください。
パターンの作成方法
初期パターンはnpdかWindowsのメモ帳(notepad)で作成します。まず、全部が0のマトリクスを作って後からエディタで必要な箇所に1を上書きします。例えば、10×10のマトリクスを用意するには以下のrpn式を入力してください。
これで全部0の10×10マトリクスがlife.datに格納されました。foldプログラムがない人は以下でも構いません。
後はWindowsのメモ帳(notepad)かnpd、その他お気に入りのエディタで必要な場所に1を上書きします。以下はオール0マトリクスの生成からlife.datの編集までをnpdを使って一気に作成する例です。
パターンのいくつかは実践コーナー(数学アラカルト)のライフゲームから生命誕生に詳しくあります。様々なパターンの名称と動きについて追実験しています。興味のある人は閲覧ください。
増殖するパターンと自己複製の夢
永遠に増殖するパターンが存在する形として、コンウェイはグライダー銃(glider gun)とシュシュポッポ列車(puffer train)を予想しました。グライダー銃はグライダーを何機も生成できるパターンで、シュシュポッポ機関車は移動しながら後にセルの形跡を残していくようなパターンです。
果たして、そのパターンはゴスパーらによって発見されることになります。加えて、彼らはグライダーの衝突でグライダー銃を作ることにも成功しました。これは有限のグライダーから無限のグライダーを発生させられることを意味します。
生命の再定義が必要になるのでしょうが、仮に自己複製できることがその条件だとすれば、いつかライフゲームで生命を持った物体が生まれるかもしれません。事実、自己複製可能な物体がライフゲームで構成できます。単純なパターンをもつ物体が自己複製の過程で複雑なパターンへと進化することは否定できません。まるで、生命の進化のようですね。
ライフゲームのランダムでデタラメに見える複雑なパターンの連鎖は、気象や生命といった現実の世界と同じように見えます。しかし、ライフゲームはコンウェイが決めた単純なルールだけで作られた世界です。
単純な形から将来も予測できない複雑な世界がライフゲームで作れるのなら、もしかしたら、現実の複雑な世界も今は解明できていない「神の決めた単純なルール」があるだけなのかも知れません。
ライフゲームに関する記事が実践コーナー(数学アラカルト)のライフゲームから生命誕生に詳しくあります。興味のある人は閲覧ください。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
foldはユーティリティーパッケージに同梱されています。xypとnpdはrpn姉妹ソフトウェアです。詳しくはプロダクトを参照ください。