netlogo - netlogo 中的百分比
问题描述
我想在 Netlogo 中写道,一定比例的代理人口具有此属性。我如何在 NetLogo 中做到这一点?
到目前为止,在玩具模型中,我是手动完成的。即:询问 n-of 740 个家庭 [设置构成 1],而实际上我想说的是:要求 8% 的家庭设置构成 1。
解决方案
有两种方法。我会称它们为ex-ante和ex-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
是小数,则会向下舍入)。
推荐阅读
- c# - 通过将两个数据表行转换为一个来创建 xml
- build - packages.dhall 和 spago.dhall 文件有什么区别?
- amazon-web-services - AWS - 多个子域的多个 S3 存储桶
- java - 如何修复 @DeleteMapping 的 BootstrapModal
- mysql - 多次更新在工作台上不起作用
- c# - C# MongoDB 从填充模型更新定义
- python - subprocess.call() 中使用的 args 列表中元素的含义
- sql-server - 添加不允许我插入具有某些列的成员的约束的问题
- html - ESP8266 Captive Portal 并跳转到“正常”浏览器
- python - 从给定范围内获取“n”个唯一随机数的列表