AnyLogic中如何向当前执行动作的Forklift Agent直接发消息?
如何向当前执行动作的特定Agent发送消息(AnyLogic场景)
问题场景
需要使用wait for message过渡,限制forklifts群体中的Agent在离开特定模块前继续推进:
- 叉车Agent进入service模块的队列等待,离开队列后,需向该Agent发送消息,触发其进入下一状态:离开service模块、经过exit模块后,通过
main.enter1.take(this);将Agent移至sink。
核心疑问
- 向群体中任意Agent发送消息,与向当前正在离开模块且处于状态图中的Agent发送消息是否有区别?
- 是否可以向群体中随机Agent发送消息?
- 仅希望当前Agent在离开模块时响应消息,该如何实现?
尝试过的方法
- 在service模块的
On exit字段写入代码,但Agent未按预期推进状态:
send("I'm Ready", agent);
- 在某模块的
On enter字段使用以下代码,能成功向状态图发送消息,但认为无需使用findFirst函数:
Forklift fl=findFirst(forklifts,f->f.inState(f.idle)); if(fl!=null){ send(agent,fl); }
同时疑惑是否只需在状态图中添加fireEvent函数即可解决问题。
解决方案
通过以下代码成功获取目标叉车Agent并发送消息,实现预期效果:
Forklift fa=agent.flLink.getConnectedAgent(); send("Go", fa); traceln("Message Sent");
内容的提问来源于stack exchange,提问作者ThisMyUserName
相关产品推荐
相关产品推荐

