首页 > 解决方案 > 如何在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),但这些发电机似乎不符合我的要求。

标签: randomnetworkxdirected-graph

解决方案


可能有几种方法可以做到这一点。在这里,我只是使用随机权重列出所有加权边的列表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})])

推荐阅读