コンウェイのライフゲーム 戻る
セルオートマトン・複雑系

コンウェイのライフゲーム — セルオートマトンシミュレーター

「誕生・生存・死滅」3つのルールだけで宇宙が動く。グライダーや銃を配置して複雑な生命現象を体験しよう。

コントロール
シミュレーション速度
fps
セルサイズ
px
ランダム密度
%
外観
プリセットパターン

ライフゲームのルール

  • 誕生: 死セル周囲に生セルが正確に3つ→生まれる
  • 生存: 生セル周囲に2〜3つ→そのまま生存
  • 死滅: それ以外→死滅(過密または過疎)
計算結果
0
世代数
0
生存セル数
0.0%
生存率
0
最大生存数
15
再生速度 fps
ゲーム

クリック・ドラッグでセルを描画 | 右ドラッグで消去

理論・主要公式

$$N_{alive}(i,j) = \sum_{(di,dj)\neq(0,0)} s(i+di, j+dj)$$

生存隣接セル数:Moore近傍(8近傍)の生存セル数の和($s=1$:生存、$0$:死亡)。

$\text{alive}(t+1) = \begin{cases} 1 & N=3 \\ s(t) & N=2 \\ 0 & \text{その他} \end{cases}$

コンウェイの生命ゲール則:3近傍で誕生、2または3近傍で生存、それ以外は死亡。

$$p_{steady} \approx 0.0293$$

安定状態の平均密度:ランダム初期配置から自然収束するライフの密度(経験値)。

コンウェイのライフゲームとは

🙋
ライフゲームって、生き物のシミュレーションなんですか?
🎓
大まかに言うと、単純なルールから複雑な「生命らしい動き」が生まれる、セルと呼ばれるマス目の世界のシミュレーションだよ。生き物そのものではなく、生命現象の「メタファー」なんだ。このシミュレーターの「ランダム密度」スライダーを動かして初期状態を作ってみると、パッと見はランダムなのに、動き出すと秩序だったパターンが生まれるのが面白いよ。
🙋
ルールは「誕生・生存・死滅」の3つだけって聞きました。具体的にはどういうことですか?
🎓
例えば、死んでいるセル(白マス)の周りに生きているセル(黒マス)がちょうど3つあれば、そのセルは次の世代で「誕生」する。逆に、生きているセルが周りに2つか3ついれば「生存」できるけど、それより多すぎたり(過密)、少なすぎたり(孤独)すると「死滅」するんだ。右上の「シミュレーション速度」を遅くして、一世代ずつ進めながら観察してみると、このルールがどう働いているかよくわかるよ。
🙋
グライダーとかグライダー銃って何がすごいんですか?
🎓
これが一番驚くところで、たった5つの生きたセルからなる「グライダー」というパターンは、4世代周期で同じ形に戻りながら、画面を斜めに移動していくんだ。さらに「グライダー銃」は、そのグライダーを無限に作り出し続ける、一種の「工場」なんだ。このシミュレーターで「パターン」メニューから「グライダー銃」を選んで実行してみて。単純なルールから、これほど複雑で意図的な動きが「自己組織化」するのが、ライフゲームの最大の魅力なんだ。

物理モデルと主要な数式

ライフゲームは離散的なセル空間(格子)と時間で定義されるセルオートマトンです。各セル $c_{i,j}(t)$ の状態(1: 生存, 0: 死滅)は、その周囲8近傍のセルの状態の合計 $S$ によって、次の世代 $t+1$ の状態が決定されます。

$$ c_{i,j}(t+1) = \begin{cases}1 & \text{誕生または生存条件を満たす場合} \\ 0 & \text{その他}\end{cases} $$

ここで、$c_{i,j}(t)$ は時刻 $t$ における位置 $(i, j)$ のセルの状態、$S = \sum_{k=-1}^{1}\sum_{l=-1}^{1}c_{i+k, j+l}(t) - c_{i,j}(t)$ は自身を除く周囲8セルの生存数の合計です。この単純な決定論的ルールが、複雑系の振る舞いを生み出します。

よくある質問

シミュレーター上部の「パターンライブラリ」ボタンをクリックすると、グライダー、ブロック、グライダー銃など代表的なパターンが一覧表示されます。クリックするだけで盤面に配置可能です。
画面右下の「リセット」ボタンで盤面をクリアするか、「世代速度」スライダーを左に動かして更新間隔を遅くしてください。また、不要なセルをまとめて削除する消しゴムツールも便利です。
現バージョンでは標準のライフゲームルール(S23/B3)固定です。ただし、初期配置を自由に編集できるため、異なるルールの挙動を模倣したパターンを手動で作成することは可能です。
盤面右下の「エクスポート」ボタンから現在の全セル状態をRLE形式でコピーできます。後日「インポート」ボタンで貼り付ければ、同じ状態から再開可能です。
画面下部または上部にある速度スライダーをドラッグすることで、世代更新の間隔を調整できます。左に動かすと遅く、右に動かすと速くなります。また、一時停止ボタンで手動ステップ実行も可能です。
はい。ランダムな初期配置からでも、グライダーやブロック、振動子などの安定・周期パターンが自然に発生することがあります。特に密度が適切な場合、長期間にわたって複雑な生命現象を観察できます。

