Генерация направленного графа NetworkX - PullRequest
0 голосов
/ 25 сентября 2018

Доступна ли в Python NetworkX функция для генерации случайных ориентированных графов с максимальным евклидовым расстоянием между любыми двумя соединенными узлами?Например, для узлов, разделенных определенным евклидовым расстоянием, существует вероятность p того, что эти узлы будут соединены, и для всех других узлов, разделенных на расстояние, превышающее это расстояние, они не будут связаны в генерируемом графе.

1 Ответ

0 голосов
/ 25 сентября 2018

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