我有包裹代理人的清单。但我会定期杀死包裹。但是,列表仍然记录着这样的内容:[[nobody none,nobody,nobody,nobody,nobody,nobody]],并且随着时间的流逝,模型的运行越来越慢,最终弹出消息“您的模型太大,无法在可用内存下运行” < / p>
在这种情况下,是否将死的代理(即没有人)仍视为消耗大量内存的代理?如果它是数字或字符串的纯列表怎么办?会引起同样的OOM问题吗? Netlogo和任何上限限制中可以包含多大的列表?
答案 0 :(得分:1)
来自die
的NetLogo词典:如果您具有代理列表,并且该代理死亡,则该代理将从任何代理集中删除,并且:
失效的代理程序没有消耗资源,但是列表是(如您通过打印出列表所发现的)。您可以通过以下模型看到它:
globals [mylist myagentset]
to setup
clear-all
create-turtles 1
set mylist sort-on [who] turtles
set myagentset turtles
reset-ticks
end
to go
create-turtles 1
[ set myagentset (turtle-set myagentset self)
]
set mylist lput one-of turtles mylist
ask one-of turtles [die]
type "turtles: " print count turtles
type "list: " print length mylist
type "agentset: " print count myagentset
tick
end
如果要从列表中删除死龟,则需要使用remove-item
明确地删除。数字,字符串等的列表也是如此。
或者,如果列表不需要在刻度上维护,但可以重新构建(例如,如果它是乌龟代理集的排序列表),则可以在每个刻度上创建它,并且该列表仅包含那些还活着。