У меня есть модель, которая генерирует кластеры желтых патчей, и мне интересно посмотреть на частотное распределение размеров кластеров. Для этого я кооптировал код из «Пример кластеров патчей» в библиотеке кодов NetLogo. Кажется, что он работает (см. Фотографии ниже) с точки зрения поиска кластеров (хотя я бы предпочел, чтобы он не учитывал зеленые пятна в кластерах), но я не могу понять, как получить размеры (или количество патчей) каждого из этих кластеров. В идеале я хотел бы сделать гистограмму частотного распределения размеров кластеров (за исключением зеленых патчей) и иметь возможность экспортировать эти данные.Как хранить/подсчитывать размеры отдельных кластеров и строить их в NetLogo
Кроме того, было бы здорово, если бы я мог найти способ получить гистограмму частот размера кластера во время работы модели.
Код, который я использую, чтобы получить кластеры прямо из «Патч-кластеров», кроме того, что я убиваю всех агентов, чтобы я мог читать числа. Здесь это ...
to find-clusters
ask turtles [die] ;; this clears the board so I can see the clusters
loop [
;; pick a random patch that isn't in a cluster yet
let seed one-of patches with [(cluster = nobody)]
;; 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 ]
]
end
to grow-cluster ;; patch procedure
ask neighbors with [(cluster = nobody) and
(pcolor = [pcolor] of myself)]
[ set cluster [cluster] of myself
grow-cluster ]
end
;; once all the clusters have been found, this is called
;; to put numeric labels on them so the user can see
;; that the clusters were identified correctly
to show-clusters
let counter 0
loop
[ ;; pick a random patch we haven't labeled yet
let p one-of patches with [plabel = ""]
if p = nobody
[ stop ]
;; give all patches in the chosen patch's cluster
;; the same label
ask p
[ ask patches with [cluster = [cluster] of myself]
[ set plabel counter] ]
set counter counter + 1 ]
end
Спасибо за вашу помощь!
Используйте 'расширение table', чтобы произвести таблицу частот в таблице:' графов [runresult plabel] из patches'. Затем вы можете использовать 'table: to-list', чтобы получить точки для построения графика. – Alan