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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AnyLogic中更改选定代理的主类参数相关的知识,希望对你有一定的参考价值。

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

例如:我已将'contact rate'定义为'main'类中的参数。我现在希望能够说,一旦代理人住院,其联系率现在变为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应该产生你描述的结果。

以上是关于在AnyLogic中更改选定代理的主类参数的主要内容,如果未能解决你的问题,请参考以下文章

AnyLogic——如何随机选择处于特定状态的代理

AnyLogic 在一个过程中更改参数值

在 Anylogic 中为代理参数分配不同值的正确方法是啥?

基于两个参数的 AnyLogic 优先级队列作为 Java 代码

Anylogic - 由条件触发的代理位置

Anylogic:如何批处理具有相似参数的代理?