작은 산불을 다 끄면 왜 나중에 더 큰 불이 날까
불이 나면 일찍 끌수록 좋다고 생각하기 쉽습니다. 작은 불을 놓치지 않고 끄면 큰 불도 막을 수 있을 테니까요. 그런데 이 모델의 숲에서는 작은 불을 90% 끄자 숲의 10% 이상을 태우는 큰 불이 약 6배로 늘었습니다(1만 단계당 21번에서 125번). 불이 태우던 나무가 치워지지 않고 쌓여, 한번 붙으면 걷잡을 수 없는 숲이 되기 때문입니다. 왼쪽(그냥 두기)과 오른쪽(작은 불 끄기)을 나란히 지켜보세요.
모델은 이렇게 움직입니다
- 숲은 격자 칸으로 이루어지고, 각 칸은 빈 땅이거나 나무입니다. 매 단계 빈 땅에는 확률 p로 나무가 자랍니다. 또 칸마다 확률 f로 번개가 칩니다(기본은 칸 1만 개당 단계마다 2번). 번개가 나무에 맞으면 불이 붙습니다.
- 불은 상하좌우로 이웃한 나무에 곧바로 번져, 이어진 나무 덩어리 전체가 한 번에 탑니다. 탄 자리는 빈 땅이 되어 다시 자랍니다. 이것이 Drossel-Schwabl 숲불 모델의 규칙입니다.
- 소방은 이 프로젝트가 덧붙인 규칙입니다. 불이 붙은 순간 그 불이 작으면(덩어리가 격자 칸의 5% 이하) 확률 s로 곧바로 끕니다. 큰 불은 끌 수 없습니다. 끈 불의 나무는 타지 않고 남아 더 자라고, 이웃 덩어리와 이어집니다.
- 화면의 두 숲은 같은 설정으로 시작하지만 왼쪽은 s=0(그냥 두기), 오른쪽은 고른 s입니다. 아래 통계는 두 숲을 따로 오래 돌려(보통 4만 단계) 센 값이고, 큰 불은 격자 칸의 10% 이상을 태운 불입니다.
직접 돌려보기
① 두 숲의 불 지켜보기
초록은 나무(어릴수록 연하고 오래될수록 짙음), 주황은 번지는 불꽃, 어두운 색은 방금 탄 자리와 빈 땅입니다. 왼쪽은 불을 그냥 두고, 오른쪽은 작은 불을 끕니다. 오른쪽 숲이 점점 짙어지다가 한꺼번에 타오르는 순간을 기다려 보세요.
② 3D로 보기: 쌓이고 쌓인 숲이 한꺼번에 타오르는 순간 3D
위 실험의 숲을 그대로 입체로 세웠습니다. 나무 한 그루가 원뿔 하나이고, 오래 자란 나무일수록 키가 크고 색이 짙습니다. 불이 붙은 덩어리는 주황 불기둥으로 솟았다가 짙은 회색 탄 땅으로 내려앉아요. 작은 불을 끄는 숲은 키 큰 나무가 빽빽하게 이어진 덩어리로 자라다가, 번개 한 번에 그 덩어리 전체가 불기둥 벽으로 바뀝니다. 아래에서 두 숲을 바꿔 가며 보세요.
위 실험과 같은 숲, 같은 순간을 입체로 본 것이에요(새로 계산한 값은 없어요). 재생·일시정지·처음부터·슬라이더는 위 숲을 따라갑니다. 드래그로 회전, 휠·핀치로 확대, 휴대폰에서는 세로로 쓸면 페이지가 내려가요.
③ 숲에 나무가 얼마나 찰까
두 숲의 나무 밀도(칸 중 나무가 있는 비율)가 시간에 따라 변하는 모습입니다. 점선은 칸에 나무가 무작위로 이 정도 있으면 이어진 덩어리가 숲 전체로 커질 수 있는 밀도(약 59%)입니다. 작은 불을 끄는 숲은 점선 가까이까지 올라갔다가 큰 불로 떨어집니다.
④ 불의 크기 분포
두 숲을 따로 오래 돌렸을 때, 어떤 크기 이상의 불이 1,000단계에 몇 번 났는지입니다(양쪽 로그 눈금). 작은 불을 끄면 왼쪽 위의 작은 불이 사라지고, 오른쪽의 큰 불은 오히려 늘어납니다. 붉은 영역이 큰 불입니다.
⑤ 탄 면적은 어떤 불이 태웠나
막대의 길이는 매 단계 타는 숲의 비율이고, 색은 그 면적을 태운 불의 크기입니다. 총량은 두 숲이 비슷합니다. 나무가 자라는 만큼만 탈 수 있기 때문이에요. 달라지는 것은 작은 불로 조금씩 타느냐, 큰 불로 한꺼번에 타느냐입니다.
이 결과가 말하는 것, 말하지 않는 것
말하는 것:
- 작은 불을 그냥 두면 큰 불이 드물지만, 작은 불을 다 끄면 큰 불이 훨씬 잦아져요. 1만 단계당 큰 불이 21.4번에서 145.5번으로 늘었어요.
- 그래도 매 단계 타는 면적은 0.63%에서 0.61%로 거의 같았어요. 작은 불이 숲을 조금씩 끊어 주던 몫이 사라져, 나무가 큰 덩어리로 이어졌다가 한 번에 타기 때문이에요.
- 그렇다면 큰 불은 무엇과 함께 봐야 할까요? 이 모델에선 작은 불을 많이 끌수록 큰 불이 늘었고(50%: 65.1번, 90%: 125.1번), 번개가 드물고 나무가 빨리 자라거나 숲이 작을수록 그 대가가 컸어요.
상세 설명
말하는 것: 격자 100×100, 나무 성장 p=1%, 번개 칸 1만 개당 단계마다 2번, 소방이 끄는 불의 상한 5%에서, 시드 4개를 평균해 4만 단계 중 앞 2,000단계를 뺀 값은 이렇습니다. 그냥 두면 큰 불(격자의 10% 이상)이 1만 단계당 21.4번, 이 불들이 태운 면적은 전체의 4%였습니다. 작은 불을 50% 끄면 65.1번(13%), 90% 끄면 125.1번(27%), 100% 끄면 145.5번(31%)으로 늘었습니다. 한편 매 단계 타는 면적은 0.63%에서 0.61%로 거의 같았고, 평균 나무 밀도는 37%에서 39%로 조금만 올랐습니다. 가장 큰 불은 격자의 20%에서 28%로 커졌습니다. 이 효과는 번개가 드물수록 큽니다. 번개 세기를 1로 낮추면 큰 불의 면적 비중이 28%에서 51%가 되고, 5로 올리면 0%에서 6%, 10이면 0%에서 1%가 됩니다. 나무가 빨리 자랄수록(p=2%) 28%에서 52%, 숲이 작을수록(60×60) 38%에서 60%로 커졌고, 큰 숲(160×160)에서는 0%에서 6%였습니다.
말하지 않는 것:
- 실제 숲이 아니고 바람·지형·방화·소방 자원이 빠져 있어요. 불을 꺼야 하는지 말아야 하는지 알려 주지 않고, 불을 끄는 게 나쁘다는 뜻도 아니에요.
- 사람과 마을을 지키려면 불을 꺼야 하고, 이 모델에서도 번개가 잦고 숲이 크면 효과가 작았어요. 특정 지역은 연료 쌓임, 번개 빈도, 숲 크기를 실제로 관찰해 따로 확인해야 해요.
상세 설명
말하지 않는 것: 이 모델은 실제 숲을 재현한 것이 아닙니다. 바람, 날씨, 지형, 나무 종류, 불씨가 날아가 번지는 것, 사람의 방화나 실화, 소방 자원의 한계, 계획적으로 놓는 불(처방 화입) 같은 요소가 모두 빠져 있고, 불은 이웃한 나무로만 곧바로 번집니다. 산불 생태학에서 오래 논의되어 온 "억제의 역설"(작은 불을 계속 끄면 연료가 쌓여 나중에 큰 불이 난다)의 메커니즘을 보여 줄 뿐, 어떤 지역에서 불을 꺼야 하는지 말아야 하는지를 알려 주지는 않습니다. 소방이 불을 끄는 것 자체가 나쁘다는 뜻도 아닙니다. 사람과 마을을 지키는 데는 불을 끄는 것이 필요하고, 이 모델에서도 번개가 잦고 숲이 크면 효과가 작았습니다. 끄는 불의 상한(5%)과 큰 불의 기준(10%)은 이 프로젝트가 정한 값입니다.
이론적 근거와 구현 메모
- 모델의 뿌리: Drossel & Schwabl (1992), "Self-organized critical forest-fire model", Physical Review Letters 69. 나무가 자라고 번개가 불을 내는 단순한 격자 모델로, 불의 크기가 규칙적으로 오르내리는 임계 현상을 연구하려고 제안되었습니다. 이 모델은 그 규칙을 따른 이 프로젝트의 구현입니다.
- 핵심 가정과 수식: 매 단계 빈 칸은 확률 p로 나무가 되고, 나무는 확률 f로 불이 붙으며(여기서는 칸마다 확률 f의 번개가 치고 나무에 맞으면 불이 붙으니 나무 한 그루에 불이 붙을 확률도 f), 불은 이웃으로 즉시 번집니다. 한 번개당 자라는 나무 수 p/f가 클수록 큰 불이 납니다. 칸에 무작위로 나무가 있을 때 이어진 덩어리가 모든 곳으로 퍼지는 임계 밀도는 정사각 격자(상하좌우 이웃)에서 약 0.593입니다(site percolation). 슬라이더 p, f, s, 크기가 각각 식의 p, f, 소방 확률, 격자 변의 길이입니다.
- 이 프로젝트의 단순화: 원 모델은 f/p가 0에 가까운 극한에서 불 크기 분포가 거듭제곱 법칙을 따르는 구간을 보이는데, 이 페이지의 기본값(p/f는 칸당 50)은 그 극한과 멀고 격자도 작아서 거듭제곱 법칙을 주장하지 않습니다. 소방(작은 불만 확률 s로 끄기)은 원 모델에 없는 이 프로젝트의 추가 규칙이고, 5%·10%는 이 프로젝트가 정한 값입니다. 가장자리는 이어지지 않는 벽입니다.
- 이론값과 시뮬레이션: 독립적으로 다시 짠 코드로 100×100 격자에 무작위로 나무를 심으면 가장 큰 덩어리가 차지하는 비율이 밀도 0.5에서 2%, 0.59에서 27%, 0.62에서 50%로, 임계 밀도 약 0.593 부근에서 급격히 커졌습니다(20회 평균). 장기 평균에서 타는 나무 수와 심어지는 나무 수도 맞았습니다(3만 단계에 188만 3,823그루 대 188만 3,740그루). 소방 때문에 연료가 쌓이는 정도는 위의 "말하는 것"의 실측값입니다. 이 효과를 식으로 풀어 비교하지는 않았고 시뮬레이션만으로 확인했습니다.
- 더 읽을거리: Drossel & Schwabl (1992), Physical Review Letters 69 (위 논문). 퍼콜레이션은 Stauffer & Aharony, Introduction to Percolation Theory (Taylor & Francis)에 정리되어 있습니다.
- 검증은
node tools/validate-wildfire.js로 할 수 있습니다(약 2분). 시뮬레이션은 시드 난수(mulberry32)를 쓰고 같은 시드면 같은 결과가 나옵니다. - 성장은 빈 칸 목록에서 무작위로 뽑아 심고(칸 수에 비례하는 푸아송 근사), 번개는 푸아송 수만큼 무작위 칸에 떨어뜨립니다. 불 덩어리는 깊이 우선 탐색으로 구해 한 번에 태웁니다. 페이지의 통계 카드는 화면의 두 숲과 별개로 따로 오래 돌린 값입니다.