使用 sendToAll 时,群体中的代理数量如何影响其他代理类型接收的消息数量?

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

我构建了一个模型,其中类型 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 函数)的数量之间的关系,或者两者兼而有之。

我尝试使用不同数量的代理,确实得到了不同的结果,所以我猜测消息出了问题,这与发送消息的代理数量以及可用于接收此类消息的代理数量有关,但我不明白该软件的假设是什么。

anylogic sendmessage statechart assumption
1个回答
0
投票

首先: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));
}
© www.soinside.com 2019 - 2024. All rights reserved.