Когда я пытаюсь создать агентов в отдельных группах патчей в радиусе, которым они владеют, я получаю ошибку времени выполнения.
Я искал ответы здесь, но я не полностью их понимаю. Использование, если есть? это часто то, что люди делают. Как я могу реализовать это здесь или что еще я могу сделать?
to set-farm-in-radius [d]
move-to one-of patches with [not any? other patches in-radius d with
[belongs-to != nobody]]
set farm patches in-radius farm-size
ask farm [set belongs-to myself]
let c random 6 + 61
ask farm [set pcolor c]
end
Я ожидал, что это сработает, потому что команда перехода к одному из патчей оказалась очень простой.
Извинения. Я поместил это в заголовок, но теперь вижу, что это не очень ясно. Спасибо.
о, ха, я пропустил это :-)
Итак, move-to one-of patches
— довольно безопасная команда, она никогда не должна давать сбоев при запуске в контексте черепахи.
Но вы делаете что-то более сложное:
move-to one-of patches with [not any? other patches in-radius d with [belongs-to != nobody]]
Таким образом, patches with [not any? other patches in-radius d with [belongs-to != nobody]]
может дать набор агентов с 0 патчами. И one-of
пустой набор агентов даст вам nobody
.
Так что что-то вроде этого может работать лучше:
let open-patches patches with [not any? other patches in-radius d with [belongs-to != nobody]]
ifelse (any? open-patches) [
move-to one-of open-patches
set farm patches in-radius farm-size
ask farm [set belongs-to myself]
let c random 6 + 61
ask farm [set pcolor c]
] [
; handle the case where there are no open patches...
]
Обратите внимание, что с вашим кодом в том виде, в котором он написан, кажется, что все «фермы» довольно легко захватываются и не оставляют подходящих открытых пространств, в зависимости от того, сколько у вас черепах.
всякий раз, когда вы задаете вопрос, вместо того, чтобы говорить «Я получаю ошибку времени выполнения», всегда указывайте полный и точный текст сообщения об ошибке. это облегчает вам помощь.