我编写了一个 C++ 程序来模拟我正在研究的某个过程。它在模拟的每个时间步输出离散的“状态”。例如:
a
b
c
b
c
b
将是以 a 作为初始条件(由我设置或随机生成)的模拟运行的输出,而 b & c 将是系统不断在其间振荡的状态。
我想将其中的许多运行组合成一个马尔可夫链,以便它变成一个具有以下顶点和边的图。(最好在运行时,因为首先保存输出会占用大量磁盘空间。)括号之间的数字表示遇到某个顶点或边的次数,因此也应该存储它。
Vertices: a(1), b(3) and c(2).
Edges: a->b(1), b->c(2), c->b(2).
真实状态包含 112 位信息,我正在生成数十亿个这样的转换。问题是我还没有找到一个图形库或程序来高效快速地生成马尔可夫链。我一直在玩弄:
- 谷歌稀疏散列在 C++ 中构建我自己的图形类。
- Neo4J(我刚刚开始使用这个)
- 柠檬图书馆
我刚刚完成了“Google 稀疏散列图”,但结果在运行中途变得非常缓慢。大约一天后(内存使用量超过 20 GB,本身不是问题,因为还有更多),它变慢了,大约需要三周才能完成。
我可以使用 12 或 16 核和 256 或 512 GB 内存的计算机,我的感觉是它们应该能够胜任这项工作。
由于我不是受过训练的程序员,而且我的编码速度很慢,所以在我花费大量时间研究另一个不完美的解决方案之前,我正在寻找一些信息。
- 可以快速接受大量顶点和边来构建马尔可夫链的最佳程序/库是什么?
- 缓慢是由于使用了错误的工具或不完善的编码(我怀疑)还是我只是试图做一些总是需要很多时间的事情?
我希望我能把我的问题说清楚。提前感谢任何智慧或答案。
编辑:
根据评论中的问题和答案,我想我的问题应该是:什么是适合 C++ 的快速矩阵库?