【问题标题】:How to retrieve multiple variables from NetLogo agentsets in the same (not random) order?如何以相同(非随机)的顺序从 NetLogo 代理集中检索多个变量?
【发布时间】:2019-03-12 18:46:59
【问题描述】:

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

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]

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

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

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    您将代理集转换为列表的想法是正确的。唯一缺少的部分是使用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
    

    请参阅this answer,了解有关列表操作和代理集操作之间并行性的更多详细信息。

    【讨论】:

    • 谢谢,效果很好!最初,我很惊讶没有收到错误OF expected this input to be an agent or agentset, but got a list instead,因为例如set testlist3 reduce sentence [ testlist1 ] of sort link-neighbors 就会发生这种情况。如果我错了,请纠正我,但我相信因为 map 一次返回 sort link-neighbors 的一个元素,所以匿名过程中的 t 是一个代理——所以它可以工作。再次感谢!
    • 是的,说“map一次返回sort link-neighbors的一个元素,匿名过程中的t是一个代理”是对的。很高兴它对你有用!
    猜你喜欢
    • 2015-02-05
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多