Давайте посмотрим на определение in-radius
в словаре NetLogo:
Сообщает набор операторов, который включает только тех агентов из исходного набора агентов, чье расстояние отвызывающий номер меньше или равен номеру.
В нем говорится, что in-radius
сообщает об наборе агентов .
Теперь давайте посмотрим на ваш ifelse
условие:
ifelse (Hawks in-radius Reaction_Distance = 0)
Определение говорит нам, что часть Hawks in-radius Reaction_Distance
сообщает набор агентов (то есть всех ястребов, находящихся в радиусе). Затем знак =
сравнивает этот набор агентов с числом 0
. Но набор агентов - это не число! Он никогда не может быть равен нулю.
Я полагаю, что вы хотите сравнить число ястребов в радиусе с числом 0
.
Один из способов сделать это - использовать примитив count
, который сообщает о количестве агентов в наборе агентов:
ifelse (count Hawks in-radius Reaction_Distance = 0)
Это будет работать, ноЯ бы так не писал. NetLogo имеет гораздо более приятный any?
примитив, который вы можете использовать следующим образом:
ifelse (not any? Hawks in-radius Reaction_Distance)
Это выражает ваши намерения гораздо яснее.
Вы можететакже измените порядок пунктов ifelse
, чтобы избежать not
:
ifelse (any? Hawks in-radius Reaction_Distance)
[
; get away from hawks...
]
[
; flock normally...
]