在 NetLogo 中计算相异指数

Calculate index of dissimilarity in NetLogo

我想在 NetLogo 中计算 index of dissimilarity。我有一个分为不同区域的世界,想检查物种在世界各地的分布情况。

考虑这个例子:一个世界被分成 16 个不同的区域。世界上有两种蚂蚁,红色和蓝色。它看起来像这样:

图中的世界是用以下代码制作的:

globals[indexdissimilarity] ; where I want the index of dissimilarity to be stored.

to setup
  ca

  ;Setting world.
  resize-world 0 19 0 19
  set-patch-size 15

  ;Creating regions.
  let x 5
  let y 5
  let col 45
  while [y <= max-pycor + 1 ][
    while [x <= max-pxcor  + 1][
      ask patches with [pxcor < x and pxcor >= x - 5 and pycor < y and pycor >= y - 5][
        set pcolor col
      ]
      set x x + 5
      set col col + 3
    ]
    set x 5
    set y y + 5
  ]

  ask n-of (count patches * 0.85) patches[sprout 1[
    set shape "bug"
    set color red]]
    
  ask n-of (count turtles * 0.50) turtles [set color blue]
  dissimilarity
end

; Here is where I want to calculate the index of dissimilarity.
to dissimilarity
  let tot_red (count turtles with [color = red]) 
  let tot_blue (count turtles with [color = blue])

  ; set indexdissimilarity 
  
end

我的主要问题是如何对每个邻域的部分计算进行迭代。

谢谢!

我想我设法解决了它。请让我知道它看起来是否正确。这是完整的更新代码。

globals[indexdissimilarity
  dis
]

patches-own [reg]
to setup
  ca

  ;Setting world.
  resize-world 0 19 0 19
  set-patch-size 15

  ;Creating regions.
  let x 5
  let y 5
  let col 45
  while [y <= max-pycor + 1 ][
    while [x <= max-pxcor  + 1][
      ask patches with [pxcor < x and pxcor >= x - 5 and pycor < y and pycor >= y - 5][
        set pcolor col
      ]
      set x x + 5
      set col col + 3
    ]
    set x 5
    set y y + 5
  ]

  ask patches [set reg [pcolor] of self]

  ask n-of (count patches * 0.85) patches[sprout 1[
    set shape "bug"
    set color red]]

  ask n-of (count turtles * 0.7) turtles [set color blue]
  update
end 


to update
  ;Dissimilarity index. 
  let tot_red (count turtles with [color = red]) 
  let tot_blue (count turtles with [color = blue])

  let neighb1 [reg] of turtles
  let neighb remove-duplicates neighb1
  set dis []

  foreach neighb [i -> set dis lput abs((count turtles with [reg = i and color = red] / tot_red) - (count turtles with [reg = i and color = blue] / tot_blue)) dis]
  set indexdissimilarity sum(dis) / 2
  print(indexdissimilarity)
end