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

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)而不是海龟,以便有一个格子:

最初,上面的所有海龟都连接到其他相同类型的海龟。海龟之间的链接可能会随时间变化,因此当 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