Я пытаюсь устранить ошибку «переполнение стека (слишком глубокая рекурсия)», которая возникает в моем коде в NetLogo.Этот код генерирует кластеры участков для обозначения классов земного покрова в нейтральной ландшафтной модели.Однако процедура set-cover приводит к ошибке «переполнение стека (слишком глубокая рекурсия)».
Я попытался закомментировать вызов grow-cover_cluster в процедуре в grow-cover_cluster, но это не решило проблему
to generate-landscape
set cluster-area-list []
set_random_seeds ;; randomly distribute
cluster seeds (Step 1 in Saura & Martinez-Millan 2000 p.664)
set-cover ;; identify and label clusters (Steps 2 & 3 in above)
fill_landscape ;; fill remaining patches to dominant neighbour
ask patches [ set pcolor (cover * 10) + 5 ] ;; color patches by cover
end
to set-cover
loop
[
let seed one-of patches with [ ( cluster = nobody and pcolor = blue ) ]
;; pick a random seed we haven't labelled yet
if seed = nobody ;; if we have labelled all seeds stop
[ stop ]
ask seed
[
set cluster self ;; make the seed the "leader" of a new cluster
set cover ( random Number-of-Types ) ;; assign as cover "leader"
grow-cover_cluster ;; generate rest of cluster
set cluster-area-list fput count patches with [cluster = myself]
cluster-area-list
]
]
end
to grow-cover_cluster
without-interruption
[
let neighbours nobody
ifelse(Neighbourhood = "Moore")
[
set neighbours neighbors with [ cluster = nobody and pcolor = [pcolor] of myself ] ]
[
set neighbours neighbors4 with [ cluster = nobody and pcolor = [pcolor] of myself ] ]
ask neighbours
[
set cluster [cluster] of myself ;;make neighboring patch to seed cluster
set cover [cover] of myself ;;make neighboring patch to patch cover
set cluster_ID [cluster_ID] of myself
;grow-cover_cluster ;;recursive call!
]
]
end
Код должен генерировать заполняемые случайным образом патчи, накапливающие другие окружающие патчи для формирования кластеров, чем в конечном итоге формировать классы покрытия в нейтральной ландшафтной модели.Однако код в его текущей форме выше генерирует ошибку «переполнение стека (слишком глубокая рекурсия)».