Завершено
5
11.09.2014, 16:07
29.09.2014, 12:04
задача в процессе переработки
Суть задачи — моделирование обслуживания покупателей на кассах супермаркета.
Есть фиксированное количество кассовых линий N_LINES
, которые всегда работают. К каждой из этих линий встают в очередь покупатели.
Каждый покупатель имеет одну из возможных стратегий поведения (см. ниже) и определённое количество товаров в корзине.
Моделирование производится по временным квантам (t=0, 1, 2, ...
). За каждый квант каждая касса успевает пробить 10 товаров. Если у покупателя, стоящего в начале очереди, в корзине 10 или менее товаров, он считается обслуженным, покидает очередь, и в момент времени t+1
обслуживается следующий покупатель. Если товаров более 10, покупатель остаётся у кассы с уменьшившимся на 10 количеством товаров в корзине.
Покупатели, которые стоят за первым, могут перебежать в другую очередь (условия этого определяются стратегией).
Кроме обслуживания клиентов, уже находящихся в очереди, в каждый момент времени генерируются случайные клиенты. Стратегия поведения и количество товаров в корзине выбираются случайно.
Таким образом, модельный цикл состоит из трёх компонент:
Для каждой очереди:
Для всей системы:
N1
циклов (потом пытается перейти в другую минимальную), если же общее время стояния во всех очередях превышает N2
циклов, то уходит вообще (его следует удалить из очереди).Можно реализовать и свои стратегии, главное, чтобы общее их число было не менее трёх.
Программа должна моделировать супермаркет в течение заданного количества циклов, подсчитывая следующие статистические показатели:
Для того чтобы очереди не были ни слишком длинными, ни слишком короткими, среднее количество обработанных товаров за цикл (10 * N_LINES
) должно быть равно среднему количеству приобретаемых товаров (среднее количество порождаемых клиентов * среднее количество товаров в корзине).
Для генерации такой случайной величины, как количество товаров в корзине, лучше использовать нормальное распределение. Также можно использовать сумму нормальных распределений или выбор из нескольких распределений. Например, делим покупателей на три класса:
Тогда сначала случайно выбираем класс (с учётом априорных вероятностей 15%, 10% и 75%), а затем генерируем число товаров.
Каждой стратегии должен соответствовать свой класс. Виртуальные методы:
* Выбор очереди (на вход передаётся массив с размерами очередей).
* Переход в другую очередь. На вход передаётся массив с размерами очередей; метод возвращает либо номер новой очереди, либо -1
как знак того, что покупатель остаётся в текущей.
Желательно реализовать вывод модельной обстановки для каждого цикла в файл журнала, например:
Шаг 5.
1: [Ф10] [Ф11] [Х12]
2: [М9] [M8]
Каждая очередь в своей строчке, буква означает стратегию, а число — номер покупателя (каждому при генерации присваивается свой номер, начиная с 1).
со второй попытки, но как-то разобрался