2014-09-22 30 views
2

我在模型中建模扩散,但我认为由于NetLogo按顺序更新单个修补程序,我得到了一个计算工件。我不会使用diffuse命令(由于扩散不准确)。然而,就像这个命令的工作方式一样,我想同时更新所有补丁的计算,而不是按顺序更新。我略微记得一些示例代码在的勾号开头使用了值,但我现在似乎无法找到它。如何避免单个修补程序更新

具体来说,我需要帮助编程一种方法来在每个滴答的转折处存储补丁值,然后根据这些存储值进行同时计算。

+0

出于好奇,你用'diffuse'遇到了哪些不准确? – 2014-09-22 17:26:03

+0

嗨布莱恩,谢谢你这个漂亮的编码技巧。我自己并没有测试diffuse命令的不准确性。我已经看到声称自己和邻居之间的非均匀距离(角落补丁比非角落补丁更远)导致不准确。然而,就像我说我自己没有测试过这个,并且简单地接受了另一个研究小组的发言。相反,有限差分方案可以用来逼近Ficks定律中的偏微分方程。这是我的方法。如果您对获取代码感兴趣,请告知我,我很乐意与您分享。 – user3887089 2014-09-23 08:26:29

+0

只需注意'diffuse4'没有非均匀距离问题。 – 2014-09-23 14:48:46

回答

2

伟大的问题。正如你指出,基本上你要计算的变量的新值在一个ask块,但其存储在一个单独的变量,然后更新变量的实际值在第二ask块,像这样:

turtles-own [ 
    value 
    new-value 
] 

... 
to go 
    ask patches [ 
    ;; Change this line to however you want the diffusion to work 
    set new-value 0.5 * value + sum [ 0.5 * value/4 ] of neighbors4 
    ] 
    ask patches [ 
    set value new-value 
    ] 
end 

这样所有补丁都从相同的信息计算出它们的更新值,然后实际上同时更新这些值。

相关问题