Random 如何在networkx 2.1中生成完全连通的有向随机图?

Random 如何在networkx 2.1中生成完全连通的有向随机图?,random,networkx,directed-graph,Random,Networkx,Directed Graph,我需要在networkx 2.1中生成一个随机全连通有向图来评估非对称旅行商问题算法的性能。例如,生成一个包含100个节点的图,这些节点完全连接,边权重随机分配。图形是定向的(从节点i到节点j的边权重不一定等于从节点j到节点i的边权重) 想知道是否有一个networkx函数来生成这种有向图,或者有一些示例代码可供参考 我检查了networkx 2.1()文档中的“定向生成器”部分,但这些生成器似乎不符合我的要求。networkx没有这种生成器,因为它是非常特定的任务。因此,您应该手动构建此图。您

我需要在networkx 2.1中生成一个随机全连通有向图来评估非对称旅行商问题算法的性能。例如,生成一个包含100个节点的图,这些节点完全连接,边权重随机分配。图形是定向的(从节点i到节点j的边权重不一定等于从节点j到节点i的边权重)

想知道是否有一个networkx函数来生成这种有向图,或者有一些示例代码可供参考


我检查了networkx 2.1()文档中的“定向生成器”部分,但这些生成器似乎不符合我的要求。

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')

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')

可能有几种方法可供选择。在这里,我只是使用
itertools
列出所有加权边的随机权重。然后我使用
添加加权边来创建有向图。因此不会太长,我只使用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})])

可能有几种方法可供选择。在这里,我只是使用
itertools
列出所有加权边的随机权重。然后我使用
添加加权边来创建有向图。因此不会太长,我只使用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})])

你能澄清你所说的随机和完全连接是什么意思吗?我把你的问题解释为说每个可能的边都存在,但分配的权重是随机的。对吗?是的,每个可能的边都存在,但分配的权重是随机的。你能澄清你所说的随机和完全连接是什么意思吗?我把你的问题解释为说ev每个可能的边都存在,但分配的权重是随机的。对吗?是的,每个可能的边都存在,但分配的权重是随机的。