Netlogo 扩散混乱
Netlogo Diffusion Confusion
我一直在研究 diffuse 关键字。
考虑以下 3x3 世界,其中左上角有 3 个化学梯度,其他地方没有化学物质。此外,边缘没有包裹。
[3 0 0 ]
[0 0 0 ]
[0 0 0 ]
如果我的扩散率为 0.5,我希望梯度的 3 (gradient) * .5 (diffusion rate) / 3 (#neighbors) = .5
会分配给它的 3 个邻居。我还希望原始补丁还剩下 1.5 个单位。
然而,当我 运行 漫反射代码时,似乎 3 (gradient) * .5 (diffusion rate) / 8 (#neighbors) = .1875
的渐变被设置为 3 个邻居。原始补丁有 2.4375 个剩余单元,这不是原始梯度的 0.5。这里发生了什么?这是错误还是我的理解不正确?
见下文:
patches-own [value]
to setup
cp
ask patch 0 2 [ set value 3]
diffuse value .5
ask patch 1 1 [ show value]
end
observer: show [value] of patches
observer: [0.1875 0.1875 0 2.4375 0 0 0 0.1875 0]
observer> ask patch 0 2 [ show count neighbors]
(patch 0 2): 3
对代码的一个快速编辑是,如果您希望左上角的补丁值为 3,则需要询问补丁 0 2。您目前正在询问右下角的补丁。
现在,您的问题来自这样一个事实:当您扩散时,它试图将 1.5 的值分散到 8 个补丁上,给每个相邻的补丁 0.1875。由于您的起始补丁位于角落,因此只能分布在 3 个补丁中,并且只能放弃 0.5625 (3*.1825)。
这使得原始补丁为 2.4375。
请注意,如果让世界环绕,您确实会得到预期的结果。
我一直在研究 diffuse 关键字。
考虑以下 3x3 世界,其中左上角有 3 个化学梯度,其他地方没有化学物质。此外,边缘没有包裹。
[3 0 0 ]
[0 0 0 ]
[0 0 0 ]
如果我的扩散率为 0.5,我希望梯度的 3 (gradient) * .5 (diffusion rate) / 3 (#neighbors) = .5
会分配给它的 3 个邻居。我还希望原始补丁还剩下 1.5 个单位。
然而,当我 运行 漫反射代码时,似乎 3 (gradient) * .5 (diffusion rate) / 8 (#neighbors) = .1875
的渐变被设置为 3 个邻居。原始补丁有 2.4375 个剩余单元,这不是原始梯度的 0.5。这里发生了什么?这是错误还是我的理解不正确?
见下文:
patches-own [value]
to setup
cp
ask patch 0 2 [ set value 3]
diffuse value .5
ask patch 1 1 [ show value]
end
observer: show [value] of patches
observer: [0.1875 0.1875 0 2.4375 0 0 0 0.1875 0]
observer> ask patch 0 2 [ show count neighbors]
(patch 0 2): 3
对代码的一个快速编辑是,如果您希望左上角的补丁值为 3,则需要询问补丁 0 2。您目前正在询问右下角的补丁。
现在,您的问题来自这样一个事实:当您扩散时,它试图将 1.5 的值分散到 8 个补丁上,给每个相邻的补丁 0.1875。由于您的起始补丁位于角落,因此只能分布在 3 个补丁中,并且只能放弃 0.5625 (3*.1825)。
这使得原始补丁为 2.4375。
请注意,如果让世界环绕,您确实会得到预期的结果。