3

我计划运行一个机器学习算法来学习节点值和边权重。该算法与此处的值迭代算法非常相似。每个节点代表一个位置,每条边都是通往新位置的路径。每个节点和边都维护一个值,该值表示它的可取性。这些值在每次迭代时都会根据前一次迭代的值进行更新。

我计划使用 neo4j 作为后端。现在将有大约 600,000 个节点和 100,000,000 条边,但以后可能会添加更多(该图不适合内存)。保留上一次迭代中的值的最佳方法是什么?想到的2种方法是:

  1. 克隆当前数据库并使用 1 个副本作为“当前迭代”副本和 1 个副本作为“上一次迭代”副本。
  2. 在每次迭代结束时,将每个节点和边的所有值移动到“上一次迭代”属性。

人们通常如何做到这一点?有没有更好的办法?

4

2 回答 2

3

图的大小是多少,您正在执行多少次迭代?对于较小的图,我会在版本中复制图,或者在磁盘上作为新图,或者作为同一数据库中的子图。

如果数量更大,我认为财产归档方法更好。

于 2012-01-12T03:06:54.627 回答
3

您参考的 MDP 文章很好地概述了价值和策略迭代,但没有提到异步动态编程。事实是,您不需要对图形执行完全隔离扫描以使值收敛 [1];您可以按任何顺序一次更新一个顶点,前提是您不会忽略其中任何一个。也就是说,您根本不需要制作图表的副本。


[1] Bertsekas, D., 1982。分布式动态规划。IEEE Transactions on Automatic Control,27(3),p.610-616。

于 2012-01-12T03:42:40.780 回答