我如何正确模拟感染率?

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

[受当前事件的影响和启发,我正在通过尝试在封闭环境中模拟病毒感染率来练习Netlogo技能。我提出的模拟运行良好,但是在查看结果后,似乎在代理商如何感染其他代理商方面似乎有所失误。这是我的“感染”代码(“正常”是健康人,而“携带者”则相反):

ask carriers [
    if any? other normals-here [
    let r random 50
      if r < 50 [set virus? false]
    if r < 50 + Infectivity [
        ask normals-here [set virus? true] 
        ask normals-here [set color red]
      ]
   ]
  ]

[我的一般想法是,在载体和正常药物之间的同一贴剂上的相互作用中,如果正常药物具有r +传染性(模拟中的控制变量,比率为0-50),大于50,则代理会感染病毒。我希望每个正常代理都具有一个0-50的随机r变量,并且如果在添加“传染性”比率时该变量变得大于50,则该代理会接收该病毒。如果在加上“传染性”比率后r仍低于50,则他保持“正常”。

我的代码看起来还好吗?我觉得这里有些事了,但我看不到。

netlogo agent-based-modeling
1个回答
0
投票

仅处理您的特定代码:(1)假设携带者和正常者是不同的品种,您不需要other,因为无论如何携带者都不会在normals-here中。 (2)您对随机数的使用没有按照您的想法做,但由于逻辑仍然无法正常工作,我无法解决该问题。

首先,您为r创建一个从0到49的随机值。假设它是20。由于随机数生成器总是返回一个0到49,所以它总是<50。所以代码将设置变量virus?为承运人虚假。由于传染性不是负数,因此r也将小于50 +传染性。因此,现在其余代码也将运行,哪些将设置病毒?对贴片上的所有法线都为true(然后将它们变为红色)。

所以,我从您的描述中认为您想拥有if r + Infectivity < 50 []。那至少会有病毒?对于某些传染性值,它变为真。但是,这还有另一个问题,较低的Infectivity值将更有可能将值保持为<50,这与Infectivity的自然含义相反。]

更一般而言,您已将载体与法线分开。但这不是流感的工作原理。某人被感染,然后能够感染其他人,他们不是不同的人群。因此,您真正需要的是以下几行设计内容:

  1. 人们处于某种状态(通常是易感,被感染,被删除或已恢复)
  2. 大多数以易感状态(按您的说法正常)开始,但有些以受感染的状态(以您的说法是携带者)开始>
  3. 您使每个当前处于感染状态的人都有机会将附近的易感者的状态更改为感染状态
  4. 每个被感染的人都有机会将状态更改为被删除
  5. 您需要做的另一件事是更好地处理概率。假设您希望某件事发生的可能性为20%,这是这样做的典型方法:

    let num random 100
    if num < 20 [ do something ]
    

因此,您将生成一个随机数,如果该数小于所需的概率,请执行操作。根据您的情况,您可以使用if num < Infectivity

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