更改 AnyLogic 中 select 代理的主要 class 参数

Changing a main class parameter for select agents in AnyLogic

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

例如:我在'main'class中定义了'contact rate'作为参数。我现在想说,一旦代理人住院,它的联系率现在变为 0。我尝试在 'agent' class 中编写一个函数,它说:

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

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

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

我认为你不想那样做......这是一个结构性错误......联系人数量由联系率定义,你不应该改变它(除非你隔离代理他们永远住院了,所以他们再也不能和任何人说话了)

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

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

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

结构正确,或者logic/reasoning不谈,main.ContactsPerDay指的是Main中的参数。这就是为什么您发布的代码将整体联系率设置为零。

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