Если у вас есть порог, такой, что расстояния, превышающие порог, не существуют, и все ребра, короче этого порога, имеют вероятность 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)