Как вы к этому подходите, вам нужны довольно запутанные утверждения вроде:
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]
.
Этот код проверяет каждый патч в случайном порядке и добавляет его к набору патчей (называемых зеленым), если условия выполнены. После того, как все пятна будут протестированы, набор выбранных пятен изменит свой цвет. Это позволяет избежать проблем, когда желтые или синие пятна становятся зелеными и недоступны для последующих проверок.