更改 AnyLogic 中选择代理的主类参数
Posted
技术标签:
【中文标题】更改 AnyLogic 中选择代理的主类参数【英文标题】:Changing a main class parameter for select agents in AnyLogic 【发布时间】:2019-01-01 06:13:00 【问题描述】:我有一个基于代理的流行病模拟,其中我使用标准 SEIR 模型。我在主类中定义感染参数。我现在希望能够在模型运行时更改一些代理。
例如:我已将“联系率”定义为“主”类中的参数。我现在想说的是,一旦代理住院,它的联系率现在变为 0。我尝试在“代理”类中编写一个函数,它说:
if (hospitalise == true)
main.ContactsPerDay = 0.0;
但这只是在第一次住院时将整体接触率设置为0,这显然是错误的。
我如何在代理中编写一个只修改特定代理的联系率的函数?
【问题讨论】:
【参考方案1】:我认为您不想这样做...这是一个结构性错误...联系人数由联系率定义,您不应该更改它(除非您要隔离那些永远住院,所以他们再也不能和其他人说话了)
我认为您真正想要做的是使代理对感染免疫...这意味着在您的患者状态图中,当患者康复时,他永远不应该回到易感状态。
或者另一种方法是在暴露或感染状态图中,当你随机感染另一个代理时,你有send( "Infection", RANDOM_CONNECTED );
的动作
您可以将其替换为
if(!hospitalise)//same as hospitalize==false
send( "Infection", RANDOM_CONNECTED );
【讨论】:
【参考方案2】:结构正确性,或逻辑/推理,main.ContactsPerDay
指的是 Main 中的参数。这就是您发布的代码将整体联系率设置为零的原因。
使用this.ContactsPerDay = 0
应该会产生您描述的结果。
【讨论】:
以上是关于更改 AnyLogic 中选择代理的主类参数的主要内容,如果未能解决你的问题,请参考以下文章