我正在尝试实现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可以处理多个链接?
祝你好运, 西蒙
答案 0 :(得分:0)
JUNG可以通过正确的实现来处理多个边缘;查找名称中包含“Multi”的类。
或者您可以查看两个节点是否已连接,如果是,则选择另一对节点。