2013-04-14 5 views
0

나는 Gremlin을 처음 사용하고 있으며 JUNG의 가장자리 무게를 사용하여 pagerank 알고리즘을 구현하려고합니다. 이것들은 내가 취한 조치들입니다. 2.0.0.0 버전의 Gremlin이 설치되어 있습니다. gremlin에로드하는 R의 iGraph 패키지를 사용하여 .graphml 파일을 만들었습니다.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)를 구현하는 방법을 찾기 위해 힘든 시간이 걸렸습니다 감사합니다. 다음은 페소 코드입니다. PageRank의 세부 구현을 보려면 GrepCode를 사용해야합니다.

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

당신은 내 의사 코드를 사용하여이 예에 따라 수정할 수 있습니다.