무슨 실험인가요?
버스가 10분 간격으로 출발합니다. 맨 앞 버스가 첫 구간에서 신호에 1분만 걸려 늦어지면, 그 정류장에는 평소보다 사람이 1분어치 더 쌓입니다. 앞차는 그 사람들을 다 태우느라 정류장에 더 오래 서고, 그 사이 뒤차는 사람이 적은 정류장을 빨리 지나 따라붙습니다. 어긋남이 정류장마다 조금씩 커져서 끝내는 두 대가 바짝 붙어 오고, 그 뒤에는 20분 가까이 버스가 안 오게 됩니다. 이것이 「버스 몰림」입니다. 누가 잘못한 것이 아니라, 승객이 일정하게 온다는 단순한 조건만으로 생기는 현상입니다.
조건을 바꾸면
- 앞차 첫 지연과 길 흔들림이 몰림의 방아쇠입니다. 둘 다 0이면 아무것도 어긋나지 않아서 몰리지 않습니다.
- 승객 도착 속도와 승하차 시간이 클수록 앞차가 정류장에 오래 서서 어긋남이 빨리 커집니다. 둘을 곱한 값이 60 이상이면 태우는 속도가 사람이 오는 속도를 못 따라가 버스가 끝없이 늦어집니다.
- 잠깐 세움은 앞차와 간격이 배차 간격의 일정 비율(기본 80%)보다 가까운 버스를 4번·7번 정류장에서 그만큼 세우는 대책입니다. 영상에서는 앞차와 뒤차 사이가 0분에서 5.4분으로, 뒤차와 초록 버스 사이가 약 20분에서 약 10분으로 바뀝니다. 이 페이지도 같은 숫자가 나옵니다.
- 버스를 직접 눌러 1분 늦춰 보세요. 지금 가고 있는 버스의 다음 구간에 1분이 더해집니다. 같은 버스를 여러 번 누르면 그만큼 늦어지고, 「늦춘 곳 지우기」로 되돌립니다. 늦춘 곳은 재현 링크에 함께 담깁니다.
- 새 시드는 길 흔들림의 무작위 값만 바꿉니다. 길 흔들림이 0이면 계산에 난수가 없어서 결과가 같습니다.
계산 규칙과 한계
영상 계산(sim.py)과 같은 규칙입니다. 정류장 10곳, 구간마다 2분, 모든 버스의 달리는 시간이 같고, 승객은 정류장마다 일정한 속도로 옵니다. 추월은 안 하고, 앞차가 아직 정류장에 있으면 앞차가 그 사람들을 다 태웁니다. 기본값에서는 영상 계산 결과(sim.json)와 도착·출발 시각이 0.001분 안쪽으로 같습니다. 영상의 「세우는 기준 8분」은 배차 간격의 80%로 일반화했고, 길 흔들림(구간마다 0~N초를 시드 난수로 더하기)은 영상에 없던 요소입니다.
평균 기다림은 정류장마다 연속한 두 버스 사이에 온 사람이 간격의 절반만큼 기다린다고 보고 합친 값이고, 몰린 쌍은 10번 정류장에서 간격이 배차 간격의 20% 미만인 버스 쌍입니다. 둘 다 영상에 없던 지표라 영상 숫자와 비교할 값은 없습니다.
한계: 노선은 한 번 지나가는 10개 정류장이고(순환 노선이 아님), 신호 대기·막힘은 구간 가운데서 멈추는 것으로 그립니다. 줄 선 사람 그림은 정류장당 70명(비교 화면은 40명)까지만 그리고 숫자는 실제 값을 씁니다. 버스 안 사람 그림은 근사라서 숫자로 쓰지 않습니다. 현실의 버스는 운전사, 신호, 승객 행동이 훨씬 복잡합니다. 이 모형은 「단순한 규칙만으로도 몰림이 생긴다」는 한 가지 성질을 보여 줍니다.
휴대폰에서는 가로로 긴 무대를 억지로 줄이는 대신 무대 비율을 바꾸고, 무대 위 글자(칩·자막)는 무대 아래로 옮겼습니다. 비교 화면은 두 칸이 위아래로 쌓이고, 무거워서 한 번에 한 칸씩 번갈아 그립니다.