3강 / 20강
시간을 흘려보낸다 — '동시에' 갱신한다는 것
궤적, 그리고 순서가 만드는 함정
규칙이 있으면 시간을 흘려보낼 수 있습니다. 방법은 이렇습니다.
- 지금 상태를 읽는다
- 모든 유전자의 다음 값을 각자 계산한다
- 계산이 다 끝난 뒤에 한꺼번에 갈아 끼운다
3번이 핵심입니다. 계산 도중에 값을 바꿔 버리면, 나중에 계산되는 유전자가 이미 바뀐 값을 읽게 됩니다. 그러면 유전자 이름을 적은 순서에 따라 결과가 달라져요. 생물학에는 그런 순서가 없으므로, 그건 모형의 버그입니다.
이 방식을 동기 갱신(synchronous update)이라고 부릅니다. 가장 흔하고 가장 계산하기 쉬운 방식이에요. 대신 대가가 있는데, 10강에서 그 대가를 봅니다.
왼쪽은 한 시점에 한 걸음, 오른쪽은 한 시점에 두 걸음을 가 버렸습니다.
Python
브라우저에서 실행
trace 는 매 시점을 표로 찍어 줍니다. 더 이상 변하지 않으면 거기서 멈춥니다.
Python
브라우저에서 실행
이 성질 덕분에 우리는 아무 상태에서나 출발해도 됩니다. 다음 강의 열쇠입니다.
Python
브라우저에서 실행
🎮 시계 실험대
초기 상태를 고르고 ▶ 를 눌러 시간을 한 칸씩 흘려보내세요.
🤔 확인 문제
동기 갱신에서 새 값을 계산할 때 반드시 지켜야 할 것은?
해설 계산 도중에 값을 갈아 끼우면 코드에 적은 순서가 결과를 바꿉니다. 생물학에는 그런 순서가 없으니 그건 모형이 아니라 버그입니다.
🤔 확인 문제
동기 갱신 모형에서 '같은 초기 상태에서 두 번 돌리면' 어떻게 되나?
해설 결정론적(deterministic)입니다. 무작위가 하나도 없어요. 덕분에 전수 조사가 가능해집니다.
🤔 확인 문제
Cancer_Growth 를 1 로 켜 두고 출발했는데 곧 0 이 된 이유는?
해설 초기값은 t=0 한 번만 쓰입니다. t=1 부터는 규칙이 값을 덮어씁니다. 규칙이 지지하지 않는 상태는 유지되지 않아요.