Попросите черепах изменить цвет, когда они проходят через определенный патч Netlogo

#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 от черепахи, выполняющей запрос. Я пересмотрю