Определим основные понятия и термины, используемые в моделировании.
Система - множество объектов (например, людей и машин), которые взаимодействуют одновременно для достижения одной или большего количества целей.
Модель - абстрактное представление системы, обычно содержит структурные, логические или математические отношения, которые описывают систему в терминах состояний, объектов и их свойств, множеств, процессов, событий, действий и задержек.
Состояние системы - множество переменных, которые содержат всю информацию, необходимую для описания свойств системы в любое время.
Объект - любой элемент или компонент в системе, который должен быть представлен в модели в явном виде (например, обслуживающее устройство, клиент, машина).
Свойство или атрибут - свойства данного объекта (например, приоритет ожидающего клиента, маршрут процесса выполнения работ в цеху).
Список - множество (постоянное или временное) связанных объектов, упорядоченное некоторым логическим способом (например, все клиенты, находящиеся в настоящее время в очереди ожидания, упорядочены по принципу «раньше прибыл, раньше обслужился» или по приоритету).
Событие - мгновенно возникающее изменение состояние системы (например, прибытие нового требования).
Уведомление о событии - запись события, которое произойдет в потоке событий или в некотором будущем времени наряду с любыми связанными данными, необходимыми для обработки события (запись всегда включает тип события и время события).
Список событий - список намеченных будущих событий, упорядоченных по времени возникновения, известный также как список будущих событий (СБС).
Действие - продолжительность времени указанного промежутка (например, время обслуживания или время между поступлениями заявок), для которого известно, когда оно начинается и заканчивается (хотя оно может быть определено в терминах статистического распределения).
Задержка - продолжительность времени неопределенного промежутка, для которого неизвестно заранее, когда он заканчивается (например, задержка клиента в очереди по правилу «последний пришел - первый обслужился», так как начало обслуживания зависит от будущих поступлений).
Модельное время - неотрицательная возрастающая величина, отражающая течение времени в имитационной модели.
Часы - переменная, отражающая протекание времени моделирования, называется в примерах ЧАСЫ (CLOCK).
Дискретно-событийное моделирование - моделирование системы в дискретные моменты времени, когда происходят события, отражающие последовательность изменения состояний системы во времени. В дальнейшем такое моделирование будем называть имитационным. Рассматриваемые здесь системы динамические, то есть изменяются во времени. Поэтому состояние системы, свойства объекта и число активных объектов, параметров, действий и задержек - все они функции времени и постоянно изменяются в процессе моделирования.
Для СМО с одним устройством обслуживания событиями будут поступление требования и конец его обслуживания устройством. Начало обслуживания - это условное событие, которое зависит от состояния прибора (занят или свободен) и числа требований, находящихся в очереди. Задержку иногда называют условным ожиданием, в то время как действие называют безусловным ожиданием. Действиями будут время между поступлениями требований и время обслуживания прибором. Завершение действия - событие, часто называемое первичным событием, для управления которым в СБС помещается уведомление о событии. Напротив, управление задержками связано с помещением объекта в другой список, возможно представляющий очередь ожидания до такого времени, когда системные условия разрешат обработку требования. Окончание задержки иногда называют условным или вторичным событием, но такие события не представлены в соответствующих уведомлениях о событиях и не появляются в СБС.
Пример. Представим себе, что есть магазин, в котором один продавец и он же кассир. Если пришедший покупатель застает продавца свободным, то продавец немедленно приступает к его обслуживанию. Продавец переходит в состояние «занятый». Если продавец занят обслуживанием покупателя и в это время приходит другой (другие) покупатели, то они становятся в конец очереди к продавцу. Когда продавец закончил обслуживание, то он переходит в состояние свободный.
Если в очереди есть покупатели, то продавец «выбирает» для обслуживания первого покупателя из очереди. Очередь уменьшается на единицу. Все остальные покупатели в очереди, если они есть, продвигаются на одну позицию вперед. Если в очереди нет покупателей, то продавец остается в состоянии «свободный» до прихода следующего покупателя.
В табл. 1.1 представлены интервалы времени между приходами покупателей в магазин и требуемыми временами их обслуживания продавцом, а на рис. 1.3 проведено графическим методом «ручное» моделирование СМО с одним устройством.
С точки зрения объектного подхода имеются динамические объекты - требования (ПОКУПАТЕЛИ) и некоторый ресурс - устройство обслуживания (статический объект ПРОДАВЕЦ), которое они используют. Если требование претендует на ресурс, а он занят, то оно становится в ОЧЕРЕДЬ к ресурсу. ОЧЕРЕДЬ может быть отдельным объектом или просто списком, связанным с ресурсом. Примем за правило обслуживания - FIFO.
Таблица 1.1
№ покупателя | ||||||||
Время поступления, | ||||||||
Время обслуживания, |
Для каждой пары «требование - ресурс» мы хотим определить, как долго требование j будет использовать ресурс R, т.е. необходимо определить интервал времени, когда требованию j назначен ресурс R и когда оно освободит этот ресурс. Однако, прежде чем ресурс будет назначен требованию j, он должен быть запрошен. В общем случае требование может ожидать в очереди до назначения ресурса.
Опишем алгоритм работы системы с точки зрения «жизненного цикла» ПОКУПАТЕЛЯ, т.е. от момента его прихода в магазин до момента выхода из магазина. Так как покупатели непрерывно приходят в магазин на протяжении некоторого периода времени наблюдения за системой (время, в течении которого моделируется система), то необходимо обеспечить поток ПОКУПАТЕЛЕЙ путем их создания в модели (генерации в некоторые моменты времени - моменты их прихода в магазин). Для генерации ПОКУПАТЕЛЕЙ используем специальную подпрограмму ГЕНЕРАТОР (в языке GPSS этой подпрограмме соответствует блок GENERATE). Алгоритм ее работы следующий:
1. Создать динамический объект ПОКУПАТЕЛЬ в виде структуры данных, включающей в себя поля: номер покупателя - j, момент его прихода - , а также при необходимости свойства покупателя или его атрибуты (например, его приоритет). Запланировать событие - приход покупателя j на момент времени - т.е. создать уведомление о событии в СБС.
2. Запланировать следующее событие для покупателя j -ЗАПРОС-НАЗНАЧЕНИЕ ресурса R (ПРОДАВЦА) на момент времени . Запланировать приход следующего динамического объекта ПОКУПАТЕЛЬ j + 1, т.е. определить событие прихода следующего покупателя .
Описание процесса использования ресурса требованием целесообразно разбить на три подпрограммы.
Первая - это ЗАПРОС-НАЗНАЧЕНИЕ ресурса R требованию / (в языке GPSS этой подпрограмме соответствует блок SEIZE). Алгоритм ее работы следующий:
1. Если ресурс R (ПРОДАВЕЦ) может быть сразу назначен требованию у, то изменить состояние ресурса R на «занятый». Запомнить момент начала обслуживания требования Передать управление подпрограмме ОБСЛУЖИВАНИЕ требования j.
2. Если ресурс R занятый, то поставить требование j в ОЧЕРЕДЬ к ресурсу R.
Вторая подпрограмма - ОБСЛУЖИВАНИЕ требования j (в языке GPSS этой подпрограмме соответствует блок ADVANCE). Ее алгоритм работы очень простой - определить событие «конец обслуживания требования j» как (где - время обслуживания в устройстве). Т.е. создается уведомление о событии в СБС для передачи управления подпрограмме освобождения ресурса R требованием j.
Третья подпрограмма - ОСВОБОЖДЕНИЕ ресурса R требованием j (в языке GPSS этой подпрограмме соответствует блок RELEASE). Алгоритм ее работы следующий:
1. Изменить состояние ресурса R (ПРОДАВЕЦ) на «свободный». Передать управление подпрограмме УНИЧТОЖЕНИЕ требования.
2. Проверить, есть ли требования в ОЧЕРЕДИ к ресурсу R? Если есть, то выбрать требование из ОЧЕРЕДИ и запланировать для него событие ЗАПРОС-НАЗНАЧЕНИЕ ресурса R.
Подпрограмма УНИЧТОЖЕНИЕ требования (в языке GPSS этой подпрограмме соответствует блок TERMINATE) необходима для уничтожения структуры данных каждого требования. Если требования не уничтожать, то со временем они переполнят память компьютера.
Кроме перечисленных подпрограмм необходима программа управления процессом моделирования (ПУМ), которая запускает процесс моделирования и отслеживает движение каждого требования по модели путем вызова названных подпрограмм обработки событий. Другое назначение этой программы - вести список упорядоченных во времени событий СБС и продвигать ЧАСЫ модельного времени от события к событию. В языке GPSS функции ПУМ выполняет программа-интерпретатор (транслятор).
Список будущих событий содержит все уведомления для событий, которые были намечены, чтобы произойти в будущем времени. Механизм продвижения времени моделирования, гарантирующий, что все события происходят в правильном хронологическом порядке, основан на СБС.
Планирование будущего события означает, что в момент начала действия его продолжительность вычисляется или определяется (например, из заданного статистического распределения), чтобы установить время конца действия и занести это событие вместе с его временем в СБС. В реальном мире большинство будущих событий не намечено, они просто происходят (как, например, случайные поломки оборудования или случайные поступления покупателей). В модели такие случайные события представлены концом некоторого действия, которое запланировано на будущее модельное время.
В любое данное время моделирования СБС содержит все предварительно намеченные будущие события и связанные с этими событиями времена В СБС события упорядочены в хронологическом порядке по времени, то есть времена событий удовлетворяют условиям
(1.12)
Время значения ЧАСОВ - текущее значение времени моделирования. Событие, связанное со временем , называется предстоящим событием, то есть это следующее событие, которое произойдет. После того, как отображающие состояния системы ЧАСЫ = во время моделирования были модифицированы, ЧАСЫ продвигаются ко времени моделирования ЧАСЫ = , предстоящее намеченное событие удаляется из СБС и выполняется подпрограмма события. Выполнение подпрограммы предстоящего события означает, что отображено новое состояние системы в течение времени , которое создано на основании старого состояния модели во время и характера предстоящего события. Во время новые будущие события могут произойти или не произойти, но если любые из них намечены, то создаются намеченные события и помещаются в соответствующие позиции в СБС. После того, как новое отображение состояния системы в течение времени было модифицировано, ЧАСЫ продвигаются ко времени нового предстоящего события, и выполняется подпрограмма этого события. Такой процесс повторяется до окончания имитации. На рис. 1.4 показана структурная схема имитационной модели.
В момент начала моделирования (время моделирования =0) ПУМ передает управление подпрограмме ГЕНЕРАТОР, которая определяет момент прихода первого покупателя и намечает событие ЗАПРОС-НАЗНАЧЕНИЕ ресурса R в СБС на время = . Так как больше событий в системе нет, то ЧАСЫ переводятся на значение времени , вызывается подпрограмма ГЕНЕРАТОР и подпрограмма ЗАПРОС-НАЗНАЧЕНИЕ ресурса R.
Подпрограмма ГЕНЕРАТОР определяет будущее событие (момент прихода второго покупателя ) и намечает это событие в СБС на время .
Подпрограмма ЗАПРОС-НАЗНАЧЕНИЕ проверяет состояние ресурса (ПРОДАВЦА). Так как ресурс R свободный, то он назначается первому покупателю и состояние ресурса R изменяется на «занятый». Запоминается момент начала обслуживания требования . Передается управление подпрограмме ОБСЛУЖИВАНИЕ покупателя 1.
Подпрограмма ОБСЛУЖИВАНИЕ определяет событие конца обслуживания покупателя 1, как , т.е. создается уведомление о будущем событии в СБС для передачи управления подпрограмме ОСВОБОЖДЕНИЯ ресурса R требованием 1 на время .
Таким образом, в СБС имеется два элемента - один с намеченным событием появления покупателя 2 на время , а второй с намеченным событием окончания обслуживания покупателя 1 на время . Если время , то ЧАСЫ будут переведены на время , т. е. снова будет вызвана подпрограмма ГЕНЕРАТОР и сгенерировано появление покупателя 2. В этот же момент времени произойдет вызов подпрограммы ГЕНЕРАТОР, которая наметит в СБС появление покупателя 3 на время и вызов подпрограммы ЗАПРОС-НАЗНАЧЕНИЕ ресурса R, но так как ресурс занят обслуживанием покупателя 1, то покупатель 2 будет поставлен в очередь к ресурсу R.
В СБС снова окажутся два элемента - один для намеченного события появления покупателя 3 на время , а второй с намеченным событием окончания обслуживания покупателя 1 на время . Если время , то ЧАСЫ будут переведены на время , т. е. будет вызвана подпрограмма ОСВОБОЖДЕНИЕ ресурса R покупателем 1.
Она изменить состояние ресурса R (ПРОДАВЕЦ) на «свободный» и передаст управление подпрограмме УНИЧТОЖЕНИЕ требования. Затем проверит, есть ли требования в ОЧЕРЕДИ к ресурсу R, и выберет покупателя 2 из ОЧЕРЕДИ, наметив для него событие для подпрограммы ЗАПРОС-НАЗНАЧЕНИЕ ресурса R.
Вызванная в это же модельное время подпрограмма УНИЧТОЖЕНИЕ разрушит структуру данных (удалит ссылку на адрес) для покупателя 1. Эта же подпрограмма при необходимости могла бы вычислить время пребывания покупателя 1 в системе, как - (, для дальнейшей статистической оценки времени пребывания покупателей в системе.
В дальнейшем жизненный цикл других покупателей в системе будет происходить по описанному выше алгоритму.
Остается открытым вопрос об окончании процесса моделирования. Возможны три варианта:
1. Через модель пройдут все покупатели, сгенерированные ГЕНЕРАТОРОМ, например, 100 покупателей. В этом случае в СБС после обслуживания последнего, сотого, покупателя не будет ни одного намеченного события.
2. Если поток покупателей от генератора не ограничен (например, генерируется неограниченный пуассоновский поток), то моделирование можно закончить после прохождения через модель определенного количества покупателей, например, 1000. Для этого в подпрограмме УНИЧТОЖЕНИЕ надо поставить счетчик покупателей и прекратить моделирование после 1000 покупателей. В языке GPSS такой счетчик организуется в команде START, которая начинает процесс моделирования.
3. Необходимо промоделировать работу системы в течение заданного периода времени, например, 480 мин. В этом случае можно при каждом продвижении ЧАСОВ модельного времени f проводить сравнение текущего времени со значением 480. Как только значение модельного времени будет больше или равно 480, необходимо прекратить моделирование. Однако такой способ неудачный, так как может сильно замедлить работу модели из-за проверки условия. Поэтому обычно поступают следующим образом. Генерируют специальное требование-таймер с помощью еще одной подпрограммы ГЕНЕРАТОР с намеченным временем входа в модель = 480. Требование-таймер после генерации сразу же направляется в еще одну подпрограмму УНИЧТОЖЕНИЯ, в которой ставят счетчик требований на единицу. По этому счетчику прекращают моделирование. В этом случае в СБС будет все время находиться элемент для требования-таймера со временем наступления события 480. Как только это событие станет предстоящим намеченным, ЧАСЫ будут переведены на время 480 и моделирование прекратится.
В процессе моделирования обычно собирается статистическая информация о работе модели при каждом продвижении ЧАСОВ модельного времени. Такой информацией может быть величина очереди, время пребывания в очереди и устройстве обслуживания, загрузка устройства, состояние прибора и другие параметры. Для сбора этой информации обычно создается подпрограмма ВЫБОРОЧНЫЙ ИЗМЕРИТЕЛЬ, которая накапливает ее и по окончании моделирования выдает стандартный статистический отчет. В языке GPSS такая статистическая информация накапливается в системных числовых атрибутах (СЧА) и доступна в процессе моделирования только на считывание. Доступ к СЧА дает возможность управлять процессом движения требований, например, ограничивать размер или время нахождения в очереди.
В этой главе даны основы организации моделирования на примере простой СМО. В языке GPSS обычно используются более сложные алгоритмы, описанные в параграфе 4.22.