NetLogo中的代理垃圾收集

NetLogo中的代理垃圾收集,netlogo,Netlogo,我正在用TSP来演示一个类中的遗传算法。学生应该编写GA。有一个永久按钮将持续运行GA。只要找到新的最佳路径,就会保存并显示它 为了说明这应该如何工作,我编写了一个贪婪路径过程。从随机节点开始,它通过获取连接到未使用节点的最短链接来构建路径 下面是调用贪婪路径的(稍微简化的)永久按钮过程。 to continual-greedy-path let new-path greedy-path ;; Creates a new path agent if [path-length] of ne

我正在用TSP来演示一个类中的遗传算法。学生应该编写GA。有一个永久按钮将持续运行GA。只要找到新的最佳路径,就会保存并显示它

为了说明这应该如何工作,我编写了一个
贪婪路径
过程。从随机节点开始,它通过获取连接到未使用节点的最短链接来构建路径

下面是调用贪婪路径的(稍微简化的)永久按钮过程。

to continual-greedy-path
  let new-path greedy-path ;; Creates a new path agent
  if [path-length] of new-path < [path-length] of best-path [
    set-new-best-path new-path
    display-best-path
    ]
end 
到连续贪婪路径
让新的路径贪婪的路径;;创建新的路径代理
如果新路径的[path length]小于最佳路径的[path length][
设置新的最佳路径新路径
显示最佳路径
]
结束
每次调用
贪婪路径
都会创建一个新的
路径
代理来存储路径。问题是我的内存不足。随着
连续贪婪路径
按钮的打开,
计数路径
不断增加,内存被迅速消耗,即使很少找到更好的路径。(任何起点只有一条贪婪路径。因此,新路径的最大数量是节点数。即使只有两个节点,并且没有找到更好的路径,也会出现问题!)

未使用的
路径
代理是否未在
连续贪婪路径的末尾进行垃圾收集?
是否还缺少其他东西

正在生成的唯一新代理是
路径
。没有新的
节点

谢谢


更新:一些实验表明存在垃圾收集。也许它跟不上新路径生成的速度。但是,为什么系统不放慢速度,而不是耗尽内存呢?

看起来由
连续贪婪路径
创建的海龟没有被移除,只是变量
新路径
。因此,您的路径仍然存在,并且它们的
计数不断增加,因为
新海龟在这里:

globals [ max-x ]

to setup
  ca
  set max-x min-pxcor 
  reset-ticks  
end

to new-max-x
  let new-t new-turtle
  if [xcor] of new-t > max-x [
    set max-x [xcor] of new-t
  ]
end

to-report new-turtle
  let x nobody
  crt 1 [
    set x self
    set xcor random-pxcor
  ]
  report x
end
我认为快速修复方法是手动删除那些不符合您标准的路径代理,例如:

globals [ max-x max-x-turt]

to setup
  ca
  set max-x min-pxcor 
  set max-x-turt nobody
  reset-ticks  
end

to new-max-x
  let new-t new-turtle
  ifelse [xcor] of new-t > max-x [
    set max-x [xcor] of new-t
    if max-x-turt != nobody [
      ask max-x-turt [
        die
      ]
    ]
    set max-x-turt new-t
  ] [
    ask new-t [
      die
    ]
  ]
end

to-report new-turtle
  let x nobody
  crt 1 [
    set x self
    set xcor random-pxcor
  ]
  report x
end

我忘记了
die
选项。我应该这么做的。仍然习惯于NetLogo思维。谢谢