如何以相同(非随机)顺序从 NetLogo 代理集中检索多个变量?

How to retrieve multiple variables from NetLogo agentsets in the same (not random) order?

我有一个 NetLogo 模型,其中代理从其他代理检索多个变量列表。这些列表的 returned 顺序很重要,因为每个列表中的变量都是相互关联的。但是,我相信列表每次都是 return 从其他代理以随机顺序编辑的。例如,采用以下简化的测试用例:

turtles-own [testlist1 testlist2 testlist3 testlist4]

to setup
random-seed 1
clear-all
create-turtles 5
  ask turtles [
    create-links-with other turtles
    set testlist1 []
    set testlist2 []
    set testlist3 []
    set testlist4 []
    set testlist1 lput [who] of self testlist1
    set testlist2 lput [who] of self testlist2] ;identical to testlist1
end

to go
  ask turtles[  
    set testlist3 reduce sentence [testlist1] of link-neighbors
    show testlist3
    set testlist4 reduce sentence [testlist2] of link-neighbors
    show testlist4]
end

对于我的用例,testlist3 和 testlist4 中的值应该以相同的顺序排列,但它们的顺序随机不同。输出:

(turtle 2): [0 3 1 4]
(turtle 2): [3 4 1 0]
(turtle 3): [4 1 0 2]
(turtle 3): [1 0 2 4]
(turtle 0): [4 2 3 1]
(turtle 0): [3 4 2 1]
(turtle 1): [0 4 2 3]
(turtle 1): [4 2 3 0]
(turtle 4): [0 2 1 3]
(turtle 4): [0 3 2 1]

我的问题:在给定过程中以相同顺序从代理集中 return 多个列表(例如上面的 testlisttestlist2)的最佳方法是什么?

link-neighbors替换为turtle-set sort link-neighbors不起作用,因为在将排序列表转换回代理集后,代理集中的代理将以随机顺序调用。如果可能的话,我宁愿不必使用 matrix 扩展将整个模型从列表重构为矩阵。

将代理集转变为列表的想法是正确的。唯一缺少的部分是使用 map 而不是将其变回乌龟集,然后再次使用 of

to go
  ask turtles[  
    set testlist3 reduce sentence map [ t -> [ testlist1 ] of t ] sort link-neighbors
    show testlist3
    set testlist4 reduce sentence map [ t -> [ testlist2 ] of t ] sort link-neighbors
    show testlist4
  ]
end

有关列表操作和代理集操作之间的并行性的更多详细信息,请参见