装几块压力表,能把漏点定位到哪条管?——压力指纹法完整推演

漏点埋在地下,全网逐段开挖排查不现实。可只要在管网里装几块压力表,读数里就藏着漏点位置的信息——这篇文章从水力学第一性原理出发,把"从压力读数到漏点概率排名"的完整方法,在一张 6 节点教学演示网上一个数字一个数字地推到底。
口径声明:全文所有数字都出自一张 6 节点教学演示网(1 座水库 40 m 水头、6 个节点、7 根管)的合成实验,用来讲清方法机理与装表规律,不是任何实际管网的实测成绩。全程单漏点假设;测量噪声按 σ=0.02 m(±2 cm 表精度)合成。演示网虽小,却具备真实管网的关键结构——环状供水、管径差异、总管与末梢之分,方法在它上面讲清了,规模放大只是把矩阵变大,链条一步不变。
▶ 交互演示版(可现场跑 Monte-Carlo):本文的两处 live 演示——单次定位、装表阶梯 18000 次反演实验——都能在这个页面上当场点、当场重算,数字不是预存的图片。读到对应章节时打开它对照着玩,体感最好。
一、问题:漏损排查是一条漏斗,本法站在中段
供水管网漏损治理里,"哪里在漏"是最贵的一问。完整的排查链条是一条逐级收窄的漏斗,每一级用的物理量和设备都不同:
- 发现——有没有漏、漏多少:靠总分表流量对账、DMA(独立计量区)夜间最小流量分析,"总账"对不上就是有漏。用的是流量。
- 定位(本法所在)——漏在哪根管:压力指纹匹配,把全网候选缩成一份 top-K 概率清单,排查范围从全网收到两三根管。用的是压力。
- 定桩——漏在管上哪一米:听漏仪、噪声相关仪沿候选管精确定位桩号。用的是声学。
- 修复——开挖:范围已缩到米级,开挖成本可控。
压力和流量在这条漏斗里分工明确、互不替代。把两者摆在一起看:
| 流量(总表对账) | 压力(多点模式) | |
|---|---|---|
| 回答的问题 | 有没有漏、漏多少(发现) | 漏在哪根管(定位) |
| 信息形态 | 一个总量,无空间分布 | 压降的空间分布,位置信息的载体 |
| 设备经济性 | 流量计贵,只装进出口边界 | 压力表便宜,可铺在管网内部 |
| 盲区 | 定不了位(边界只有总量) | 总管类均匀降压漏损(见第七章 P0 盲区) |
所以"为什么定位只用压力不用流量"的第一层答案就是分工:流量已经在第①级把"有漏"确认了,第②级要的是空间信息,而空间信息只密布在压力表上。更深一层的物理答案,留到第五章讲指纹时给。
之所以说定位是"最贵的一问",是因为它夹在两个便宜环节中间:发现只要读总表、修复只要挖开确认了的那一段,唯独"漏在全网哪根管"没有直接可读的仪表——地下管网看不见、摸不着,早年的做法要么全线开挖、要么等到路面塌陷或水费异常才被动响应,代价都极高。压力指纹法的价值就在于把这个"看不见"的中段,用一批便宜传感器 + 一套水力模型,变成一份可以照着干活的嫌疑清单。它不承诺一步到位,但能把开挖成本最高的盲目排查,压缩成沿两三根管的定向复核。
问题的数学形式:读数进,概率排名出
把定位问题写成算式,输入输出都很小:
其中 M 是压力表数、N 是候选漏点数(本演示网 M=3、N=7;真实问题里 N 是候选管段数)。**为什么输出是一份概率排名,而不是一个坐标?**三个原因:
- 信息量对不上:M 个读数携带的信息有限——第七章会算清楚,去均值后只剩 M−1 维——要从中唯一确定一个连续坐标是奢望。诚实的输出是"哪几根管嫌疑最大、各多大把握"。
- 下游用法就是排查清单:漏斗第③级拿着 top-K 清单沿管听漏,本来就按嫌疑度排队干活,概率排名正好是它要的输入格式。
- 失手可观测:概率自带置信度。top-1 领先第二名 70 个百分点,和只领先 0.3 个百分点,是完全不同的行动依据(下文会看到后者等于掷硬币)。一个只报坐标的黑箱给不了这层信息。
方法全链只有四步:建指纹库(离线一次)→ 算残差 → 去均值 Pearson 匹配 → softmax 概率。往下逐步把每一步的数字算到底。
二、演示网与水力学最小集
演示网全参数
演示网长这样:1 座水厂(水库边界,恒定水头 40.00 m,唯一压力边界)经总管 P0 进网,P1–P6 六根管围成一个环。6 个节点 J1–J6,每个节点的用户用水 0.004 m³/s(≈ 每秒 4 升),全网合计 0.024 m³/s;节点高程全部取 0——于是水头 H = 压力表读数 p,后文两词通用。

