2013-04-14 114 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

您可以修改基於使用我的僞代碼這個例子。