anylogic代理通信和消息发送

anylogic agent communication and message sending

在我的模型中,我有一些代理;

  1. “需求”代理,

  2. “EnergyProducer1”代理

  3. “EnergyProducer2”代理。

当我在具有功能的主代理中创建每小时能源需求时,满足此需求的优先级属于“EnergyProducer1”代理。在这个代理中,我有一个根据某些情况计算能量产生的函数。该函数内部的一些部分如下;

**" if (statechartA.isStateActive(Operating.busy)) && ( main.heatLoadDemandPerHour >= heatPowerNominal) { producedHeatPower = heatPowerNominal;

naturalGasConsumptionA = naturalGasConsumptionNominal;

发送(“锅炉工作”,锅炉);

} 否则.....“**

这里我的问题与代码的第 4 行有关。如果我的 agent1 不能满足每小时的需求,我不得不说 agent2 “满足其余需求”。如果我将此消息发送给 agent2,它的状态图将处于活动状态并且 agent2 的功能将起作用。我的问题是所有情况都将在同一时间实现??? İf 不是,访问其他 agent2 的变量和参数是否更合适???

我希望我能解释我的问题。 提前感谢您的帮助...

** 已编辑问题...

作为对您问题的一般性评论,在 AnyLogic 环境中发送消息总是比直接访问另一个代理的变量和参数更可取。

特别是在示例中,send() 函数将在当前函数完成后安排下一个实例的消息传递。

更新:AnyLogic中的消息可以是任何Javaclass。发送示例中使用的字符串(例如“boilerWorking”)有利于一般控制,但是如果需要共享更多信息(例如 double 值),那么最好创建一个new Java class(我们称其为 ModelMessage 并跟随 these instructions)至少有两个属性 msgStrmsgVal。使用这个新的 class 发送消息的变化如下:

...
send("boilerWorking", boiler);
...

对此:

...
send(new ModelMessage("boilerWorking",42.0), boiler);
...

并且状态图中的触发转换必须更改为使用 if expression is true,表达式为 msg.msgString == "boilerWorking"

提供了有关代理通信的更多信息here