七根管的阻力系数 R(糙率 C=100 全网统一):
| 管 | 连接 | 长 L (m) | 径 D (m) | R(m/(m³/s)^1.852) |
|---|---|---|---|---|
| P0 | 水厂–J1(总管) | 150 | 0.30 | 111.4 |
| P1 | J1–J2 | 250 | 0.25 | 451.5 |
| P2 | J2–J3 | 400 | 0.20 | 2 141.8 |
| P3 | J3–J4 | 200 | 0.15 | 4 348.4 |
| P4 | J4–J5 | 500 | 0.15 | 10 871 |
| P5 | J5–J6 | 300 | 0.20 | 1 606.4 |
| P6 | J6–J1 | 180 | 0.25 | 325.0 |
水力学最小集:一根管的过路费公式
整个方法只依赖一条水力学经验公式。水在管里流动要跟管壁摩擦,能量沿程消耗,表现为水头(本网高程全 0,即压力)一路变小。一根管消耗的水头叫沿程损失 h,自来水行业用 Hazen-Williams 公式:
在 SI 单位下(Q 用 m³/s、D 与 L 用 m,h 出 m),常数 10.667 才成立,R 的量纲是 m/(m³/s)^1.852。指数 1.852 是关键:流量翻倍,损失不是翻倍,而是变 倍——流得越快,摩擦越不成比例地贵,这是湍流的非线性。而 R 里 D 的 −4.871 次方极其敏感:管径减半,R 大约变 29 倍。
拿总管 P0 从头算一遍(L=150 m,D=0.30 m,C=100;水库 40 m;全网用水 0.024 m³/s 全部经它进网):
- 第①步,算 R:
- 第②步,算损失: m
- 第③步,起点水头减损失: m
三步之外没有别的了——J1 处压力表就该读 39.889 m。感受一下非线性:用水翻倍到 0.048 m³/s,损失变 m,是 0.111 m 的 3.61 倍而不是 2 倍。这个非线性决定了整网方程组没有解析解,只能迭代。
再加一条常识就够用了——节点守恒:节点不存水,任一时刻"流进 = 流出 + 该点用户用掉"。一条公式加一条常识,就是全部水力学。
三、基线工况:13 个未知数,手算解出与仿真对账
没漏水时全网什么状态?未知数 = 6 个节点水头 + 7 根管流量 = 13 个。分三步吃掉:
第一步,总账。全网用水 0.024 m³/s 只能从水厂来,所以 m³/s,不用解方程,进出账而已。13 个未知数干掉 1 个。
第二步,逐节点分账。环上 6 根管流量互相牵连,但守恒账能把它们全表示成一个未知数。设 P1 流量为 (方向 J1→J2),沿环逐节点记"进 = 出 + 自用":
| 节点 | 账 | 推出 |
|---|---|---|
| J1 | 进 0.024,自用 0.004,走 P1 送掉 ,余走 P6 | (J1→J6) |
| J2 | 进 ,自用 0.004 | |
| J3 | 进 ,自用 0.004 | |
| J4 | 进 ,自用 0.004 | (负数=反着流) |
| J6 | 进 ,自用 0.004 | |
| J5 | 收账核对: | 恰好=自用 0.004 ✓ |
最后一行 自己消掉了、恒等成立——这说明 6 条守恒账里只有 5 条独立,定不出 ,差的这条方程要靠能量来补。13 个未知数现在只剩 1 个 。
第三步,能量闭合定 q。从 J1 到 J4 有上下两条路,但 J1 只有一个水头、J4 也只有一个水头,所以"J1 到 J4 掉了多少水头"是一个固定的数——不管水走哪条路。于是两条路的总损失必须相等:
每个 ,方程里只有 一个未知数,但 1.852 次方无求根公式,只能试算逼近:
| 试 (m³/s) | 上路合计 (m) | 下路合计 (m) | 判断 |
|---|---|---|---|
| 0.008 | 0.137 | 0.694 | 上路损失小太多 → 水还会往上路挤 → 应更大 |
| 0.012 | 0.563 | 0.101 | 挤过头 → 应更小 |
| 0.010 | 0.297 | 0.297 | 两路相等 ✓(精确根 0.0099975,手算取 0.010 足够) |
物理图像很清晰:0.024 进 J1、自用 0.004,剩下 0.020 几乎对半分走两条路——因为两条路到汇合点的总阻力恰好相近。
流量全知道了,从水库 40 m 沿管逐段减损失(每行就是水力学最小集那三步):
| 求谁 | 路径 | h 代入式 | 手算 H (m) | 仿真值 (m) |
|---|---|---|---|---|
| J1 | 40 − h([email protected]) | 111.4×0.001000 = 0.111 | 39.889 | 39.8885 |
| J2 | J1 − h([email protected]) | 451.5×0.000198 = 0.089 | 39.800 | 39.7993 |
| J3 | J2 − h([email protected]) | 2141.8×0.0000768 = 0.164 | 39.636 | 39.6350 |
| J6 | J1 − h([email protected]) | 325.0×0.000198 = 0.064 | 39.825 | 39.8242 |
| J5 | J6 − h([email protected]) | 1606.4×0.0000768 = 0.123 | 39.702 | 39.7008 |
| J4 | J5 − h([email protected]) | 10871×0.0000100 = 0.109 | 39.593 | 39.5915 |
手算与仿真最大差 0.002 m,全部来自展示舍入( 取 0.010 而非 0.0099975、每行 h 只留 3 位小数);取满精度重走这条链,六个节点四位小数逐位等于仿真值——手算和仿真解的是同一套方程,模型没有黑箱。带走一行数,三块表(J1/J3/J5)看到的基线(后文统一用仿真精确值):
漏水检测的全部游戏,就是拿新读数跟这行数相减:基线是"一切正常时压力表该读多少"的参照系,任何一次实测偏离它,都是全网状态变化留在压力场上的痕迹,而漏水正是其中最典型、也最值得追查的一种。
四、漏损建模与漏损工况:16 条方程联立
劈管开洞,漏量是解出来的
模型里的管是一条线,线上没法直接开洞,所以做个小手术(代码里叫 split_pipe):把管从中点劈成两半,劈点生成一个虚拟节点 LEAK,洞就开在它身上。以 P5(J5–J6,300 m)为例:
劈管连带一个后果:R 与管长成正比,300 m 的 P5 原来 R=1606.4,劈成两个 150 m 后每段 R = 1606.4 ÷ 2 = 803.2。洞的参数只有两个:面积 A = 0.001 m²(孔径 ≈3.6 cm)、流量系数 Cd = 0.75。
洞往外喷多少水?托里拆利结论——孔口喷速等于从"压力水头那么高"自由落体的末速度 ,流量 = 速度 × 面积 × 折减系数:
关键在于: 是未知数(洞开了之后那点压力多少,得解出来才知道),所以 也是未知数。你给模型的只有洞的几何(A、Cd),漏多少水是它自己算出来的。
同时,因为漏量、用水量都随压力变化,仿真必须用**压力驱动(PDA)**模式:漏水压降 → 压降反过来抑制漏量和出水量 → 再影响压力,这个反馈闭环只有 PDA 能表达。需水按 Wagner 三段式:压力 ≥21 m 足额、≤3.5 m 断流、中间按 折减;本网压力全程 38 m 以上,折减不激活,但这条方程始终在系统里,一旦漏损把压力压穿 21 m 它就自动接管。
16 条方程联立求解
P5 开洞后,未知数变 16 个:7 个节点水头(含 )+ 8 根管流量(P5 劈成两段)+ 1 个漏量。方程恰好 16 条:7 条节点守恒 + 8 条管道能量 + 1 条漏口方程,恰好封闭。非线性来自 1.852 次方和开根号,没有解析解——仿真里用 Newton 迭代(跟基线的"试算逼近"是同一件事的机器版)。
为什么必须 16 条联立、不能一条条顺着算?漏口方程说"漏点压力越高漏得越多",守恒与能量方程说"漏得越多 → 全网流量越大 → 损失越大 → 漏点压力被压得越低"。两边互相顶牛,解是同时满足全部 16 条的那个平衡点。收敛解的关键数字:
| 量 | 值 | 读出什么 |
|---|---|---|
| 漏量 | 0.02063 m³/s | ≈ 全网正常用水 0.024 的 86%——教学上故意开的大洞,信号明显 |
| 漏点压力 | 38.5529 m | 代回洞方程验证: m/s(喷速≈99 km/h), ✓ 漏量确实是从压力算出来的 |
| 总管流量 | 0.04463 m³/s | = 0.024 + 0.02063:水厂多供出漏掉的份;总管损失从 0.111 涨到 0.352 m |
| P5 段流向 | 0.00178(J5→LEAK) | 远路的水掉头倒流反向给洞送水(基线里本是 J6→J5)——流向不是设定的,是解出来的 |
16 条方程逐条代回全部闭合(能量方程 ±0.0003 m 的零头为表值舍入)。把漏后压力与基线逐节点相减,得到本章的最终产物——压降向量 Δp:
| J1 | J2 | J3 | J4 | J5 | J6 | |
|---|---|---|---|---|---|---|
| 基线 (m) | 39.889 | 39.799 | 39.635 | 39.592 | 39.701 | 39.824 |
| P5 漏后 (m) | 39.648 | 39.477 | 39.036 | 38.679 | 38.546 | 39.260 |
| Δp (m) | 0.240 | 0.322 | 0.599 | 0.913 | 1.154 | 0.564 |
规律一眼可见:离洞越近降得越多(洞在 J5–J6 之间,J5 降 1.154 m 最狠;J1 挨着水厂只降 0.240 m)。压降的这种空间分布模式,就是下一章说的"指纹"。
五、指纹库:把"每根管漏水的样子"离线存档
对 P5 干的那套动作——注漏、解方程、跟基线相减得 Δp 行——对每根候选管重复一遍,把 7 行 Δp 摞成一张矩阵,就是指纹库:
本网 N=7 候选、先把全部 6 个节点算满(装几块表 = 匹配时给矩阵遮住几列)。得到的 7×6 指纹表:

