mattsap
mattsap

Reputation: 3806

Netlogo Diffusion Confusion

I've been playing around with the diffuse keyword.

Consider the following 3x3 world where there's 3 chemical gradients at the top left corner and no chemical elsewhere. Also, there's no wrap on the edges.

[3  0  0 ]
[0  0  0 ]
[0  0  0 ]

If I have a diffusion rate of .5, I would expect that 3 (gradient) * .5 (diffusion rate) / 3 (#neighbors) = .5of the gradient would be given to its 3 neighbors. I would also expect that the original patch has 1.5 units remaining.

However, when I run the diffuse code, it seems that 3 (gradient) * .5 (diffusion rate) / 8 (#neighbors) = .1875 of the gradient is being set to the 3 neighbors. The original patch then has 2.4375 remaining units which isn't .5 of the original gradient. What's going on here? Is this an error or is my understanding incorrect?

See below:

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

Upvotes: 2

Views: 248

Answers (1)

Andrew Yoak
Andrew Yoak

Reputation: 641

One quick edit to your code is if you want the top left patch to have a value of 3, you need to ask patch 0 2. You're currently asking the bottom right patch.

Now, your issue is coming from the fact that when you diffuse, it tried to give 1.5 value away spread out over 8 patches, giving each neighboring patch 0.1875. Since your starting patch is in a corner is is only able to spread out across 3 patches and only gives away 0.5625 (3*.1825).

This leaves the original patch with 2.4375.

Note you do get your expected result if you allow the world to wrap around.

Upvotes: 1

Related Questions