Вложенные запросы if в контексте исправления NetLogo

Я хочу изменить цвет патчей на зеленый при следующих условиях:

- ЕСЛИ в одном столбце есть любые два синих пятна и расстояние между ними меньше 25 И

- ЕСЛИ есть какие-либо желтые пятна в том же столбце и между этими выбранными синими пятнами

-Затем измените цвет всех патчей, удовлетворяющих этим условиям, на зеленый.

Я изо всех сил пытаюсь сделать это в NetLogo, пытался использовать вложенный цикл, но не смог найти способ. Спасибо за любую помощь. И я добавил образец изображения, которого я хочу добиться, и отметил примеры синих пятен.

введите здесь описание изображения

В дополнение, чтобы показать, что я хочу сделать в коде (извините за код):

     if any? patches with [pcolor = blue and
      (if any? patches with [pcolor = blue and pycor = ?(selected_first_blue's_pycor)
        if any? patches with [pcolor = yellow and pycor < ??(selected_first_blue's_pycor) and pycor > ?(selected_second_blue's_pycor)))
    [ask patches [set pcolor green]]

person Ecrin    schedule 28.05.2020    source источник
comment
Пожалуйста, напишите, что вы пробовали, и объясните, что не так.   -  person underscore_d    schedule 28.05.2020
comment
Добавил пример кода, просто чтобы показать мою логику. Если это не подходит для структуры NetLogo, есть ли другой способ сделать это?   -  person Ecrin    schedule 28.05.2020


Ответы (1)


То, как вы подходите к этому, вам нужны довольно запутанные утверждения, такие как:

let upper-blues patches with [color = blue and
   any? other patches with [color = blue and pxcor = [pxcor] of myself
        and pycor < [pycor] of myself and pycor > [pycor] of myself - 25]

Я считаю, что было бы намного проще взглянуть на патч, который вы хотите потенциально озеленить. Если я правильно интерпретировал ваши условия, этот патч должен разработать ближайший желтый патч выше/ниже/в, а затем проверить, есть ли два синих патча, заключающих в скобки как желтый, так и сам, с синими патчами, достаточно близкими друг к другу. Я предполагаю, что у вас отключена упаковка.

Вот полная модель, которая помещает красную черепаху вместо того, чтобы превращать патч в зеленый, чтобы вы могли видеть, идентифицирует ли он правильные патчи.

to setup
  clear-all
  ask patches [set pcolor white]
  ask n-of 100 patches [set pcolor blue]
  ask n-of 100 patches [set pcolor yellow]
end

to convert-to-green
  let turn-green nobody
  ask patches
  [ let my-column patches with [pxcor = [pxcor] of myself]
    let above-yellow min-one-of my-column with [pcolor = yellow and pycor >= [pycor] of myself][pycor]
    let above-blue ifelse-value (above-yellow != nobody) [min-one-of my-column with [pcolor = blue and pycor > [pycor] of above-yellow][pycor]][nobody]
    let below-yellow max-one-of my-column with [pcolor = yellow and pycor <= [pycor] of myself][pycor]
    let below-blue ifelse-value (below-yellow != nobody) [max-one-of my-column with [pcolor = blue and pycor < [pycor] of below-yellow][pycor]][nobody]
    if above-blue != nobody and below-blue != nobody and ([pycor] of above-blue - [pycor] of below-blue < 25)
    [ set turn-green (patch-set self turn-green)
    ]
  ]
  ask turn-green [sprout 1 [set color red]]
end

Как только вы убедитесь, что все работает правильно, измените ask turn-green [sprout 1 [set color red]] на ask turn-green [set pcolor green].

Этот код проверяет каждое исправление в случайном порядке и добавляет его в набор исправлений (называемый «зеленым»), если выполняются условия. После того, как все патчи будут протестированы, набор выбранных патчей изменит свой цвет. Это позволяет избежать проблем, когда желтые или синие патчи становятся зелеными и недоступными для проверки более поздних исправлений.

person JenB    schedule 28.05.2020
comment
Спасибо за быстрый ответ и код. Я пробовал, не хватало скобок и добавлялись ли они? проверяйте перед каждым пусковым кодом в спрашивайте патчи. Однако на этот раз требуется еще одна проверка назначенных исправлений внутри добавленных проверок. Например, никто не выдает ошибку для патчей ниже желтого в этой строке: если есть? пятна с [pcolor = синий и pycor ‹ [pycor] ниже желтого]. Кроме того, вы предлагаете мне взимать плату с нескольких агентов за эту задачу, проверяя каждый патч, если он удовлетворяет условиям, или лучше следовать направлению patch-context. Так же отключается накрутка. - person Ecrin; 28.05.2020
comment
set Turn-Green Patch-Set Self Turn-Green - Ошибка: Ожидается команда. Кроме того, то же самое происходит с условиями, которые я указал в предыдущем комментарии. Спасибо. - person Ecrin; 28.05.2020
comment
Пробовал отредактированную версию. Я имею в виду, что это дает ошибку, когда, например, выше-желтый пуст: ЛЮБОЙ? ожидал, что ввод будет набором агентов, но вместо этого получил НИКТО. Надеюсь, я смог объяснить, что я имею в виду. - person Ecrin; 28.05.2020
comment
Я мог бы решить ее, рассмотрев каждый столбец один за другим и используя вашу верхнюю и нижнюю идеи. Спасибо за вашу помощь и время. Но я не смог найти проблему с вашим кодом, который, кажется, может решить проблему с несколькими кодами строк, или, может быть, я не смог его запустить. В любом случае спасибо за помощь и направление. - person Ecrin; 28.05.2020
comment
Хорошо, я сделал это так, чтобы можно было протестировать код. Кажется, все работает нормально (хотя мне пришлось исправить некоторые скобки) - person JenB; 28.05.2020