我有一个补丁字段指定为" water"(所有补丁,在y轴上低于0点,除了最后一个"底部"一个)。水面以上是空气:
set water-top 0
set water patches with [ pycor < 0 and pycor > min-pycor ]
set air patches with [ pycor > water-top ]
他们有一个属性:
patches-own [ heat ]
我想要&#34; water&#34;仅从上到下排序。 该模型应该采取一些热量&#34;来自&#34; air&#34;并通过&#34; water&#39;分发它。自上而下,意味着顶层获得更多热量,而底层则更少。
ask air [ set heat 1 ]
ask water [ set heat 0 ]
foreach sort water [ ;; *Sort top-to-bottom needed here*
ask ? [
*some heat distributing code*
]
]
感谢您的帮助。我无法在手册中找到任何内容,只需要使用排序。
答案 0 :(得分:2)
您似乎正在使用pycor作为高度代理,并且您希望热量向下移动?补丁是世界上固定的部分 - 它们无法移动。因此,出于您的目的,它们已经按正确的排序顺序排列。你真正想要的是什么(不是我对你的代码做的微小改动,以便水顶有效果,水存在于底部和空气中,并添加颜色,所以你可以看到改变的目的&lt; to&lt; = etc)
set water-top 0
set water patches with [ pycor <= water-top and pycor >= min-pycor ]
set air patches with [ pycor > water-top ]
ask air
[ set color white
set heat 1
]
ask water
[ set color blue
set heat calculate-heat (water-top - pycor)
]
to calculate-heat depth
; code that converts depth into heat
end
以上代码将在单个刻度中进行热量分配。如果你想让热量实际上向下移动一段时间,那么你需要把时间投入到模型中,并且要求补丁以适当的顺序执行某些操作所需的代码是:
foreach sort-on [- pycor] water
[ ask ? [ do-something that looks at heat of above patch] ]
以便首先完成最高的pycor补丁