| 漏的管 | J1 | J2 | J3 | J4 | J5 | J6 |
|---|---|---|---|---|---|---|
| P0 | 0.123 | 0.123 | 0.123 | 0.123 | 0.123 | 0.123 |
| P1 | 0.243 | 0.525 | 0.474 | 0.440 | 0.302 | 0.257 |
| P2 | 0.239 | 0.679 | 1.446 | 1.342 | 0.517 | 0.300 |
| P3 | 0.234 | 0.560 | 1.778 | 2.509 | 0.757 | 0.346 |
| P4 | 0.233 | 0.442 | 1.193 | 2.203 | 1.147 | 0.423 |
| P5 | 0.240 | 0.322 | 0.599 | 0.913 | 1.154 | 0.564 |
| P6 | 0.243 | 0.259 | 0.306 | 0.348 | 0.420 | 0.452 |
读这张表读出三条规律,后面全部结论都从它长出来:
- 每行一个"地形":P3 漏时 J4 降 2.509 m 最狠(紧挨着),J1 只降 0.234 m——距离衰减在每行都成立,行与行地形不同,这就是可区分性的来源。
- 有些行长得像:P5 行与 P6 行都是"J5/J6 一侧多降、J1 一侧少降"的地形,只差幅度——第六章的平局已在这张表里埋下伏笔。
- P0 行是平的:总管漏水让六个节点均匀各降 0.123 m。均匀 = 没有空间模式 = 后续任何匹配都无从下手(第七章专门讲这个结构性盲区)。
指纹库有三个工程属性值得强调。其一,离线一次成本:N 根候选管 = N 次仿真,建库在漏发生前完成;在线定位时刻不跑任何水力仿真,只做向量匹配,毫秒级。其二,固定漏口不碍事:库用统一 A=0.001 m² 的教学漏口,漏口变大各监测点压降近似等比放大、空间形状不变——而匹配刻意只看形状不看幅度,所以一套库对付各种大小的漏。其三,库的质量上限 = 模型的质量:指纹是模型算的,糙率、管径与实际不符指纹就失真;演示网糙率统一 C=100 是教学设定,工程上糙率须用实测压力标定后指纹才可信。
指纹的物理:压降模式是流量重分配的"影子"
第一章从分工角度回答了"为什么只用压力",这里给物理层面的答案,质询时更硬。漏水这件事在管网里的完整因果链是:洞出现 → 管段流量重新分配(水厂多供、各管流量按阻力重新分摊、有的管甚至倒流,前一章的流量列全看到了)→ 每根管流量变了,沿程损失 就变了 → 各节点水头跟着变。
也就是说,压降的空间模式 = 流量重分配经能量方程投影出来的"影子"。拿压力做匹配,不是放弃了流量信息,而是流量变化的空间信息已经被能量方程编码进压力场——用便宜的压力表读到了贵的流量计才能直接测的东西。反过来问:直接测流量不是更直接吗?两个现实障碍——流量计贵一个量级以上、密布不经济;而装在边界的流量计只有总量,总量只回答"漏多少",永远回答不了"漏在哪"。压力表便宜、可密布,密布才有空间分辨率。
六、匹配算法:残差 → 去均值 Pearson → softmax
现在切换到在线时刻:P5 真的漏了(我们假装不知道),三块表传回读数。
第一步:残差 r,三个减法
把读数变成残差——基线减实测:
| 表 | 基线 (m) | 实测 (m) | 残差 r = 基线 − 实测 (m) |
|---|---|---|---|
| J1 | 39.889 | 39.648 | 0.240 |
| J3 | 39.635 | 39.036 | 0.599 |
| J5 | 39.701 | 38.546 | 1.154 |
教学口径用零噪声"完美实测"——直接取上一章收敛解表里三块表位置的压力,相当于假设仪表完全准、模型完全对。注意 r 恰好就是指纹表里 P5 那行的 J1/J3/J5 三列——零噪声下真值行跟残差是同一个向量,这是自洽性的基本检验。接下来的问题就一句话:指纹库 7 行里,哪行长得最像 r?
▶ 这一步开始,交互演示版的"单次定位"演示最适合边读边玩:点任意管道设为漏点,右侧概率条就按下面这套算法当场重算。
第二步:为什么不能直接比,先去均值
最朴素的想法是拿 r 跟每行算夹角余弦,谁大谁像。这样做会失败:漏水让三块表全都在降(r 三个分量全正),指纹库每行也全正——所有向量都朝着"全降"这个大方向,谁跟谁的余弦都 >0.95,全体"很像",等于没比。信号处理里这叫共模分量淹没差模分量。
解法是先去均值:把"大家都在降"的公共部分减掉,只留"谁比平均多降、谁比平均少降"的相对模式:
读出来就一句话:"J1 比平均少降 0.42,J5 比平均多降 0.49"——这才是漏点位置的签名,跟漏多大无关。

