我想在Netlogo中写代理总体中有一定百分比具有此属性。我如何在NetLogo中做到这一点?
到目前为止,在一个玩具模型中,我都是手动完成的。也就是说,让740户中的n户[设置作文1],而实际上我想说的是:让8%的家庭设置作文1。有两种方法。我将它们称为ex-ante和ex-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
的数字是小数,它将被舍入)。