我正在使用C ++对某些事情进行科学模拟。此时,由于参数数量的增加,我发现需要一个“日志”:一个文件,其中存储了有关给定模拟的所有信息(不是输出;导致该输出的参数和相应的git commit )。
我已经搜索过,在我看来,使用XML应该是一个不错的选择,因为它可以使用python,mathematica或其他分析软件轻松解析。
我想知道是否有人同意这一点,或者有更好的选择。
此外,我想知道如何选择当前的git提交以将其保存在日志中。
答案 0 :(得分:4)
总的来说,我同意你的观点:
话虽这么说,我应该添加存储格式取决于典型的用例,如果你需要找出为什么每个星期一在满月之后优化器找不到任何解决方案,那将很难(好,更难)提出必要的XPath / XQuery hackery来做,因为你的结构的非规范性。
我能想到的所有缺点:
至于第二位:git describe --always HEAD
答案 1 :(得分:1)
最简单的选择是使程序成为一个纯函数,即将所有更改和可能更改的参数外部化为程序选项,以便模拟由选项和git提交标识符完全指定。
Boost.Program_options有助于实施这样的计划。
答案 2 :(得分:1)
这在编程网站上可能听起来很奇怪,但我发现做了几个模拟工作,最好的日志就是......好吧......一本日志。
具体来说,我已广泛使用this one(链接到亚马逊)。这可能是因为我来自湿实验室/生物学背景,但我发现了一些关于旧死树笔记本的吸引人的东西。它确实不是自动化的,如果你运行大量不同的参数组合,或者如果你的模拟开始有大量的参数,它就不会很好。
但对于我正在研究的项目,它有大约20个左右的参数可能会有所不同,我喜欢能够记录关于我的想法的自由形式的注释,让它们以易于携带,易于回忆和相当耐用的形式存在,对于许多实验室伙伴来说,“保持一个实验室笔记本”似乎在物理上更好。
你的语言当然可能会有所不同。
答案 3 :(得分:0)
您还可以标记特定提交。有关详细信息,请参阅http://book.git-scm.com/3_git_tag.html。
答案 4 :(得分:0)
使用逗号分隔或制表符分隔的值。人类可读且可编辑的小存储开销,可轻松导入几乎任何内容(包括R和excel)。
答案 5 :(得分:0)
粒子物理世界主要使用ROOT来满足它的数据收集,存储和分析需求。这包括来自模拟的数据。 ROOT可以 - 确实很容易 - 使用结果保存一整套元数据。
通常,当我们拥有大型数据集时,我们也保留一个数据库,但这样可以方便地构建查询:真正的记录保存在包含的元数据中。