В данной главе мы рассматривали средства AnyLogic, поддерживающие моделирование дискретно-событийных систем. Эти средства включают сущно-сти, порождающие события, и сущности, позволяющие изменять состояние сис темы как реакцию на наступившие события. Основными средствами порождения событий в модели являются таймеры и стейтчарты. Кроме базовых средств разработки дискретно-событийных систем, пользователю дос-тупна библиотека Enterprise Library, в которой собраны высокоуровневые средства — блоки, часто используемые в моделировании широкого класса дискретно событийных систем массового обслуживания. Рассмотрим все эти средства еще раз по порядку.
События
Основной абстрактной сущностью в дискретно-событийных моделях является событие. Понятие события в моделировании существенно отличается
от обычного понимания события. Для человека событием может быть поездка за границу или свадьба, посещение театра или рождение сына. В моделировании событие является абстракцией с ясно определенной семантикой. Событие — это нечто, не имеющее протяженности во времени и изменяющее состояние системы. Событием в модели может быть, например, срабатывание таймера или получение сообщения в порт. То, что событие в моделировании является мгновенным, это абстракция, но только при наличии такой абстракции возможна организация в модели выполнения множества параллельно протекающих процессов, которые отражают параллелизм окружающего нас мира.
Таким образом, важнейшей концепцией дискретно-событийного моделирования является то, что событие никогда не длится во времени, оно происходит мгновенно, вызывая мгновенное же изменение состояния системы и. возможно, порождая новые будущие события либо удаляя ранее запланированные события. В результате наступления события может быть выполнено действие по изменению состояния системы. В соответствии с указанной ранее концепцией, любое такое действие является "атомным", неделимым в том смысле, что оно не может быть прервано никаким другим действием и событием, даже если действие это представлено длинной цепочкой операций.
Иногда представление реального события в модели как мгновенного неделимого действия по изменению состояния системы является слишком грубой абстракцией, то есть временем выполнения такого действия в реальной системе нельзя пренебречь. В этом случае можно ввести два мгновенных события. Первое представляет начало действия, второе представляет конец действия, а само действие, которое занимает какое-то время, представляется промежуточным состоянием, в котором будет находиться система в перио-выполнения этого действия. Например, при моделировании банка появление новой инвестиции можно считать событием. Для более детального анализа появление новой инвестиции можно описать как некоторый процесс, имеющий свое начало, конец и промежуточные стадии (состояния).
Событиями в моделях на AnyLogic являются срабатывание таймера, получение сообщения в порт, смена значения логического условия, определенного на непрерывных переменных, срабатывание перехода стейтчарта, нажатие кнопки внешним пользователем и т. д. Действия, связанные с событиями, обычно представляются выполнением некоторого кода языка Java (вызовом одной или нескольких функций, выполнением последовательности операторов и т. п.), и нужно ясно понимать, что, хотя при имитации поведения системы (при прогоне программы) выполнение этого кода обязательно занимает некоторый интервал физического времени, модельное время при этом не изменяется. Каждое событие может порождать новые события; например, в последовательности операций, выполняемых при наступлении данного события, может находиться операция взведения таймера на следующий интервал времени. Действия, связанные с обрабатываемым событием.
могут быть у состояний при событии изменения состояний, у переходов при выполнении переходов, у таймеров при событии их срабатывания, у портов при событии получения ими сообщения и т. п. Выполнение события таймера является выполнением кода, заданного в поле Действие при срабатывании таймера. Выполнение события перехода является выполнением набора действий, связанных с переходом в поле Действие окна свойств перехода. В результате выполнения события может измениться дискретное состояние модели: могут начать ожидание другие переходы, запуститься другие таймеры, измениться текущие состояния стейтчартов, стать активными другие уравнения. При выполнении этих действий могут измениться переменные модели и состояние, могут быть добавлены новые события или удалены некото-рые из ранее запланированных событий.
Если несколько событий наступило в один и тот же момент модельного времени, обработка их исполнительной системой AnyLogic выполняется в каком-либо последовательном порядке. Изменение состояния модели в результате наступления одного события не может перекрываться другими дей-ствиями. За этим исполнительная система следит автоматически.
В чисто событийно-дискретных моделях модельное время изменяется дискретно, от события к событию. Модель "живет" (изменяя свое состояние) только в моменты наступления событий. Поэтому структура имитационной модели таких систем своеобразна. В ней есть генераторы событий, каждое событие может изменить состояние системы и породить другие события. Система моделирования ведет календарь событий (обычно скрытый от Пользователя), в котором все эти события учитываются. Исполнитель ("движок" модели) выбирает наиболее раннее событие из календаря и исполняет действия, с ним связанные.
Таймеры
Таймер является одним из основных инструментов порождения будущих со-бытий в модели. В AnyLogic можно использовать статические и динамиче-ские таймеры. Статический таймер вводится как составной элемент струк-туры активного объекта. Таймер может быть взведен (установлен) на некоторый интервал времени, его срабатывание по исчерпании этого интер-вала является событием, с которым можно связать действие по изменению состояния системы. Одной из операций этого действия может быть новая установка таймера. Одно наступившее событие порождает одно или не-сколько событий в будущем. Именно так организован циклический таймер, который был использован в модели счетчика. Динамический таймер может быть порожден с каждым наступлением некоторого события (например прибытие заявки для обслуживания). При порождении динамический тай-мер устанавливается на некоторый таймаут, по исчерпании которого выпол-няется некоторое действие, и таймер уничтожается.
Стейтчарты
О стейтчартах уже говорилось раньше. Стейтчарты— это удобное расширение нотации графов переходов, позволяющее визуально представить поведение сложных систем. Срабатывание (выполнение) перехода в стейтчарте является событием, он происходит мгновенно (в модельном времени), при этом может быть выполнено действие по изменению переменных состая ния, так же как генерация будущих событий. Событиями, связанными с переходами в стейтчартах, являются также вход в состояние (элементарное или гиперсостояние) и выход из состояния. Каждое из этих событий может быть связано с действием, которое будет выполняться при его наступлении. В модели пешеходного перекрестка мы использовали эту возможность для изменения значения булевых переменных, управляющих зажиганием светофоров.
6.5.4. Непосредственное
порождение событий
В AnyLogic события также являются частью языка моделирования: они мо гут порождаться непосредственно. Для этого, например, служит функция fireEvent (<сигнал>), вызываемая у стейтчарта. Переход стейтчарта может сработать по приходу сигнала. Сигналом может являться объект любого класса Java, например, просто строковая константа, как это было в модели пешеходного перехода.
Сообщения и порты
Сообщения в AnyLogic являются пассивными статическими объектами, они могут использоваться для передачи информации. Сообщения передаются через порты. Сообщения соответствуют заявкам в традиционных системам событийно-дискретного моделирования.
Шаги выполнения модели
Выполнение модели в AnyLogic состоит из последовательности шагов, каж дый из которых относится к одному из двух типов: временной шаг и шаг обработки события, происходящего в модели.
В AnyLogic запланированные для выполнения события хранятся в очереди, каждое из них в первом приближении привязано к некоторому моменту мо дельного времени в будущем. Такими событиями могут быть, например срабатывание активного таймера или срабатывание временного перехода Не нужно путать эти "внутренние" события с событиями, являющимися частью языка моделирования AnyLogic.
Временной шаг состоит в обновлении (продвижении) модельного времени к новому значению. При этом значения "дискретных" объектов модели (со-стояния стейтчартов, портов, событий и т. п.) не изменяются, а изменяются
только значения зависящих от времени переменных в результате решения наэтом шаге системы активных алгебро-дифференциальных уравнений (ес-диони есть). Затем проверяются ожидающие события.
Если есть хотя бы одно ожидающее событие, связанное с данным моментом модельного времени, выполняется шаг обработки событий. Во время этого шага значение модельного времени остается неизменным (это и означает, что все события выполняются с точки зрения модельного времени мгновен-но). Из событий, ожидающих выполнения в данный момент, выбирается некоторое событие. Пользователь может выбрать либо детерминированный, либо случайный алгоритм упорядочивания этих событий. Для выбранного события обрабатываются связанные с ним действия. Если в данный момент модельного времени нет ни одного ожидающего события, происходит выполнение следующего временного шага.