NetLogo - 如何仅对顶部补丁进行排序

时间:2015-07-30 10:23:51

标签: patch netlogo

我有一个补丁字段指定为" 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*
    ]
  ]

感谢您的帮助。我无法在手册中找到任何内容,只需要使用排序。

1 个答案:

答案 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补丁