Используя параметры агента от основного к другому агенту? - PullRequest
0 голосов
/ 27 мая 2019

Для проекта я пытаюсь выбрать правильный вывод, если параметр созданного агента равен true. Агент создается в главном, но переходит в другой агент для выбора выходных данных. Если я использую выбор в основном и использую оператор для параметра в качестве условия, он работает нормально. Всякий раз, когда он входит в агент, и я использую одно и то же утверждение, он выдает ошибку (Описание: product1 не может быть разрешен или не является полем. Расположение: testCase5 / Transport / selectOutput - SelectOutput).

Я пытался использовать разные условия, такие как main.agent.product1. Не могу решить проблему. Я знаю, что это может быть связано с декларацией, но сейчас я ничего не понимаю.

// для условия, которое работает, если я помещаю selectOutput в основной

agent.product1

// для условия в агенте я пробовал то же самое, но не работало. также попробовал

main.agent.product1 // Выдает ту же ошибку, но для (Описание: агент не может быть разрешен или не является полем.)

(Main) agent.product1 // И еще несколько

1 Ответ

0 голосов
/ 27 мая 2019

В AnyLogic каждый блок потока проекта (независимо от того, из библиотеки моделирования процесса, пешеходной библиотеки или другой) имеет тип агента, который проходит через него, определенный в его свойствах. Вы можете найти этот параметр как Тип агента в свойствах блока под Дополнительно .

block agent type definition

Если вам не удастся установить это значение правильно (то есть этот параметр равен типу агентов, которым вы позволяете проходить через него), он все равно будет проходить, НО: вы не сможете получить доступ к определенным свойствам типа агента.

При этом обычно вам даже не нужно думать, потому что в AnyLogic есть автоматизм: первый блок вашего потока процесса, обычно блок-источник или блок ввода, является единственным блоком, в котором вы должны сделать правильная настройка, все прикрепленные блоки получают его автоматически!

source agent type settings

Однако это не работает, когда:

  • У вас есть отдельные потоки (например, вы выходите из одного потока через Exit-блок и вводите другой с помощью Enter). Вам придется вручную установить правильную настройку также для первого блока второго потока процесса.

  • Ваш процесс продолжается внутри другого агента / пользовательского блока, как в вашем примере. AnyLogic не понимает, что поток процесса внутри вашего пользовательского блока логически связан с внешним потоком процесса в main. Вы должны вручную снова указать тип агента, проходящий через первый блок вашего процесса внутри вашего пользовательского блока.

...