我正在开发一种基于试剂的模型,模拟细胞培养物的体外生长。
我正在使用MASON库(Java),但我想问题可能适用于不同的实现。
基本上,我的代理人被编程为在创建后每12 +/- 2步分。每次代理人划分时,都会在模拟中添加一个新的。
这导致问题复杂性的快速增长,这很快使模拟变得特别慢。
为了解决这个问题,我决定代理人应该“死”。在 t 创建后的时间步之后。
然而,MASON的计划是建立在BinaryHeap之上的,一旦添加它们就不容易允许删除对象(代理)。我的解决方案是设置一个布尔标志:
dead = false;
在 t 时间步之后设置为true。
所以
if(t == 50)
dead = true;
然后我开始我的步骤方法,即每次执行代理时调用的方法,如下所示:
if(dead)
return;
但是,我知道只需访问计划中的对象就足以减慢模拟速度。
是否有人建议我如何取消代理或阻止代理被调用?
谢谢, 达里奥
答案 0 :(得分:4)
如果您的座席安排重复, 时间表重复(...) 方法返回了一个sim.engine.Stoppable对象。 要防止代理再次调用其step(...)方法,只需在Stoppable上调用stop()。 这也将使代理能够被垃圾收集。