netlogo 中的百分比

Percentage in netlogo

我想在Netlogo中写出一定比例的agent人群有这个属性。我如何在 NetLogo 中做到这一点?

到目前为止,在玩具模型中,我是手动完成的。即:询问 n-of 740 户 [set composition 1] 而实际上我想说:要求 8% 的家庭设置 composition 1.

有两种方法。我将它们称为 ex-anteex-post.

事前

一种常见的做法是让每个代理都有一定的机会(以百分比值表示)做某事。在这种情况下,您将结合您的百分比值使用 random-float 命令,这是在 NetLogo 中根据特定概率 (see here, or also see just random if you're working with integers) 使事情发生的标准方法。它可以直接在 create-turtles 命令块中使用:

globals [
 the-percentage
]

turtles-own [
 my-attribute
]

to setup
 clear-all
 set the-percentage 0.083   ; In this example we set the percentage to be 8.3%.

 create-turtles 500 [
  if (random-float 1 < the-percentage) [
   set attribute 1
  ]
 ]
end

这意味着您不会总是拥有具有该属性的海龟的确切数量。如果您在多次迭代中检查 count turtles with [attribute = 1],您会看到数字有所不同。如果您想重现某事发生的概率(在代理群体或一段时间内),这种方法很好,NetLogo 模型的许多用途就是这种情况。

Ex-post

ex-post 方法遵循您或多或少表达的逻辑:首先创建一些海龟,然后为它们分配属性。在这种情况下,您只需像在任何其他数学表达式中一样处理百分比:将它乘以海龟总数即可得到相关海龟:

globals [
 the-percentage
]

turtles-own [
 my-attribute
]

to setup
 clear-all
 set the-percentage 0.083

 create-turtles 500
 ask n-of (count turtles * the-percentage) turtles [
  set attribute 1
 ]
end

使用这种方法,您将始终拥有完全相同数量的具有该属性的海龟。事实上,如果你 运行 count turtles with [attribute = 1] 多次迭代你会看到结果总是 41(500 * 0.083 = 41.5,事实上如果传递给 n-of 的数字是小数, it will be rounded down).