2013-04-14 117 views
0

我是Gremlin的新手,我试图用JUNG实现边缘权重的pagerank算法。这些是我采取的步骤。我安装了Gremlin的2.0.0.0版本。我已经使用R中的iGraph包创建了一个.graphml文件,我将其加载到gremlin中。JUNG Pagerank边缘重量问题

import edu.uci.ics.jung.algorithms.scoring.PageRank 
g1 = new TinkerGraph()  
g1.loadGraphML('file path.graphml')  

我的G1图具有以下优势属性:

g1.E.map 
==>{weight=1, freq=1} 
==>{weight=1, freq=1} 
==>{weight=2, freq=2} 
==>{weight=1, freq=1} 
==>{weight=1, freq=1} 
==>{weight=1, freq=1} 
==>{weight=1, freq=1} 
==>{weight=1, freq=1} 
==>{weight=2, freq=2} 

gremlin> g1.V.map 
==>{name=a} 
==>{name=b} 
==>{name=c} 
==>{name=d} 
==>{name=e} 
==>{name=f} 
==>{name=g} 
==>{name=h} 
==>{name=i} 
==>{name=k} 

j = new GraphJung(g1)  

t = new EdgeWeightTransformer("weight",true, false) 
pr = new PageRank<Vertex,Edge>(j, t, 0.15d) 
pr.evaluate()  
j.getVertices().collect{[it, pr.getVertexScore(it)]} 

然而,我的结果是

==>[v[n1], 0.046875] 
==>[v[n0], 0.046875] 
==>[v[n5], 0.046875] 
==>[v[n4], 0.046875] 
==>[v[n3], 0.046875] 
==>[v[n2], 0.046875] 
==>[v[n9], 0.046875] 
==>[v[n8], 0.046875] 
==>[v[n7], 0.046875] 
==>[v[n6], 0.046875] 

这是不正确的。请有人能帮我理解代码中的错误。我还尝试通过以下方法检查变压器对j的边权重的影响: j.getEdges()。t。

当我这样做时,我得到了NULLS。

但我知道有与这些边缘相关联的权重,当我运行:

j.getEdges().collect{[it, it.weight]} 

我得到如下结果:

==>[e[3][n1-_default->n5], 1] 

==>[e[2][n0-_default->n4], 1] 

==>[e[1][n0-_default->n3], 2] 

==>[e[0][n0-_default->n2], 1] 

==>[e[7][n1-_default->n8], 1] 

==>[e[6][n1-_default->n7], 1] 

==>[e[5][n1-_default->n6], 1] 

==>[e[4][n1-_default->n1], 1] 

==>[e[8][n1-_default->n9], 2] 

最后,我无法为创建自动键我顶点。我试图

g1.createAutoIndex('test', Vertex.class, ['name'] as Set)   

而且得到了以下错误:

No signature of method: groovy.lang.MissingMethodException.createAutoIndex() is applicable for argument types:() values: [] 

谢谢

回答

0

我也参加了一个艰难的时间找到了如何使用荣格实现重量边图形的PageRank。 下面是pesudo代码,您应该使用GrepCode来查看Pagerank的详细实现。

For(Edge e: edges){ // Edge is a user-defined class 
    graph.add(edgeCount,e.getStart,e.getEnd); 
    map.put(edgeCount,e.getWeight); // map is HashMap 
    edgeCount++; 
} 
Transformer edge_weights = MapTransformer.getInstance(map) //Key Step! 
Pagerank<Vertex,Edge> ranker = new Pagerank<Vertex,Edge>(graph, edge_weights, alpha); 

我建议你看看这个例子: https://github.com/lintool/Cloud9/blob/master/src/dist/edu/umd/cloud9/example/pagerank/SequentialPageRank.java

您可以修改基于使用我的伪代码这个例子。