浸透理論(パーコレーション)と相転移の数学
突然森全体が燃え広がる臨界点 — 確率論・フラクタル・感染症爆発の数理
- 1
- 碁盤の目(グリッド)の上に木をランダムな確率 で植えたとき、端から端まで山火事が燃え広がる(貫通する)かどうかを研究する数学モデル『パーコレーション(浸透現象)』
- 2
- 確率 を少しずつ上げていくと、ある臨界確率(2次元正方格子サイト浸透では )を境にして、突然『不貫通(局所火災)』から『全域貫通(全焼)』へと劇的に性質が変わる『相転移(臨界現象)』が起きる
- 3
- 山火事だけでなく、水がコーヒー豆を浸透するドリップ、感染症のパンデミック爆発、SNS情報のバズ、多孔質電池材料の導電性など、現代社会と自然界のあらゆる『突発的な臨界現象』を解く共通の数学言語
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
『少しずつ増えていたものが、ある一点を超えた瞬間に世界を一変させる』という相転移現象は、水が氷になる物理から金融市場の暴落、ウイルスの爆発的感染まで至る所に現れます。シンプルな確率と幅優先探索(BFS/グラフ連結成分)だけで、フラクタル次元を持つ壮大な相転移の数理を直感体感できます。
身につく武器・思考力
幅優先探索・ユニオンファインド(Union-Find)アルゴリズムの理解、ベキ乗則(Power Law)と臨界指数の概念、複雑系ネットワークの耐障害性評価力
実社会・ITでの活躍現場
- •感染症の集団免疫閾値(ワクチンの接種率が臨界確率を超えると感染連鎖が完全に遮断される)の計算
- •通信ネットワークや電力網のランダム障害に対する耐障害性(ロバストネス)解析
- •半導体・リチウムイオン電池の電極材料(導電性粒子が臨界濃度を超えると一気に電気が通る現象)設計
- •地下油田や地熱発電における多孔質岩石内の流体浸透シミュレーション
Layer 1 — 直感・シミュレーター
スライダーで木の占有確率 を動かしてみてください。 付近では火は局所的にしか燃え広がりませんが、臨界確率 を境にして、赤い山火事(浸透クラスター)が最上段から最下段まで一気に突き抜けて全域を焼き尽くす相転移の瞬間を目の当たりにできます。
2次元正方格子のサイト浸透において、クラスターが端から端まで貫通する臨界確率 pc はおよそいくらか?
Layer 2 — 定義・受験・証明
定義
**パーコレーション(Percolation Theory)**とは、ランダムグラフや格子上の頂点(サイト)または辺(ボンド)が独立な確率 で開いている(占有されている)とき、無限クラスター(格子の両端を結ぶ連結成分)が存在する確率 を研究する確率論および統計物理学の分野である。
公式・数理モデル
証明・導出
**ボンド・パーコレーションにおける双対格子による臨界確率 pc = 1/2 の幾何学的証明** 2次元正方格子のボンド・パーコレーション(各辺が確率 で繋がる)を考える。 正方格子の各面の中心を結んで作られる格子(双対格子)もまた、合同な正方格子である。
元の格子上で左端から右端への横断路が存在しないための必要十分条件は、双対格子上の開いていない辺の集合によって、上端から下端を遮断する縦断バリアが形成されることである。 平面グラフのオイラーの公式と対称性により:
無限格子の極限において、正方格子の自己双対性(格子とその双対格子が幾何学的に完全に同一構造を持つこと)から:
がハリー・ケステン(1980年)によって厳密に証明された(Q.E.D.)。サイト浸透の場合は自己双対性が成り立たないため厳密解は未解決だが、数値計算により であることが知られている。
押さえておきたいポイント
- 臨界点 の直前直後で系の性質が非連続的に激変し、微小な の確率の増加が全体の振る舞いを180度反転させる
- 臨界点 における浸透クラスターは自己相似性を持ち、フラクタル次元 を示す
- ネットワーク理論におけるスケールフリー・ネットワークの耐障害性(ハブを攻撃されると臨界点が急低下して崩壊する現象)の数理基盤でもある
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
Union-Find木による浸透判定アルゴリズム(ホシェン・コペルマン法)
高速な素集合データ構造(Union-Find)を用いて、巨大格子上で上下の連結判定を準線形時間 で実行するPythonコードです。
1class UnionFind:2 def __init__(self, size):3 self.parent = list(range(size))4 def find(self, i):5 if self.parent[i] == i: return i6 self.parent[i] = self.find(self.parent[i]) # 経路圧縮7 return self.parent[i]8 def union(self, i, j):9 root_i = self.find(i)10 root_j = self.find(j)11 if root_i != root_j:12 self.parent[root_i] = root_j1314def check_percolation(p, size=50):15 """size x size 格子で確率 p のサイト浸透を判定"""16 import numpy as np17 grid = np.random.rand(size, size) < p1819 # 仮想ノード: 0 (仮想トップ), size*size + 1 (仮想ボトム)20 top_node = 021 bot_node = size * size + 122 uf = UnionFind(size * size + 2)2324 def idx(r, c): return r * size + c + 12526 for r in range(size):27 for c in range(size):28 if not grid[r, c]: continue29 curr = idx(r, c)30 if r == 0: uf.union(top_node, curr)31 if r == size - 1: uf.union(bot_node, curr)3233 # 右と下の隣接マスと連結34 if r + 1 < size and grid[r + 1, c]:35 uf.union(curr, idx(r + 1, c))36 if c + 1 < size and grid[r, c + 1]:37 uf.union(curr, idx(r, c + 1))3839 return uf.find(top_node) == uf.find(bot_node)4041p_test = 0.6042is_perc = check_percolation(p_test, 100)43print(f"確率 p = {p_test:.2f} (100x100格子): 浸透貫通 = {is_perc}")
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元