Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何从Gremlin中调用neo4j GraphAlgoFactory aStar算法?_Graph_Neo4j_Dijkstra_A Star_Gremlin - Fatal编程技术网

我如何从Gremlin中调用neo4j GraphAlgoFactory aStar算法?

我如何从Gremlin中调用neo4j GraphAlgoFactory aStar算法?,graph,neo4j,dijkstra,a-star,gremlin,Graph,Neo4j,Dijkstra,A Star,Gremlin,我是一名数据科学家,编码技能一般,所以直到现在在使用neo4j时,我都避免使用java,而使用Cypher和Gremlin 我在neo4j中插入了一组图形数据,每条边上都有一个权重属性。如果可能的话,我想在这个图表上运行aStar或dijkstra。JUNG似乎没有加权最短路径算法,所以我转向GraphAlgoFactory,但所有在线讨论似乎都是用纯Java语言 我的目标是获得我选择的两个顶点之间的最短加权路径,其中权重由边上的权重属性决定 谢谢 我将给您一个示例,作为探索您自己的图形的起点。

我是一名数据科学家,编码技能一般,所以直到现在在使用neo4j时,我都避免使用java,而使用Cypher和Gremlin

我在neo4j中插入了一组图形数据,每条边上都有一个权重属性。如果可能的话,我想在这个图表上运行aStar或dijkstra。JUNG似乎没有加权最短路径算法,所以我转向GraphAlgoFactory,但所有在线讨论似乎都是用纯Java语言

我的目标是获得我选择的两个顶点之间的最短加权路径,其中权重由边上的权重属性决定


谢谢

我将给您一个示例,作为探索您自己的图形的起点。首先启动并定义创建边的实用方法:

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和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的代码主要来自。唯一的区别是,由于GraphAlgoFactory不了解蓝图,您需要将每个节点转换为org.neo4j.graphdb.Node。

您也可以使用此表单neo4j REST,请参阅