向当前代理发送消息

问题描述 投票:0回答:1

有没有办法直接向当前执行操作的代理发送消息?例如,我想使用等待消息转换来阻止群体叉车中的代理在离开某个区块之前继续前进。在这种情况下,我希望叉车前进到服务区并在队列中等待。一旦他们离开队列,我想向代理发送一条消息,让他们知道可以进入下一个状态。在这种情况下,代理将离开服务块,穿过出口块,下一个状态将使用 main.enter1.take(this); 接取代理。并将代理移至水槽。

我无法找到任何方法将消息发送给正确的代理。如果我将消息发送给群体中的任何代理,或者它必须是当前正在离开区块和状态图中的代理,这会有什么不同吗?这是我对情况的描述。

假设行为图片

或者,也许可以将消息发送给群体中的任何随机代理?我不确定当前的代理是否必须是接收该消息的人。请记住,我只希望当前代理在离开区块时对消息做出反应

向群体中的随机代理发送消息的图片。

我尝试通过在服务块的退出字段中写入以下代码来向当前代理发送消息:

send("I'm Ready", agent);

但是智能体并没有按预期推进状态。在其他地方,我有一个“输入”字段:

Forklift fl=findFirst(forklifts,f->f.inState(f.idle));
if(fl!=null){
    send(agent,fl);
}

这段代码确实成功地向状态图发送了一条消息,但我再说一次,我觉得我不需要这里的 findFirst 函数。

问题可能是我只需要使用 fireEvent 函数在状态图中的某处添加一行吗?

更新:已解决

我已经想通了!为了访问叉车代理,我成功地使用了以下代码:

Forklift fa=agent.flLink.getConnectedAgent();
send("Go", fa);
traceln("Message Sent");

我将保留这篇文章以帮助其他可能有相同问题的人。

anylogic messaging statechart
1个回答
0
投票

更新:已解决

我已经想通了!为了访问叉车代理,我成功地使用了以下代码:

Forklift fa=agent.flLink.getConnectedAgent();
send("Go", fa);
traceln("Message Sent");

这是因为流程中的代理类型是托盘,而我尝试发送消息的代理类型是叉车类型;因此,我向托盘代理发送消息,但叉车代理没有看到该消息。我将保留这篇文章以帮助可能有相同问题的其他人。

© www.soinside.com 2019 - 2024. All rights reserved.