去均值的第二重红利是尺度不变:漏口变大,r 整体近似等比放大,去均值再归一后方向不变——所以匹配不需要预知漏口大小,一套指纹库对付各种规模的漏。代价也在这一步埋下:去均值吃掉一个自由度,M 块表只剩 M−1 维(下一章细算这笔账)。
第三步:去均值后的余弦 = Pearson 相关
指纹库每行 同样去均值(记 ),跟 算夹角余弦——这个量在统计里就叫 Pearson 相关系数:
分子是 m²、分母是 m×m,单位约掉、score 无量纲——量纲层面再次印证:匹配只看模式方向,不看漏多大。拿 P6 这行完整手算一遍(挑它是因为结果最出人意料):
- ① P6 指纹(J1/J3/J5 列)= [0.243, 0.306, 0.420],均值 0.323,去均值
- ② 点积 =
- ③ 范数 ;
- ④ score =
注意这个 0.999:P6 根本没漏,它跟残差的相关竟然接近满分。原因是 P6 的去均值方向("J1 少降、J5 多降")跟真凶 P5 几乎同款,只差幅度——而幅度恰恰被尺度不变性抹掉了。这不是算错,是三块表视角下两根管物理上就长一样,下面 softmax 和自由度两节把这件事的后果和根源讲透。
这里值得停一下体会 Pearson 到底在比什么。它比的不是"两个向量数值接近",而是"两个向量的形状趋势一致":先各自减掉自己的平均水平,再看去掉平均后剩下的起伏是否同向同比例。这正是我们要的——漏点大小影响的是幅度、漏点位置影响的是形状,用一个天然把幅度归一化掉的相似度,等于让匹配自动只对"位置签名"敏感,对"漏多大"免疫。代价就是像 P5、P6 这样形状本就接近的两根管,Pearson 会诚实地给出接近的高分,而不会替我们编造一个并不存在的区分度。
第四步:softmax 把 7 个分数变成 7 个概率
β 是把"分数差"放大成"概率差"的显示旋钮:单调变换不改排序,只改置信度的显示对比度。本例 P5 与 P4 分差 0.23,经 倍放大后呈现 46% : 7.5%;β 取 2 会显得"大家都差不多",取 20 会假装斩钉截铁。8 是演示的展示取值;工程上若要输出校准概率,β 应由历史验证数据标定。
七根管全部算完(去均值指纹、Pearson、、softmax 概率,一列不落;中间量保留 3 位小数):
| 管 | 去均值指纹 (m) | Pearson | softmax 概率 | |
|---|---|---|---|---|
| P0 | [0, 0, 0] ← 平指纹归零 | ~0 | 1.1 | 0.0% |
| P1 | [−0.097, +0.134, −0.037] | +0.126 | 2.7 | 0.0% |
| P2 | [−0.495, +0.712, −0.217] | +0.098 | 2.2 | 0.0% |
| P3 | [−0.689, +0.855, −0.166] | +0.215 | 5.6 | 0.1% |
| P4 | [−0.624, +0.335, +0.289] | +0.772 | 479.7 | 7.5% |
| P5 | [−0.424, −0.066, +0.490] | +1.000 | 2981.0 | 46.4% |
| P6 | [−0.080, −0.017, +0.097] | +0.999 | 2958.7 | 46.0% |
| Σ = 6431 | 100% |
分母 7 项全摆出来:,于是 、、。

