海龟移动到最近的某种颜色的斑块 - 如何加快这个过程?
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
的值)。它还增加了可读性。
我正在尝试建立一个蝴蝶运动模型,其中蝴蝶被吸引到它们寄主植物的斑块上。这种吸引力表示为存储在名为 "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
的值)。它还增加了可读性。