有效地跟踪模拟观测值



我用时间组件运行时间模拟,在那里我跟踪一些可观察的(动能,力,…)。我目前的实现使用numpy数组,它在开始时被初始化为零(shape:(直到结束的时间步数,dim of observable)),并在每个时间步中得到更新。由于模拟中的不稳定性和为了不丢失数据,我使用Json每1000步保存数组。对于较短的模拟,这工作得很好,但对于较长的模拟,这导致了糟糕的表现。我怀疑这是由于每次都要将整个数组写入文件。

我现在的问题是,是否有一些有效的方法,可以跟踪可观察到的并定期保存它们?Pandas dataframe能做到这一点吗?

编辑:添加了更多的上下文

我知道已经有一段时间了,但如果有人还在寻找一种方便的方法来跟踪模拟的可观察对象,请看看这个Python包。

它是一个简单的模拟监视器,允许您跟踪变量并将数据存储在输出目录中。至于您关心的数据保存问题,这个包为您提供了启用autosave的选项,它会自动保存数据。

虽然目前这个自动保存操作没有发生在另一个进程中,但这个包确实为您提供了一个"实时视图"。在模拟过程中可以切换的模式。这个实时视图在一个不同的进程中打开。当模拟仍在运行时,这提供了一个很好的数据视图,并且可能不会影响其整体性能。

下面是一个使用Simmon包的简单示例:

from simmon import Monitor
# Create a Monitor - this opens an output directory and a window with toggle buttons
# for user control
mon = Monitor('Example Monitor')
# add a tracker to collect data
tr = mon.tracker('x', 'y')  # x and y are data labels
...
# update the tracker throughout the simulation
tr.update(x, y)  # update tracker with new values
...
mon.finalize()  # closes windows and saves unsaved data

最新更新