我一直在玩diffuse关键字。
考虑以下3x3世界,左上角有3个化学梯度,其他地方没有化学物质。此外,边缘没有包裹。
[3 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个剩余单位,其不是原始梯度的.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
答案 0 :(得分:1)
对代码进行一次快速编辑是,如果您希望左上角的补丁值为3,则需要询问补丁0 2.您当前正在询问右下角的补丁。
现在,你的问题来自这样一个事实:当你进行漫反射时,它试图将1.5个值分散到8个补丁上,给每个相邻的补丁0.1875。由于您的起始补丁位于一个角落,因此只能分散在3个补丁中,并且只能提供0.5625(3 * .1825)。
这使原始补丁保留为2.4375。
请注意,如果允许环游世界,你会得到预期的结果。