[受当前事件的影响和启发,我正在通过尝试在封闭环境中模拟病毒感染率来练习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,则他保持“正常”。
我的代码看起来还好吗?我觉得这里有些事了,但我看不到。
仅处理您的特定代码:(1)假设携带者和正常者是不同的品种,您不需要other
,因为无论如何携带者都不会在normals-here
中。 (2)您对随机数的使用没有按照您的想法做,但由于逻辑仍然无法正常工作,我无法解决该问题。
首先,您为r创建一个从0到49的随机值。假设它是20。由于随机数生成器总是返回一个0到49,所以它总是<50。所以代码将设置变量virus?为承运人虚假。由于传染性不是负数,因此r也将小于50 +传染性。因此,现在其余代码也将运行,哪些将设置病毒?对贴片上的所有法线都为true(然后将它们变为红色)。
所以,我从您的描述中认为您想拥有if r + Infectivity < 50 []
。那至少会有病毒?对于某些传染性值,它变为真。但是,这还有另一个问题,较低的Infectivity值将更有可能将值保持为<50,这与Infectivity的自然含义相反。]
更一般而言,您已将载体与法线分开。但这不是流感的工作原理。某人被感染,然后能够感染其他人,他们不是不同的人群。因此,您真正需要的是以下几行设计内容:
您需要做的另一件事是更好地处理概率。假设您希望某件事发生的可能性为20%,这是这样做的典型方法:
let num random 100
if num < 20 [ do something ]
因此,您将生成一个随机数,如果该数小于所需的概率,请执行操作。根据您的情况,您可以使用if num < Infectivity
。