#netlogo
#netlogo
Вопрос:
Есть ли у кого-нибудь какие-либо решения для того, чтобы черепаха идентифицировала толпу других черепах, т. Е. группу черепах, сгруппированных вместе? Следующее не сработает, потому что 50 черепах в радиусе действия могут быть разрозненными (повсюду, а не рядом друг с другом):
if count turtles in-radius 20 >= 50 [show "There's a crowd"]
На данный момент я определяю толпу как более чем 50 черепах, стоящих рядом друг с другом.
Ответ №1:
Если вам нужны непрерывно подключенные черепахи, вы могли бы изменить пример кластеров исправлений из библиотеки моделей — вот одна из версий. С помощью этой настройки:
globals [ groups>50 ]
turtles-own [
my-group
]
to setup
ca
crt 500 [
set my-group -99
set shape "square"
move-to one-of patches
]
reset-ticks
end
И эти вспомогательные функции:
to identify-groups
let group-counter 0
loop [
let seed one-of turtles with [ my-group = -99 ]
if seed = nobody [
stop
]
ask seed [
set my-group group-counter
set group-counter group-counter 1
spread-group
]
]
end
to spread-group
set label my-group
set color my-group * 10 5
ask ( turtles-on neighbors ) with [ my-group = -99 ] [
set my-group [my-group] of myself
spread-group
]
end
identify-groups
запускает цикл, который идентифицирует всех черепашек на смежных участках и распределяет уникальное my-group
значение среди этих групп.
Затем вы можете получить уникальные значения группы и использовать filter
только для возврата номеров групп, для которых существует некоторое пороговое значение количества черепах:
to go
identify-groups
let unique-groups sort remove-duplicates [my-group] of turtles
set groups>50 filter [ i -> count turtles with [ my-group = i ] >= 50 ] unique-groups
print groups>50
end