gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:10:45 27 4
gpt4 key购买 nike

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

我写了下面的代码:

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 位 Java 中运行 Netlogo。

最佳答案

尝试这样的事情:

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 的值)。它还增加了可读性。

关于netlogo - 海龟移动到最近的某种颜色的斑 block - 如何加快这个过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com