【问题标题】:JUNG Pagerank edge weight issueJUNG Pagerank 边缘权重问题
【发布时间】:2023-03-29 21:01:01
【问题描述】:

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

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: []  

谢谢

【问题讨论】:

    标签: jung pagerank gremlin


    【解决方案1】:

    我还花了很长时间才找到如何使用 Jung 实现权重边图的 pagerank。 下面是伪代码,你应该使用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

    您可以使用我的伪代码基于此示例进行修改。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多