0

我正在尝试实现 Guillam, Latapy, "Bipartite graphs as models 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 可以处理多个链接?

最好的问候,西蒙娜

4

1 回答 1

0

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

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

于 2013-10-17T00:38:52.580 回答