더북(TheBook)

코드 입력도 줄이고 코드도 간단하게 하려고 using 지시자를 사용했다. 고객의 서비스 시간 발생 횟수는 벡터 컨테이너 service_times에 기록된다. 서비스 시간 값은 서비스 시간 범위에서 최솟값을 뺀 값을 증가된 vector 원소의 인덱스로 사용된다. 이렇게 하면 가장 낮은 서비스 시간 발생 횟수가 벡터의 첫 번째 원소로 기록된다. histogram() 함수는 각 서비스 시간의 횟수 히스토그램을 수평 막대 그래프로 생성한다.

입력값은 계산대 숫자뿐이다. 시뮬레이션 기간으로 600분을 선택했지만, 원하는 매개변수로 입력값을 바꿔도 된다. main() 함수는 고객 서비스 시간, 마트 개점 시간에 기다리는 고객 수, 고객이 도착하는 시간 간격을 위한 분포 객체를 생성한다. 고객들은 한 번에 한 명만 도착한다고 가정했다. 즉, 한 번에 도착하는 고객 수를 무작위로 설정할 수 있는 프로그램으로 개선하는 것도 가능하다.

고객들은 항상 대기열이 가장 짧은 계산대에 할당된다. 대기열이 가장 짧은 Checkout 객체는 범위에서 최소 원소를 반환하는 min_element() 알고리즘을 호출해서 찾아낸다. min_element()는 원소 비교에 < 연산자를 사용하지만, 비교 함수를 세 번째 인수로 지정할 수 있는 다른 버전도 있다. 서비스 시간 시뮬레이션을 시작하기 전에 마트 개점 시간에 대기 고객을 위한 초기 순차열을 Checkout 객체에 추가하고, 서비스 시간 기록을 업데이트한다.

모든 시뮬레이션은 while 루프에서 수행된다. 각 반복에서 time은 1분씩 증가한다. 다음 고객이 도착할 때까지의 시간 간격 new_cust_interval은 루프를 반복할 때마다 1분씩 감소하고, 이 값이 0이 될 때 새 고객을 새 무작위 서비스 시간으로 생성하고 가장 짧은 대기열에 Checkout 객체를 추가한다. 또한, 새 고객을 추가했을 때 가장 긴 큐가 바뀔 수가 있으므로 longest_q 변수도 업데이트한다.

이어서 각 Checkout 객체의 time_increment() 함수를 호출해 각 대기열의 첫 번째 고객을 처리한다. 루프는 timetotal_time에 저장된 값에 도달할 때까지 계속된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.