Пространственная автокорреляция в NetLogo - PullRequest
0 голосов
/ 16 июня 2020

Есть ли простой способ настроить пространственную автокорреляцию для трех разных цветов фрагментов? Я пытаюсь контролировать как количество красных пятен, так и их пространственную автокорреляцию (насколько близки друг к другу пятна одного цвета). Я могу контролировать пропорцию красных пятен, но не знаю, как настроить автокорреляцию.

Вот мой код на данный момент:

to setup-patches
  resize-world 0 15 0 15
  set-patch-size 30
  ask patches [
    set pcolor one-of [ green brown ]
  ]
    ask patches [
    let close-patches patches with [pcolor != red]

      ask  n-of ((proportion-red-plants * count patches) - count patches with [pcolor = red]) close-patches
      [set pcolor red]

    ]

end

пропорция-красные-растения - это ползунок в интерфейсе

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Если вы знаете, что A C из 0 означает выбор участка, у которого нет красных соседей, а A C из 1 означает выбор соседа любого красного пятна, тогда все, что требуется, это выбрать AC = 1 с заданной вероятностью и метод AC = 0 в противном случае. Это то, что я имел в виду под проблемой дизайна, вам нужно разработать необходимые шаги, прежде чем пытаться кодировать эти шаги.

Вот почти решение. Я не позаботился о таких вещах, как проверка того, что пятна, которые становятся красными, еще не являются красными, поэтому счет будет неправильным.

to setup
  clear-all
  let prop-red 0.1
  let AC 0
  ask one-of patches [set pcolor red]
  ask n-of (prop-red * count patches) patches
  [ ifelse random-float 1 < AC
    [ ask one-of patches with [ pcolor = red ]
      [ ask one-of neighbors [ set pcolor red ]
      ]
    ]
    [ let candidates patches with [not any? neighbors with [pcolor = red] ]
      if any? candidates
      [ ask one-of candidates [ set pcolor red ]
      ]
    ]
  ]
end
0 голосов
/ 19 июня 2020

Еще раз спасибо JenB за помощь. Это код, который я в итоге использовал, который доказал свою эффективность (при правильном подсчете красных пятен)

to setup-patches
 resize-world 0 15 0 15
 set-patch-size 30 
 ask patches [set pcolor one-of [green brown]]
 let first-patch one-of patches 
 ask first-patch [set pcolor red]
 repeat (proportion-red-plants * count patches - 1) [ask one-of patches [assign]]
end

to assign
 ifelse random-float 1 < AC
 [let candds patches with [any? (neighbors with [pcolor = red])]
   ask one-of candds [set pcolor red]]
 [ask one-of patches [set pcolor red]]
end
...