在Netlogo中有一些默认模型,包括点阵网格。我想知道如何在开始时添加三种类型/品种(40%,40%,20%)的海龟相互连接,然后,当tick>0,可以在不同类型的海龟之间创建一些新的链接。
在Netlogo的模型库中,我找到了规则晶格的代码:
to setup-square
clear-all
ask patches [ sprout 1 ]
ask turtles [ create-links-with turtles-on neighbors4 ]
reset-ticks
end
我应该考虑三种类型(type1, type2, type3),而不是海龟,以便有一个格:
- 40%的海龟为1型(红色);
- 40%的海龟为2型(蓝色);
- 20%的海龟品种为3型(白色)。
最初,上面所有的海龟都连接到其他相同类型的海龟。海龟之间的联系可能会随着时间的推移而改变,所以不同品种的海龟之间的联系可以在0时存在。
我将这样做(而不是ask turtles [...]
):
ask types1 [ create-links-with types1-on neighbors4 ]
ask types2 [ create-links-with types2-on neighbors4 ]
...
但问题是我无法控制每种类型的海龟的比例。此外,龟的邻居的品种也应该被考虑在内。我如何设置这些类型的比例,并且只在同一类型的海龟之间建立连接,然后混合链接?
有几种方法可以做到这一点,其中一些方法比其他方法更精确。特别重要的是要意识到,您可以在创建海龟后更改其品种,只需要求它执行set breed <breed>
。
在第一个示例中,我在创建时将所有海龟指定为type1,然后将预定义的海龟数量更改为另一种类型。记住你是如何得到这个数字的,因为这里的舍入误差可能会产生影响(请参阅下面我得到的计数)。重要的是,你给他们所有的品种在一开始,因为这个版本将不与ask n-of <percentage> turtles [set breed <breed>]
工作。这是因为代理集海龟将总是包含所有的海龟,即使是那些你给了不同品种的海龟。
breed [types1 type1]
breed [types2 type2]
breed [types3 type3]
to setup-shape
set-default-shape types1 "default"
set-default-shape types2 "x"
set-default-shape types3 "square"
end
to setup-1
ca
setup-shape
ask patches [sprout-types1 1 ]
let total count turtles
ask n-of (total * 0.4) types1 [set breed types2]
ask n-of (total * 0.2) types1 [set breed types3]
end
第二个版本使用更随机的方法,让每只新创建的海龟选择随机数,并根据这个数字给它一个品种。请记住,比例将变化更大,因为它们是由偶然而不是精确的数字决定的。
to setup-2
ca
setup-shape
ask patches [ sprout 1 [
let number random-float 1.0
show number
(ifelse number < 0.4 [set breed types1]
number < 0.8 [set breed types2]
[set breed types3])
]
]
end
每种类型的不同版本的计数。注意,在版本1中,type1和type2有不同的计数,因为我让所有的海龟从品种types1
开始。
to count-types
;standard world of 33x33
show count types1 ; version 1: 437 , version 2: 454
show count types2 ; version 1: 435 , version 2: 432
show count types3 ; version 1: 217 , version 2: 203
end