JUNG的随机二分网络发生器

时间:2013-10-16 14:44:51

标签: java graph generator jung

我正在尝试实现Guillam,Latapy,“Bipartite graph as complex of complex networks”中描述的简单随机二分生成器,Physica A 371(2006)795-813。

规则很简单: - 创建顶级节点和底部节点 - 为每个节点分配一个度数(顶部和底部节点的分布必须相互一致 - 在我的例子中,我有经验数据来馈送顶部和底部节点) - 从顶部和底部集合中随机连接节点

我到目前为止的代码是:

UndirectedSparseGraph<Node, Edge> random = new UndirectedSparseGraph<Node, Edge>();
// totalLinks is the number of edges in the empirical network
while (totalLinks > 0) {
 Node u = topNodes.get(cntxt.getRNG().nextInt(topNodes.size()));
 Node t = bottomNodes.get(cntxt.getRNG().nextInt(bottomNodes.size()));
 // if both nodes can accept new links, i.e. the actual degree is lower than 
 // the assigned degree
 if(u.getFinalDegree()>random.degree(u) && t.getFinalDegree()>random.degree(t)){
   // create the new link
   random.addEdge(new Edge(0), u, t, EdgeType.UNDIRECTED);
   // decrement total links
   totalLinks--;
 }
}

这种方法很简单但会产生多个边缘。结果是最终的程度分布与经验分布不同。

有人可以建议一种方法来克服这个问题吗?我正在考虑加权链接,然后将节点的程度设置为其链接权重的总和......或者JUNG可以处理多个链接?

祝你好运, 西蒙

1 个答案:

答案 0 :(得分:0)

JUNG可以通过正确的实现来处理多个边缘;查找名称中包含“Multi”的类。

或者您可以查看两个节点是否已连接,如果是,则选择另一对节点。