네 부분
시뮬레이션 프로그램은 겉모습이 제각각이지만 속은 같은 네 부분으로 나누어 볼 수 있습니다. 이것을 알아 두면 처음 보는 프로그램도 어디를 만지면 되는지 금방 찾습니다.
| 부분 | 하는 일 | 화면에서는 |
|---|---|---|
| 입력 | 실행하기 전에 내가 정하는 조건이다. 몇 명인지, 얼마나 빠른지, 얼마나 자주 일어나는지. | 손잡이(슬라이더), 칸에 적는 숫자, 켜고 끄는 단추 |
| 규칙 | 한 걸음마다 무엇이 어떻게 되는지 적어 둔 것. 모형의 알맹이다. | 대개 보이지 않는다. 코드를 열어야 보인다 |
| 시간 | 규칙을 한 번 적용하는 단위다. 한 걸음이 1초일 수도, 하루일 수도, 한 해일 수도 있다. | 「몇 걸음째」를 세는 숫자, 시작 · 멈춤 단추 |
| 출력 | 지금 어떤 상태인지 보여 준다. 움직이는 그림과, 시간에 따라 쌓이는 그래프 둘을 함께 쓰는 경우가 많다. | 가운데 큰 화면과 옆의 그래프 |
「한 걸음」이 무엇인지가 먼저 정해진다
시뮬레이션은 시간을 잘게 끊어 다룹니다. 한 걸음마다 규칙을 한 번씩 적용하고, 그 결과를 다음 걸음의 시작으로 삼습니다. 이 「한 걸음」의 크기를 무엇으로 잡느냐가 모형의 성격을 정합니다.
급식 줄이라면 한 걸음이 몇 초여야 하고, 숲이 자라는 모형이라면 한 해여도 됩니다. 너무 크게 잡으면 그 사이에 일어난 일이 통째로 빠지고, 너무 잘게 잡으면 실행이 지나치게 오래 걸립니다.
네 부분 가운데 화면에 보이지 않는 것은 무엇인가요? 보이지 않는데도 가장 중요한 까닭은요?
입력
입력은 내가 바꿔 볼 수 있게 열어 둔 조건입니다. 여기서 헷갈리기 쉬운 점이 하나 있습니다 — 모형 안의 값이 모두 입력은 아닙니다.
| 어떤 값 | 어떻게 다루나 | 보기 — 급식 줄 모형 |
|---|---|---|
| 열어 둔 값 | 알아보려는 물음에 걸려 있어 실험하며 바꿔 볼 값. 이것이 입력이다. | 물음이 「배식대를 늘리면 줄이 짧아질까」일 때의 배식대 개수 |
| 고정한 값 | 모형이 전제로 깔고 가는 가정. 이번 실험에서는 건드리지 않는다. | 전체 학생 수, 점심시간의 길이 |
| 계산되는 값 | 실행하는 동안 규칙이 만들어 내는 값. 정할 수 없다. | 지금 줄에 선 사람 수, 마지막 사람이 받은 시각 |
무엇을 열어 둘지 정하는 것이 설계다
모두 열어 두면 좋을 것 같지만 그렇지 않습니다. 손잡이가 스무 개면 무엇을 만져야 할지 알 수 없습니다. 게다가 여러 개를 한꺼번에 바꾸면 무엇 때문에 결과가 달라졌는지 알아낼 수가 없습니다.
그래서 「알아보려는 물음에 걸리는 것만」 열어 둡니다. 「배식대를 늘리면 줄이 짧아질까」가 물음이라면 배식대 개수는 반드시 열고, 나머지는 고정하는 편이 낫습니다.
하나씩만 바꾼다
실행해 볼 때 지킬 규칙이 하나 있습니다. 한 번에 하나만 바꾸는 것입니다. 배식대도 늘리고 배식 시간도 줄인 뒤 결과가 좋아졌다면, 둘 중 무엇이 효과가 있었는지 알 수 없습니다.
| 실행 번호 | 배식대 | 한 사람 배식 시간 | 가장 긴 줄 |
|---|---|---|---|
| 1(기준) | 4개 | 8초 | — |
| 2 | 5개 | 8초 | 배식대만 늘린 효과를 본다 |
| 3 | 4개 | 6초 | 시간만 줄인 효과를 본다 |
| 4 | 5개 | 6초 | 둘을 함께 했을 때를 본다 |
이렇게 표를 먼저 그려 놓고 실행하면 헤매지 않습니다. 둘을 함께 바꾼 실행 번호 4가 중요합니다 — 둘을 각각 조금씩 좋게 하는 것보다 함께 했을 때 훨씬 좋아지는 경우가 있고, 반대로 하나만 해도 충분한 경우가 있습니다.
손잡이가 세 개인 모형에서 하나씩 바꿔 보려면 몇 번을 실행해야 할까요? 셋을 한꺼번에 바꾸는 경우까지 넣으면요?
규칙
네 부분 가운데 가장 중요하고 가장 안 보이는 것이 규칙입니다. 규칙을 적는 방법에는 크게 두 가지가 있습니다.
전체를 한 식으로 적기
「모두 받는 데 걸리는 시간 = 사람 수 × 배식 시간 ÷ 배식대 개수」처럼 결과를 한 번에 계산합니다.
빠르고 간단합니다. 대신 「누가 언제 몰리는지」는 알 수 없습니다. 평균만 나옵니다.
하나하나의 행동을 적기
「학생 한 명은 수업이 끝나면 급식실로 간다. 줄이 있으면 뒤에 선다」처럼 낱낱의 행동만 적습니다.
전체가 어떻게 될지는 아무도 정하지 않습니다. 실행해 봐야 압니다.
이 단원에서 다루는 것은 하나하나의 행동을 적는 쪽입니다. 사람 · 자동차 · 나무처럼 스스로 움직이는 것 하나하나를 만들고, 각자에게 아주 짧은 규칙을 줍니다. 도로의 자동차라면 규칙은 셋이면 됩니다. 앞이 비면 나아간다, 앞이 막히면 선다, 가끔 잠깐 늦는다. 이런 방식을 쓰면 놀라운 일이 생깁니다.
아무도 정하지 않은 것이 나타난다
세 규칙은 자동차 한 대가 무엇을 하는지만 말할 뿐, 「도로가 막힌다」는 말은 없습니다. 그런데 도로에 자동차를 충분히 많이 놓고 실행하면 막히는 덩어리가 저절로 생기고, 그 덩어리가 자동차가 가는 방향과 반대로 뒤로 밀려납니다.
이런 것을 낱낱의 규칙에서 저절로 생겨난 전체 모습이라고 합니다. 시뮬레이션이 힘을 갖는 것은 이 때문입니다. 미리 알 수 없으니 실행해 봐야 하고, 실행해 보면 생각지 못한 것이 나옵니다.
그래서 규칙을 적을 때는 「전체가 어떻게 되면 좋겠다」를 적지 않습니다. 적는 순간 그것은 모형이 아니라 내가 원하는 그림이 됩니다. 적을 것은 오직 낱낱이 무엇을 보고 무엇을 하는가입니다.
규칙에 우연을 넣는다
규칙 「가끔 잠깐 늦는다」가 눈에 띕니다. 현실의 사람은 늘 똑같이 움직이지 않습니다. 딴생각을 하고, 신발끈을 묶고, 잠깐 멈춥니다. 이런 흔들림을 넣지 않으면 모형이 지나치게 매끄러워집니다.
우연을 넣으면 결과가 매번 달라진다
같은 조건으로 실행해도 결과가 조금씩 다르게 나옵니다. 이것은 고장이 아니라 당연한 일입니다. 그러면 어느 결과를 믿어야 할까요?
답은 여러 번 실행해 보는 것입니다. 열 번 실행해 대체로 어디쯤에 모이는지를 봅니다. 평균만 보지 말고 퍼진 모양도 함께 봐야 합니다.
한 번 실행한 결과로 결론을 내리는 것이 흔히 저지르는 실수입니다.
규칙에서 「가끔 잠깐 늦는다」를 빼면 막힘이 어떻게 달라질까요? 예상해 보고, 왜 그렇게 되는지를 규칙과 이어서 말해 봅시다.
출력과 해석
시뮬레이션의 출력은 두 가지가 짝을 이룹니다. 하나만 있으면 반쪽입니다.
움직이는 화면
지금 이 순간을 보여 줍니다. 어디에 몰려 있는지, 어떻게 번져 가는지가 한눈에 보입니다.
대신 지나가면 사라집니다. 아까와 맞대어 볼 수가 없습니다.
쌓이는 그래프
시간이 지나며 어떻게 달라졌는지를 남깁니다. 늘고 있는지 줄고 있는지, 어느 지점에서 꺾였는지가 보입니다.
대신 어디서 무슨 일이 있었는지는 알려 주지 않습니다.
둘을 함께 보는 이유가 여기 있습니다. 그래프에서 「이때 갑자기 꺾였네」를 찾고, 그 시점의 화면을 다시 보아 「아, 여기서 두 줄이 부딪혔구나」를 알아내는 식입니다.
무엇을 그래프로 뽑을지도 설계다
화면 속에는 값이 아주 많습니다. 그중 무엇을 그래프로 뽑을지는 만드는 사람이 정합니다. 「줄에 선 사람 수」를 뽑을 수도, 「기다린 시간의 평균」을 뽑을 수도, 「가장 오래 기다린 사람」을 뽑을 수도 있습니다.
셋은 서로 다른 이야기를 합니다. 평균은 좋아졌는데 가장 오래 기다린 사람은 더 나빠질 수도 있습니다. 그래서 알아보려는 물음에 맞는 값을 뽑아야 합니다.
해석할 때 지킬 것 셋
| 무엇을 | 왜 |
|---|---|
| 여러 번 실행한다 | 우연이 들어 있으므로 한 번의 결과는 그날 하루일 뿐이다. |
| 「이 모형에서는」을 붙인다 | 결과는 모형이 말한 것이지 현실이 말한 것이 아니다. |
| 덜어 낸 것을 함께 적는다 | 읽는 사람이 어디까지 믿어야 할지 알 수 있게 한다. |
세 가지를 한 문장으로 줄이면 「모형이 말할 수 있는 데까지만 말한다」입니다.
「기다린 시간의 평균」과 「가장 오래 기다린 사람」 가운데, 급식 줄 문제에서는 어느 쪽을 그래프로 뽑는 것이 나을까요? 그 까닭은요?
핵심 정리
네 부분
- 시뮬레이션은 입력 · 규칙 · 시간 · 출력 네 부분으로 나누어 볼 수 있다.
- 규칙은 화면에 보이지 않는다. 그런데 가장 중요하다.
- 「한 걸음」의 크기를 무엇으로 잡느냐가 모형의 성격을 정한다.
입력
- 모형 안의 값은 열어 둔 값 · 고정한 값 · 계산되는 값으로 나뉜다. 열어 둔 값은 실험하며 바꿔 볼 값, 고정한 값은 모형이 깔고 가는 가정이다.
- 무엇을 열어 둘지 정하는 것이 설계다. 다 열면 오히려 알 수 없어진다.
- 실행할 때는 한 번에 하나만 바꾼다.
규칙
- 전체를 한 식으로 적는 방법과 낱낱의 행동을 적는 방법이 있다.
- 낱낱의 규칙에서 아무도 정하지 않은 전체 모습이 나타난다.
- 우연을 넣으면 매번 결과가 달라진다. 여러 번 실행해야 한다.
출력과 해석
- 움직이는 화면은 지금을, 그래프는 흐름을 보여 준다. 둘을 함께 본다.
- 무엇을 그래프로 뽑을지도 설계다. 평균과 최댓값은 다른 이야기를 한다.
- 결과에는 「이 모형에서는」을 붙이고 덜어 낸 것을 함께 적는다.
확인 퀴즈
배운 내용을 확인해 봅시다.
급식 줄 모형에서 「지금 줄에 선 사람 수」는 어디에 드나요?
실행해 볼 때 한 번에 하나만 바꾸는 까닭은?
「앞이 비면 나아간다 · 앞이 막히면 선다 · 가끔 잠깐 늦는다」 세 규칙만 주었는데 막히는 덩어리가 생겼습니다. 이것을 어떻게 보아야 하나요?
규칙에 우연을 넣었을 때 반드시 해야 하는 일은?