0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ライフゲームの創発とシミュレーション

Last updated at Posted at 2025-01-08

📌 はじめに

ライフゲーム(Conway's Game of Life)は、数学者 ジョン・コンウェイ によって考案された セル・オートマトン の一種です。

シンプルなルールを持ちながらも、創発(Emergence) の概念を示す非常に興味深いシミュレーションモデルです。 本記事では、Python を使ってライフゲームをシミュレートし、アニメーションとして可視化する方法を学びます。

また、ライフゲームが複雑系とどのように関係するのかについても解説します。


📌 GitHub & Booth

本記事のコードは、以下のリポジトリおよび Booth で無料配布しています。

📂 Booth で ZIP 版をダウンロード(無料)
👉 https://complex-dynamics.booth.pm/items/xxxxx

📌 GitHub でソースコードを確認
👉 Complex-System(ライフゲーム)

🚀 Google Colab で直接実行
👉 Google Colab で開く


📌 ライフゲームとは?

基本的なルール

ライフゲームは、以下の 4つのルール に基づいて動作します。

  1. 誕生 → 周囲にちょうど3つの生存セルがあれば、死んでいるセルが誕生(1になる)。
  2. 生存 → 生きているセルは、2つまたは3つの生存セルがあればそのまま生存。
  3. 過疎 → 生存セルが1つ以下の場合、孤立して死ぬ(0になる)。
  4. 過密 → 生存セルが4つ以上ある場合、過密で死ぬ(0になる)。

このルールが すべてのセルに対して同時に適用 されることで、時間とともにパターンが進化します。

このスクリプトの説明は以下です。

ライフゲームの**基本的なルール(誕生・生存・過疎・過密)**は、Pythonスクリプトのupdate_grid関数で実装されています。


📌 update_grid 関数の該当部分

def update_grid(grid):
    """NumPyを使って次の世代を計算"""
    kernel = np.array([
        [1, 1, 1],
        [1, 0, 1],
        [1, 1, 1]
    ])
    neighbors = convolve(grid, kernel, mode='wrap')  # 近傍セルの合計を計算
    new_grid = (neighbors == 3) | ((grid == 1) & (neighbors == 2))  # ルール適用
    return new_grid.astype(int)

📌 ルールごとの該当処理

ライフゲームのルール 該当するコード部分
誕生(3つの生存セルで新しいセルが誕生) (neighbors == 3)
生存(2つ or 3つの生存セルでそのまま生存) ((grid == 1) & (neighbors == 2))
過疎(1つ以下の生存セルで死亡) (neighbors < 2)(neighbors == 3) の条件を満たさないため死亡
過密(4つ以上の生存セルで死亡) (neighbors > 3)(neighbors == 3) の条件を満たさないため死亡

📌 詳細な処理の流れ

  1. 近傍セルの合計を計算neighbors = convolve(grid, kernel, mode='wrap')

    • kernel を使って 3×3 の範囲の合計 を計算
    • mode='wrap' により、境界をループさせてトーラス状にします
  2. ルール適用

    • neighbors == 3 の場合、新しいセルが誕生(1 になる)
    • grid == 1 かつ neighbors == 2 の場合、そのまま生存
    • その他のケースでは 0(死ぬ)

📌 ルールのまとめ

ライフゲームの基本ルールは update_grid(grid) 関数 で実装されている。
特に neighbors == 3grid == 1 & neighbors == 2 の条件が、誕生・生存・過疎・過密 のルールを反映しています。


📌 Python でライフゲームを実装する

本記事では、Google Colab で実行できる Notebook 版 を用意しました。

以下のリンクから .ipynb ファイルを開き、セルを実行するだけでアニメーションが動作します。

🚀 Google Colab で実行

💡 以下は Google Colab で実行するコードの抜粋です(セルを順番に実行してください)。


📌 実装コード

以下のコードは、Matplotlib を使ってライフゲームをアニメーションとして可視化するものです。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from scipy.ndimage import convolve

def initialize_grid(size, density=0.2):
    """ランダムに初期グリッドを生成"""
    return np.random.choice([0, 1], size=(size, size), p=[1 - density, density])

def update_grid(grid):
    """NumPyを使って次の世代を計算"""
    kernel = np.array([
        [1, 1, 1],
        [1, 0, 1],
        [1, 1, 1]
    ])
    neighbors = convolve(grid, kernel, mode='wrap')
    new_grid = (neighbors == 3) | ((grid == 1) & (neighbors == 2))
    return new_grid.astype(int)

def animate_colab(grid, steps=100):
    """アニメーションをColabで表示"""
    fig, ax = plt.subplots()
    img = ax.imshow(grid, cmap="binary")
    ax.axis('off')

    def update(frame):
        nonlocal grid
        grid = update_grid(grid)
        img.set_data(grid)
        return img,

    ani = animation.FuncAnimation(fig, update, frames=steps, interval=50, blit=False)
    return ani

# 実行
size = 20
grid = initialize_grid(size)
ani = animate_colab(grid, steps=50)

# Google Colabでアニメーションを表示
from IPython.display import HTML
HTML(ani.to_jshtml())

実行結果

このコードを実行すると、以下のようなアニメーションが表示されます。

📌 ライフゲーム GIF
life_game.gif

📌 ライフゲームの応用例

✅ 創発のシミュレーション

単純なルールから複雑なパターン が生まれることを可視化できます。

✅ スマートシティのモデル化

都市設計における人口分布のシミュレーション などに応用可能。

✅ AI・機械学習のデータ生成

パターンの解析や自然なデータセットの生成 に利用可能。


📌 まとめ

ライフゲームは、シンプルなルールから複雑なパターンが生まれる興味深いモデル!
Pythonで数十行のコードで簡単に実装可能!
Google Colabで、ダウンロード不要ですぐに試せる!
Boothで無料ダウンロード可能!


注意事項

  • 読者の皆様へ
    私はまだ学びの途中にある身ですので、内容に不足や誤りがあるかもしれません。
    もしお気づきの点があれば、ぜひコメント欄でご指摘いただけると幸いです。
    この試みが、少しでも読者の皆様の学びや発見につながれば嬉しく思います。

  • 記事作成の背景
    この記事は、ChatGPTを活用して作成しました。AIの力を借りることで、効率的かつ迅速にコンテンツを生成する実験を行っています。
    記事内容は、私自身が複雑系の学びを深めるためにまとめたものであり、これを通じて知識を共有しつつ、さらなる学びを促進することを目指しています。

  • コードについて
    本記事に掲載されているコードは、Google Colab上で動作確認済みです。
    もしコードを実行する際にエラーが発生した場合は、Python環境やライブラリのバージョンに注意してみてください。
    また、コメントやフィードバックをいただければ幸いです。


🔗 関連リンク

📌 GitHub でコードを確認
Complex-System(ライフゲーム)

📌 Google Colab で直接実行
Google Colab で開く

📌 Booth で無料ダウンロード
Pythonで学ぶライフゲーム【無料】


🚀 この記事が役に立ったら、Qiitaの「LGTM」をお願いします!
📢 質問やコメントはお気軽にどうぞ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?