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

avatar
John
9 августа 2021 в 06:44
145
1
1

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

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

Когда Контейнер помещается в Аттрактор в пределах досягаемости крана Блока, процесс внутри Блока<37024096140 вызывается. Этот процесс содержит блоки Entry, MoveByCrane и Exit. В блоке 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)

avatar
Benjamin
9 августа 2021 в 07:07
1

Да.

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

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

.