三个读表点:P5 满分 1.000——零噪声下真值行跟残差就是同一向量,理所应当;P2/P3 直接出局——它们的签名是"J3 比平均多降",跟 r 的"J3 略少降"方向拧着,匹配真的在看模式方向;P0 的 Pearson 严格说无定义(零向量没有方向),代码分母加 1e-12 除零保护后输出浮点残渣,工程上当 0——总管漏对本方法彻底隐身。
平局怎么读:名义命中 = 掷硬币
3 表下 P5 真漏,若用全程机算(不做中间四舍五入)输出 46.3% : 46.0%[脚注 ★]。两种读法差别巨大:
- 错误读法:"top-1 是 P5,命中了。"——拿这个去报统计口径,3 表方案的零噪声 top-1 命中率好看得很,但它掩盖了真实的决策状态。
- 正确读法:"P5 和 P6 分不开,二选一等于掷硬币,两根管都得列入排查。"——领先幅度 0.3 个百分点(pp,两个百分数相减的绝对差)在任何噪声下都会被抹掉。
★ 脚注(口径互证):手算口径(中间量保留 3 位小数)为 46.4% : 46.0%,全程机算口径为 46.3% : 46.0%——两者的 0.1 pp 差异仅来自中间量的舍入位数,互相印证而非矛盾。本文两个数字都保留,正是要说明"这点差异无关排序,P5/P6 就是分不开"。
把两根管的去均值指纹并排看,平局的物理一目了然:P5 [−0.424, −0.066, +0.490] 与 P6 [−0.080, −0.017, +0.097] 是同款方向、只差幅度,两方向 Pearson = 0.9991。物理原因:P5(J5–J6)和 P6(J6–J1)都挂在环的左下角,从三块表的视角看,它俩漏水激起的相对模式几乎一样,而幅度差异恰被尺度不变性抹掉。三块表物理上就分不开它俩,46:46 是诚实的输出——这正是"输出必须带置信度"的活例证:概率排名把"我不确定"如实说了出来,一个只报坐标的黑箱在这里会假装自信。为什么恰恰是三块表分不开、加哪块表能分开?这是下一章自由度的账。
七、自由度与装表阶梯:装几块、装在哪
自由度的账:M 块表,只有 M−1 维分辨空间
去均值不是免费的:M 个读数减掉公共均值后,分量之和恒等于 0——向量被压进一个 M−1 维子空间。这笔账决定了方法的信息上限:
| 表数 M | 去均值后维度 M−1 | 几何图景 |
|---|---|---|
| 3 | 2 | 7 根管的指纹方向挤在一张 2 维平面上——必然有人挤在一起 |
| 2 | 1 | 只剩一条数轴,每个指纹退化成一个比值("J1 和 J5 谁多降") |
| 1 | 0 | 一个数减自身均值恒为 0,残差成零向量——数学上恒失明,不是"更模糊" |
本网 3 表 = 2 维平面要摆 7 个方向,挤出的重合不止一对。撞上的 P5/P6 就是上一章的平局。这个账同时给出破局思路:加表 = 升维,把挤在一起的方向撑开。P5、P6 的差异藏在 J6 列(指纹表:0.564 vs 0.452 m),而 J6 恰好没装表——装上,指纹从 3 维变 4 维,新维度上两根管一个 −0.075、一个 +0.096(一负一正,方向劈开),Pearson 从 0.9991 掉到 0.657,输出从 46:46 变成 P5 独占 83.4%。维度不够,算法再花哨也分不开共线的候选;这是信息论限制,不是算法缺陷。
再看一张逐工况明细,把 7 根管逐一设为真漏,零噪声下看 top-1 置信度和领先幅度(3 表 vs 6 表全装):
| 真漏 | 3 表基准(J1/J3/J5) | 6 表全装 |
|---|---|---|
| P0 | 14.3%(0.0 pp,失明) | 14.3%(0.0 pp,失明) |
| P1 | 32.5%(0.1 pp) | 85.9%(74.9 pp) |
| P2 | 32.9%(0.1 pp) | 53.1%(22.6 pp) |
| P3 | 32.3%(1.1 pp) | 44.8%(17.3 pp) |
| P4 | 59.4%(48.6 pp) | 52.5%(20.2 pp) |
| P5 | 46.3%(0.3 pp) | 83.3%(74.6 pp) |
| P6 | 47.0%(0.3 pp) | 92.6%(85.4 pp) |
重要发现:3 表下打平的不止 P5/P6——上路 P1/P2/P3 也是三胞胎,彼此领先只有 0.1 pp。2 维平面挤 7 个方向,挤出的重合同时发生在两组候选身上。另外注意 6 表下 P4 的置信反而比 3 表低(52.5 < 59.4)——置信度是相对量,加表改变的是所有候选间的相对几何,个别工况的显示置信可以降,但命中能力不降。
装表阶梯:表数 6→1 的性能实验
前面所有分析都指向同一个工程问题:**装几块表够用?**回答它需要一个干净的对照实验,设计如下——指纹库用那张 7×6 表全程不变("装几块表"= 匹配时遮住几列,变量唯一,归因干净);匹配算法与前面一字不差;每个监测值叠 N(0, σ=0.02 m) 噪声(±2 cm 是常规在线压力表精度量级,不加噪声命中率会虚高);每工况 500 次独立加噪(二项波动约 ±2 pp,足以分辨档位间真差异);加表序列嵌套(J5 ⊂ J1/J5 ⊂ J1/J3/J5 ⊂ +J6 ⊂ +J2 ⊂ +J4,逐档只动一块表);统计口径 top-1 / top-3 命中率,除 P0(P0 任何表数下恒失明,混进来只会给所有档位垫一个常数损失)。
▶ 这一节的整张阶梯表,在交互演示版里可以点"现场跑"——浏览器当场对 6 档表数 × 6 个真漏工况 × 500 次加噪做完整匹配统计(共 18000 次反演),换一批随机数重跑,结果应在参考值 ±3 pp 内复现。这就是"数字不是编的"的现场证据。
主阶梯表:
| 表数 | 监测点 | 真漏 P5:top-1 及置信 | 领先第二名 | 噪声 top-1(除P0) | 噪声 top-3(除P0) |
|---|---|---|---|---|---|
| 6 | J1–J6 全装 | P5 83.3% | 74.6 pp | 100.0% | 100% |
| 5 | −J4 | P5 78.7% | 66.0 pp | 100.0% | 100% |
| 4 | 基准+J6 | P5 83.4% | 72.6 pp | 81.6% | 100% |
| 3 | 基准 J1/J3/J5 | P5 46.3% | 0.3 pp(掷硬币) | 70.5% | 100% |
| 2 | J1/J5 | P5 16.7% | 0.0 pp | 16.7% | 50.3% |
| 1 | J5 | P6 14.3%(=1/7 纯猜) | 0.0 pp | 16.7% | 50.0% |

