Вы должны знать, когда каждый клиент прибыл в очередь. Когда они прибудут на сервер, вы должны добавить его к числу обслуживаемых клиентов, а также накапливать количество времени, которое он ожидал. В конце моделирования вы просто делите накопленное время на количество клиентов, и у вас есть среднее время ожидания для работы/клиента.
Основная проблема заключается в учете различных событий и обновлении статистики на основе этих событий.
Ваше моделирование должно инициализировать все структуры вашего моделирования в ненадлежащем состоянии:
- Инициализировать очереди клиентов не один в этом
- Инициализировать любое количество обслуживаемых клиентов до 0
- Инициализировать накопленное время ожидания до 0
- Инициализировать текущее системное время 0
- Etc.
После того, как вся система была инициализирована, вы создаете событие, в которое приходит cusotmer. Обычно это определяется определенным распределением. Для генерации системных событий потребуется обновить статистику системы. У вас есть выбор в этот момент, чтобы генерировать все время прибытия работы/клиентов. Время обслуживания каждого клиента также является тем, что вы будете генерировать из данного дистрибутива.
Затем необходимо обработать каждое событие и соответствующим образом обновить статистику. Например, когда первый клиент приходит, очередь была пуста с момента начала моделирования до текущего времени. Среднее количество клиентов в очереди, вероятно, представляет собой параметр, представляющий интерес. Вы должны накапливать 0 * прошедшие секунды в аккумуляторе. Как только клиент приходит в пустую очередь, вы должны сгенерировать время обслуживания. Либо следующий клиент прибудет до, либо после того, как данное задание закончится. Если следующий cusomter прибывает до того, как предыдущий был обслужит, вы добавляете его в очередь (накапливая тот факт, что никто не ждал). В зависимости от того, какое событие происходит дальше, вы должны накапливать статистику, которая происходит в этот временной интервал. Время простоя сервера также представляет собой параметр, представляющий интерес для таких симуляций.
Чтобы сделать все более понятным, рассмотрим факт, что в очереди 18 человек, и сервер выполнил работу для первого клиента. Интервал между прибытием 18-го клиента и временем завершения работы первого лица - это взвешенное среднее значение, которое должно быть добавлено к аккумулятору. Например, в течение 4 секунд было 18 человек.
Сервер не простаивал, поэтому вы должны сделать запись из очереди и начать обработку следующего задания. Задание займет некоторое время, обычно определенное из некоторого распределения. Если следующий клиент прибывает до завершения текущей работы, то факт, что 17 человек были в очереди, будет добавлено к вашему взвешенному значению.
Снова на фундаментальном уровне вы аккумулирования статистики между соответствующими событиями в системе:
while (current_time < total_simulation_time)
handle_next_event
generate_subsequent_events
accumulate_statistics
update_current_time
endwhile
Display "Average wait time: " accumulated_wait_time/number_of_customers_served
Надежда, что помогает ему кажется немного longwinded.
Псевдокод и содержимое кода в вопросе более недоступны. – dim