将未指定数量的列表插入列表[Netlogo]

时间:2017-04-05 21:30:33

标签: list netlogo

一般问题:我有一个记者,这是一个品种拥有的变量的列表。此列表的每个刻度都会更改,我想要的是创建一个列表,该列表将为每个刻度存储此品种拥有的变量列表。

具体来说:我记录了"年龄"龟的品种(蚂蚁在这里)。我让他们被报告到一个"蚂蚁巢年龄列表"通过以下

to-report nest_age_dist

  let nest-ages-list [nest-age] of ants
  report (list [nest-age] of ants)

end

如果我给这位记者打电话,我会在每个嘀嗒声中得到类似下面的内容(数字是年龄):

[[1 2 3 3 3 3 3 4 4 4 4 4 5 5 6 6 6 6 6 6 6 6 6]]

这很好,但是要从每个列表中勾选要添加到包含它们的列表中。例如,我想要

[[1 1 1 1 2 2 2 3 3 3 ][2 2 2 2 3 3 3 4 4 4][3 3 3 3 4 4 4 5 5 5]]

哪里

[[tick 1 nest_age_dist ] [tick 2 nest_age_dist ] [tick 3 nest_age_dist ] [tick n nest_age_dist]] 

我希望这很清楚。

似乎解决方案应该很简单,但我不知道如何做到这一点,我无法在stackoverflow上找到解决方案。 NetLogo中的列表是不可变的这一事实让我大吃一惊。

作为旁注,我必须这样做,因为当我使用BehaviorSpace时,我无法使用nest_age_dist报告器,因为当每个tick报告该大型列表时,创建的.csv太大而无法打开我试过的任何文本编辑器(TextWrangler,Texteditor,Excel)。一旦我有了我的列表列表(鉴于此问题已解决),我想只报告列表列表的最后100个列表(嵌套年龄列表)。我知道我可以多次运行较小的模拟,但是如果我不能在一夜之间完成整个该死的事情那么重要!

希望我的问题和我的提问动机都很明确。提前致谢!

2 个答案:

答案 0 :(得分:2)

回答你在哈兹的最后答案,你可以使用sublist。类似的东西:

globals [ 
  all_nest_age_list
  last_x_list
]

turtles-own [
  age
]

to setup
  ca
  crt 5 [
    set age random 6
  ]
  set all_nest_age_list []

end

to go

  repeat 10 [
    ask turtles [
      set age age + 1
    ]
    set all_nest_age_list lput ( sort [age] of turtles ) all_nest_age_list
  ]

  let x 3   ;; however far back you want  
  set last_x_list sublist all_nest_age_list (length all_nest_age_list - x)  (length all_nest_age_list)  
  print last_x_list

end

答案 1 :(得分:1)

如果您只想保留biglist中最近的100个nest-age-dist列表,您可以使用

构建它
let biglist ifelse-value (length biglist >= 100) [lput nest-age-dist but-first biglist] [lput next-age-dist biglist]

因此,跟随Luke C的答案也可以做到这一点,它看起来像:

globals [all_nest_age_list last_10]
turtles-own [age]

to setup
  ca
  crt 5 [
    set age random 6
  ]
  set all_nest_age_list []
  set last_10 []
  reset-ticks
end

to go

  repeat 150 [
    ask turtles [
      set age age + 1
    ]
    set last_10 ifelse-value (length last_10 >= 10) 
       [lput sort [age] of turtles but-first last_10] 
       [lput sort [age] of turtles last_10]
    set all_nest_age_list lput ( sort [age] of turtles ) all_nest_age_list
  ]

  let x 10   ;; however far back you want  
  let last_x_list sublist all_nest_age_list (length all_nest_age_list - x)  (length all_nest_age_list)  
  print last_x_list
  print last_10

end

我只保留了最近的10而不是100。