格子网格中不同类型的海龟
Different types of turtles in a lattice grid
Netlogo中有一些默认模型,包括点阵网格。
我想知道如何在开始时添加三个 types/breeds (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
我应该考虑三种类型(types1、types2、types3)而不是海龟,以便有一个格子:
- 40% 的海龟为品种 1(红色);
- 40% 的海龟为品种 2(蓝色);
- 20% 的海龟品种类型 3(白色)。
最初,上面的所有海龟都连接到其他相同类型的海龟。海龟之间的链接可能会随时间变化,因此当 tick>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>]
。那是因为 agentset turtles 将始终包含所有 turtles,即使是那些你给了不同品种的海龟。
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
Netlogo中有一些默认模型,包括点阵网格。 我想知道如何在开始时添加三个 types/breeds (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
我应该考虑三种类型(types1、types2、types3)而不是海龟,以便有一个格子:
- 40% 的海龟为品种 1(红色);
- 40% 的海龟为品种 2(蓝色);
- 20% 的海龟品种类型 3(白色)。
最初,上面的所有海龟都连接到其他相同类型的海龟。海龟之间的链接可能会随时间变化,因此当 tick>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>]
。那是因为 agentset turtles 将始终包含所有 turtles,即使是那些你给了不同品种的海龟。
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