Class 更改AnyLogic中选择代理的主类参数

Class 更改AnyLogic中选择代理的主类参数,class,parameters,simulation,anylogic,agent-based-modeling,Class,Parameters,Simulation,Anylogic,Agent Based Modeling,我有一个基于agent的流行病模拟,其中我使用了一个标准的SEIR模型。我在主类中定义感染参数。我现在希望能够在模型运行时更改一些代理 例如:我在“main”类中将“contact rate”定义为一个参数。我现在想说的是,一旦一名特工住院,他的接触率现在变成了0。我尝试在“agent”类中编写一个函数,该函数表示: if (hospitalise == true) { main.ContactsPerDay = 0.0; } 但这只是将首次住院时的总接触率设置为0,这显然是错误的 如何在代理

我有一个基于agent的流行病模拟,其中我使用了一个标准的SEIR模型。我在主类中定义感染参数。我现在希望能够在模型运行时更改一些代理

例如:我在“main”类中将“contact rate”定义为一个参数。我现在想说的是,一旦一名特工住院,他的接触率现在变成了0。我尝试在“agent”类中编写一个函数,该函数表示:

if (hospitalise == true) {
main.ContactsPerDay = 0.0;
}
但这只是将首次住院时的总接触率设置为0,这显然是错误的


如何在代理中编写只修改特定代理的联系率的函数?

我认为您不想这样做。。。这是一个结构错误。。。接触人数是由接触率决定的,你不应该改变这一点(除非你隔离那些永远住院的特工,这样他们就再也不能和任何人说话了)

我想你真正想做的是让药剂对感染免疫。。。这意味着在患者状态图中,当患者康复后,他不应再回到易感状态

或者另一种方法是在暴露或感染状态图中,当你随机感染另一个代理时,你有动作
发送(“感染”,随机连接)
你可以用

if(!hospitalise)//same as hospitalize==false
    send( "Infection", RANDOM_CONNECTED );

结构正确性或逻辑/推理除外,
main。ContactsPerDay
指main中的参数。这就是为什么您发布的代码将总体联系率设置为零

使用
this.ContactsPerDay=0
应产生您描述的结果