Есть ли функция, доступная в Python NetworkX для генерации случайных ориентированных графов с максимальным евклидовым расстоянием между любыми двумя связанными узлами? Например, для узлов, разделенных определенным евклидовым расстоянием, существует вероятность p этих узлов, и для всех остальных узлов, разделенных большим, чем это расстояние, они не будут связаны в генерируемом графе.
Если у вас есть порог такой, что расстояния больше порога не существуют, и все ребра, более короткие, чем этот порог, имеют вероятность 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)