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

带权重随机图生成及顶点度数约束的技术咨询

满足带权+最小度2的图生成方案

一、给Erdős–Rényi图加随机权重

NetworkX的gnp_random_graph()或fast_gnp_random_graph()确实没有内置权重参数,但生成无向图后,手动给每条边加权重非常简单:

import networkx as nx
import random

# 生成基础ER图
city_count = 20
edge_prob = 0.3
G = nx.gnp_random_graph(city_count, edge_prob)

# 为每条边添加0-10之间的随机权重
for u, v in G.edges():
    G.edges[u, v]['weight'] = random.uniform(0, 10)

二、保证每个顶点至少2条边

ER图的顶点度数可能为0或1,无法直接满足最小度要求,有两种处理方式:

方式1:补全ER图的低度数顶点

生成ER图后,遍历所有顶点,给度数小于2的节点补充边:

for node in G.nodes():
    while G.degree(node) < 2:
        # 随机选一个非自身且未连接的节点
        candidates = [n for n in G.nodes() if n != node and not G.has_edge(node, n)]
        if not candidates:
            raise ValueError("顶点数过少,无法满足每个顶点至少2条边")
        target = random.choice(candidates)
        G.add_edge(node, target, weight=random.uniform(0, 10))

方式2:用内置生成器直接生成最小度符合要求的图

如果不想手动补全,推荐用random_regular_graph(),它能生成每个顶点度数完全相等的正则图(度数≥2),之后再加权重:

# 生成每个顶点有3条边的正则图
G = nx.random_regular_graph(3, city_count)
# 添加随机权重
for u, v in G.edges():
    G.edges[u, v]['weight'] = random.uniform(0, 10)

如果不需要度数完全一致,也可以用gnm_random_graph()生成足够边数的图,再补全低度数节点。

结论

Erdős–Rényi生成器本身不能直接满足最小度2的要求,但可以通过后续补全实现;如果追求更直接的方案,random_regular_graph()是更合适的选择,再配合手动加权重就能满足你的项目需求。

内容的提问来源于stack exchange,提问作者Magda Bartczak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:22