Netlogo 排序过程中的决胜局

Tie breaker in Netlogo sorting process

我想根据“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

此代码有效,我在多次执行中获得了以下结果

observer: [0 2 1 3 4]

observer: [1 0 2 3 4]

observer: [0 2 1 3 4]

问题是我希望排序过程 returns 总是相同的结果。从我的角度来看,可以添加一个决胜局,但我不知道如何在 Netlogo 中进行。有什么建议吗?

您可以创建自己的自定义报告程序来考虑决胜局。下面,我创建了一个 turtle-compare 报告器,它检查 vars 是否相等,如果相等,它们将根据 who(保证唯一标识符作为决胜局)进行比较。否则,海龟将根据您指定的变量进行比较。

我想指出,你可以直接传入海龟,而不是他们的 whos 列表。

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