0

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

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

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

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

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

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

dead = false;

在t个时间步之后设置为 true 。

所以

if(t == 50)
    dead = true;

然后我开始我的 step 方法,即每次执行 agent 时调用的方法,如下所示:

if(dead)
    return;

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

有人对我如何取消设置代理或阻止它被调用有任何建议吗?

谢谢,达里奥

4

1 回答 1

4

取自MASON 文档第 94 页

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

于 2015-03-20T13:13:47.813 回答