Генерация направленного графа NetworkX

1

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

  • 0
    Вы говорите, что если их расстояние меньше значения, вероятность равна p, а если оно больше этого значения, то оно равно 0? [из вашего вопроса неясно, как вы справляетесь с короткими дистанциями]
  • 0
    Да, извините за запутанную формулировку.
Теги:
networkx
directed-graph

1 ответ

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)
  • 0
    В конце концов я нашел способ реализовать это, но ваше предложение не дало мне того, что я хотел. В итоге я использовал «random_geometric_graph», но вместо создания пустого DiGraph я создал новый график с помощью функции «to_directed» и впоследствии удалил случайные ребра (вместо добавления случайных ребер). Проблема, с которой я столкнулся при использовании вашего метода, заключалась в том, что атрибуты позиции не копировались в новый граф, а «to_directed» делает глубокое копирование, чтобы информация была сохранена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню