在Netlogo排序过程中打破联系

时间:2016-05-27 11:56:27

标签: list sorting netlogo

我想根据他们的" var"来对海龟进行分类。值。我的代码是:

globals [liste]
turtles-own [var]
to setup
clear-all
create-turtles 5 [setxy (random 5) (random 5)]
ask turtle 0 [set var 1]
ask turtle 1 [set var 1]
ask turtle 2 [set var 1]
ask turtle 3 [set var 2]
ask turtle 4 [set var 3]

set liste [who] of turtles
set liste sort-by [([var] of turtle ?1) < ([var] of turtle ?2)] liste
show liste

end

此代码正常运行,我在多次讨论中获得了以下结果

  

观察员:[0 2 1 3 4]

     

观察员:[1 0 2 3 4]

     

观察员:[0 2 1 3 4]

我希望排序过程返回的问题始终是相同的结果。从我的角度来看,可以添加一个平局,但我不知道如何在Netlogo中做到这一点。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以创建自己的自定义记者,该记者会考虑打破平局。下面,我创建了一个海龟比较报告器,它检查变量是否相等,如果是,他们会根据谁(保证唯一标识符作为平局破坏者)进行比较。否则,通过您指定的变量比较海龟。

我想注意,你可以直接传递海龟,而不是他们的一个人的名单。

to setup
    ...
    show sort-by turtle-compare turtles
    ...
end

to-report turtle-compare [t1 t2]
  report ifelse-value ([var] of t1 = [var] of t2)
  [[who] of t1 < [who] of t2]
  [[var] of t1 < [var] of t2]
end