更改 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
应该会产生您描述的结果。
我有一个基于主体的流行病模拟,我在其中使用标准 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
应该会产生您描述的结果。