Динамические события используются для планирования неограниченного числа событий, выполняющих схожие действия, которые могут быть запланированы независимо и параллельно друг с другом. Например, канал связи, параллельно передающий произвольное количество сообщений, может быть смоделирован с помощью динамических событий, создаваемых для каждого сообщения.
Существенным преимуществом динамического события является возможность планирования нескольких параллельно работающих экземпляров одного и того же класса динамического события:
События и динамические события
Другой особенностью динамических событий является возможность инициализации создаваемых экземпляров одного класса динамического события различными данными. При планировании происхождения каждого такого события, Вы можете передатьэтому событию информацию, которую нужно учесть при выполнении действия, с помощью его параметров. Все параметры динамического события доступны в коде действия этого события.
Однако, стоит отметить, что динамические события не столь просты в обращении, как события, поэтому мы рекомендуем использовать их только в следующих случаях:
Простая демо модель: Dynamic Event Models Product Delivery
Чтобы
задать динамическое событие
из
палитры Основная на
диаграмму класса активного объекта.
Поскольку
AnyLogic генерирует Java класс для каждого динамического
события,
которое Вы добавляете на диаграмму класса активного объекта, Вы должны
следовать правилам именования Java. Имя динамического события должно
начинаться с заглавной буквы. Имя
– Имя динамического события.
Имя используется для идентификации события и доступа к нему из кода.
Поскольку
AnyLogic генерирует Java класс для каждого динамического
события,
которое Вы добавляете на диаграмму класса активного объекта, Вы должны
следовать правилам именования Java. Имя динамического события должно
начинаться с заглавной буквы.
Отображать имя – Если опция выбрана, то имя динамического события будет отображаться в графическом редакторе.
Исключить – Если опция выбрана, то динамическое событие будет исключено из модели.
На презентации – Если опция выбрана, то динамическое событие будет отображаться на презентации во время выполнения модели.
Параметры – Здесь Вы можете задать параметры динамического события, с помощью которых можно передать событию информацию, которую нужно учесть при выполнении его действия. Каждый параметр задается в отдельной строке таблицы: Вы задаете Имя параметра, его Тип и при необходимости - Значение по умолчанию. При планировании нового динамического события, Вы сможете передать событию какие-то другие значения его параметров, либо оставить значения, заданные по умолчанию. Поскольку порядок следования параметров в таблице имеет принципиальное значение (при планировании нового динамического события, Вы должны будете передать значения этих параметров в том же самом порядке, в котором они следуют в этой таблице), AnyLogic позволяет менять порядок их следования в таблице с помощью кнопок
и
.
Чтобы удалить параметр, выделите соответствующую строку таблицы и
щелкните по кнопке
.
Действие – Java код, выполняемый при происхождении данного события. В коде действия доступны все параметры динамического события (если таковые имеются).
Планирование динамических событий отличается от планирования событий. Чтобы запланировать еще один экземпляр класса динамического события, используйте автоматически генерируемый AnyLogic метод:
void
create_<имя динамического события>( double timeout,
<тип первого параметра> parameter1,
<тип второго
параметра>
parameter2,
…)
Таймаут события (время, через которое оно сработает) передается в качестве первого параметра, далее Вы должны передать значения параметров этого события в том порядке, в котором они заданы в таблице Параметры (если они есть).
Отсчет времени начинается в момент планирования динамического события. Когда истекает время таймаута события, AnyLogic выполняет действие этого события и затем удаляет это динамическое событие (то есть, этот экземпляр класса динамического события). Если перед происхождением события вызывается его метод reset(), то это динамическое событие удаляется и его действие произведено не будет.
Обратите внимание, что
метод create_...()
является единственным разрешенным способом планирования динамических
событий. Использование
Java конструкторов наподобие new MyDynamicEvent() запрещено.
Вы можете программно управлять запланированными динамическими событиями с помощью следующих методов:
void reset() - Отменяет запланированное событие и удаляет его из активного объекта.
double getRest() - Возвращает время, остающееся до запланированного происхождения данного события.
Но в отличие от события, которое доступно просто по своему имени, обратиться к динамическому событию представляется куда более сложной задачей.
Вы можете использовать метод getDynamicEvents()класса активного объекта, который возвращает все активные в текущий момент времени динамические события данного активного объекта. Этот метод может быть полезен, например, в том случае, если Вы хотите отменить все динамические события этого объекта.
Однако отличить одно динамическое событие от другого будет
достаточно трудно. Поэтому Вам нужно будет самостоятельно хранить
где-то ссылки на активные динамические события. Вы можете
создать коллекцию
dynamicEvents
и добавлять в эту коллекцию все создаваемые динамические события:
MyDynamicEvent
de = create_MyDynamicEvent(7.5);
dynamicEvents.add(de);