摘要:本节用速率方程把 BA 机制的定性结论升级为定量定理:节点度按入场时间的平方根生长,度分布为指数等于三的幂律。推导走三步——生长律、入场均匀性、累积分布求导;随后登记更严格的离散速率方程口径与非线性优先连接的分岔结局(拉伸指数与凝聚相变)。这是全册唯一一节以推导为主体的内容,每一步都不跳。
上一节用「富者愈富」的比喻讲机制,比喻的尽头是定性:能长出肥尾。但机制假说的完整形态必须给数字——指数是多少、先来者优势按什么律衰减、结论依赖哪些近似。这节的解剖台换成一张推导桌,走的是统计物理里屡试不爽的路数:把离散的随机过程近似成连续变量的演化方程,解出轨道,再由轨道推出分布。这套「平均场」打法在相变理论里战功赫赫,搬到网络上一样好使——读者将第一次看到「网络科学 = 统计物理」这句话的字面意思。
先把推导要用的三个口径钉死。其一,每时间步入场一个新节点、带固定条边,故总度数随时间线性增长,且等于边数的两倍。其二,新节点选中某老节点的概率,等于该节点度与当前总度之比——这是优先连接的数学形态。其三,把离散的度看成连续变量——近似合法,因为我们关心的是大规模网络的渐近行为。
**第一步:生长律。**某节点在时间入场,初始度为。此后每个时间步,全网新增条边,每条边挂在它头上的份额按优先连接分配。把「每步期望增量」写成方程:度的变化率等于度的当前值除以时间的两倍——总度随时间线性增长这一事实,使方程右端的时间因子恰好约掉一半。这是一个标准的可分离变量微分方程,解出来就是生长律:度按入场时间的平方根比例生长。晚到一倍时间,度打对折的根号折扣——先来者优势的定量形态。
**第二步:入场时间的均匀性。**节点在均匀的时间轴上陆续入场,因此「入场时间早于给定值」的概率就是该值与当前时间的比值。把生长律反过来读:节点在当前时刻的度超过某个值,等价于它的入场时间早于某个由生长律给出的临界时刻——一步代数换算,就把「度的累积概率」变成了「入场时间的概率」。
**第三步:从累积到密度。**把累积分布对度求导,得到度分布的密度形式:与度的负三次方成正比。幂律指数等于三——BA 模型最著名的定量签名,上一节代码里的斜率估计绕着它波动,现在你知道波动的心应该在哪儿。三步合起来读:偏心的连接规则(每步按度分配)经过时间的积分(平方根生长)与入场均匀性的换算,必然产出指数三的幂律——指数不是拟合出来的,是机制的推论。

推导的可信度最终要落在仿真上。两个实验分别核对指数与生长律。
import networkx as nx import math, random def ccdf_slope(G): degs = sorted(d for _, d in G.degree()) n = len(degs) xs = [math.log(k) for k in degs if k > 0] ys = [math.log(sum(1 for d in degs if d >= k) / n) for k in degs if k > 0] m = len(xs) mx, my = sum(xs) / m, sum(ys) / m s = sum((a - mx) * (b - my) for a, b in zip(xs, ys)) / \ sum((a - mx) ** 2 for a in xs) return s + 1 # 累积分布斜率 + 1 ≈ 密度分布指数 for n in [2000, 8000, 32000]: BA = nx.barabasi_albert_graph(n, 3, seed=10) print(f"n={n:>6}: 幂律指数估计 {ccdf_slope(BA):.2f}(理论 3.0)")
指数估计随规模增大向理论值收敛——有限尺寸效应在小网上会把读数往低拉,这本身是重要的实务经验:拿几千节点的网络宣判「指数不是三」为时过早。
import networkx as nx import math n, m, seed = 4000, 3, 10 BA = nx.barabasi_albert_graph(n, m, seed=seed) # 验证生长律:早入场者的度应近似 m * sqrt(t / t_i) t = n print("入场时间 | 度实测 | 平方根律预测") for ti in [5, 20, 100, 500, 2000]: if ti >= n: continue k_real = BA.degree(ti) k_pred = m * math.sqrt(t / ti) print(f"{ti:>8} | {k_real:>6} | {k_pred:>6.1f}")
预测值与实测同量级、随入场时间按平方根衰减的趋势清晰——平均场推导在「轨道」层面也过关。残差来自度增长的随机涨落:预测的是系综平均轨道,单次仿真自然有波动,多 seed 平均后轨道会更贴。
平均场三步是教科书级推导,两条边界必须画出来。**边界一,离散性。**真实过程里度是整数、入场是离散事件,严格处理要改用离散速率方程:追踪「度为的节点数」的时间演化,写出流入流出守恒的方程组,稳态解同样给出指数三——与平均场殊途同归,但中途能看到小度区(度不足入场度的那批节点)的分布细节与平均场的偏差。边界二,非线性。若把优先连接改成「概率正比于度的非线性幂」,结局按指数分岔:指数小于一时偏好太弱,分布退化成拉伸指数型(快截断的肥尾,不配叫幂律);等于一线性,回到指数三;大于一时偏好太强,发生凝聚相变——时间足够久后,一个节点吸走后续几乎全部连接,分布不再稳定。上一节适应度模型的「后发爆红到通吃」,数学上正是这支分岔的亲戚。
⚠️ 常见坑一:看到双对数直线就报指数三。指数是模型推论,不是自然常数——真实网络的指数散布在二到三附近甚至更宽,对应机制参数(非线性指数、初始吸引度、适应度分布)的不同取值。
⚠️ 常见坑二:忘记分布里「度小于入场度」的那段是模型工件。BA 网络最小度被参数钉死,低度区读数不能当真实网络的证据。
模型与指数都已入档。下一节把无标度标本放上压力机:随机故障与蓄意攻击两套加载方案,看看「双面枢纽」的真面目。