- 규칙을 의사코드로 표현하고 모델로 구현하는 과정을 안다.
- 변수를 바꿔 가며 반복 실험해 창발·임계 현상을 발견할 수 있다.
- 시뮬레이션의 검증·보정·한계를 점검하는 태도를 기른다.
생각 열기 — 모델을 진짜 '돌려' 보다
앞 차시까지 우리는 현상을 '모델'로 바꾸는 법을 배웠어요. 이제 그 모델을 실제로 컴퓨터가 돌릴 수 있는 '규칙(코드)'으로 옮겨 직접 실행해 볼 차례예요. 산불은 직접 내볼 수 없지만, 격자 한 칸 한 칸에 단순한 규칙만 주면 컴퓨터 속 숲은 얼마든지 태워 보고 되살릴 수 있어요. 돌려 보고, 관찰하고, 고치는 반복 — 그것이 시뮬레이션의 진짜 묘미예요.
숲에 나무가 빽빽할 때와 듬성듬성할 때, 작은 불씨 하나의 결과는 어떻게 다를까요? 나무를 조금씩 늘리면 결과가 '서서히' 바뀔까요, 아니면 '갑자기' 바뀔까요?
모델을 '규칙'으로 적는다 — 셀룰러 오토마타
복잡한 산불도, 알고 보면 '한 칸이 옆 칸에게 미치는 단순한 규칙'의 반복으로 흉내 낼 수 있어요. 숲을 바둑판 같은 격자로 나누고, 각 칸의 상태를 빈땅·나무·불·탄자리 넷 중 하나로 둡니다. 그리고 '불붙은 칸의 이웃 나무는 확률 p로 다음 스텝에 불이 옮는다' 같은 규칙을 모든 칸에 동시에 적용해요. 이렇게 칸(cell)들이 규칙(rule)에 따라 매 스텝 상태를 바꾸는 모델을 셀룰러 오토마타라고 불러요. 핵심은 전체를 한꺼번에 설계하지 않고, '한 칸의 규칙'만 잘 정하면 전체 그림이 저절로 떠오른다는 점이에요.
강원 지역 대형 산불처럼 '바람을 타고 한 방향으로 길게 번지는' 모습도, 바람 방향 이웃의 확률만 높여 주면 흉내 낼 수 있어요.
규칙을 의사코드로 — 사람의 말과 코드 사이
규칙을 곧장 코드로 적기 전에, '사람이 읽는 말'과 '컴퓨터가 읽는 코드'의 중간 언어인 의사코드(pseudocode)로 먼저 정리하면 실수가 줄어요. 시뮬레이션에서 특히 중요한 건 '모든 칸을 동시에 갱신한다'는 점이에요. 그래서 현재 격자를 보고 결과를 새 격자(next)에 쓴 다음, 한꺼번에 바꿔치기해요. 안 그러면 같은 스텝 안에서 막 붙은 불이 연쇄로 번져 결과가 어긋나요.
각 칸 (r, c)에 대해:
만약 불이면 → 다음엔 탄자리
아니고 나무이면:
만약 이웃에 불이 있으면 → 확률 p로 불 (없으면 그대로 나무)
(바람 방향 이웃의 불은 p를 더 높게 적용)
그 외(빈땅·탄자리) → 그대로
모든 칸을 다 계산한 뒤 → 격자 ← 새 격자(next)
직접 돌리기 — 산불 확산 시뮬레이터
슬라이더로 나무 밀도·발화 확률·바람을 정하고, 숲을 클릭하거나 [🔥 가운데 발화]로 불을 내 보세요! 변수를 하나씩 바꿔 가며 여러 번 돌려, 결과가 확 바뀌는 지점을 찾아보세요.
돌려 보고 고친다 — 실험·관찰·수정의 반복
모델은 한 번에 완성되지 않아요. 돌려 보고(실행), 무슨 일이 일어나는지 살피고(관찰), 규칙이나 변수를 바꿔 다시 돌려 보는(수정) 반복으로 점점 그럴듯해져요. 중요한 건 한 번에 변수 하나씩만 바꾸는 것이에요. 여러 개를 동시에 바꾸면 무엇 때문에 결과가 달라졌는지 알 수 없으니까요.
발화 확률·바람은 그대로 두고 나무 밀도를 50% → 60% → 70%로 올리며 같은 자리에서 불을 붙여 보세요. 어느 지점부터 '드문드문 타다 꺼지던' 불이 갑자기 '숲 끝까지 번지는' 것으로 확 바뀌는 순간을 만나게 돼요!
창발과 임계 현상 — 단순한 규칙이 만든 큰 패턴
각 칸의 규칙은 '옆 칸에 확률로 옮긴다'가 전부예요. 그런데 이 단순한 규칙을 수천 칸에 반복하면, 아무도 직접 그리지 않은 큰 패턴 — 불의 전선(front), 바람을 탄 길쭉한 화염 — 이 '저절로' 나타나요. 부분의 규칙엔 없던 성질이 전체에서 솟아나는 이것을 창발(emergence)이라고 해요. 특히 인상적인 건 임계 현상이에요. 나무 밀도를 아주 조금만 높였는데 어느 문턱(임계점)을 넘는 순간 결과가 '거의 안 탐'에서 '전소'로 급변하죠. 댐이 한 방울 차이로 넘치듯, 연결이 임계 밀도를 넘으면 불길이 격자 전체를 가로지르는 길을 찾아내요.
밀도를 천천히 올리며 '탄 면적'을 기록하면, 처음엔 완만하게 늘다가 특정 밀도에서 그래프가 절벽처럼 치솟아요. 감염병 확산, 소문의 전파, 정전의 연쇄도 모두 이 임계 원리로 설명돼요.
모델을 믿으려면 — 검증·보정·한계
시뮬레이션이 그럴듯한 그림을 그린다고 해서 그게 곧 '진실'은 아니에요. 모델을 믿으려면 세 가지를 거쳐야 해요. 검증 — 아주 단순한 경우(나무가 거의 없으면 불이 안 번져야 함)에서 상식과 맞는지 확인. 보정 — 실제 산불 기록의 번짐 속도·방향과 비슷해지도록 확률·바람 계수를 맞춰 줌. 한계 인식 — 우리 모델엔 지형 경사·습도·나무 종류·소방 활동이 빠져 있다는 걸 솔직히 적어 두는 것. 이 셋을 거쳐야 비로소 '교육용 모델'이 '쓸모 있는 모델'에 가까워져요.
생각 활동 — 시뮬레이션 결과를 믿을 수 있으려면?
정답이 하나로 딱 떨어지지 않아요. 직접 생각한 뒤 예시 답과 비교해 보세요.
① 검증 — 단순한 경우에 상식과 맞는가?
나무 밀도를 0%로 두고 불을 붙이면 어떻게 돼야 '올바른' 모델일까요?
② 보정 — 현실에 가깝게 맞췄는가?
우리 모델의 불은 '한 스텝에 한 칸씩' 번져요. 실제 강원 산불이 바람을 타고 훨씬 빠르게 번진 기록과 비슷해지려면 어떤 변수를 어떻게 조정해야 할까요?
③ 한계 — 무엇이 빠져 있는가?
이 모델이 '절대 맞힐 수 없는' 산불의 요소를 세 가지만 적어 봅시다.
'검증·보정·한계' 중 우리가 가장 소홀히 하기 쉬운 것은 무엇이고, 왜 그럴까요? (힌트: 보기 좋은 결과가 나오면 한계를 잊고 그대로 믿어 버리기 쉬워요 — '그럴듯함'과 '맞음'은 다릅니다.)
확인 문제
바로바로 채점!
4차시 확인 문제
3문항 · 즉시 채점
1셀룰러 오토마타에서 한 스텝 안에 '모든 칸을 동시에 갱신'하려면 보통 어떻게 구현하나?
2나무 밀도를 55%→65%로 조금 올렸을 뿐인데 불이 '거의 안 탐'에서 '전소'로 급변했다. 이 현상은?
3이 산불 시뮬레이터의 결과를 해석하는 가장 올바른 태도는?
핵심 용어
더 알아보기
교과서 너머의 이야기 — 클릭해서 펼쳐 보세요
명작콘웨이의 '생명게임' — 규칙 몇 줄이 만든 우주
산불 모델과 똑같은 셀룰러 오토마타의 가장 유명한 예가 1970년 수학자 콘웨이가 만든 '생명게임(Game of Life)'이에요. 규칙은 단 몇 줄 — 살아 있는 칸은 이웃이 2~3개면 살고, 그 외엔 죽으며, 죽은 칸은 이웃이 정확히 3개면 살아난다. 이게 전부인데도 격자 위에선 스스로 움직이는 '글라이더', 끝없이 총알을 쏘는 '글라이더 건', 심지어 다른 패턴을 복제하는 구조까지 창발해요. 놀랍게도 생명게임은 '튜링 완전'해서 이론상 어떤 계산이든 해낼 수 있다는 게 증명돼 있어요. 단순한 국소 규칙에서 무한한 복잡성이 솟아나는 창발 — 그것이 산불·교통·도시·생태계를 시뮬레이션하는 힘의 원천이에요. 인터넷에서 'Game of Life'를 검색해 직접 돌려 보면, 오늘 만든 산불 모델과 한 형제라는 걸 느낄 수 있을 거예요.
실전방화선은 왜 효과가 있을까 — 모델로 이해하기
실제 산불 진화에서 가장 중요한 작전 중 하나가 '방화선(fire break)'이에요. 불이 번지는 길목의 나무를 미리 베어 내 '빈땅의 띠'를 만드는 거죠. 우리 시뮬레이터로 이걸 직접 확인할 수 있어요. 나무 밀도를 높여 전소가 잘 일어나게 한 뒤, 마음속으로 격자 가운데에 세로로 빈땅 띠가 있다고 상상해 보세요. 불은 빈땅을 건너뛰지 못하니, 띠 한쪽에서 시작된 불은 반대쪽으로 넘어가지 못해요. 이것이 바로 '임계 현상'을 거꾸로 이용하는 거예요 — 나무의 '연결'을 끊어 불길이 가로지르는 길을 막는 거죠. 단순한 격자 모델 하나로 '왜 방화선을 만드는가'라는 실제 방재 원리까지 이해할 수 있다니, 모델의 힘이 느껴지나요? 같은 원리로 감염병에선 '거리두기', 정전에선 '구역 분리'가 연쇄를 막는답니다.
생각'그럴듯함'과 '맞음'은 다르다 — 모델을 의심하는 힘
화면에서 불이 멋지게 번지는 걸 보면 '오, 진짜 산불 같다!'는 생각이 들죠. 하지만 보기에 그럴듯한 것과 실제로 맞는 것은 전혀 다른 문제예요. 영화 CG 속 폭발은 그럴듯하지만 물리적으로 정확하진 않을 수 있고, 정교해 보이는 경제 예측 모델이 번번이 빗나가기도 해요. 그래서 시뮬레이션을 쓰는 사람에게 가장 중요한 능력은 '내 모델을 의심하는 힘'이에요. "이 결과가 그럴듯해 보이는데, 정말 맞을까?", "내가 빠뜨린 가정은 없나?", "단순한 경우에 상식과 맞나?"를 끊임없이 묻는 거죠. 좋은 모델러는 자기 모델을 사랑하면서도 끊임없이 의심하는 사람이에요. 여러분이 만든 산불 모델도 멋지지만, 그 한계를 또렷이 말할 수 있을 때 비로소 '시뮬레이션을 제대로 다룰 줄 안다'고 할 수 있답니다.