AnyLogic поддерживает создание действительно динамических моделей с динамически меняющейся структурой и взаимосвязями компонентов
Вы можете соединять порты во время работы модели с помощью методов connect() и map() и рассоединять их с помощью методов disconnect() и unmap(). Изменяя взаимосвязи объектов во время моделирования, Вы можете легко моделировать системы с замысловатой топологией и с динамически меняющейся структурой, например, системы с перемещающимися объектами.
| Тип соединения | Метод для соединения |
Метод для отсоединения |
| Порт и порт вложенного объекта | port.map(source.out); |
port.unmap(source.out); |
|
source.out.map(port); |
||
| Порты вложенных объектов | source.out.connect(sink.in); |
source.out.disconnect(sink.in); |
![]() |
||
| Порт и диаграмма состояний | port.map( statechart ); |
port.unmap( statechart ); |
![]() Диаграмму состояний нельзя
соединять с портом вложенного объекта. |
||
Класс порта Port также предоставляет метод, производящий отсоединение порта от всех соединенных с ним портов и диаграмм состояний:
disconnectAndUnmapAll();
Если Вы динамически измените топологию связей (с помошью методов портов connect()/disconnect() или map()/unmap() портов объектов Основной библиотеки), то порты не заметят этого изменения и будут продолжать взаимодействовать согласно топологии соединений, установленной при запуске.
Чтобы привести информацию о соединениях, хранимую в портах, в соответствие в реальной топологией связей, нужно вызвать метод refreshConnections() у того порта, у которого динамически было добавлено или удалено какое-то соединение. Например, если Вы динамически соедините порт out объекта myService, то нужно будет вызвать:
myService.release.out.refreshConnections()
Демо модель: Connecting Enterprise Library Objects Dynamically
Эта демо модель показывает пример динамического соединения объектов Основной библиотеки. Она содержит два отдельных участка диаграммы процесса, которые Вы можете соединить щелчком по расположенной между ними кнопке. Чтобы понять реализацию подхода, Вы можете посмотреть на поле Действие этой кнопки.