我正在开发一个基于代理的模型来模拟细胞培养的体外生长。
我正在使用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()。
这也将使代理能够被垃圾回收。