首页 > 解决方案 > netlogo 中的百分比

问题描述

我想在 Netlogo 中写道,一定比例的代理人口具有此属性。我如何在 NetLogo 中做到这一点?

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

标签: netlogo

解决方案


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

事前

一种常用的方法是让每个智能体都有一定的机会(表示为百分比值)做某事。在这种情况下,您将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 模型的许多用途就是这种情况。

事后

事后方法遵循您或多或少表达的逻辑:首先创建许多海龟,然后为它们分配属性。在这种情况下,您只需将百分比视为任何其他数学表达式:将其乘以海龟总数以获得相关海龟:

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是小数,则会向下舍入)。


推荐阅读