更改 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 中选择代理的主类参数的主要内容,如果未能解决你的问题,请参考以下文章

从原型创建项目时更新 pom 中的主类

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

java找不到或无法加载主类

OOzie 中 PySpark 作业的主类

抑制 sbt-assembly 中的主类

Java程序主类