Использование оператора if с набором агентов в NetLogo - PullRequest
1 голос
/ 02 марта 2020

Новое в NetLo go. Я использую пример Fire Simple, я добавил новый tress с pcolor = blue. Я пытаюсь сделать условие, чтобы синий патч стал красным только в том случае, если его 4 соседа тоже красные.

запрашивать патчи с [pcolor = blue] [установить pcolor красный if (соседей4 с [pcolor =] красный]> 3)]

Я получаю сообщение об ошибке "> ожидал, что этот вход будет агентом, числом или строкой, но вместо этого получил набор агентов"

1 Ответ

2 голосов
/ 03 марта 2020

Итак, есть пара небольших проблем с вашим кодом, как написано.

Во-первых, в NetLo go, за командой if должен следовать блок команды, для каждой записи в словаре. . Таким образом, вы не можете сделать command if someCheck, вам нужно сделать if someCheck [ command ]

Во-вторых, neighbors4 with [color = red] даст вам набор агентов, в данном случае набор патчей. Поэтому вы не можете сравнивать набор операторов с числом, как в neighbors4 with [pcolor = red] > 3. Вам необходимо получить count из набора агентов: count neighbors4 with [pcolor = red] > 3

ask patches with [pcolor = blue] [ 
  if (count neighbors4 with [pcolor = red] > 3) [ 
    set pcolor red 
  ] 
]

Кроме того, если мы заметим, что внутренний оператор if - это просто дополнительный фильтр, на котором синие пятна станет красным, мы можем фактически использовать оператор with из внешнего ask и немного упростить вещи:

ask patches with [pcolor = blue and (count neighbors4 with [pcolor = red] > 3)] [
  set pcolor red 
]

Надеюсь, это поможет.

...