이 페이지의 목차
현상을 모델로 표현하기
코드 예제: Python · 예상 50분
학습 목표
- 복잡한 현상의 원리를 변수와 규칙으로 이루어진 모델로 표현할 수 있다.
관련 성취기준
- [12소생04-03]
시뮬레이션 프로그램 구성 방법에 따라 복잡한 문제나 현상의 원리를 시뮬레이션 모델로 표현한다.
생각 열기 — 급식 줄을 어떻게 줄일까
종이 치자마자 120명이 한꺼번에 급식실로 달려간다. 배식대는 하나, 한 명 받는 데 20초쯤. 학생회가 두 가지 안을 냈다.
- 안 ①
배식대를 하나 더
배식대와 배식하는 사람이 하나 더 필요하다. 돈과 사람이 든다.
- 안 ②
학년별로 5분씩 나눠 오기
1학년은 바로, 2학년은 5분 뒤, 3학년은 10분 뒤. 돈은 들지 않는다.
추상화 — 남길 것과 덜어 낼 것
추상화(abstraction) — 문제를 푸는 데 필요한 핵심만 남기고 나머지 세부 사항은 덜어 내는 일는 물음에 필요한 핵심만 남기는 일이다. 물음은 「줄을 서서 기다리는 시간을 줄이려면?」이다.
카드를 누른 뒤, 넣을 통을 누른다. 통 안의 카드를 누르면 다시 나온다.
남긴다
덜어 낸다
- 학생 수 — 줄의 길이를 직접 정한다
- 배식대 수 — 안 ① 이 바꾸는 바로 그 값이다
- 한 명 배식에 걸리는 시간 — 줄이 줄어드는 빠르기를 정한다
- 학생들이 도착하는 때 — 안 ② 가 바꾸는 바로 그 값이다
- 오늘의 메뉴 이름 — 메뉴가 배식 시간을 바꾸지 않는다면 물음과 상관없다
- 학생의 키와 이름 — 기다리는 시간과 상관없다
- 급식실 벽의 색깔 — 줄 길이와 상관없다
- 새치기하는 학생 — 실제로는 있을 수 있지만, 첫 모델에서는 단순하게 두고 나중에 더할 수 있다
결정론 모델과 확률 모델
| 결정론 모델 | 확률 모델 | |
|---|---|---|
| 규칙 | 「한 명에 꼭 20초」처럼 정해진 값 | 「평균 20초, 사람마다 10~30초」처럼 우연이 섞인 값 |
| 같은 변수로 돌리면 | 언제나 같은 결과 | 돌릴 때마다 조금씩 다른 결과 |
| 좋은 점 | 단순해서 계산과 설명이 쉽다 | 현실의 들쭉날쭉함을 담는다 |
| 조심할 점 | 현실이 들쭉날쭉하면 어긋난다 | 여러 번 돌려 결과를 모아 봐야 한다 |
결정론 모델 — 파이썬으로
모두 한꺼번에 와서 줄을 서고, 한 명 배식에 꼭 20초가 걸린다고 해 보자. 그러면 배식대가 하나일 때 내 앞에 9명이 있으면 나는 9 × 20 = 180초를 기다린다.
배식대가 1곳일 때 120명의 평균 대기 시간은 대략 몇 분일까? (가장 앞 학생은 0초, 가장 뒤 학생은 119 × 20초를 기다린다)
힌트 — 0초부터 39분 40초까지 고르게 늘어난다면 평균은 그 가운데쯤이다
19.8분
결과 바로 보기
19.8분
# 급식 줄 모델 — 모두 한꺼번에 와서 줄을 선다, 한 명 배식에 20초
학생 = 120
배식초 = 20
for 배식대 in [1, 2, 3]:
대기합 = 0
for 차례 in range(학생):
기다림 = (차례 // 배식대) * 배식초 # 내 앞에서 같은 배식대를 쓴 사람 수 × 20초
대기합 += 기다림
print(f'배식대 {배식대}곳: 평균 {대기합 / 학생 / 60:.1f}분, 마지막 학생 {기다림 / 60:.1f}분')배식대 1곳: 평균 19.8분, 마지막 학생 39.7분 배식대 2곳: 평균 9.8분, 마지막 학생 19.7분 배식대 3곳: 평균 6.5분, 마지막 학생 13.0분
차례 // 배식대 는 몫이다. 배식대가 둘이면 0·1번 학생은 기다리지 않고, 2·3번 학생은 한 사람 몫(20초)을 기다린다. 이 모델로는 안 ① 의 효과는 알 수 있지만 안 ② 는 실험할 수 없다 — 모두 한꺼번에 온다고 정해 두었기 때문이다. 모델에 «도착하는 때»라는 변수가 필요하다.
확률 모델 — 시뮬레이터로
아래 시뮬레이터는 도착하는 때와 배식 시간에 우연을 넣은 확률 모델이다. ▶ 실험하기를 누를 때마다 실험 기록표에 한 줄씩 쌓이고, 바로 앞 실험의 줄 길이가 점선으로 남는다.
변수 · 입력
규칙 (10초가 한 걸음)
- 학생은 종이 친 뒤 2분 안에 아무 때나 도착한다. 나눠 오면 1학년은 0분, 2학년은 5분, 3학년은 10분부터.
- 배식대가 비면 줄 맨 앞 학생이 받는다.
- 한 명 배식에는 평균 시간의 0.5~1.5배가 걸린다(사람마다 다르다).
▶ 실험하기를 누르면 줄 길이의 변화가 그려진다.
| # | 학생 | 배식대 | 배식 시간 | 나눠 오기 | 평균 대기 | 가장 오래 | 다 받기까지 |
|---|
두 안을 견주는 실험
약 20분- 아무것도 바꾸지 말고 세 번 실험하자. 평균 대기가 매번 같은가? 결정론 모델의 19.8분과 견주면?
- 안 ① — 배식대를 2곳으로 바꿔 세 번 실험하자.
- 안 ② — 배식대를 1곳으로 돌려놓고 「학년별로 5분씩 나눠서 온다」를 켜서 세 번 실험하자.
- 두 안을 함께 쓰면? 학생 수가 240명으로 늘면?
현상 → 모델 옮기기
- 세 경우를 숫자로 견주었다
- 고른 안과 까닭을 적었다
- 내 현상을 모델로 옮겼다
글자 규칙으로 살펴보는 점검표다. 다 켜졌다고 좋은 답이 되는 것은 아니다 — 마지막 판단은 내가 한다.
적은 내용은 이 브라우저에만 저장된다. 다른 컴퓨터로 옮기거나 제출하려면 내려받는다.
확인 문제
개념 확인 문제
보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.
급식 줄 모델을 만들 때 덜어 내도 되는 것으로 가장 알맞은 것은?12소생04-03
같은 변수로 몇 번을 돌려도 언제나 같은 결과가 나오는 모델은?12소생04-03
「모두 한꺼번에 온다」고 정한 결정론 모델로 실험할 수 없는 안은?12소생04-03
파이썬 코드 기다림 = (차례 // 배식대) * 배식초 에서 배식대가 2, 배식초가 20일 때 차례가 5인 학생의 기다림은?12소생04-03
교과서에서 찾기
이 차시에 대응하는 교과서 위치가 아직 정리되지 않았다. [확인필요]