セル・オートマトン(ライフゲーム)
たった4つの単純なルールから、生命のような自己組織化と複雑系が創発する
- 1
- セル・オートマトン(ライフゲーム)の本質的な定義と直感的ビジュアルをシミュレーターで体験できる。
- 2
- 公式や証明の背景にある数学的意味と、厳密な導出ステップを解説。
- 3
- 実社会における工学応用(2次元ビットグリッドによるライフゲーム更新エンジン)のTypeScript実装コードを収録。
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
セル・オートマトン(ライフゲーム)の基礎原理を体系化し、抽象的な計算を直感的に扱うために誕生した。
身につく武器・思考力
たった4つの単純なルールから、生命のような自己組織化と複雑系が創発する。この考え方を身につけることで、複雑な課題を単純化して数理モデルとして解く力が養われる。
実社会・ITでの活躍現場
- •2次元ビットグリッドによるライフゲーム更新エンジン
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
マス目をクリックして生きたセルを自由に配置するか、「プリセット(グライダー等)」を選んで「再生」ボタンを押してみよう。周囲のセルの数(密度)に応じて、増殖したり過密で死滅したりしながら、まるで生き物のように斜めに移動する不思議なパターン(創発現象)を観察できる。
Layer 2 — 定義・受験・証明
定義
ジョン・ホートン・コンウェイが考案した2次元格子上の零プレイヤーゲーム。各セルは「生」または「死」の2状態を持ち、周囲8近傍の生きたセルの数 によって次の世代の状態が決定される。 1. 【誕生】: 死んだセルの周囲にちょうど3つの生セルがあれば誕生する。 2. 【生存】: 生きたセルの周囲に2つまたは3つの生セルがあれば生存する。 3. 【過疎死】: 生きたセルの周囲に1つ以下の生セルしかないと孤独死する。 4. 【過密死】: 生きたセルの周囲に4つ以上の生セルがあると窒息死する。
公式・数理モデル
証明・導出
チューリング完全性の証明: コンウェイのライフゲームは単なる幾何学模様のシミュレーションではなく、論理ゲート(AND, OR, NOT)をセルの衝突(グライダー銃など)によって構成可能であることが数学的に証明されている。 すなわち、無限に広い格子と適切な初期配置を与えれば、いかなるコンピュータプログラムもライフゲームの中で実行可能(チューリング完全)である。極小の局所ルールから無限の計算可能性が創発する驚異的な数学モデルである。
押さえておきたいポイント
- 中央の統括者が存在しなくても、局所的な相互作用だけで全体秩序(自己組織化)が生まれる
- 「固定物体(ブロック等)」「振動子(ブリンカー等)」「移動体(グライダー等)」などの多様な生態系が自然発生する
- 生物の進化、都市の形成、森林火災の伝播、ウイルスの感染拡大などのモデリングに広く応用される
- カオス理論と決定論の境界にある「計算既約性(シミュレーションしてみるまで未来が予測できない性質)」を示す代表例
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
2次元ビットグリッドによるライフゲーム更新エンジン
配列の境界をラップアラウンド(トーラス面)しながら、周囲8近傍のカウントと次世代状態を高速計算するTypeScript実装。
1type Grid = boolean[][];23function stepLifeGame(grid: Grid): Grid {4 const rows = grid.length;5 const cols = grid[0].length;6 const next: Grid = Array.from({ length: rows }, () => Array(cols).fill(false));78 for (let r = 0; r < rows; r++) {9 for (let c = 0; c < cols; c++) {10 let neighbors = 0;11 for (let dr = -1; dr <= 1; dr++) {12 for (let dc = -1; dc <= 1; dc++) {13 if (dr === 0 && dc === 0) continue;14 const nr = (r + dr + rows) % rows;15 const nc = (c + dc + cols) % cols;16 if (grid[nr][nc]) neighbors++;17 }18 }19 // コンウェイの4ルール20 if (grid[r][c]) {21 next[r][c] = neighbors === 2 || neighbors === 3;22 } else {23 next[r][c] = neighbors === 3;24 }25 }26 }27 return next;28}
この領域の最高峰単元です。工学実装コードを動かしてみましょう!
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元