Невозможно получить доступ к отправителю сообщения в anylogic - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь получить доступ к отправителю сообщения (отправитель является агентом пользователя), чтобы оценить соединение между отправителем и получателем как условие для перехода. В справке anylogic говорится, что вы можете использовать msg для доступа к сработавшему содержимому сообщения, а отправитель - к отправителю.

Я пытался использовать sender = msgSender

, где msgSender - переменная. Однако я получаю сообщение об ошибке sender cannot be resolved to a variable

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Элемент connections агента (по умолчанию Ссылка на агенты ) получает все сообщения, отправленные этому агенту (которые затем по умолчанию передаются любым диаграммам состояний, но вы можетеконтролировать это в свойствах connections). Исключение составляют случаи, когда сообщение поступает от двунаправленного соединения (в этом случае сообщение будет доступно только в , Ссылка на агенты в агенте 'дальнего конца').

Если у вас есть однонаправленный набор соединений от матери к ребенку (скажем, от агента типа «Мать» к агенту типа «Ребенок», с Связью с агентами в программе «Мать» с именем children), то вы можете получить доступ ксообщение и отправитель (используя ключевые слова, как вы упомянули в справке) в элементе connections вашего дочернего агента по умолчанию.

Также необходимо убедиться, что вы отправляете сообщение всем подключенным черезсоответствующая ссылка на агентов . Таким образом, вам нужно что-то вроде:

(a) В агенте Матери: children.sendToAllConnected("Hello");

(b) В агенте Child connections При получении сообщения действие: traceln("Got message " + msg + " from sender " + sender);

(В вашем случае, очевидно, вы бы имели логику делать что-то зависящее от отправителя.)

PS Вы сказали, что пытаетесь сделать sender = msgSender. Это не имеет смысла: вы пытались установить отправителя сообщения на что-то? Вы не можете сделать это: sender доступно только в действии Ссылка на агентов получающего агента и всегда ссылается на фактического агента отправителя. (Например, вы не можете «подделать» отправителя, и вам никогда не придется его устанавливать.)

0 голосов
/ 11 ноября 2019

Отправьте ваше сообщение объекту Link to agent, а не напрямую диаграмме состояний.

Вы можете получить доступ к отправителю, если ваше сообщение приходит через блок Link to agent, такой как блок по умолчанию, называемый connections,см. ниже: enter image description here

В нем вы можете решить переслать сообщение на диаграмму состояний (если ваш отправитель правильный).

...