如何在 networkx 2.1 中生成完全连接的有向随机图?
how to generate a fully-connected directed random graph in networkx 2.1?
我需要在 networkx 2.1 中生成随机全连接有向图来评估非对称旅行商问题算法的性能。例如,生成一个有 100 个节点的图,它们是全连接的,边权重是随机分配的。该图是有向的(从节点 i 到节点 j 的边权重不一定等于从节点 j 到节点 i 的边权重)
想知道有没有networkx函数可以生成这种有向图或者有示例代码可以参考
我查看了networkx 2.1(https://networkx.github.io/documentation/networkx-2.1/reference/generators.html?highlight=generator#module-networkx.generators.directed)文档中的“定向生成器”部分,但这些生成器似乎不符合我的要求。
Networkx 完全没有这种生成器,因为它是非常的特定任务。所以你应该手动构建这个图。您可以创建完整的有向图:
import networkx as nx
import random
N = 7
G = nx.complete_graph(N, nx.DiGraph())
然后为每条图边分配随机权重:
for (start, end) in G.edges:
G.edges[start, end]['weight'] = random.random()
所以您将得到您需要的图表:
G.edges.data('weight')
OutEdgeDataView([(0, 1, 0.7188354727617898), (1, 0, 0.9755945178178834), ...
可能有几种方法可以做到这一点。在这里,我只是使用 itertools
列出了所有具有随机权重的加权边。然后我使用 add_weighted_edges_from
创建有向图。所以它不会太长我只使用 3 个节点。
import networkx as nx
import itertools
import random
G = nx.DiGraph()
weighted_edge_list = [(u,v,random.random()) for u,v in itertools.permutations(range(3),2)]
G.add_weighted_edges_from(weighted_edge_list)
G.edges(data=True)
> OutEdgeDataView([(0, 1, {'weight': 0.025851202944826346}), (0, 2, {'weight': 0.8067025754602839}), (1, 0, {'weight': 0.7729736390607577}), (1, 2, {'weight': 0.8724493159416196}), (2, 0, {'weight': 0.9049870220916731}), (2, 1, {'weight': 0.9636865700934618})])
我需要在 networkx 2.1 中生成随机全连接有向图来评估非对称旅行商问题算法的性能。例如,生成一个有 100 个节点的图,它们是全连接的,边权重是随机分配的。该图是有向的(从节点 i 到节点 j 的边权重不一定等于从节点 j 到节点 i 的边权重)
想知道有没有networkx函数可以生成这种有向图或者有示例代码可以参考
我查看了networkx 2.1(https://networkx.github.io/documentation/networkx-2.1/reference/generators.html?highlight=generator#module-networkx.generators.directed)文档中的“定向生成器”部分,但这些生成器似乎不符合我的要求。
Networkx 完全没有这种生成器,因为它是非常的特定任务。所以你应该手动构建这个图。您可以创建完整的有向图:
import networkx as nx
import random
N = 7
G = nx.complete_graph(N, nx.DiGraph())
然后为每条图边分配随机权重:
for (start, end) in G.edges:
G.edges[start, end]['weight'] = random.random()
所以您将得到您需要的图表:
G.edges.data('weight')
OutEdgeDataView([(0, 1, 0.7188354727617898), (1, 0, 0.9755945178178834), ...
可能有几种方法可以做到这一点。在这里,我只是使用 itertools
列出了所有具有随机权重的加权边。然后我使用 add_weighted_edges_from
创建有向图。所以它不会太长我只使用 3 个节点。
import networkx as nx
import itertools
import random
G = nx.DiGraph()
weighted_edge_list = [(u,v,random.random()) for u,v in itertools.permutations(range(3),2)]
G.add_weighted_edges_from(weighted_edge_list)
G.edges(data=True)
> OutEdgeDataView([(0, 1, {'weight': 0.025851202944826346}), (0, 2, {'weight': 0.8067025754602839}), (1, 0, {'weight': 0.7729736390607577}), (1, 2, {'weight': 0.8724493159416196}), (2, 0, {'weight': 0.9049870220916731}), (2, 1, {'weight': 0.9636865700934618})])