4.2. Действия по обработке основных событий
Наступление основных событий "прибытие заявки" и "окончание обслуживания" вызывают определенные, достаточно очевидные, изменения в системе и при моделировании эти изменения должны быть учтены. Приведем в начале очевидные действия, которые должны быть выполнены моделью при наступлении события "прибытие заявки".
Планирование прихода следующей заявки.
Проверка состояния обслуживающего прибора.
При этом:
а) если прибор свободен, то заявка поступает на обслуживание, что вызывает переход прибора из свободного состояния в занятое; планирование события "окончание обслуживания";
б) если прибор занят, то заявка присоединяется к очереди и длина очереди увеличивается на 1.
Действия по обработке основного события "окончание обслуживания":
1. Проверка состояния очереди. При этом:
а) если в очереди нет заявок, то перевести обслуживающий прибор из занятого состояния в свободное;
б) если в очереди есть заявки, то в соответствии с дисциплиной обслуживания выбирается заявка на обслуживание, что вызывает уменьшение длины очереди, продвижения заявок в очереди и планирование события "окончание обслуживания".
4.3. Определение ближайшего события
В выбранном нами способе коррекции таймера (способ с переменным шагом) модельное время каждый раз сдвигается на момент ближайшего события, а затем модель обрабатывает наступившее событие с учетом его типа. Возникает вопрос: как определить момент ближайшего события и его тип?
Одним из способов заключается в составлении списка всех основных событий в порядке возрастания моментов времени, в которые они запланированы, и с указанием типа соответствующего события. Ясно, что ближайшее событие в таком списке окажется в начале списка и, при очередной коррекции таймера, модельное время нужно сдвинуть на момент наступления этого события, а в зависимости от его типа выполнить соответствующие действия. Такой список для рассматриваемого нами примера моделирования СМО G/G/1 в общем случае может содержать три записи следующего вида:
[Tin, "прибытие заявки" ]; (присутствует всегда)
[Tout, "окончание обслуживания"]; (не всегда)
[T, "завершение моделирования"]; (всегда).
Здесь предполагается, что Tin Tout T.
Очевидно, что роль такого списка может быть отведена просто трем переменным Tin,Tout,T, а очередную коррекцию модельного времени выполнить согласно равенству:
.
Затем, в зависимости от того, какое значение приняла переменная tM, принять решение о типе события. Например, если окажется, что, то считается, что наступило событие "прибытие заявки" и необходимо выполнить соответствующие действия по его обработке.
Однако, в списке событий событие "окончание обслуживания" присутствует не всегда и, следовательно, значение переменной Toutв приведенном выше равенстве достоверно соответствует моменту наступления события "окончание обслуживания" только в том случае, если в модели запланировано такое событие (если прибор занят обслуживанием).
Чтобы не отказаться от равенства для определения tMможно принять следующее решение: если прибор не занят обслуживанием, то ввести в список событий псевдо-событие "окончание обслуживания" с моментом наступления, например,. Очевидно, что такое псевдо-событие никогда не наступит (скорее наступит событие "окончание моделирования").
Изложенные здесь положения обобщены в блок-схеме алгоритма имитационной модели, которая представлена на рис.4.3.
Приведем необходимые пояснения по отдельным блокам.
Блок 1. Ввод исходных данных, в качестве которых рассматриваются функции распределенияA(t),B(t) и время моделированияТ.
Блок 2. В этом блоке обнуляются все переменные и массивы, которые предназначены для следующих целей:
F— задает состояние приборы:F= 0, если прибор свободен иF= 1, если занят.
Nin— счетчик входов (определяет число вошедших в модель заявок).
Nout— счетчик выходов.
Nq— текущая длина очереди.
Nqmax— максимальная длина очереди.
Tin— момент прихода заявки.
Tout — момент окончания обслуживания.
Stв, St, Stu — переменные для накопления суммарных значений времен обслуживания, ожидания и пребывания соответственно.
Mtq[...] — массив, который фиксирует моменты становления заявок в очередь.
tм — модельное время.
N0— счетчик заявок, которые проходят очередь без ожидания.
Блок 3. Равенствоозначает розыгрыш случайной величины, распределенной по законуA(t), гдеA-1(x) — обратная функция.
Рис. 4.3. Блок-схема логики работы имитационной модели.