Задание № 22

Студент

Чупина Анна

Задача

Супермаркет

Состояние

Открыто

Дедлайн
15 декабря 2014
Назначено

11.09.2014, 16:07

задача в процессе переработки

Суть задачи — моделирование обслуживания покупателей на кассах супермаркета.

Основная модель

Есть фиксированное количество кассовых линий N_LINES, которые всегда работают. К каждой из этих линий встают в очередь покупатели.

Каждый покупатель имеет одну из возможных стратегий поведения (см. ниже) и определённое количество товаров в корзине.

Моделирование производится по временным квантам (t=0, 1, 2, ...). За каждый квант каждая касса успевает пробить 10 товаров. Если у покупателя, стоящего в начале очереди, в корзине 10 или менее товаров, он считается обслуженным, покидает очередь, и в момент времени t+1 обслуживается следующий покупатель. Если товаров более 10, покупатель остаётся у кассы с уменьшившимся на 10 количеством товаров в корзине.

Покупатели, которые стоят за первым, могут перебежать в другую очередь (условия этого определяются стратегией).

Кроме обслуживания клиентов, уже находящихся в очереди, в каждый момент времени генерируются случайные клиенты. Стратегия поведения и количество товаров в корзине выбираются случайно.

Таким образом, модельный цикл состоит из трёх компонент:

Для каждой очереди:

  • Обслуживание покупателя, стоящих в голове очереди.
  • Реализация возможности перебежать в другую очередь для всех остальных покупателей из этой очереди.

Для всей системы:

  • Генерация новых покупателей. Та очередь, в которую встанет каждый из них, будет зависеть от стратегии.

Варианты стратегий

  1. Флегматик. На старте выбирает минимальную очередь (по количеству человек или общему количеству товаров в очереди) и стоит до победного конца, никогда не перебегая в другую очередь.
  2. Холерик. Выбирает очередь аналогично флегматику. Стоит в одной очереди не более чем N1 циклов (потом пытается перейти в другую минимальную), если же общее время стояния во всех очередях превышает N2 циклов, то уходит вообще (его следует удалить из очереди).
  3. Меланхолик. Выбирает случайную очередь и в случайные моменты времени переходит в случайную другую очередь.

Можно реализовать и свои стратегии, главное, чтобы общее их число было не менее трёх.

Работа программы

Программа должна моделировать супермаркет в течение заданного количества циклов, подсчитывая следующие статистические показатели:

  1. Количество пришедших покупателей (для каждой стратегии).
  2. Количество обслуженных покупателей (для каждой стратегии).
  3. Среднее время стояния в очереди (для каждой стратегии).

Примечания

  1. Для того чтобы очереди не были ни слишком длинными, ни слишком короткими, среднее количество обработанных товаров за цикл (10 * N_LINES) должно быть равно среднему количеству приобретаемых товаров (среднее количество порождаемых клиентов * среднее количество товаров в корзине).

  2. Для генерации такой случайной величины, как количество товаров в корзине, лучше использовать нормальное распределение. Также можно использовать сумму нормальных распределений или выбор из нескольких распределений. Например, делим покупателей на три класса:

  • «Быстро забежали»: 15%. В среднем берут 4 товара, СКО = 0.5.
  • «По-крупному»: 10%. В среднем берут 60 товаров, СКО = 15.
  • «Просто покупатель»: 75%. В среднем 20 товаров, СКО = 4.

Тогда сначала случайно выбираем класс (с учётом априорных вероятностей 15%, 10% и 75%), а затем генерируем число товаров.

Детали реализации

Каждой стратегии должен соответствовать свой класс. Виртуальные методы: * Выбор очереди (на вход передаётся массив с размерами очередей). * Переход в другую очередь. На вход передаётся массив с размерами очередей; метод возвращает либо номер новой очереди, либо -1 как знак того, что покупатель остаётся в текущей.

Желательно реализовать вывод модельной обстановки для каждого цикла в файл журнала, например:

Шаг 5.
1: [Ф10] [Ф11] [Х12]
2: [М9] [M8]

Каждая очередь в своей строчке, буква означает стратегию, а число — номер покупателя (каждому при генерации присваивается свой номер, начиная с 1).

Возможные усложнения

  1. Динамическое включение / выключение касс. При выключении кассы для всех покупателей из соответствующей очереди вызывается метод «выбор очереди».
  2. Динамическое изменение параметров генерации покупателей. Например, с какого-то цикла начинается «час пик», т.е. генерируется больше покупателей.

Действия