Netlogo:仍然没有人被视为代理商吗?

时间:2019-07-16 01:41:59

标签: netlogo

我有包裹代理人的清单。但我会定期杀死包裹。但是,列表仍然记录着这样的内容:[[nobody none,nobody,nobody,nobody,nobody,nobody]],并且随着时间的流逝,模型的运行越来越慢,最终弹出消息“您的模型太大,无法在可用内存下运行” < / p>

在这种情况下,是否将死的代理(即没有人)仍视为消耗大量内存的代理?如果它是数字或字符串的纯列表怎么办?会引起同样的OOM问题吗? Netlogo和任何上限限制中可以包含多大的列表?

1 个答案:

答案 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明确地删除。数字,字符串等的列表也是如此。

或者,如果列表不需要在刻度上维护,但可以重新构建(例如,如果它是乌龟代理集的排序列表),则可以在每个刻度上创建它,并且该列表仅包含那些还活着。