с помощью какой функции в имитационной модели можно смоделировать время задержки на обслуживание
Синхронизация времени в распределенном имитационном моделировании
Управление временем в распределенном моделировании
Управление временем в распределённом моделировании должно обеспечивать выполнение событий в правильном хронологическом порядке. Более того, на алгоритмы синхронизации возлагается обязанность корректно выполнять повторные имитационные прогоны. При повторном моделировании пользователь должен быть уверен, что он получит те же результаты, что и в первый раз, если входные данные останутся неизменными. Обеспечение следования событий в правильном порядке и проблемы повторного имитационного прогона для моделирования тренажёров несущественно. Поэтому речь о дискретно-событийном моделировании.
Работа симулятора заключается в том, чтобы выбрать из списка необработанных событий событие с минимальной временной меткой и обработать его. Так выполнение процесса можно рассматривать как выполнение последовательности событий. Выполнение событие сопровождается изменением переменных, которые определяют состояние моделируемого объекта. Кроме того, логический процесс при выполнении очередного события может запланировать выполнение нового события ej для самого себя или для другого логического процесса. Каждый логический процесс имеет локальные часы. Локальные часы указывают на время выполнения самого последнего обработанного симулятором события. Время, на которое запланировано логическим процессом любое событие должно быть больше, чем значение его локальных часов.
Итак, m =
Ein – это множество внутренних событий процесса.
Tloc – локальное время логического процесса (время последнего обработанного события из множества E ).
Текущее модельное время .
Парадоксы времени
Алгоритм управления временем должен следить за тем, чтобы события выполнялись в хронологическом порядке. Эта задача не является тривиальной. Действительно, логический процесс заранее не может знать о том, на какое время будет запланировано событие, которое он получает от другого логического процесса. Пусть в списке необработанных событий хранится событие с временной меткой 10. Может ли симулятор логического процесса выбрать его для обработки. Это можно было бы сделать, если бы логический процесс каким-нибудь образом знал о том, что другой логический процесс не запланировал для него события, со временем меньшим, чем 10.
Рассмотрим другой пример.
Пусть модель представляет собой совокупность трёх процессов. Один процесс отображает поведение покупателя, второй – магазина, в котором покупатель совершает покупки, а третий процесс – деятельность банка, со счёта которого покупатель снимает деньги.
Рассмотрим описанную выше ситуацию: если уведомление в банк из магазина поступит позже того, как покупатель снимет сумму с вклада в банке (которой уже нет на счёте), то банк понесёт убытки. Ситуация, которая обрисована выше, возникла вследствие того, что хронология событий была нарушена (рис. 8.2).
Нарушение хронологического порядка могло произойти по той причине, что в распределённом моделировании время для разных логических процессов движется с разной скоростью. Например, если процесс, реализующий работу магазина, выполняется на загруженном процессоре, то уведомление банку поступает позже, поскольку процесс банк «убежал» вперёд (он выполняется на менее загруженном процессоре).
Распределённый алгоритм должен уметь бороться с такими парадоксами времени.
В этом и заключается проблема синхронизации компонентов распределённого моделирования. Было предпринято множество попыток решить эту проблему. В настоящее время все алгоритмы синхронизации делятся на консервативные и оптимистические.
Если мы вернёмся к примеру 1, то консервативный алгоритм не позволит логическому процессу обрабатывать событие с временной отметкой 10, пока не убедится, что другой логический процесс не запланировал для него события с временной меткой, меньшей 10.
Оптимистический алгоритм позволяет выбирать из списка необработанных событий очередное событие и обрабатывать его, исключив проверку событий, планируемых другими логическими процессами. Однако отдельный программный механизм реализует обнаружение ошибок и восстановление от ошибок выполнения событий, которые происходят не в хронологическом порядке.
Рассмотрим более подробно каждый из алгоритмов управления временем.
Консервативное управление временем
Первые алгоритмы синхронизации использовали консервативный подход. Принципиальная задача консервативного протокола – определить время, когда обработка очередного события из списка необработанных событий является «безопасным». Иными словами, событие является безопасным, если можно гарантировать, что процесс в дальнейшем не получит от других процессов событие с меньшей временной меткой. Консервативный подход не позволяет выполнять событие до тех пор, пока нет гарантии, что оно является безопасным.
Будем считать, что логические процессы не содержат событий, запланированных на одно и то же модельное время.
Простая система имитационного моделирования на Go
Введение
Имитационное моделирование это метод, при котором для проведения экспериментов изучаемая реальная система заменяется моделью. В подобной модели можно проиграть как отдельные ситуации, так и их множество. Собранные статистические данные могут помочь сделать выводы о ходе процессов в системе, а также наметить пути оптимизации.
Имитационное моделирование часто рассматривают как разновидность экспериментальных испытаний, но при этом оно менее затратно, позволяет оперативно менять параметры и наблюдать моделируемую систему в динамике.
Уже порядка полувека при имитационном моделировании используются компьютерные модели. Для их разработки создано огромное множество различных программ и фреймворков, среди которых, на мой взгляд, наибольшее развитие получили средства для моделирования систем массового обслуживания (СМО). Одна из наиболее известных и простых программ для имитационного моделирования СМО – GPSS World (General Purpose Simulation System – система моделирования общего назначения), более подробно можно ознакомится по ссылкам [1], [2].
Концепция этой программы и была положена в основу фреймворка имитационного моделирования на Go.
Моделирование в GPSS
Модель в GPSS представляет собой последовательность блоков (команд), описывающих моделируемые объекты, между которыми перемещаются транзакты. При попадании транзакта в блок генерируются события, приводящие либо к изменению состояния моделируемого объекта, либо изменению состояния/параметров транзакта.
Основных блоков порядка десяти: GENERATE, TERMINATE, ASSIGN, SEIZE, RELEASE, QUEUE, ADVANCE, DEPART, START. Всего блоков порядка трёх десятков. Блоки имеют параметры, в качестве которых могут выступать числа, имена функций, метки в программе моделирования, имена переменных. Более подробно с блоками можно ознакомиться, например, здесь.
Объекты в GPSS имеют набор стандартных числовых атрибутов (СЧА) и стандартных логических атрибутов (СЛА). Например, для очереди, один из СЧА это текущая длина, а примером СЛА для некоего оборудования будет свободно (TRUE) или занято оно (FALSE).
В отдельных версиях GPSS присутствует визуализация процесса моделирования, но чаще всего она отсутствует. По результатам моделирования в GPSS формируется отчёт, с указанием СЧА и СЛА по всем объектам.
Реализация в Go
Реализация в Go представляет собой разработку набора объектов схожих по функциям с блоками GPSS. Первым был создан Pipeline – объект, в рамках которого выполняется симуляция.
Второй важный элемент это собственно компоненты для описания моделирования. Были реализованы: Generator – генерирует транзакты, Advance – создаёт задержки на пути транзакта, Queue – очереди транзактов, Facility – некое устройство, монопольно захватываемое транзактом на некоторое время, Hole – «дыра» в которую проваливаются транзакты в конце пути. Разумеется, такого набора недостаточно для создания сложных имитационных моделей, но для отработки решения и сравнения с результатами GPSS вполне хватает. Все компоненты реализуют интерфейс IBaseObj, который охватывает минимально необходимый функционал.
Для генерации случайных величин при определении времени появления транзакта и создании задержек используются функции ГПСЧ в Go.
Последний ключевой объект это собственно сам транзакт. У него есть идентификатор, время рождения и смерти, владелец (в каком компоненте он сейчас), ряд параметров для вычисления СЧА и СЧЛ.
На рис. 1 приведена структурная схема взаимодействия основных объектов фреймворка при моделировании.
Рис. 1. Обобщённая структурная схема взаимодействия основных объектов при моделировании
Пример моделирования
Допустим надо смоделировать работу парикмахерской. Это известный пример из GPSS. Посетители идут хаотично, с периодичностью 18±6 минут, их количество заранее не известно. Парикмахер у нас один, на стрижку он тратит 16±4 минуты. Итак, сколько всего человек он пострижёт за рабочий день? Сколько будет людей в очереди? Сколько в среднем уйдёт времени на стрижку и сколько времени просидят люди в очереди? Много вопросов и простая симуляция. Структурная схема на рис. 2.
Рис. 2. Структурная схема моделирования парикмахерской
Код для построения модели будет следующий.
Pipeline name » Barbershop »
Simulation time 480
Object name » Chairs »
Max content 1
Total entries 26
Zero entries 11
Persent zero entries 42.31%
In queue 0
Average time/trans 2.58
Average time/trans without zero entries 4.47
Object name » Clients »
Generated 26
Object name » Master »
Average advance 16.46
Average utilization 89.17
Number entries 26.00
Transact 26 in facility
Object name » Out »
Killed 25
Average advance 16.56
Average life 19.44
Обслужили 25 клиентов, 26-ой на момент завершения моделирования был ещё в кресле мастера. В очереди было не более 1 человека, 11 человек не ждали (нулевой проход) и сразу проходили на стрижку. В среднем в очереди люди провели 2,58 минуты, а из тех, кто ждал (не нулевой проход) 4,47 минуты. 89,17% своего времени парикмахер усиленно стриг.
Разумеется, если провести ещё одну симуляцию, результаты изменятся. Но при проведении серии симуляций будет видно общий уровень загрузки мастера и количество обслуженных клиентов. При проведении такой же симуляции в GPSS получаются близкие результаты.
Другой пример. Есть офис, в нём 10 сотрудников и один туалет. Люди желают пойти в туалет каждые 90±60 минут, идти до туалета 5±3 минуты, занимают туалет 15±10 минут, поход обратно в офис 5±3 минуты. Проведём симуляцию в течении 9 часов (8 часов работы + 1 час обед), на рис. 3 приведена структурная схема.
Рис. 3. Структурная схема модели занятости туалета: слева с одним туалетом, справа с двумя
Слева модель с одним туалетом, справа с двумя. Далее приведён код модели.
Pipeline name » Water Closet Simulation »
Simulation time 540
Object name » Office »
Generated 10
Object name » Path from WC »
Average advance 5.77
Object name » Path to WC »
Average advance 5.22
Object name » Queue to the WC »
Max content 4
Total entries 36
Zero entries 8
Persent zero entries 22.22%
Current contents 4
Average content 1.78
Average time/trans 24.11
Average time/trans without zero entries 31.00
Object name » WC »
Average advance 14.69
Average utilization 87.04
Number entries 32.00
Transact 2 in facility
Object name » Wanted to use the toilet »
Average advance 95.85
В очереди было до 4 человек, 8 раз человек сразу попал в туалет, в течении рабочего дня туалет используют на 87,04%. Самое существенное, на мой взгляд, это то, что люди ждут порядка получаса (31 минута) в очереди в туалет. Возможно, это связано с тем, туалет один, а возможно, с тем, что в среднем люди сидят в нём 14,69 минут.
Добавив ещё один туалет, я увидел, что очередь сократилась до 3 человек, 29 раз люди сразу попали в туалет. Но самое главное, почти в три раза уменьшилось ожидание.
Заключение
Созданный на коленке фреймворк достаточно простой и пока ещё ограниченный. В планах повысить его функциональность до уровня GPSS. Практическая ценность фреймворка в возможности просто и быстро собрать на Go имитационную модель и получить результаты.
Имитационное моделирование: создание терминов
История создания терминов
При создании методики по имитационному моделированию мне понадобилось разобраться с терминами. Проблема была в том, что общепринятые термины не годились для описания статистических данных, собранных в процессе имитации. Термины: процесс и экземпляры процесса были неприемлемы, потому что я не мог работать в парадигме Аристотеля. Парадигма Аристотеля не стыкуется с примененным мной матаппаратом. При этом практическое применение данной методики было простое – моделирование и имитация бизнес-объектов с целью принятия управленческих решений. В программе создавался виртуальный объект, описание которого состояло из описания сценариев и их взаимодействия. Сценарии прогонялись внутри программы, а также моделировались ресурсы и их взаимодействия.
Напомню, что:
Имитационное моделирование — метод исследования объектов, основанный на том, что изучаемый объект заменяется имитирующим объектом. С имитирующим объектом проводят эксперименты (не прибегая к экспериментам на реальном объекте) и в результате получают информацию об изучаемом объекте. Имитирующий объект при этом являет из себя информационный объект.
Цель имитационного моделирования — получение приближенных знаний о некотором параметре объекта, не производя непосредственное измерение его значений. Понятно, что это необходимо тогда и только тогда, когда измерение невозможно, или оно стоит дороже проведения имитации. При этом для изучения этого параметра мы можем пользоваться другими известными параметрами объекта и моделью его конструкции. Допуская, что модель конструкции достаточно точно описывает объект, предполагается, что полученные в ходе имитации статистические распределения значений параметра моделирующего объекта будут в той или иной степени совпадать с распределением значений параметра реального объекта.
Понятно, что матаппарат, который был применен, — это статистическая математика. Понятно, что матстатистика не использует термины экземпляры и типы. Она работает с объектами и множествами. В итоге для написания методики я был вынужден был использовать логическую парадигму на основе которой создан стандарт ИСО 15926. Основой его является наличие объектов, классов и классов классов.
Я хочу поделиться некоторыми определениями, которые мне пришлось ввести для объяснения механизмов моделирования и анализа результатов имитации. Этих примеров будет достаточно, чтобы понять, с чем я имел дело, когда строил модель предметной области.
Примеры определений:
Операция
Событие
Способы управления модельным временем
Дата добавления: 2015-06-12 ; просмотров: 2610 ; Нарушение авторских прав
Модельным временем в имитационной модели называется воспроизведение физического времени в модели. Соотношение физического и модельного времени определяется спецификой модели и задается диапазоном физического времени, принимаемого за единицу модельного времени. Сущностью имитационного моделирования является продвижение модельного времени и выполнение событий, связанных с определенными значениями модельного времени. Событие в модели это программный модельный образ значимого, с точки зрения разработчика модели, изменения в моделируемой системе.
Основной задачей имитационного моделирования является правильное отображение порядка и временных отношений между изменениями в моделируемой системе на порядок выполнения событий в модели.
Сжатие временной шкалы в непрерывном времени невозможно, поэтому в имитационном моделировании время изменяется скачкообразно. На оси модельного времени моменты наступления событий составляют дискретное множество. В дискретном имитационном моделировании используются два способа управления продвижением модельного времени:
— событийный (Event Driven), при котором в качестве следующего значения модельного времени выбирается минимальное время наступления события из списка будущих событий;
— пошаговый (Time Stepped), при котором значение модельного времени увеличивается на постоянную фиксированную величину – шаг модельного времени.
ПРИМЕРЫ соотношения физического и модельного времени при пошаговом и событийном управлении. |
Пошаговый подход удобен при наличии условных событий, т. е. событий, для выполнения которых требуется истинность некоторого логического условия. В этом случае на каждом шаге требуется вычислять логические условия и выполнять соответствующие события. При событийном способе управления временем можно «проскочить» момент времени, при котором условие стало истинным.
Однако пошаговое управление значительно менее эффективно – для обеспечения удовлетворительной точности шаг приращения времени должен быть минимальным, а в этом случае »95% обращений к элементам имитационной модели – лишние и много процессорного времени тратится на обработку «пустых» интервалов. При этом пошаговое управление не позволяет указать истинное положение событий внутри шага модельного времени (такта). Поэтому принимается соглашение переносить их на начало (или на конец) того такта, в пределах которого они в действительности произошли. При этом искажается реальная картина событий, теряются причинно-следственные связи, последовательно протекающие события становятся параллельными, задержки распространения сигналов в структурных элементах не отображаются. Этих недостатков лишено событийное управление модельным временем [2, 29].
3.4.3. Алгоритмы имитационного моделирования для
событийного управления модельным временем
Отличие имитационного моделирования от объектно-ориентированного программирования заключается в том, что объект имитационной модели может не только выполнить некоторое событие в момент своей активности, но и запланировать выполнение своего события или события другого объекта в будущем, т. е. на момент модельного времени, больший или равный текущему значению модельного времени. Для реализации выполнения будущих событий и упорядочивания их в хронологическом порядке необходимо использование управляющей программы – планировщика. Алгоритм работы планировщика состоит в выполнении следующих действий:
1) активизация объектов для выполнения событий, запланированных на текущее значение модельного времени и удаление выполненных событий из списка;
2) включение в список новых событий, запланированных активными объектами, вместе со значениями моментов модельного времени, в которые каждое из этих событий должно быть выполнено;
3) увеличение значения модельного времени, если на текущий момент времени невыполненных событий не осталось, и переход на п.1).
Понятно, что при такой организации моделирования события в модели выполняются последовательно, даже если они относятся к одному моменту модельного времени. Однако, поскольку продвижение модельного времени на время моделирования параллельных событий приостанавливается, говорят, что процессы выполняются квазипараллельно.
В алгоритме имитационного моделирования СМО при событийном управлении модельным временем используется несколько информационных массивов: списки текущих (СТС) и будущих (СБС) событий, массив заявок (МЗ) – хранит имя, тип, приоритет, время, местонахождение заявки в системе, и очередей (МО) – хранит информацию о заявках в очереди, упорядочен по ОА. Моделирование начинается с просмотра операторов генерирования заявок, т. е. с обращений к моделям источников заявок. Для каждого независимого источника такое обращение позволяет рассчитать момент генерации первой заявки. Этот момент вместе с ссылкой на заявку заносится в СБС, а сведения о заявке – в МЗ (имя, значения параметров, место появления или нахождения заявки в системе). В СБС события упорядочиваются по возрастанию времен совершения. Далее из СБС выбирается совокупность событий, относящихся к наиболее раннему моменту модельного времени. Эта совокупность переносится в СТС и начинается моделирование событий, отмеченных в СТС (см. рис. 29).
Выбирается ссылка на событие, по ней в МЗ определяется соответствующая заявка и ее место в системе, моделируется продвижение по системе по маршруту, определяемому программой моделирования, до тех пор, пока заявка не придет на вход некоторого ОА. Тогда обращение к модели ОА позволяет определить длительность задержки на обслуживание и момент наступления события, связанного в выходом заявки из ОА. Корректируется местонахождение заявки в МЗ. Ссылка на новое предвидимое событие заносится в СБС так, чтобы сохранилась упорядоченность списка по моментам наступления событий. Программа моделирования приступает к выбору очередной ссылки на СТС.
После имитации всех событий из СТС в него переносится очередная совокупность событий из СБС, относящихся к ближайшему моменту модельного времени ti+1, текущее модельное время принимает это значение.
Если при моделировании движения заявки она придет на вход занятого ОА (устройства или накопителя), то вместо расчета длительности обслуживания имя заявки заносится в МО. При моделировании события, связанного с освобождением ОА заявкой а, проверяется состояние очереди к освобождающемуся ОА. Если имеется очередь, то в соответствии с дисциплиной обслуживания из очереди выбирается заявка b и входит на обслуживание ОА. Обращение к модели обслуживающего аппарата дает значение освобождения ОА заявкой b и соответствующая ссылка заносится в СБС. Затем программа производит моделирование продвижения заявки a до того момента, когда произойдет ее выход из системы или задержка в очереди к новому ОА [1, 28, 29].
3.4.4. Алгоритмы имитационного моделирования для
пошагового управления модельным временем
При пошаговом управлении модельным временем трудоемкость анализа имитационной модели определяется количеством уравнений в итоговой системе и количеством тактов, на которое разделен моделируемый интервал времени. Для моделирования в этом случае используются итерационные алгоритмы функционального моделирования дискретных систем.
Для решения систем уравнений вида V=y(V,X), где V – вектор базисных переменных; X – вектор входных переменных модели; y – оператор преобразования дискретных переменных, применяются итерационные алгоритмы. Анализ начинается с задания вектора входных воздействий X и вектора начального приближения V0 для искомого вектора V.
ПРИМЕРЫ синхронного анализа логической схемы с использованием итерационных алгоритмов. |
Алгоритм простой итерации состоит в выполнении итераций по следующей формуле:
Рассмотрим постановку задачи моделирования СМО с ОА типа G/G/1 (см. рис. 30) для пошагового управления модельным временем.
Вектор входных переменных модели для СМО, представленной на рис. 30, имеет вид:
=<tвх1, tвх2>,
где tвх1 и tвх2 – время поступления заявок входных потоков на обслуживание в очередь ОА1 и ОА2 соответственно. Вектор базисных координат может быть определен как:
=<t2, t3, tвых, L1, L2, L3>,
где t2 – время поступления заявки из рецикла на повторное обслуживание в очередь ОА2; t3 – время поступления заявки на обслуживание в очередь ОА3; tвых – время выхода заявки из системы; L1, L2, L3 – длины очередей соответствующих ОА.
Пусть на k-тый момент модельного времени значение вектора базисных координат известно и может быть использовано в качестве начального приближения для расчетов в следующем такте модельного времени:
Пусть в k+1 момент модельного времени значение вектора входных переменных составило:
Требуется определить значение вектора базисных координат в k+1 такте модельного времени. В отсутствии обратных связей (рециклов) в схеме СМО такой расчет потребовал бы однократного пересчета всех базисных координат с учетом нового значения вектора входных переменных, т. е. с учетом значений времен поступления очередных заявок входного потока, округленных до целого числа тактов модельного времени, и времен обслуживания в ОА СМО. При наличии обратных связей, как в заданной СМО, вычисление окончательного значения вектора базисных координат потребует нескольких итераций, так как переменные t2 и tвых взаимосвязаны. Система уравнений модели заданной СМО имеет вид:
где yi – функции, зависящие от закона распределения времени обслуживания в АО и дисциплины очереди.
Согласно формуле (10) в правые части уравнений модели на каждой итерации в этом алгоритме подставляются значения базисных координат, полученных на предыдущей итерации. На первой итерации такими значениями являются значения базисных координат из начального приближения вектора, следовательно:
и так далее. Следует обратить внимание, что, например, для расчета базисной координаты в правую часть соответствующего уравнения подставляется значение несмотря на то, что к моменту расчета уже известно и значение . Такая организация расчетов потребует, очевидно, большего количества итераций, но, при этом, в алгоритме нет необходимости выполнять проверку: определено ли значение очередной базисной координаты уже на этой итерации, или еще нет.
Признаком того, что решение найдено, в этом итерационном метода, как и во всех прочих, является совпадение результата последней итерации с предыдущей.
Уменьшить количество вычислений удается при построении итерационного процесса с использованием алгоритма Зейделя, в котором при вычислении очередного из элементов вектора Vi в правую часть уравнений системы там, где это возможно, подставляются не элементы вектора Vi-1, а те элементы вектора Vi, которые уже вычислены к данному моменту, т. е. итерации выполняются по формуле:
Количество итераций в алгоритме Зейделя существенно зависит от порядка, в котором реализуются уравнения модели. В алгоритме Зейделя без ранжирования уравнения модели перечисляются в произвольном порядке. В алгоритме Зейделя с ранжированием уравнения располагаются в том порядке, в каком соответствующие уравнениям элементы схемы образуют путь прохождения заявок. Тогда для анализа схем без обратных связей потребуется всего одна итерация. В схемах с обратной связью метод Зейделя с ранжированием уравнений порождает несколько итераций, но их количество существенно меньше, чем в методе простой итерации.
Ранжирование уравнений производится следующим образом: уравнение модели (элемент СМО) получает ранг j, если все аргументы этого уравнения (входы элемента) ранжированы и максимальный среди рангов аргументов (входов) равен j-1. Переменная модели получает ранг j, если она является левой частью уравнения (является выходом элемента), имеющего ранг j. Выполнение алгоритма начинается с того, что всем входным переменным присваивается ранг j=0. Если в схеме имеются контуры ОС, одна из цепей каждого контура должна быть предварительно разорвана и части разорванных цепей, подключенные к входам элементов, получают ранг j=0. Затем определяют уравнения первого ранга, переменные первого ранга, элементы второго ранга и т. д. В итоге уравнения располагаются в порядке возрастания рангов.
Выполним ранжирование уравнений системы, описывающей СМО, приведенную на рис. 30 и рассмотренную выше, в примере моделирования по методу простой итерации. Присвоим нулевой ранг входным переменным:
Как видно, в четвертом уравнении теперь фигурирует единственная непроранжированная переменная: L1, которая фигурирует и в правой, и в левой части. Ей присваивается ранг, на 1 больший минимального в уравнении, т. е. в данном случае равный 1. Этим же рангом помечаются все вхождения переменной L1 в другие уравнения:
Как видно, после выполнения последнего шага дальнейшее ранжирование становиться невозможным без условного разрыва обратной связи. Условный разрыв позволяет отнести переменную tвых к нулевому рангу. В результате в первом уравнении все переменные в правой части оказываются проранжированными, поэтому t2 в этом уравнении, а также в правых частях второго и пятого уравнений, получает ранг 1:
В пятом уравнении теперь фигурирует единственная непроранжированная переменная: L2, которая фигурирует и в правой, и в левой части. Ей присваивается ранг, на 1 больший минимального в уравнении, т. е. в данном случае равный 2. Этим же рангом помечаются все вхождения переменной L2 в другие уравнения, что позволяет определить ранг переменной t3 равным 3. С учетом вхождений этой переменной получим:
В шестом уравнении теперь фигурирует единственная непроранжированная переменная: L3, которая фигурирует и в правой, и в левой части. Ей присваивается ранг, на 1 больший минимального в уравнении, т. е. в данном случае равный 4. Этим же рангом помечаются вхождение переменной L3 в третье уравнение, что позволяет определить действительный (без условного разрыва обратной связи) ранг переменной tвых равным 5. Окончательный результат ранжирования имеет вид:
Расположим уравнения по возрастанию рангов:
Если сопоставить ранжированный порядок уравнений со схемой на рис. 30, легко убедиться, что порядок вычислений в этом случае соответствует логике прохождения заявок по СМО и порядку изменения переменных модели. Понятно, что для такой простой схемы расположить уравнения в правильном порядке можно и без процедуры ранжирования. Однако в сложных схемах с большим количеством ОА и обратных связей эта задача не тривиальна, и приходиться прибегать к ранжированию.
Наименьший объем вычислений обеспечивает событийный алгоритм. Основная идея событийного метода заключается в выполнении вычислений по уравнениям только активизированных элементов, т. е. элементов, у которых хотя бы на одном входе произошло событие (изменилась входная переменная). В алгоритме событийного метода на каждой итерации имеется своя группа активизированных элементов. Использование метода позволяет существенно сократить затраты машинного времени при анализе имитационных моделей СМО [3, 10, 29].