Сначала отредактируйте свой вопрос, а не пишите ответ с вашими обновлениями. Вот более чистая версия вашего кода.
to go-amministrazione
ask amministrazione
[ face next-patch2
fd 0.05
direzione-amministrazione
]
end
to direzione-amministrazione
set segnalati patches with [segnalato?]
if-else any? segnalati
[ set goal one-of segnalati
set goal min-one-of segnalati [distance myself]
]
[ set goal ufficio ]
spurgo
end
То, что я сделал, это:
- заменил сначала
patches with [segnalato? = true]
на patches with [segnalato?]
- вам не нужен бит = true (и вы также можете сказать not
вместо = false)
- заменил все остальные
patches with [segnalato? = true]
на segnalati (поскольку вы на самом деле определяете этот набор патчей - после того, как он определен, вам просто нужно использовать имя, чтобы NetLogo не приходилось повторно создавать набор патчей для его подсчета
- признать, что если есть только один segnalato, то это также самый близкий segnalato
- объединяет логический поток в один оператор
if-else
, поэтому у NetLogo есть только один тест на достоверность, а не три
Глядя на этот код, вы, очевидно, можете удалить строку set goal one-of segnalati
и получить тот же эффект.
Сказав все это, я не вижу ничего логически неправильного в этом коде. Каждый amministrazione должен выбрать ближайший segnalato в качестве своей цели.
То, что я хотел бы сделать, - это создать еще много segnalato, а затем вручную осмотреть несколько amministrazione, которые находятся рядом с segnalato, чтобы увидеть, выбирает ли он правильный. Возможно, вы создали свое segnalato в местах, которые не находятся рядом с amministrazione, так что amministrazione в конечном итоге выбрал тот же segnalato, потому что он оказался центральным.