在 netlogo 中,我需要将一组海龟在给定的补丁行上排成一行
我想到的是
(foreach sort-by [ [ t1 t2 ] -> [skill] of t1 > [skill] of t2 ] row-turtles (range length row-turtles) [ [t c] ->
ask t [ setxy (min list c max-pxcor) (25 - ladder-rank) ]
(它只是将剩余的海龟堆放在最后)
有更好的方法吗?
我可能会尝试模仿简单经济模型,以最简单(无双关语)的方式解决您的问题:只需将每只乌龟的
xcor
作为他们的技能即可。它会不太精确,但当你稍后阅读它时也是一个更好的代码:
to go
...
ask turtles [ set xcor skill ]
tick
end
当然,您可能需要标准化技能变量的比例以匹配世界的
min-pxcor
和max-pxcor
或更改世界的维度。简单经济模型做到了后者。它不是使用以 (0,0) 为中心的标准 33x33 网格,而是使用以 (0,0) 为左下角的 500x80 网格。然而,如果您不想改变世界维度并且让技能最低的乌龟始终位于左边缘,那么标准化变量应该相当简单。
您还可以添加一些抖动以确保海龟不会重叠:
ask turtles [
set xcor skill + random-float 1 - random-float 1
]
这是简单经济模型本身的链接:
另一种方法:
如果您想要海龟之间距离相等的漂亮连续线,您还可以使用
foreach
基元创建一个简单的 sort-on
循环:
to go
...
let x min-pxcor
foreach (sort-on [skill] turtles) [ t ->
ask t [
set xcor x
set x (x + 1)
]
]
tick
end
`