阶梯上的三个拐点
- **3 → 2 是悬崖,不是缓坡。**3 表还有 2 维可用(除 P0 top-1 70.5%,top-3 兜底 100%);2 表只剩 1 维——去均值后每个指纹退化成"J1 和 J5 谁多降"一个比值,top-1 直接塌到 16.7%(≈1/6 纯猜),top-3 都只剩 50%。往下减表不是渐进降级,是断崖失能。
- **1 表 = 数学上恒失明,不是"更模糊"。**一个数减自身均值恒等于 0,残差成零向量,跟任何指纹都算不出相似度——概率条永远平分 1/7。单表能做的只有"压力比平时低了"的告警,定位能力严格为零。这条给出压力监测点数的绝对下限:想参与定位,至少两块;想有实用精度,至少三块。
- **第 6 块表(J4)白装。**5 表和 6 表的噪声命中率一模一样(除 P0 均 100%)——J4 的信息被 J3/J5 两侧夹着,基本冗余。表不是越多越好,够拆开所有混淆对就到顶了,之后每块都是纯成本。
把三个拐点连起来读,就是装表数量的决策法则:从下限往上加,每加一块问一句"它拆开了哪对混淆"——拆得开就加,拆不开就停。本演示网的答案是 4 块(top-1 81.6%、top-3 100%);具体数值随管网变,但"边际收益递减 + 明确到顶点"的曲线形状是普适的。
值得强调的是,这条曲线本身就是装表数量论证的正确交付物。工程评审里常见的争论是"到底装 3 块还是 5 块",各执一词却谁也拿不出依据;而只要把这张阶梯跑出来,讨论立刻从"拍数字"变成"读曲线"——甲方要的是最低成本的告警,那 2 块以上都不够、必须至少 3 块托底;要的是能定位到单根管,那曲线告诉你 4 块封顶、第 5、6 块纯属浪费。把选择权连同其代价一起摆上桌,比给一个孤零零的推荐数字负责得多,也经得起质询。
第 4 块表加哪:位置 > 数量
固定 3 表基准,第 4 块表的三种加法(全部机算):
| 方案 | 真漏 P5:置信 / 领先 | 噪声 top-1(除P0) | 拆开了谁 | 没拆开谁 |
|---|---|---|---|---|
| +J6 | 83.4% / 72.6 pp | 81.6% | P5/P6(0.3 pp → 72.6 pp) | 上路 P1/P2/P3 仍挤 |
| +J2 | 45.0% / 0.3 pp | 88.5% | 上路三胞胎 | P5/P6 仍掷硬币 |
| +J4 | 50.3% / 4.6 pp | 87.5% | 上路三胞胎(部分) | P5/P6 基本仍混 |

