一般问题:我有一个记者,这是一个品种拥有的变量的列表。此列表的每个刻度都会更改,我想要的是创建一个列表,该列表将为每个刻度存储此品种拥有的变量列表。
具体来说:我记录了"年龄"龟的品种(蚂蚁在这里)。我让他们被报告到一个"蚂蚁巢年龄列表"通过以下
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个列表(嵌套年龄列表)。我知道我可以多次运行较小的模拟,但是如果我不能在一夜之间完成整个该死的事情那么重要!
希望我的问题和我的提问动机都很明确。提前致谢!
答案 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。