我正在开发一个基于代理的模型,模拟细胞体外生长.
我正在使用MASON库(Java),但我想问题是可以适用于不同的实现。
本质上,我的代理程序是在创建后每12 +/- 2个时间步骤进行划分。每次一个代理分开,一个新的一个被添加到仿真中。
这导致了问题复杂性的快速增长,这使得模拟速度特别慢。
为了解决这个问题,我决定代理应该“死”后,从创建的时间步骤。
然而,梅森的日程是建立在一个BinaryHeap之上的,一旦添加了这些对象(代理),它就不允许删除对象(代理)。我的解决方案是设置一个布尔标志:
dead = false;在t个时间步骤之后,它被设置为true。
所以
if(t == 50)
dead = true;然后开始我的step方法,也就是每次代理被分步时调用的方法,如下所示:
if(dead)
return;但是,我理解,简单地访问时间表中的对象就足以减缓模拟的速度。
有人对我如何解除代理或阻止它被调用有任何建议吗?
谢谢,达里奥
发布于 2015-03-20 13:13:47
取自梅森文件第94页
如果您的代理计划重复,则scheduleRepeating(.)方法返回一个sim.engine.Stoppable对象。以防止代理人有步骤(.)方法再次调用,只需在停止点上调用stop()即可。这也将使代理能够被垃圾收集。
https://stackoverflow.com/questions/29167225
复制相似问题