Python的NetworkX中是否有可用的函数来生成随机有向图,其中任意两个相连节点之间的最大欧几里得距离是多少?例如,对于以某个欧几里德距离分隔的节点,这些节点有连接的概率p,对于所有其他距离大于该距离的节点,它们将不会在生成的图中连接。
答案 0 :(得分:1)
如果您有一个阈值,使得不存在大于阈值的距离,并且所有小于该阈值的边都有概率p
,那么您很幸运。 [如果不是所有短边的概率都一样,那仍然可行,但要难一些]
首先建立一个随机几何图G
。这是一个图,其节点均匀地随机放置,并且如果两个节点之间的距离彼此都在阈值距离之内,则将两个节点连接在一起。
然后创建一个新的有向图,该图具有G
中的边缘的每个方向,概率为p
。
import networkx as nx
import random
N=100 # 100 nodes
D = 0.2 #threshold distance of 0.2
G = nx.random_geometric_graph(N, D)
H = nx.Digraph()
H.add_nodes_from(G.edges())
p = 0.1 #keep 10% of the edges
for u,v in G.edges():
if random.random()<p:
H.add_edge(u,v)
if random.random()<p:
H.add_edge(v,u)