#netlogo
#netlogo
Вопрос:
Когда черепаха проходит через определенный патч, она меняет цвет и продолжает двигаться случайным образом с новым цветом. Поэтому я спрашиваю черепах с именем «yong», которые имеют желтый цвет, если какая-либо из черепах «yong» проходит через патч в радиусе 2, она должна изменить цвет на зеленый. Мой код выполняется без ошибок, но на выходе все желтые черепахи «yong» меняют цвет на зеленый, чего я не хочу.
to interact-turtles
ask yong [
if any? yong-on patches in-radius 2 [ set color green ]
]
end
Ответ №1:
Ваша проблема в том, что вы заставляете черепаху спрашивать об исправлениях in-radius
, что приведет к появлению этих исправлений, где бы ни находилась черепаха. Вместо этого вам нужны патчи на расстоянии 2 от источника.
to interact-turtles
let sink patches with [abs px-cor <= 2 and abs py-cor <= 2]
ask yong-on sink [ set color green ]
end
Но если вы хотите, чтобы эта область приемника была постоянной функцией среды, вы могли бы использовать переменную для ее сохранения, а не создавать ее повторно. В качестве глобальной переменной:
globals [sink]
to setup
...
set sink patches with [abs px-cor <= 2 and abs py-cor <= 2]
...
end
Тогда вы всегда можете ask yong-on sink
что-то сделать.
Или вы можете иметь true / false (логическую) переменную для каждого патча, которая указывает, находится ли он в приемнике.
patches-own [sink?]
to setup
...
ask patches [ set sink? if abs px-cor <= 2 and abs py-cor <= 2]
...
end
Тогда у вас могут быть конструкции, подобные ask yong-on patches with [sink?]
делать вещи.
Комментарии:
1. Спасибо @JenB за ответ. Чтобы уточнить, я хочу, чтобы любая молодая черепаха, которая проходит через патч, меняла цвет с желтого на зеленый. Когда я делаю это
ask yong [ if any? other yong-on patches in-radius 2 [ set color green ] ]
, почти все молодые черепахи становятся зелеными, кроме двух или трех, что должно быть наоборот. например, у меня должно быть только несколько черепах, которые становятся зелеными, а не много.2. Вы ссылаетесь на «патч». Какой патч вы имеете в виду?
3. Патч, который я имею в виду, — это площадь круга с радиусом 2 от центра. Я создал его так
clear-all let sink-patch-radius 2 let sink-centre patch 0 0 set sink-patches [patches in-radius sink-patch-radius] of sink-centre ask sink-patches [ set pcolor red ] end
4. Это ваша проблема, вы запрашиваете исправления в пределах 2 от черепахи, выполняющей запрос. Я пересмотрю