You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NetworkX 2.1中生成带随机权重的全连接有向图?

生成NetworkX 2.1随机全连接有向图(用于不对称TSP)

NetworkX 2.1确实没有直接提供带随机权重的完全有向图生成器,但我们可以手动构造,完全满足你评估不对称TSP算法的需求。核心思路是先创建完全有向图(每个节点对之间都存在双向有向边),再为每条边独立分配随机权重(确保i→j和j→i的权重大概率不同)。

步骤1:创建完全有向图

首先用nx.complete_graph()生成无向完全图,再将其转换为有向图——这样每个无向边会自动拆分为两条方向相反的有向边,正好形成全连接的有向图结构。

步骤2:为每条边分配独立随机权重

遍历所有边,为每条边生成独立的随机权重(可以用整数或浮点数,根据你的需求调整范围)。

完整示例代码

import networkx as nx
import random

# 定义节点数量(这里是100个节点)
num_nodes = 100

# 1. 生成完全无向图并转为有向图,得到全连接有向图结构
G = nx.DiGraph(nx.complete_graph(num_nodes))

# 2. 为每条边分配随机权重(示例用1-100的整数,可替换为uniform生成浮点数)
# 方式1:遍历边逐个设置
for u, v in G.edges():
    G[u][v]['weight'] = random.randint(1, 100)

# 方式2:用字典批量设置(更高效,适合大节点数)
# edge_weights = {(u, v): random.uniform(1.0, 100.0) for u, v in G.edges()}
# nx.set_edge_attributes(G, edge_weights, 'weight')

# 验证:查看任意两个节点的双向边权重(大概率不同)
print(f"Edge 0→1 weight: {G[0][1]['weight']}")
print(f"Edge 1→0 weight: {G[1][0]['weight']}")

关键细节说明

  • 全连接有向图的结构:转换后的有向图包含所有num_nodes*(num_nodes-1)条有向边,完全覆盖不对称TSP的场景。
  • 权重独立性:每条边的权重都是独立生成的,因此i→j和j→i的权重几乎不可能相同,完全符合你的要求。
  • 权重范围调整:你可以根据测试需求修改random.randint或random.uniform的参数,比如调整为0-1000的整数,或者0.1-10.0的浮点数。

内容的提问来源于stack exchange,提问作者liang li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:28:49