2. 网络科学基础:图论基础与网络类型

各位同学,欢迎来到第二章。说实话,每次讲图论我都特别兴奋——不是因为数学多美,而是因为供应链金融的底层逻辑,说白了就是一张图。你想想看,供应商、核心企业、银行、物流商,这些角色之间谁跟谁有资金往来、谁依赖谁,用图来表达再清楚不过了。

我个人习惯,学任何网络科学的东西,先别急着看公式,先把「图」这个概念吃透。这一章我们就干三件事:搞懂图的基本构成、认识几种经典网络模型、最后用代码把图画出来。

2.1 图的基本构成:节点与边

图(Graph)是什么?别想复杂了,就是一堆点(节点)和一堆线(边)。

  • 节点(Node/Vertex):代表网络中的实体。在供应链金融里,节点可以是企业、银行、仓库、甚至是一笔应收账款。
  • 边(Edge):代表节点之间的关系。比如A公司向B公司供货,就有一条从A指向B的边。

嗯,这里要注意:边可以带方向,也可以不带。这就引出了有向图和无向图的概念。

有向图 vs 无向图

类型 说明 供应链金融场景
无向图 边没有方向,表示对称关系 两家企业互相担保,关系是对等的
有向图 边有方向,表示单向关系 A向B付款,资金流是单向的

我在项目中遇到过一个问题:有家银行想分析供应链上的资金流向,结果把所有的边都画成无向的,导致分析结果完全乱套。后来我帮他们改成有向图,资金从核心企业流向一级供应商、再流向二级供应商,一目了然。所以,方向很重要

2.2 图的数学表示

图可以用两种方式存到计算机里。我建议你两种都掌握,因为不同场景下效率差别很大。

邻接矩阵

用一个 N×N 的矩阵,N 是节点数。如果节点 i 和节点 j 之间有边,矩阵的 (i,j) 位置就填 1(有向图里填方向权重)。

# 一个简单的有向图邻接矩阵
# 节点: [A, B, C]
# 边: A->B, B->C, C->A
import numpy as np

adj_matrix = np.array([
    [0, 1, 0],  # A -> B
    [0, 0, 1],  # B -> C
    [1, 0, 0]   # C -> A
])

print(adj_matrix)

邻接表

每个节点后面挂一个列表,存它连出去的邻居。这种方式更省空间,尤其当图很稀疏的时候。

# 用字典表示邻接表
graph = {
    'A': ['B'],
    'B': ['C'],
    'C': ['A']
}
我的小技巧: 如果节点数少于1000,用邻接矩阵方便调试;节点数上万了,一定用邻接表,否则内存会炸。我曾经在分析一个2000家企业的供应链网络时用了邻接矩阵,结果内存直接爆了——从那以后我学乖了。

2.3 三种经典网络模型

现实中的网络千奇百怪,但科学家们总结出了三种基本模型。理解它们,你就能看懂大部分供应链网络的结构特征。

2.3.1 随机图(Erdős–Rényi 模型)

随机图是最简单的模型:给定 N 个节点,每对节点以概率 p 连边。说白了,就是随机连线。

  • 特点:大部分节点的度数(连边数量)差不多,分布呈泊松分布。
  • 供应链场景:不太常见。因为真实供应链里,企业不会随机跟别人做生意。
import networkx as nx
import matplotlib.pyplot as plt

# 生成一个随机图:20个节点,连边概率0.1
G_random = nx.erdos_renyi_graph(n=20, p=0.1, seed=42)
print("随机图节点数:", G_random.number_of_nodes())
print("随机图边数:", G_random.number_of_edges())

2.3.2 小世界网络(Watts–Strogatz 模型)

小世界网络有两个特征:高聚类系数(你的朋友之间也互相认识)和短平均路径长度(六度分隔理论)。

为什么会这样?因为小世界网络是在规则网络的基础上,随机「重连」一小部分边。这样既保留了局部紧密性,又增加了全局连通性。

供应链金融中的小世界现象: 我研究过长三角的汽车零部件供应链,发现核心企业周围聚集了一级供应商,一级供应商之间又互相有业务往来。同时,通过少数几个「桥接企业」,整个网络能快速传递信息。这就是典型的小世界结构。
# 生成小世界网络:20个节点,每个节点连4个邻居,重连概率0.1
G_smallworld = nx.watts_strogatz_graph(n=20, k=4, p=0.1, seed=42)
print("小世界网络平均聚类系数:", nx.average_clustering(G_smallworld))
print("小世界网络平均路径长度:", nx.average_shortest_path_length(G_smallworld))

2.3.3 无标度网络(Barabási–Albert 模型)

无标度网络的核心是「富者愈富」:新节点更倾向于连接到已经有很多连接的节点(优先连接)。

  • 特点:少数节点(Hub)拥有大量连接,大部分节点只有少量连接。度分布服从幂律分布。
  • 供应链场景:非常常见!核心企业就是那个 Hub,周围围着一堆中小供应商。
避坑指南: 我曾经帮一家银行做供应链金融风控,他们用随机图模型去模拟企业违约传播,结果完全不准。后来换成无标度网络模型,才捕捉到「核心企业一倒,上下游全崩」的真实风险。记住:供应链网络几乎都是无标度的,别用错模型。
# 生成无标度网络:20个节点,每个新节点带2条边
G_scale_free = nx.barabasi_albert_graph(n=20, m=2, seed=42)
# 查看度数最高的几个节点
degree_dict = dict(G_scale_free.degree())
sorted_degrees = sorted(degree_dict.items(), key=lambda x: x[1], reverse=True)
print("度数最高的3个节点:", sorted_degrees[:3])

2.4 本章知识体系总览

下面这张图是我用 SVG 画的,把本章的核心逻辑串起来了。你可以把它当作一张「地图」,学完回头看看,思路会更清晰。

第二章:网络科学基础 - 知识体系 图论基础 节点 · 边 · 有向/无向 图的表示 邻接矩阵 · 邻接表 网络类型 三种经典模型 随机图 (ER模型) 泊松分布 · 均匀连接 小世界网络 (WS模型) 高聚类 · 短路径 无标度网络 (BA模型) 幂律分布 · 富者愈富 供应链金融网络建模 资金流分析 · 风险传播 · 核心企业识别

2.5 三种网络对比总结

特性 随机图 (ER) 小世界 (WS) 无标度 (BA)
度分布 泊松分布 近似泊松分布 幂律分布
聚类系数 中等
平均路径长度
供应链适用性 低(不真实) 中(局部集群) 高(核心-边缘结构)
典型场景 理论分析 信息传播、社交网络 供应链、互联网、金融网络
核心结论: 做供应链金融网络建模,无标度网络是首选模型。小世界网络可以作为补充,用来分析局部集群效应。随机图嘛……说实话,除了考试和论文,我几乎没用过。

好了,这一章的内容就是这些。图论基础是后面所有建模的基石,别嫌简单。下一章我们会用这些知识,真正开始搭建一个供应链金融网络模型——到时候你会感谢今天认真学了图论的自己。


专注资料整理