存储大量模拟配置,运行值和最终结果的首选(或推荐)方法

Kok*_*kos 5 python database simulation design-patterns

我正在使用一些网络模拟器.在对它进行一些扩展之后,我需要进行大量不同的模拟和测试.我需要记录:

  • 模拟场景配置
  • 每个时间单位t的每个设备的一些参数(例如缓冲区大小,信号质量,位置)的值
  • 从这些记录值计算的最终结果

执行模拟后需要第二个数据来执行一些可视化(简单动画,随时间显示一些统计数据).

我正在使用Python与matplotlib等进行后处理数据和编写适当的应用程序(现在考虑pyQt或Django,但这不是问题的主题).现在我想知道存储这些数据的最佳方法是什么?

我的第一个猜测是使用XML文件,但它可能是XML语法的过多开销(我的意思是,文件可以增长到非常大的大小,特别是对于数据类型的第二部分).所以我试图设计一个数据库......但在我看来这也不是正确的方法......也许是两者的混合?

我试图在谷歌找到一些线索,但没有发现什么特别的.您是否曾需要存储此类数据?你是怎么做到的?那有什么"设计模式"吗?

Rol*_*ald 5

单独的关注点:

除了考虑用于存储数据的技术(DBMS、CSV 或科学数据特定格式之一)之外,请注意您需要管理三种截然不同的数据

  • 模拟场景配置:这些(通常)相当小,但它们需要易于编辑、易于重复使用,并且应该允许重现模拟运行。在这里,文本或代码文件似乎是一个不错的选择(这些也应该受版本控制)。

  • 原始模拟数据:如果您关心模拟性能,这就是您应该非常小心的地方,因为如果实施不当,在运行期间写入 3 GB 的数据可能会花费大量时间。一种方法是为此目的使用现有的文件格式(见下文),看看它们是否适合您。如果没有,您仍然可以使用 DBMS。此外,包含对生成数据的场景的描述(或至少是参考)通常是个好主意,因为这有助于您管理结果。

  • 后处理数据:如何存储这些数据主要取决于后处理工具。例如,如果您的可视化应用程序已经有一个类结构,您可以定义一种文件格式,以便于读取所需的数据。

寻找现有的解决方案:

您面临的问题(如何管理模拟数据?)是根本问题,并且有许多潜在的解决方案,每个都有一定的权衡。当您从事网络模拟时,请查看您社区中使用的其他工具提供的功能。可能是他们的开发人员遇到了您甚至没有预料到的问题(关于可重复性等),并且已经找到了一个很好的解决方案。例如,您可以查看OMNeT++如何处理模拟输出:模拟配置在单独的文件中定义,结果被写入vecsca文件(取决于它们的性质)。据我了解您的分层数据问题,这也是支持的(向量获得唯一 ID 并与某些模型实体的属性相关联)。其他工具已经可以处理这些文件格式,例如它们转换为其他格式,如 CSV/MATLAB 文件,因此您甚至可以考虑以相同格式创建文件(在此处记录)并使用现有工具/转换器进行后处理。

许多其他模拟工具将具有类似的功能,因此请查看最适合您的工具。