三个方案给出三种截然不同的性格:+J6 专治 P5/P6,但对上路三胞胎帮不上;+J2 的平均命中率反而最高(88.5%),可 P5/P6 照样掷硬币;+J4 居中两不沾。没有免费的万能第 4 块。这就把装表点位优化的正确顺序钉死了:先仿真找出易混淆管对 → 按"要拆开谁"定点位,而不是按几何均匀撒点。目标函数必须先想清楚:全网平均命中优先选 +J2,重点保护某片区(比如那里管材老化、漏损高发)选拆开该片区混淆对的点位。
附一个反直觉细节:5 表的 P5 置信 78.7% 反而低于 4 表的 83.4%——加一块对该工况没信息的表(J2)会稀释置信度的显示对比度,但不降命中(5 表 top-1 仍 100%)。置信度是相对量,别拿它单独当性能指标;决策看命中率。
P0 盲区:信息论上的必然
指纹表里 P0(总管)那行是平的:六个节点均匀各降 0.123 m。均匀降压去均值后成零向量——没有空间模式可供任何匹配算法区分。这不是算法缺陷,是信息论上的必然:总管站在水源与全网之间,它漏水等于"全网水源水头集体下移",每个节点感受完全一样,装多少块压力表都一样失明。
兜底手段回到漏斗第①级——总管漏水虽然在压力"模式"上隐身,在流量"总账"上却无处遁形:水厂供水量激增而各分区计量没有对应增长,DMA 夜间最小流量分析立刻暴露。所以完整的漏损监测方案必然是两条腿:支管/环内管漏(有空间模式)由压力指纹法定位到管,总管类均匀降压漏由流量对账兜底。两法覆盖的盲区恰好互补——这也是"压力定位 + 流量发现"作为组合拳而非二选一的根本理由。
八、边界、结论与备查
诚实边界:这套数字覆盖什么、不覆盖什么
主动声明四条边界:
- 教学演示网:全部数字来自 6 节点网的零噪声/加噪合成实验,展示的是方法机理和规律形状,不是实战成绩。管网参数(糙率统一 C=100 等)为教学设定。
- 单漏点假设:多点同漏时残差是几个指纹的叠加,单指纹匹配可能指到中间某根无辜管,需扩展组合匹配。
- 零模型误差假设:指纹库是模型算的,糙率/管径不准 → 指纹失真 → 排序被带偏。工程上指纹库可信的前提是管网模型经实测压力标定。
- 需水波动未建模:实验里基线是完美已知的;实际中用户用水时刻在波动,残差里混着需水噪声——工程对策是在夜间最小流量时段测(需水最稳),并用多时刻读数平均压噪声。
方法什么时候失效,判据是信噪比。本演示的漏很大(0.02063 m³/s ≈ 全网正常用水的 86%),最大压降信号 1.15 m ≫ 噪声 σ=0.02 m,所以 3 表也有 70% 命中。漏口越小、离监测点越远,信号越弱;当指纹幅值跌到与噪声同量级,分数整体坍平、top-1 退向纯猜。这不改变方法的定位——它本来就是漏斗中段的缩小范围工具(top-K 清单 + 现场确认),不是一锤定音的仪器。
结论:四条
- 方法定位:压力指纹法输出 top-K 概率清单,把"全网排查"缩小到"两三根管",再由听漏仪定桩——它是排查漏斗的中段,不替代人工确认;概率里的置信度信息(领先幅度)本身就是行动依据。
- 装表数量:不是越多越好。本演示网上 4 块表即拆开目标混淆对(top-1 81.6%,top-3 100%),第 6 块完全白装;3→2 是悬崖,2 块以下方法失效。表数论证应给出整条边际收益曲线,而不是拍一个数。
- 装表位置 > 数量:同样加 1 块表,加对位置(+J6)与加错位置对目标混淆对是 72.6 pp 与 4.6 pp 的差距。正确流程 = 先仿真找易混淆管对,再按混淆对定点位。
- 盲区与兜底:总管类"均匀降压"漏损对压力模式法结构性免疫,必须与流量对账(DMA 夜间最小流量)互补成完整方案——压力定位、流量发现,两条腿缺一不可。
备查问答(质询预置)
Q1 · β=8 是怎么定的?换个 β 结论会变吗? β 是把"分数差"放大成"概率差"的显示旋钮,单调变换不改排序——top-1 是谁、命中率多少与 β 无关。本例 P5 与 P4 分差 0.23,经 倍放大呈现 46% : 7.5%;β 取 2 会显得"大家都差不多",取 20 会假装斩钉截铁。8 是演示的展示取值;工程上若要输出校准概率,β 应由历史验证数据标定。
Q2 · 指纹库用固定 0.001 m² 漏口建库,实际漏口大小不同怎么办? 匹配用去均值 Pearson,只看压降空间形状不看幅值(尺度不变);漏口变大,各监测点压降近似等比放大,形状不变,一套库通吃。这个近似在大漏显著激活 PDA 折减区时开始失真,属已知边界。
Q3 · 为什么仿真必须 PDA(压力驱动)?漏量要不要作为输入给定? 漏损是耦合问题:漏水压降 → 压降抑制漏量和用水量 → 反过来又影响压力,直到平衡。PDA 把实际出水量写成压力的函数(Wagner 三段式),这个反馈闭环只有 PDA 能表达。漏量不是输入——你给的只有漏口几何(A、Cd),漏多少由漏点压力经孔口方程在联立求解中自己出来(0.02063 m³/s 代回洞方程逐位闭合)。
Q4 · 模型要给"初始条件"吗? 分两层。系统层面不需要:本网无水池/水塔,没有储存性状态量,描述它的是代数方程组不是微分方程,不存在"t=0 状态"。求解器层面需要但自带:Newton 迭代的出发点由软件内置(水头=高程、管流量=0.001 m³/s 等),只影响收敛快慢、不影响收敛到哪——解由方程组本身唯一确定。
Q5 · top-3 兜底 100% 是什么含义?为什么它比 top-1 更工程相关? 漏斗第③级的实际动作是"沿嫌疑管逐根听漏"。top-3 = 100% 意味着按清单前三根排查必然抓到真凶——排查工作量从 7 根封顶到 3 根。3 表方案 top-1 只有 70.5% 但 top-3 已 100%,所以"3 块表够不够"的答案取决于你接受的排查工作量:接受查三根,够;要求一击即中,上 4 块。
Q6 · 这套流程搬到更大的管网,哪些环节变、哪些不变? 不变的:四步链条(建库→残差→去均值 Pearson→softmax)、自由度账(M 块表 M−1 维)、"先找混淆对再定表位"的点位逻辑、P0 型盲区与流量对账互补的结构。变的:候选集从 7 根管变成按管段/分区划分的 N 个候选(矩阵变大);指纹库须在标定过的管网模型上重建;混淆对结构由实际拓扑决定,须重新仿真识别;噪声口径按实际表精度与需水波动标定。方法论完整迁移,数字全部重算。
一句话收束:几块压力表能把漏点定位到哪条管,答案不玄——它由一条 Hazen-Williams 公式、一次去均值 Pearson 匹配、和 M−1 维的自由度账共同决定。装几块、装在哪,不该拍脑袋,而应让上面这整条边际收益曲线来回答。全文两处 live 演示可在交互页当场重跑,每一个中间数字都摆在明面上,欢迎拿计算器抽验任何一格。