#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(...)