我构建了一个模型,其中类型 A 的代理根据从类型 B 的代理收到的消息经历
statecharts
。该模型有效,但我不明白该软件正在做出什么假设。
例如,有 100 个 A 型代理和 10 个 B 型代理。如果 B 型代理使用(消息)
sendToAll
,软件会解释什么?每个 B 类代理都会向 100 个 A 类代理发送消息吗?
下一步:假设 A 类代理具有三 (3) 个连续状态:X、Y、Z。它们都是通过 B 类代理接收到相同消息而触发的。如果我们认为我们拥有与上一个练习相同数量的代理, B 类代理是否同时向所有状态图中的所有代理发送消息?或者软件是否优先考虑状态(首先是 x,然后是 Y,然后是 Z)?
下一篇:如果上述问题的答案是Agent类型B同时向所有Agent发送所有消息,是否有办法限制Agent类型B在每个周期发送多少消息?
模型还包含一个参数,并且模拟显示结果存在异质性,但我不知道这是因为参数还是因为两个代理(和 sendtoall 函数)的数量之间的关系,或者两者兼而有之。
我尝试使用不同数量的代理,确实得到了不同的结果,所以我猜测消息出了问题,这与发送消息的代理数量以及可用于接收此类消息的代理数量有关,但我不明白该软件的假设是什么。
首先:sendToAll 将向与发送消息的代理(包括其自身)处于同一环境中的所有代理发送消息
因此,在您的示例中,如果 one 代理类型 B 使用 sendToAll (这意味着 sendToAll 函数正在类型 B 代理内部使用),假设类型 A 和类型 B 都是位于 Main 中的代理 所有 B 类代理和 A 类代理都会收到该消息。
其次,所有要发送的消息都由 AnyLogic 排队,您不可能确切知道它们将按什么顺序发生。
如果你想限制发送消息的数量,你不能使用sendToAll,而是可以这样做
for(int i=0;i<limit;i++){
send("your message",agentA(i));
}