我正在开发一个基于代理的模型来模拟细胞培养的体外生长。

我正在使用MASON库(Java),但我想可能会适用于不同的实现。

本质上,我的代理程序被编程为在创建后每12 +/- 2个时间步进行划分。每次代理分裂时,都会向模拟中添加一个新代理。

这导致问题复杂性的快速增长,这很快使仿真特别慢。

为了解决此问题,我决定代理商应在创建后的t个步骤后“死亡”。

但是,MASON的日程表基于BinaryHeap,一旦添加了删除对象(代理),该对象就不会轻易允许它们。我的解决方案是设置一个布尔标志:

dead = false;


在t个时间步长后将其设置为true。

所以

if(t == 50)
    dead = true;


然后,我开始执行step方法,即每次执行代理操作时都会调用的方法,如下所示:

if(dead)
    return;


但是,我知道仅访问调度中的对象就足以减慢模拟速度。

有人对我如何取消代理或阻止其呼叫有任何建议吗?

谢谢,
达里奥

最佳答案

取自MASON documentation page 94


  如果您的代理人计划重复,
  scheduleRepeating(...)
  方法返回了sim.engine.Stoppable对象。
  为防止代理再次调用其step(...)方法,只需在Stoppable上调用stop()。
  这也将使代理能够被垃圾回收。

09-27 21:21