SIMULATION 한 장 · 버스 몰림
20분 기다렸더니 버스 두 대가 붙어서 온다. 왜 그럴까?
기본 조건(버스 6대, 계획 배차 간격 약 6.6분)에서 버스는 고르게 출발했지만, 07:30 이후 90분 중 평균 73.1분 동안 두 대 이상이 붙어 다녔습니다. 간격 편차는 평균 74.5%, 승객 평균 대기는 4.8분으로 배차 간격의 절반(약 3.3분)보다 길었고, 운 나쁜 5%는 12.4분 넘게 기다렸습니다.
앞차와 너무 가까워진 버스를 정류장에서 잠깐 세워 두는 간격 맞추기를 하면 붙어 다닌 시간이 0분, 평균 대기가 3.6분, 운 나쁜 5%의 대기가 9.3분으로 줄었습니다. 버스를 세우는데도 기다리는 사람은 오히려 덜 기다립니다.
승차 시간을 줄이는 빠른 승차도 평균 대기를 3.7분으로 줄였지만, 붙어 다닌 시간은 45.6분 남았습니다. 버스를 8대로 늘리면 평균 대기는 3.5분으로 줄지만 붙어 다니는 현상은 그대로입니다(76.5분). 버스를 더 넣는 것만으로는 몰림이 사라지지 않습니다.
무엇을 시뮬레이션하나요?
정류장에서 한참 기다렸는데 같은 번호 버스가 두 대 연달아 오는 경험은 흔합니다. 이 현상을 버스 몰림(bus bunching)이라고 부릅니다. 운전기사가 일부러 붙어 다니는 것이 아니라, 버스 노선 자체가 원래 불안정하기 때문에 생깁니다.
이 시뮬레이터는 정류장 12곳을 도는 순환 노선 하나에 아침 07:00~09:00 동안 버스를 고르게 출발시킵니다. 신호나 정체로 한 버스가 조금만 늦어도, 그 버스 앞 정류장에는 사람이 더 쌓이고, 더 많이 태우느라 더 늦어집니다. 반대로 뒤따르는 버스는 태울 사람이 적어 점점 빨라지다가 결국 앞차에 붙습니다. 왼쪽 패널에서 버스 대수, 승객 수, 승차 시간, 몰림 대책을 바꿔 이 과정을 직접 확인해 보세요.
시나리오별 결과
| 시나리오 | 평균 대기 시간 | 운 나쁜 5%의 대기 시간 | 가장 오래 기다린 사람 | 버스 간격 편차(평균) | 버스가 붙어 다닌 시간 |
|---|---|---|---|---|---|
| 기본 (6대·대책 없음) | 4.8분 | 12.4분 | 17.5분 | 74.5% | 73.1분 |
| 정류장에서 간격 맞추기 | 3.6분 | 9.3분 | 13.4분 | 37.4% | 0분 |
| 빠른 승차 | 3.7분 | 8.6분 | 12.2분 | 48.4% | 45.6분 |
| 버스 8대 | 3.5분 | 9분 | 13.1분 | 74.6% | 76.5분 |
| 승객 1.4배 | 5.2분 | 13.6분 | 18.9분 | 79.9% | 72.4분 |
각 시나리오를 손님 흐름(난수 시드)만 바꿔 30번씩 돌린 평균입니다. 시나리오 이름을 누르면 같은 조건으로 위 시뮬레이터가 열립니다.
기본 (6대·대책 없음) · 정류장에서 간격 맞추기 · 빠른 승차 · 버스 8대 · 승객 1.4배
어떻게 계산하나요?
1초 단위로 시간을 진행하는 이산 시간 시뮬레이션입니다.
- 노선: 정류장 12곳이 원형으로 이어진 순환 노선입니다. 정류장 사이 기본 주행 시간은 약 2분 50초이고, 신호·정체 때문에 구간마다 ±18% 흔들리며 가끔(8%) 35% 더 걸립니다.
- 승객: 정류장마다 사람이 무작위(포아송 과정)로 도착합니다. 08:00 무렵이 가장 붐비고, 정류장마다 수요가 조금씩 다릅니다.
- 정차: 문 여닫는 데 8초, 탈 사람 수 × 1인 승차 시간만큼 서 있습니다. 내리는 사람은 뒷문으로 동시에 내립니다. 정원은 80명입니다.
- 간격 맞추기(holding): 승차가 끝났을 때 앞차와의 간격이 계획 배차 간격의 75%보다 짧으면, 최대 2분까지 정류장에서 기다렸다 출발합니다. 실시간 간격 정보로 정차 시간을 정하는 방식(Daganzo, 2009)을 단순화한 규칙입니다.
- 빠른 승차: 교통카드 전용 문, 뒷문 승차처럼 1인 승차 시간을 55% 줄이는 대책으로 가정했습니다.
"간격 편차"는 버스 사이 간격의 표준편차를 평균 간격으로 나눈 값(변동계수)이고, "버스가 붙어 다닌 시간"은 07:30 이후 두 버스 사이 간격이 평균 간격의 25%보다 짧았던 누적 시간입니다.
이 시뮬레이션의 가정
- 07:00~09:00, 2시간을 시뮬레이션합니다. 화면 1초가 1분 30초입니다.
- 버스는 서로 추월할 수 있고, 정류장에서 먼저 온 버스가 기다리는 사람을 모두 태웁니다.
- 승객은 시간표를 보지 않고 정류장에 무작위로 도착합니다(배차 간격이 짧은 노선의 일반적인 가정).
- 계획 배차 간격은 한 바퀴 주행 시간과 정류장 평균 정차 시간을 버스 대수로 나눠 정합니다.
- 같은 조건이라도 신호·정체와 승객 도착이 매번 달라 결과가 조금씩 다르므로, 본문 표는 30번 반복한 평균입니다.
실제와 다를 수 있는 점
- 실제 노선은 순환형이 아니라 왕복형이 많고, 기점에서 출발 시각을 조정해 몰림을 어느 정도 풀어 줍니다.
- 버스 전용차로, 신호 우선, 실시간 배차 관제가 있는 노선은 이 모델보다 몰림이 덜합니다.
- 정류장 수요와 주행 시간 변동은 가상의 값입니다. 특정 노선의 실측 데이터가 아닙니다.
자주 묻는 질문
왜 버스는 두 대씩 같이 올까요?
앞 버스가 조금 늦으면 그 앞 정류장에 기다리는 사람이 늘어 정차 시간이 길어지고, 그래서 더 늦어집니다. 뒤 버스는 앞차가 막 태워 간 정류장을 지나므로 태울 사람이 적어 빨라집니다. 이 차이가 정류장마다 쌓여 결국 뒤 버스가 앞 버스를 따라잡습니다. 이 불안정성은 1964년 Newell과 Potts가 처음 설명했습니다.
버스를 더 투입하면 해결되나요?
배차 간격이 짧아져 평균 대기는 줄지만 몰림 자체는 남습니다. 이 시뮬레이션에서 6대일 때 평균 대기 4.8분, 8대일 때 3.5분이었지만, 버스가 붙어 다닌 시간은 각각 73.1분, 76.5분이었습니다.
버스를 정류장에 세워 두면 오히려 늦어지지 않나요?
버스 안 승객은 조금 늦어지지만, 정류장에서 기다리는 사람 전체로 보면 대기가 줄어듭니다. 앞차와 너무 가까울 때만 최대 2분 세우는 규칙으로 평균 대기가 4.8분에서 3.6분으로, 운 나쁜 5%의 대기가 12.4분에서 9.3분으로 줄었습니다.
평균 대기가 배차 간격의 절반보다 긴 이유는 무엇인가요?
승객이 무작위로 도착하면 긴 간격 사이에 도착할 확률이 더 높습니다. 간격이 고르면 평균 대기는 배차 간격의 절반이지만, 간격이 들쭉날쭉할수록 평균 대기가 길어집니다. 몰림이 승객에게 손해인 이유입니다.
이 시뮬레이션은 어떤 방법으로 만들었나요?
정류장 12곳, 버스 여러 대, 무작위로 도착하는 승객을 1초 단위로 계산하는 이산 시간 시뮬레이션입니다. 웹 브라우저에서 바로 돌아가도록 자바스크립트와 three.js로 만들었습니다.
참고 자료
- Daganzo, C. F. (2009). A headway-based approach to eliminate bus bunching. Transportation Research Part B, 43(10), 913–921
- Daganzo, C. F., & Pilachowski, J. (2011). Reducing bunching with bus-to-bus cooperation. Transportation Research Part B, 45(1), 267–277
- Bus bunching (Wikipedia)
- Bus bunching: a comprehensive review from demand, supply, and decision-making perspectives (Transport Reviews, 2024)
다른 일상 시뮬레이션
마지막 업데이트 2026-10-22 · 만든 곳 데이터팝콘 · 유튜브 @simulation.hanjang · 인스타그램