在netlogo中的百分比



我想在Netlogo中写代理总体中有一定百分比具有此属性。我如何在NetLogo中做到这一点?

到目前为止,在一个玩具模型中,我都是手动完成的。也就是说,让740户中的n户[设置作文1],而实际上我想说的是:让8%的家庭设置作文1。

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

事前的

一个常用的方法是让每个agent有一定的机会(以百分比值表示)做某事。在这种情况下,您将结合使用random-float命令和百分比值,这是在NetLogo中根据一定概率使事情发生的标准方法(参见这里,如果您使用整数,也可以只看到random)。它可以直接在命令的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方法遵循您或多或少表达的逻辑:首先创建一些海龟,然后为它们分配属性。在这种情况下,您只需要像处理任何其他数学表达式一样处理百分比:将其乘以海龟总数以得到相关的海龟:
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的数字是小数,它将被舍入)。

相关内容

  • 没有找到相关文章

最新更新