Рассмотрим приход клиентов в банк и, их обслуживание кассирами. Время прихода клиентов задается функцией распределения ARRIVE. Для обслуживания открыто семь окошек кассиров, к каждому из них может образовываться очередь. Во время прихода клиента в банк, если хотя бы один кассир свободен, клиент сразу же подходит к этому кассиру. В противном случае он присоединяется к любой кратчайшей очереди на текущий момент. Порядок обслуживания клиентов из очереди - FIFO.
Обслуживание в кассе разделяется на пять видов операций, частота появления которых и среднее время обслуживания задаются функцией MEAN.
В модели с несколькими очередями могут возникнуть одновременные события прихода клиента и конца обслуживания кассиром. Если событие «приход» будет рассмотрено ранее события «конец обслуживания», то устройство в момент проверки будет считаться занятым и вновь прибывший клиент не сможет занять кассира. Поэтому необходимо обеспечить приоритетность в обработке события «освобождения кассира».
|
|
Это можно сделать с помощью задания уровня приоритета (блок PRIORITY 1) между блоками GENERATE и ADVANCE.
Для реализации поиска свободного кассира используется блок TEST E, помеченный меткой NEXT, который проверяет, свободен ли кассир. Максимальный номер кассира запоминается в параметре транзакта Р5. По этому же параметру образуется цикл для проверки всех устройств (блок LOOP). Номер первого свободного кассира запоминается в параметре транзакта Р3, и транзакт передается на обслуживание. Если все устройства заняты, то транзакт переходит к следующему блоку после LOOP, т.е. к блоку TEST, помеченному меткой SIT. Этот блок сравнивает длины очередей для всех устройств. Первоначально для сравнения в параметр Р2 транзакта помещается число 1000. Аналогично организуется цикл по всем очередям с помощью параметра Р1 транзакта. Первоначально туда помещается максимальный номер очереди. Если длина следующей просматриваемой очереди меньше предыдущей, то запоминается номер очереди в параметре Р3 и ее длина в параметре Р2 транзакта. После просмотра всех очередей (перехода к следующему блоку после LOOP) в этих параметрах окажется номер минимальной очереди и ее длина, соответственно.
Приведем текст соответствующей программы.
Функция времени обслуживания
MEAN FUNCTION RN1,D5
1.450/.29,750/.61,1000/.85,1500/1.0,3000
* Функция времени прихода
ARRIVEL FUNCTION RN1,D6
0.0,50/.25,100/.60,150/.80,200/.90,250/1.0,300
*
T_l TABLE Ml,200,600,10; Сбор данных о времени
; пребывания
050 *****************************************************************
GENERATE FNSARRIVEL; Приход клиентов
ASSIGN 1,7; Задать МАХ номер очереди