作为一个玩具,它工作得很好,但很明显,当它放大时,它就会陷入泥潭。我怎样才能做到这个系统,而不要求海龟问其他海龟呢?因此,代码是。
to go
ask turtles
[
ask other turtles [
set heading towards myself
let D distance myself
let C .1 / D - 1 / (D ^ 2)
if C > 1 [set C 1]
fd C
]
]
tick结束
我应该知道怎么做,但大脑不起作用。如果我先得到答案的话,我会跟你们竞争,然后贴出我自己的答案。
发布于 2016-01-13 00:55:30
你实际上是在做一个N体模拟。主要的区别是你的系统中没有速度。不幸的是,没有简单的方法来模拟这个系统,而不要求每一只海龟去问其他海龟。然而,有许多更复杂的算法。
巴恩斯将空间划分为一棵嵌入区域的树,并计算每个区域的质量中心。然后,当一只海龟决定去哪里时,它看的是区域,而不是个别的海龟。如果您熟悉O-表示法,它将在O(n log(n))中运行。应该可以修改Barnes-Hut来处理您的公式。
我不相信粒子网格方法可以在您的模型中使用,但是,老实说,我不完全理解它们是如何工作的。
我注意到方程中的分母(.1 / D - 1 / (D ^ 2),即.1 / (D - 1 * (D ^ 2))在D中是立方的,这意味着它会很快下降。所以你可以限制海龟的半径:ask other turtles in-radius 5 ...。in-radius运行的时间与半径内的补丁数成正比(加上半径中的海龟数量),所以如果这个数目明显小于海龟总数,这可能会导致一个不错的加速比。
https://stackoverflow.com/questions/34749916
复制相似问题