実世界での応用

複雑系・自己組織化の研究:ライフゲームは、単純な局所的な相互作用から、グローバルで予測不能な複雑なパターンが生まれる「創発」現象の代表的なモデルです。生物学における群れの行動や、社会現象のモデリングの基礎概念として応用されています。

計算理論・チューリング完全性:ライフゲームは、適切な初期パターンを与えることで、論理ゲートやメモリを構成でき、万能チューリングマシンとして任意の計算を実行できる(チューリング完全)ことが証明されています。これは、単純なルール系が驚くべき計算能力を持つことを示しています。

CAE(コンピュータ支援工学)におけるセルオートマトン:ライフゲームそのものではありませんが、その考え方はCAEで応用されます。例えば、格子点上で粒子の分布を更新する「格子ボルツマン法(LBM)」は流体シミュレーションに、材料の結晶成長や拡散現象をモデル化するのにもセルオートマトンの枠組みが使われます。

アルゴリズムとプログラミング教育:ルールが単純明快で視覚化しやすいため、プログラミング初心者が二次元配列の操作、状態遷移の実装、並列処理の概念を学ぶための格好の教材として広く利用されています。

よくある誤解と注意点

まず、ライフゲームを「生物のシミュレーション」と捉えすぎないで。あくまで「創発」や「自己組織化」の概念を体感するための抽象モデルだよ。実務で使う時も、この点を外すと本質を見誤る。具体的な注意点を3つ挙げるね。

1. 「ランダム密度」の設定は結果を大きく変える: 初期状態をランダム生成する時の密度スライダー、デフォルトの50%あたりが一番カオスで面白いと思いがちだけど、実は密度が低すぎると(例: 10%以下)ほとんど全てがすぐに死滅し、高すぎると(例: 80%以上)過密で静的な塊が残りがち。秩序ある動的パターンを見たいなら、30%から60%の間で調整するのがコツだ。これは、材料の微細構造生成シミュレーションでも似たようなパラメータチューニングが必要になるよ。

2. 境界条件を意識しよう: このシミュレーターのグリッドは有限で、端っこはどうなってる?多くの実装では、端を「死んだセルが永遠に続く」固定境界か、反対側とつながる周期境界のどちらかだ。グライダーが端にぶつかると消えるのは、固定境界だから。実務でセルオートマトンを使う時は、この境界条件の設定が結果に直結するから、最初に確認する癖をつけよう。

3. 「生命」という言葉に惑わされない: セルが「生きている」と言っても、エネルギーや遺伝子があるわけじゃない。あくまで状態が1か0かのビットで、ルールは隣接ビットの数に基づく単純な切り替えだ。この「単純な局所ルールから全体の複雑な振る舞いが生まれる」という構造そのものが、CAEでいう「メッシュ上の離散的な状態更新」の本質的な面白さなんだ。

使い方ガイド

  1. グリッドサイズスライダー(slCellSize)で初期セル数を50×50から200×200の範囲で設定します
  2. 密度スライダー(slDensity)で初期生存セル密度を10%から90%の範囲で調整し、ランダム配置を生成します
  3. 再生速度スライダー(slSpeed)でシミュレーション速度を1fpsから60fpsで制御し、[開始]ボタンで世代進行を開始します
  4. pickAlive・pickBgで生存セルと背景色をカスタマイズし、グライダーやビーコンなどの既知パターンを手動配置することも可能です

具体的な計算例

100×100グリッド、初期密度35%でランダム初期化した場合、第0世代では3500個のセルが生存状態です。ルール「3個の隣接生存セルで誕生、2~3個で生存」が毎世代適用されると、第10世代で生存セル数は約850個に減少し、生存率は8.5%へ低下します。速度を30fpsで実行すれば、1秒間に30世代の計算が完了し、安定構造(静物)やペリオド振動パターンへの収束を視認できます。

実務での注意点

  1. グリッドサイズ200×200以上では計算負荷が急増するため、ブラウザのレスポンス低下を防ぐため密度を20%以下に抑えてください
  2. 世代数が3000を超えるシミュレーションでは、メモリ使用量が指数増加する可能性があるため定期的に[リセット]を実行してください
  3. グライダー銃やメトセラは初期配置から数百世代後に活性化するため、観察時間を十分確保し、fps値を低めに設定して詳細な推移を確認します