代码之家  ›  专栏  ›  技术社区  ›  crabcanon

在任意逻辑中更改选择代理的主类参数

  •  0
  • crabcanon  · 技术社区  · 7 年前

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

    例如:我在“main”类中将“contact rate”定义为参数。我现在想说的是,一旦一个代理人住院,其接触率现在变成0。我尝试在“agent”类中编写一个函数,它说:

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

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

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   Felipe    7 年前

    我觉得你不想那样做…这是一个结构错误…接触人数是由接触率决定的,你不应该改变这一点(除非你隔离了永久住院的代理人,这样他们就再也不能和其他人交谈了)

    我认为你真正想做的是让这种药物对感染免疫…这意味着在患者状态图中,当患者康复后,他不应该回到易感状态。

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

    if(!hospitalise)//same as hospitalize==false
        send( "Infection", RANDOM_CONNECTED );
    
        2
  •  0
  •   scopchanov    7 年前

    结构正确性或逻辑/推理除外, main.ContactsPerDay 主参数。这就是为什么您发布的代码将总联系率设置为零的原因。

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

    推荐文章