降低基于代理的模型的复杂性

时间:2015-03-20 13:07:02

标签: java binary-heap agent-based-modeling mason-abm

我正在开发一种基于试剂的模型,模拟细胞培养物的体外生长。

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

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

这导致问题复杂性的快速增长,这很快使模拟变得特别慢。

为了解决这个问题,我决定代理人应该“死”。在 t 创建后的时间步之后。

然而,MASON的计划是建立在BinaryHeap之上的,一旦添加它们就不容易允许删除对象(代理)。我的解决方案是设置一个布尔标志:

dead = false;

t 时间步之后设置为true。

所以

if(t == 50)
    dead = true;

然后我开始我的步骤方法,即每次执行代理时调用的方法,如下所示:

if(dead)
    return;

但是,我知道只需访问计划中的对象就足以减慢模拟速度。

是否有人建议我如何取消代理或阻止代理被调用?

谢谢, 达里奥

1 个答案:

答案 0 :(得分:4)

取自MASON documentation page 94

  

如果您的座席安排重复,   时间表重复(...)   方法返回了一个sim.engine.Stoppable对象。   要防止代理再次调用其step(...)方法,只需在Stoppable上调用stop()。   这也将使代理能够被垃圾收集。