Netlogo:现在还没有人被视为代理人吗?

Netlogo:现在还没有人被视为代理人吗?,netlogo,Netlogo,我有一份包裹代理商的名单。但我会定期销毁包裹。但是,列表仍在记录这样的内容:[无人],随着时间的推移,模型的运行速度越来越慢,最终会弹出消息“您的模型太大,无法使用可用内存运行” 在这种情况下,死亡的代理(即无人)是否仍被视为消耗大量内存的代理?如果它是一个纯粹的数字或字符串列表呢?它会导致同样的OOM问题吗?Netlogo和任何UPPER限制中的列表可以有多大?来自,Netlogo die字典:如果您有代理列表,并且代理死亡,则代理将从任何代理集中删除,并且: 代理将从其所在的任何代理集中消

我有一份包裹代理商的名单。但我会定期销毁包裹。但是,列表仍在记录这样的内容:[无人],随着时间的推移,模型的运行速度越来越慢,最终会弹出消息“您的模型太大,无法使用可用内存运行”


在这种情况下,死亡的代理(即无人)是否仍被视为消耗大量内存的代理?如果它是一个纯粹的数字或字符串列表呢?它会导致同样的OOM问题吗?Netlogo和任何UPPER限制中的列表可以有多大?

来自,Netlogo die字典:如果您有代理列表,并且代理死亡,则代理将从任何代理集中删除,并且:

  • 代理将从其所在的任何代理集中消失,从而将这些代理集的大小减少一个
  • 任何存储代理的变量现在都没有人在其中
死去的代理不消耗资源,但列表却在消耗资源(正如您通过打印列表所发现的那样)。您可以通过以下模型看到这一点:

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
明确地执行此操作。数字、字符串等的列表也是如此


或者,如果列表不需要在刻度上维护,但可以重建(例如,如果它是海龟代理集的排序列表),您可以在每个刻度上创建它,并且该列表将只包含活着的海龟。

您需要向我们显示杀死包裹的代码。这听起来像是你在做类似于
ask-turtle[die]
的事情,而没有从列表中使用
remove-item
。是的,我的一个程序员没有这样做,这可以参考我原来的问题。答案是什么?如果你想要一个密码答案,你需要向我们展示关于杀死海龟的密码。否则,正如我已经说过的,使用
remove item
primitiveask PARKALS with[finish?=true][die]——每120个刻度执行一次。ask parcels[die]——在下一个新循环开始之前,在完整模拟运行的总运行时长度(2880个滴答声)结束时执行。在杀死他们之前,我通常会把特工从名单上删除。但这一次,其他人并没有这样做,这导致了类似这样的问题。我只是想知道list and dead agent在这种情况下是如何工作的。如果您使用的是list,那应该是因为您的包裹需要以特定的方式订购。在这种情况下,您可以按照Jen的建议使用
remove item
,或者执行类似
set my list filter is parcel?我的列表
。但是,如果您不需要有序列表,我建议将您的包裹存储在代理集中,而不是列表中。这将完全回避这个问题,因为死去的代理将自动从代理集中删除。对于涉及这些包裹的操作,您还可以获得稍微好一点的语法。