使用neo4j进行强化学习:制作2个图形副本,并在1个图形上存储所有值的2个副本

时间:2012-01-12 00:24:18

标签: machine-learning neo4j reinforcement-learning

我打算运行一种学习节点值和边权重的机器学习算法。该算法与值迭代算法here非常相似。每个节点代表一个位置,每个边是一个到新位置的路径。每个节点和边缘都保持一个表示其期望值的值。这些值在每次迭代时都会根据前一次迭代的值进行更新。

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

  1. 克隆当前数据库并使用1个副本作为“当前迭代”副本,使用1个副本作为“上一个迭代”副本。
  2. 在每次迭代结束时,将每个节点和边缘的所有值移动到“上一次迭代”属性。
  3. 人们通常如何做到这一点?还有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

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

如果金额较大,我认为财产归档方法更好。

答案 1 :(得分:3)

您引用的MDP文章对值和策略迭代进行了很好的概述,但没有提到异步动态编程。事实是,您不需要对图表执行完全孤立的扫描,以使值收敛[1];您可以按任意顺序一次更新一个顶点,前提是您不要忽略它们中的任何一个。也就是说,您根本不需要复制图形。


[1] Bertsekas,D.,1982。分布式动态规划。 IEEE自动控制交易,27(3),p.610-616。