海龟移动到最近的某种颜色的斑块 - 如何加快这个过程?

Turtles move to nearest patch of a certain color - how can this process be sped up?

我正在尝试建立一个蝴蝶运动模型,其中蝴蝶被吸引到它们寄主植物的斑块上。这种吸引力表示为存储在名为 "attr-prob" 的变量中的概率。如果一只蝴蝶位于寄主植物斑块的 25 m 以内(pcolor = 9.9),它将以 attr-prob 的概率移动到最近的寄主植物斑块。

我写了下面的代码:

if (distance (min-one-of (patches with [pcolor = 9.9]) [distance myself]) )     <= 25 
 [if random-float 1 < attr-prob [move-to min-one-of (patches with [pcolor = 9.9]) [distance myself]]]

这段代码似乎在做我想要它做的事情,但是,当我将这部分添加到我的模型中时,它会极大地减慢它的速度。有没有人有任何可能更快的编码替代建议?

我是 运行 64 位的 Netlogo Java。

尝试这样的事情:

if random-float 1 < attr-prob [
  let target-patch min-one-of (patches in-radius 25 with [pcolor = 9.9]) [distance myself]
  if target-patch != nobody  [
    move-to target-patch
  ]
]

出于几个原因,这应该会更快。

首先,最快的代码是永远不会运行的代码。因此,在一开始就进行概率检查可以让您尽可能跳过计算最近的补丁。

其次,预先使用 in-radius 而不是在最后检查距离会减少您查看的补丁数量。基本上,您将只检查半径内补丁的颜色和距离,而不是世界上的所有补丁。

最后,在您的原始代码中,您找到了两次最接近的补丁。相反,您可以将补丁存储在局部变量中(我提供的代码中的 target-patch),这样您只需找到它一次。仅此一项就应该使代码速度加倍(取决于 attr-prob 的值)。它还增加了可读性。