Networkx春季布局边缘权重

3
我想知道spring_layout如何考虑边缘权重。来自维基百科,'另一种模型考虑每对节点(i,j)的类似弹簧的力,其中每个弹簧的理想长度\delta_{ij}与节点i和j之间的图论距离成比例,而不使用单独的斥力。最小化节点之间欧几里得距离和理想距离之间差异(通常是平方差)等价于度量多维缩放问题。' 那么边缘权重如何被特别考虑?
1个回答

5
这不是一个很好的答案,但它提供了基础知识。可能会有其他人来描述 Fruchterman-Reingold 算法,我正在根据代码中可以找到的内容进行解释。
文档中可以看到,
权重:字符串或可选项(默认值为“weight”)
保留数字用于边缘权重的边缘属性。如果没有,则所有边缘权重都为 1。
但这并不能告诉你它如何使用权重,这就是你的问题。
您可以在源代码中找到它。如果您发送加权边,则它将创建一个带有这些权重的邻接矩阵 A,并将 A 传递给 _fruchterman_reingold。
在那里查看代码,其中的关键部分在这一行中。
displacement=np.transpose(np.transpose(delta)*\
    (k*k/distance**2-A*distance/k)).sum(axis=1)
A*distance 计算了节点上的弹簧力的强度。相应的 A 值越大,意味着这两个节点之间有更强的吸引力(或者如果它们非常靠近,则是更弱的排斥力)。然后算法根据力的方向和强度移动节点。然后重复此过程(默认为50次)。有趣的是,如果查看源代码,您会注意到有一个 tdt。每次迭代时,似乎将力乘以越来越小的因子,因此步骤变得越来越小。
这里是指导该算法的 论文 的链接,不幸的是它被隐藏在一个付费墙后面。这是作者网站上的 一篇论文 的链接。

作者在他的网站上发布了他的论文 - Michael Dorner
谢谢Michael。已更新链接。 - Joel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接