我正在尝试生成具有最小度数值(rho)的幂律程度分布,并使用它来构建具有networkx包的随机图。我用来生成幂律度分布的函数是这样的(指数是alpha,rho是最小值):
import random
import networkx as nx
def generate_pl_dd(no_of_nodes, alpha, rho):
degree_distribution = []
for i in range(no_of_nodes):
r = random.random()
degree_distribution.append(int(rho * (1 - r)**(-1/(alpha - 1))))
return sorted(degree_distribution, reverse=True)
现在我希望使用此函数生成的度数列表来构建networkx图形对象。在我这样做之前,理智检查会返回以下结果。
dd1 = generate_pl_dd(100, 2.2, 50)
nx.is_valid_degree_sequence(dd1) # returns False
文档提到程度序列的总和必须是偶数,但即使我生成偶数求和程度序列,结果也是假的。我已经在下面捕获了一些此功能。
dd2 = generate_pl_dd(100, 2.2, 50)
sum(dd2) # returns 15710
nx.is_valid_degree_sequence(dd2) # returns False
dd3 = generate_pl_dd(100, 2.2, 10)
sum(dd3) # returns 4540
nx.is_valid_degree_sequence(dd3) # returns False
dd4 = generat_pl_dd(100, 2.2, 1)
sum(dd4) # returns 344
nx.is_valid_degree_sequence(dd4) # returns True
上次运行如何返回True?我在这里缺少什么细节?
答案 0 :(得分:1)
由is_valid_degree_sequence
测试的有效度序列是一个简单图形(一个简单图形没有自循环且没有重复边缘)可能具有的序列。因此,例如,您不能只有两个节点的图形,两个节点都具有3级。这个例子显然是不可能的,但一般来说,序列的“图形”的特定条件是更复杂的计算,通常通过Havel-Hakimi algorithm
当你说“文档提到学位序列的总和需要均匀”时,我相信你指的是configuration_model
configuration_model
,它实际上生成多图(允许自我) -loops和多个边缘)。这样做的唯一限制是输入度的总和应该是偶数(并且作为技术细节,自循环在生成过程中被计算两次,尽管在其他情况下它们可能只计算一次)。
(因为它的价值--- <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#125688"
android:gravity="center">
<ImageButton
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:src="@drawable/left"
android:scaleType="fitCenter"
android:layout_alignParentLeft="true"
android:foregroundGravity="right"/>
</RelativeLayout>
用于测试学位序列是“图形”,但是documentation。我声称对此负有责任。)