我正在开发一个基于代理的模型来模拟细胞培养的体外生长。
我正在使用 MASON 库(Java),但我猜测可能适用于不同的实现。
本质上,我的代理程序被编程为在创建后每 12 +/- 2 个时间步进行划分。每次代理分裂时,都会将一个新代理添加到模拟中。
这导致问题复杂性的快速增长,这很快使模拟变得特别慢。
为了解决这个问题,我决定代理应该在创建的t个时间步之后“死亡”。
但是,MASON 的调度是建立在 BinaryHeap 之上的,一旦添加了对象(代理),就不容易删除它们。我的解决方案是设置一个布尔标志:
dead = false;
在t个时间步之后设置为 true 。
所以
if(t == 50)
dead = true;
然后我开始我的 step 方法,即每次执行 agent 时调用的方法,如下所示:
if(dead)
return;
但是,我知道只需访问计划中的对象就足以减慢模拟速度。
有人对我如何取消设置代理或阻止它被调用有任何建议吗?
谢谢,达里奥