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



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

例如:我在"main"类中将"contact rate"定义为一个参数。我现在想说的是,一旦一名特工住院,其接触率现在变成了0。我试着在"代理"类中编写一个函数,上面写着:

if (hospitalise == true) {
main.ContactsPerDay = 0.0;
}

但这只是在第一次住院时将总体接触率设置为0,这显然是错误的。

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

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

我认为你真正想做的是让病原体对感染免疫。。。这意味着,在患者状态图中,当患者康复时,他永远不应该回到易感状态。

或者另一种方法是在暴露或感染的状态图中,当你随机感染另一个代理时,你有send( "Infection", RANDOM_CONNECTED );你可以用代替它

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

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

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

最新更新