Как мне переместить агенты AnyLogic из одного пространства в другое?

#anylogic #agent #spaces

Вопрос:

В моей модели AnyLogic агенты контейнеров перемещаются внутри основного агента в разные места.

Main содержит несколько экземпляров агентов блокировки в определенных местах. Блок содержит многомостовой мостовой кран, который должен поднимать контейнер и перемещать его на локальное хранение.

Когда Контейнер помещается на Аттрактор в пределах досягаемости крана Блока, вызывается процесс внутри Блока. Этот процесс содержит блоки входа, перемещения и выхода. В блоке MoveByCrane на шаге захвата AnyLogic выдает мне следующую ошибку:

 Exception during discrete event execution
root.blocks[0].moveContainerIn.seize:
The agent root.containers[0] and the crane com.anylogic.engine.markup.OverheadCrane@50b7349f have different spaces
    at com.anylogic.engine.Engine.error(Unknown Source)
    at com.anylogic.engine.Agent.error(Unknown Source)
    at com.anylogic.engine.Utilities.error(Unknown Source)
    at com.anylogic.libraries.material_handling.MHLBlock_xjal.error(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane.j(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane.k(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane.getHookDestinationPoint(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane.a(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane.a(Unknown Source)
    at com.anylogic.libraries.material_handling.SeizeCrane$1.onEnter(Unknown Source)
    at com.anylogic.libraries.processmodeling.Delay.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.Delay.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.Delay$9.onEnter(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.InPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.InPort.receiveImmediately(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.forwardReadyEntityNotification(Unknown Source)
    at com.anylogic.libraries.processmodeling.InputBlock$1.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.b(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutPort.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock$2.a(Unknown Source)
    at com.anylogic.libraries.processmodeling.OutputBlock$2.action(Unknown Source)
    at com.anylogic.libraries.processmodeling.AsynchronousExecutor_xjal$a.execute(Unknown Source)
    at com.anylogic.engine.LibraryEventHandler$b.execute(Unknown Source)
    at com.anylogic.engine.Engine.c(Unknown Source)
    at com.anylogic.engine.Engine.hi(Unknown Source)
    at com.anylogic.engine.Engine.f(Unknown Source)
    at com.anylogic.engine.Engine$b.run(Unknown Source)
 

Все агенты блока расположены в разных координатах внутри main. Каждый из них имеет свою собственную координатную привязку/начало координат. (Расположение (0,0) в блоке не совпадает с (0,0) в main.) Таково ли значение термина «пробелы» в сообщении об ошибке?

Есть ли способ переместить агента из одного пространства в другое?

Должен ли я удалить (потопить) агента из одного пространства и создать новый в другом?

Ответ №1:

ДА.

Самый простой способ-использовать Enter и Exit блокировать Main типы агентов и отправлять агентов в разные пространства таким образом. В Enter свойствах укажите местоположение в типе агента, и это заставит вашего прибывшего агента «переключиться» на новое пространство.

Если вы не используете блоки моделирования процессов, вам необходимо позвонить setEnvironment() , а затем определить местоположение агента в его новой среде с помощью setLocation(...)