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

问题描述 投票:0回答:2

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

例如:我已将'contact rate'定义为'main'类中的参数。我现在希望能够说,一旦代理人住院,其联系率现在变为0.我尝试在“代理人”类中写一个功能,说:

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

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

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

class parameters simulation anylogic agent-based-modeling
2个回答
0
投票

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

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

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

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.