&引用;航海日志;用于科学模拟 我用C++对一些事情进行科学的模拟。此时,由于参数数量的增加,我发现有必要拥有一个“日志”:一个存储给定模拟的所有信息的文件(不是输出;导致该输出的参数和相应的git提交)

&引用;航海日志;用于科学模拟 我用C++对一些事情进行科学的模拟。此时,由于参数数量的增加,我发现有必要拥有一个“日志”:一个存储给定模拟的所有信息的文件(不是输出;导致该输出的参数和相应的git提交),c++,logging,scientific-computing,C++,Logging,Scientific Computing,我已经搜索过了,在我看来,使用XML应该是一个不错的选择,因为它可以使用python、mathematica或其他分析软件轻松解析 我想知道是否有人同意这一点,或者有更好的选择 此外,我想知道如何选择git的当前提交以将其保存在日志上。最简单的选择是将程序变成纯函数,即将所有更改和可能更改的参数外部化为程序选项,以便完全由选项和git提交标识符指定模拟 大大有助于实施这样一项计划。总的来说,我同意你的看法: XML得到了广泛的应用,有大量的工具可以帮助形成日志 它很灵活,您可以在以后添加其他属

我已经搜索过了,在我看来,使用XML应该是一个不错的选择,因为它可以使用python、mathematica或其他分析软件轻松解析

我想知道是否有人同意这一点,或者有更好的选择


此外,我想知道如何选择git的当前提交以将其保存在日志上。

最简单的选择是将程序变成纯函数,即将所有更改和可能更改的参数外部化为程序选项,以便完全由选项和git提交标识符指定模拟


大大有助于实施这样一项计划。

总的来说,我同意你的看法:

  • XML得到了广泛的应用,有大量的工具可以帮助形成日志
  • 它很灵活,您可以在以后添加其他属性,而无需中断旧的“脚本”
  • 它是基于文件的,一个文档,一个文件,使用文件系统来组织日志“页面”
  • 它是基于文件和纯文本的,像find、grep、diff(一次推送)这样的工具可以在紧急情况下帮助您
  • 这是您自己的解决方案,您可以自由跟踪所需的任何信息,如果您认为有必要将日照时数与参数关联,请执行此操作
也就是说,我应该添加存储格式取决于典型的用例,如果您需要找出为什么每个周一满月后乐观主义者都找不到任何解决方案,那么由于您的结构的非规范性,很难(很难)想出必要的XPath/XQuery黑客来做到这一点

我能想到的所有不利因素:

  • 我的领域中的XML文档非常冗长,往往更像20到40GB,而信息可能更像500MB
  • 它的速度很慢(取决于您如何使用它),RDBMs甚至nosql解决方案都使用索引等技术来加快阅读速度
  • 它是灵活的,这也是一个缺点:如果您每天碰巧添加两个新属性,那么最终只会得到一个标记的自由文本,如果您想将其导入到以结构为中心的系统(SQL、csv、json等)中,则需要对其进行彻底的润色
  • 这是您自己的解决方案,您必须编写并维护它

至于第二位:
git descripe--always HEAD

您还可以标记特定的提交。有关详细信息,请参阅。

使用逗号分隔或制表符分隔的值。人类可读且可编辑,存储开销小,可轻松导入任何内容(包括R和excel)。

粒子物理世界主要用于数据收集、存储和分析需求。这包括来自模拟的数据。根目录使得保存一整套元数据和结果成为可能——实际上很容易


通常,当我们有大数据集时,我们也会保留一个数据库,但这是为了方便构造查询:真正的记录保存在包含的元数据中。

这在编程网站上听起来可能有些奇怪,但我发现在做一些模拟工作时,最好的日志是……嗯……日志

具体来说,我已经广泛使用了(链接到Amazon)。这可能是因为我来自潮湿的实验室/生物学背景,但我发现一本枯树笔记本有一些吸引人的地方。不可否认,它不是自动化的,如果您运行大量不同的参数组合,或者如果您的模拟一开始就有大量的参数,那么它不会很好地工作

但对于我正在进行的项目,大约有20个参数可能会有所不同,我喜欢能够记录关于我想法的自由形式的笔记,以便于携带、易于回忆和相当持久的形式记录下来,对于许多实验室同事来说,“留一个实验室笔记本”似乎更适合物理的东西


当然,您的相似性可能会有所不同。

我认为有许多更好、更灵活的标记语言更适合您描述。。。ie yaml/json。它们是人类可读的,很容易手工修改,并且可以很容易地在python中加载ie只需加载它,并将所有数据保存在对象中即可轻松操作。我也知道有人用数据库做这类事情。。。sqllite为您的环境(python或R或其他)提供了一个很好的库,您应该能够轻松地编写一些脚本来提取所需的信息。是的,我也使用过它,而且大多数情况下,“真实”日志是最基本的。关键是我保存了数值实验的所有数据,一个好的“虚拟”平台将参数与结果关联起来也很重要。然而,一件事不能代替另一件事。。。