Размер подсчета кластеров Netlogo: переполнение стека (слишком глубокая рекурсия) - PullRequest
0 голосов
/ 10 июня 2018

В модели землепользования я хочу подсчитать размер зеленых и красных кластеров, как показано на этом изображении:

enter image description here

Используемый кодочень похоже на то, что можно найти в «примере Patch Clusters» из библиотеки моделей, с той лишь разницей, что он учитывает только красные и зеленые патчи.Но когда я запускаю его, Netlogo заявляет об ошибке «переполнение стека (слишком глубокая рекурсия), когда наблюдатель запускает ASK, вызванный процедурой FIND-CLUSTERS».Вот процедура find-clusters:

to find-clusters
  loop [
    ;; pick a random patch that isn't in a cluster yet
    let seed one-of patches with [cluster = nobody and pcolor = 64 or 
pcolor = 14]
    ;; if we can't find one, then we're done!
    if seed = nobody
    [ show-clusters
      stop ]
    ;; otherwise, make the patch the "leader" of a new cluster
    ;; by assigning itself to its own cluster, then call
    ;; grow-cluster to find the rest of the cluster
    ask seed
    [ set cluster self
      grow-cluster ]
  ]
  display
end

и процедура grow-cluster:

to grow-cluster  ;; patch procedure
  ask neighbors4 with [(cluster = nobody) and
    (pcolor = [pcolor] of myself)]
  [ set cluster [cluster] of myself
    grow-cluster ]
end

Что означает сообщение и как его исправить?Спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

перепроверьте ваш первый оператор if.

let seed one-of patches with [cluster = nobody and pcolor = 64 or 
pcolor = 14]

Вы всегда найдете патч, который является «ложным и ложным или истинным» и никогда не выйдет из цикла.Подумайте, где поставить скобки для порядка операций.

...