Как я называю алгоритм Астар GraphAlgoFactory СУБД Neo4j от гремлина?


Я специалист по обработке данных с посредственными навыками кодирования, поэтому до сих пор в работе с neo4j я избегал java в пользу Cypher и Gremlin.

Я вставил кучу графических данных в neo4j со свойством веса на каждом ребре. Я хотел бы запустить aStar или dijkstra's на этом графике из консоли gremlin, если это возможно. У Юнга, похоже, нет взвешенного алгоритма кратчайшего пути, поэтому я обратился к GraphAlgoFactory, но все обсуждения этого онлайн, похоже, идут прямо Ява.

Моя цель состоит в том, чтобы получить кратчайший взвешенный путь между двумя вершинами по моему выбору, где веса диктуются свойствами веса на ребрах.

Спасибо!

1 3

1 ответ:

Я приведу вам пример, который можно использовать в качестве отправной точки для изучения вашего собственного графика. Начните с запуска Gremlin и определения полезного метода для создания ребер:

def edge(Graph g, Vertex v1, Vertex v2, int weight) {
    e = g.addEdge(null, v1, v2, "connects");
    e.setProperty("weight", weight);
}
Теперь создайте простой граф с 4 узлами и 4 ребрами:
g = new Neo4jGraph("/tmp/dijkstra")
v1 = g.addVertex(1);
v2 = g.addVertex(2);
v3 = g.addVertex(3);
v4 = g.addVertex(4);

edge(g, v1, v2, 13);
edge(g, v1, v4, 20);
edge(g, v2, v3, 3);
edge(g, v4, v3, 40);

Поскольку версия Gremlin в консоли работает на Groovy , Вы можете легко смешивать и сопоставлять Groovy и Java, чтобы использовать GraphAlgoFactory:

import org.neo4j.graphalgo.GraphAlgoFactory;
import org.neo4j.graphalgo.CommonEvaluators;
import org.neo4j.kernel.Traversal;

dijkstra = GraphAlgoFactory.dijkstra(Traversal.expanderForAllTypes(), CommonEvaluators.doubleCostEvaluator("weight"))
path = dijkstra.findSinglePath(((Neo4jVertex)v1).getRawVertex(), ((Neo4jVertex)v3).getRawVertex())
println path
// (1)--[connects,0]-->(2)--[connects,2]-->(3) weight:16.0

Код для использования GraphAlgoFactory исходит в основном из Neo4j документация . Единственное отличие состоит в том, что вам нужно привести каждую вершину чертежей в организацию.СУБД Neo4j.graphdb.Узел, так как GraphAlgoFactory не понимает чертежей.