格子网格中不同类型的海龟



在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

最新更新