摘要:渗流理论研究「占据与连通」的相变:当节点或边以比例存留时,长程连通在临界比例处突然诞生或消亡。本节把第 4 章的「拔节点压力机」翻译成占据率语言,给出随机图的临界公式、无标度网络临界趋零的推论、以及有限规模标度与移除口径(随机/靶向)的实务。本节在体系中的位置:仪表车间第三台设备,为鲁棒性评估、传播阈值(第 6 章)与级联失效提供理论地基。
「percolation」这个词原属于咖啡——热水能否穿过咖啡粉的空隙渗下去,取决于空隙的连通程度。统计物理把它抽象成一个极简问题:把一块多孔材料抽象成格子,每个格点独立地以概率开放,问「从材料顶部到底部是否存在一条贯通的开放路径」。答案藏着相变的全部戏剧:概率低于临界值,开放团簇都是局部小岛;一旦跨过临界值,贯通簇横空出世,尺度骤增几个数量级——且临界值对格子类型不敏感,普适性惊人。
把格子换成任意网络,问题立刻接上本册的地气。网络的「长程连通」由巨连通分量承担:节点渗流——每个节点以概率在场(随机故障就是占据率的补);边渗流——每条边以概率畅通(线路老化、链路拥塞)。第 2 章 ER 图的相变(平均度跨过临界值、巨分量涌现)正是渗流理论在网络上的第一个定理级案例:随机图临界平均度为一,等价地说,临界占据份额由度分布的均值决定。推导只需一行动力学直觉:沿一条随机边走到新节点,它平均能贡献的「继续延伸的边数」恰为 excess 度均值;这个量过一,分支过程超临界,巨分量存活;不过一,每条尝试都注定熄火。
把度分布换成幂律,怪事发生了。临界占据率的公式里出现度分布的一阶矩与二阶矩之比——幂律的尾巴让二阶矩在指数小于等于三时发散,比值被推向零:临界占据率趋于零,任意稀疏的占据都撑得起巨连通。翻译成鲁棒性语言就是第 4 章的实验结论:无标度网络没有「随机移除的崩溃阈值」,枢纽提供的冗余通道让长程连通极其顽强。而一旦移除口径改成靶向(先拔高度节点),等效度分布的二阶矩被迅速砍掉,临界点立刻浮出水面并大幅提前——「鲁棒且脆弱」的数学户口落在这里。
import networkx as nx import random def occupy_and_measure(G, keep, trials=6): """节点渗流:保留比例为 keep 的节点,返回巨分量占比(多次取均值)""" vals = [] for t in range(trials): nodes = list(G.nodes()) keep_set = set(random.sample(nodes, int(len(nodes) * keep))) H = G.subgraph(keep_set) if H.number_of_nodes() == 0: vals.append(0.0) else: comp = max(nx.connected_components(H), key=len) vals.append(len(comp) / H.number_of_nodes()) return sum(vals) / len(vals) ER = nx.gnp_random_graph(3000, 6 / 2999, seed=2) BA = nx.barabasi_albert_graph(3000, 3, seed=2) print("占据率 | ER巨分量占比 | BA巨分量占比") for keep in [0.05, 0.1, 0.2, 0.3, 0.5]: print(f"{keep:5.2f} | {occupy_and_measure(ER, keep):13.2f} | " f"{occupy_and_measure(BA, keep):13.2f}")
读数的对照正是理论的两副面孔:占据率被压得极低时,无标度网仍保有像样的巨分量(临界趋零),随机网早已碎片化。占据率爬升后两者趋同——理论预言的「平方式收敛」在有限规模下表现为曲线尾部合拢。
理论上「临界点消失」是无穷大规模的渐近陈述,有限网络读数必须打两处补丁。**其一,有效临界点非零。**有限规模下二阶矩有限,临界占据率是个小正数;且它随规模增大按可预测的律衰减——这意味着报告「本网络抗移除阈值」时必须注明规模,跨规模直接比较是无效读数。**其二,临界涨落巨大。**占据率贴近有效临界点时,巨分量占比在多次实现间剧烈波动(临界涨落),单次实验读数会骗人,均值加方差一起报。
import networkx as nx import random def bond_perc_curve(G, keeps, trials=5): """边渗流:保留比例为 keep 的边""" out = [] edges = list(G.edges()) for keep in keeps: frac = 0.0 for _ in range(trials): kept = random.sample(edges, int(len(edges) * keep)) H = nx.Graph(); H.add_nodes_from(G); H.add_edges_from(kept) comp = max(nx.connected_components(H), key=len) frac += len(comp) / H.number_of_nodes() out.append((keep, frac / trials)) return out BA = nx.barabasi_albert_graph(2000, 3, seed=2) for keep, frac in bond_perc_curve(BA, [0.05, 0.1, 0.15, 0.25]): print(f"边占据率 {keep:.2f} -> 巨分量 {frac:.2f}")
边渗流的曲线比节点渗流更陡——边是连通的唯一载体,砍边对巨分量的杀伤更直接。实务启示顺带登记:设备冗余(并联线路)与路径冗余(多径路由)分别对应边与节点的占据策略,采购清单上它们不是一回事。

渗流不是孤展品,它给三处下游供电,逐一登记接口。对鲁棒性评估(第 4 章):压力机曲线的骨架就是渗流曲线,临界移除比例即「占据率补」的临界点——工程上把「韧性预算」直接折算成「临界占据率余量」。对传播动力学(第 6 章):流行病在网络上的「可控燃烧」与「燎原」分界,数学上等价于一个「占据概率与传播力乘积」的渗流问题——传播阈值的存在与否直接继承渗流临界的有无,无标度网络传播阈值趋零的著名结论正是从这根管道输送的。对级联失效(第 6 章):过载引发的连锁崩溃可视为「载荷依赖的动态渗流」——每一步的占据率由上一步的失效决定,渗流给它的静态极限提供了锚点。
💡 关键直觉:占据率是「负向测量」的统一货币——节点故障、边路拥、传播可达、级联失效都能折算成某种占据,然后共用同一套相变语言。学会这门货币换算,鲁棒性与流行病学就打通了任督二脉。
断裂的临界点已经算得出,最后一台设备回答「这网络到底特殊不特殊」——零模型比对,车间质检的最后一道闸。