Aprendizaje reforzado con neo4j: haga 2 copias del gráfico frente a almacenar 2 copias de todos los valores en 1 gráfico

StackOverflow https://stackoverflow.com/questions/8828637

Pregunta

Estoy pensando en ejecutar un algoritmo de aprendizaje automático que aprenda los valores de los nodos y los pesos de los bordes. El algoritmo es muy similar al algoritmo de iteración de valores aquí . Cada nodo representa una ubicación y cada borde es un camino a una nueva ubicación. Cada nodo y borde mantiene un valor que representa lo deseable que es. Estos valores se actualizan en cada iteración en función de los valores de la iteración anterior.

Planeo usar neo4j como backend. Habrá alrededor de 600.000 nodos y 100.000.000 de bordes por ahora, pero se pueden agregar más más adelante (el gráfico no cabe en la memoria). ¿Cuál es la mejor forma de conservar los valores de la iteración anterior? Dos formas que me vienen a la mente son:

  1. clonar la base de datos actual y usar 1 copia como copia de "iteración actual" y 1 copia como copia de "iteración anterior".
  2. Al final de cada iteración, mueva todos los valores de cada nodo y borde a una propiedad de "iteración anterior".

¿Cómo suele hacer la gente esto? ¿Existe una forma mejor?

¿Fue útil?

Solución

¿Cuál es el tamaño del gráfico y cuántas iteraciones está haciendo?Con gráficos más pequeños, duplicaría el gráfico en versiones, ya sea en el disco como un nuevo gráfico o simplemente como un subgráfico en la misma base de datos.

Con cantidades mayores, creo que el enfoque de archivo de propiedades es mejor.

Otros consejos

El artículo de MDP al que hace referencia ofrece una buena descripción general del valor y la iteración de políticas, pero no menciona la programación dinámica asincrónica.El hecho es que no es necesario realizar barridos completos aislados del gráfico para que los valores converjan [1];puede actualizar los vértices uno a la vez en cualquier orden, dado que no descuida ninguno de ellos.Es decir, no es necesario que hagas una copia del gráfico.


[1] Bertsekas, D., 1982. Programación dinámica distribuida. Transacciones IEEE sobre control automático , 27 (3), p.610-616.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top