anylogic代理通信和消息发送
anylogic agent communication and message sending
在我的模型中,我有一些代理;
“需求”代理,
“EnergyProducer1”代理
“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)至少有两个属性 msgStr和 msgVal。使用这个新的 class 发送消息的变化如下:
...
send("boilerWorking", boiler);
...
对此:
...
send(new ModelMessage("boilerWorking",42.0), boiler);
...
并且状态图中的触发转换必须更改为使用 if expression is true
,表达式为 msg.msgString == "boilerWorking"
。
提供了有关代理通信的更多信息here。
在我的模型中,我有一些代理;
“需求”代理,
“EnergyProducer1”代理
“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)至少有两个属性 msgStr和 msgVal。使用这个新的 class 发送消息的变化如下:
...
send("boilerWorking", boiler);
...
对此:
...
send(new ModelMessage("boilerWorking",42.0), boiler);
...
并且状态图中的触发转换必须更改为使用 if expression is true
,表达式为 msg.msgString == "boilerWorking"
。
提供了有关代理通信的更多信息here。