Netlogo 如何用多边形中的其他颜色替换颜色?

Netlogo 如何用多边形中的其他颜色替换颜色?,netlogo,Netlogo,我有如下补丁: 我想给白色补丁上色,如下图所示: 下面是我用蓝色为白色补丁着色的代码: ask patches with [pcolor = white] [ if any? neighbors with [pcolor = blue] [set pcolor blue] ] 但问题是我得到了这个数字: 提前感谢你的帮助 问题的出现是因为补丁程序正在按顺序更改,因此一些白色补丁程序在响应ask时发现它们有新的蓝色邻居 ask patches with [pcolor = white and

我有如下补丁:

我想给白色补丁上色,如下图所示:

下面是我用蓝色为白色补丁着色的代码:

ask patches with [pcolor = white] [
if any? neighbors with [pcolor = blue] [set pcolor blue] ]
但问题是我得到了这个数字:


提前感谢你的帮助

问题的出现是因为补丁程序正在按顺序更改,因此一些白色补丁程序在响应
ask
时发现它们有新的蓝色邻居

ask patches with [pcolor = white and any? neighbors with [pcolor = blue]] [set pcolor blue]

注意:编辑此答案是为了回应Nicholas的观察,即
with
将在调用
ask
之前创建整个代理集。但是,我坚持使用
邻居
,因为我就是这样理解这个问题的。

问题出现的原因是补丁程序是按顺序更改的,因此一些白色补丁程序在响应
提问时发现它们有新的蓝色邻居

ask patches with [pcolor = white and any? neighbors with [pcolor = blue]] [set pcolor blue]

注意:编辑此答案是为了回应Nicholas的观察,即
with
将在调用
ask
之前创建整个代理集。但是,我坚持使用
邻居
,因为我就是这样理解这个问题的。

Alan关于问题的原因是正确的,但是您不需要创建
下一个pcolor
面片变量。如果您将这两个条件都放在
with
块中,NetLogo将首先构造补丁的代理集,然后让这些补丁做一些事情,从而避免您遇到的时间问题。让我们试试看。由于您显然必须同时使用蓝色和青色补丁,因此让我们构建一个更通用的版本:

to color-white-patches-v1 [ c ]
  ask patches with [ pcolor = white and any? neighbors with [ pcolor = c ]] [
    set pcolor c
  ]
end
您可以通过以下方式拨打:

color-white-patches-v1 cyan
color-white-patches-v1 blue
结果如下:

但这不是你想要的。这是因为给你一个补丁的所有8个邻居。让我们尝试使用
邻居4

to color-white-patches-v2 [ c ]
  ask patches with [ pcolor = white and any? neighbors4 with [ pcolor = c ]] [
    set pcolor c
  ]
end

还没到那里。它认为你将不得不求助于类似的东西。在本例中,我只查看上面的补丁:

to color-white-patches-v3 [ c ]
  ask patches with [ pcolor = white and [ pcolor ] of patch-at 0 1 = c ] [
    set pcolor c
  ]
end


我不确定这是否正是您想要的,也不确定这是否适用于您的一般问题,但是通过在
处使用
补丁的一些组合,您应该能够得到您所需要的。

Alan关于问题原因的说法是正确的,但您不需要创建下一个pcolor
补丁变量。如果您将这两个条件都放在
with
块中,NetLogo将首先构造补丁的代理集,然后让这些补丁做一些事情,从而避免您遇到的时间问题。让我们试试看。由于您显然必须同时使用蓝色和青色补丁,因此让我们构建一个更通用的版本:

to color-white-patches-v1 [ c ]
  ask patches with [ pcolor = white and any? neighbors with [ pcolor = c ]] [
    set pcolor c
  ]
end
您可以通过以下方式拨打:

color-white-patches-v1 cyan
color-white-patches-v1 blue
结果如下:

但这不是你想要的。这是因为给你一个补丁的所有8个邻居。让我们尝试使用
邻居4

to color-white-patches-v2 [ c ]
  ask patches with [ pcolor = white and any? neighbors4 with [ pcolor = c ]] [
    set pcolor c
  ]
end

还没到那里。它认为你将不得不求助于类似的东西。在本例中,我只查看上面的补丁:

to color-white-patches-v3 [ c ]
  ask patches with [ pcolor = white and [ pcolor ] of patch-at 0 1 = c ] [
    set pcolor c
  ]
end


我不确定这是否正是您想要的,也不确定这是否适用于您的一般问题,但通过在上使用一些补丁组合,您应该能够得到您需要的。

非常感谢Nicolas。通过使用color-white-patches-v3,在第二个图(color-white-patches-v2)的顶部还有一个白色补丁。我是否必须测试所有可能的组合(例如0 1处的补丁、1 1处的补丁等)?谢谢你的帮助。我很难识别你所指的“一个白色补丁”。但在任何情况下,答案都是你不必“测试所有可能的组合”:如果你理解了什么,你应该能够找出你需要的组合。你说你的一个额外的白色补丁是“在顶部”:例如,你可以检查它下面是否有一个蓝色补丁(
补丁在0-1
),右边是否有一个蓝色补丁(
补丁在10
)。非常感谢Nicolas。通过使用color-white-patches-v3,在第二个图(color-white-patches-v2)的顶部还有一个白色补丁。我是否必须测试所有可能的组合(例如0 1处的补丁、1 1处的补丁等)?谢谢你的帮助。我很难识别你所指的“一个白色补丁”。但在任何情况下,答案都是你不必“测试所有可能的组合”:如果你理解了什么,你应该能够找出你需要的组合。你说你的一个额外的白色补丁是“在顶部”:例如,你可以检查它下面是否有一个蓝色补丁(
patch at 0-1
),右边是否有一个蓝色补丁(
patch at 1 0
)。