3. 译码图构建失败:缺失边与权重异常的定位
问题定位:从探测器坐标到错误机制映射
表面码译码图构建失败通常表现为两类症状:一是边缺失——某个探测器在图中没有与任何相邻探测器或边界相连,导致综合征无法被匹配;二是权重异常——边存在但权重为 0、负数或与错误概率明显不符,使 MWPM 匹配退化。两者根因往往不在译码算法本身,而在探测器坐标与错误机制映射之间的对应关系被破坏。
下面用一张图说明构建链路中三个关键检查点:坐标表、错误机制表、以及二者合成后的图结构。任一环节错位,都会在图层面表现为缺边或权重异常。
排查步骤:逐层核对三张表
按“坐标表 → 机制表 → 概率表”的顺序核对,可以快速把问题锁定到具体表项。以下代码演示一个最小可运行的检查脚本,使用教学示例数据(3×3 表面码、码距 d=3),输出缺边与权重异常清单。
import math
from collections import defaultdict
# 教学示例:3x3 表面码探测器坐标(t=0 层)
# 探测器按 (x, y) 网格排列,边界探测器用 None 表示连接到边界
detector_coords = {
"D0": (0, 0), "D1": (1, 0), "D2": (2, 0),
"D3": (0, 1), "D4": (1, 1), "D5": (2, 1),
"D6": (0, 2), "D7": (1, 2), "D8": (2, 2),
}
# 错误机制表:机制名 -> 触发的探测器集合(空集表示边界机制)
mechanisms = {
"X0": {"D0", "D1"},
"X1": {"D1", "D2"},
"X2": {"D3", "D4"},
"X3": {"D4", "D5"},
"X4": {"D6", "D7"},
"X5": {"D7", "D8"},
"X6": {"D0", "D3"},
"X7": {"D3", "D6"},
"X8": {"D1", "D4"},
"X9": {"D4", "D7"},
"X10": {"D2", "D5"},
"X11": {"D5", "D8"},
"B0": {"D0"}, # 边界机制
"B1": {"D2"},
"B2": {"D6"},
"B3": {"D8"},
}
# 错误概率表(教学示例值)
probs = {m: 0.01 for m in mechanisms}
probs["X4"] = 0.0 # 故意注入异常:概率为 0
probs["X9"] = 1.0 # 故意注入异常:概率为 1
def weight(p):
if p <= 0 or p >= 1:
return None # 无法计算有效权重
return -math.log(p / (1 - p))
# 1) 检查机制表端点是否都在坐标表中
missing_nodes = []
for m, dets in mechanisms.items():
for d in dets:
if d not in detector_coords:
missing_nodes.append((m, d))
# 2) 检查权重异常
bad_weights = []
for m, p in probs.items():
w = weight(p)
if w is None:
bad_weights.append((m, p))
# 3) 检查图连通性(忽略边界机制)
adj = defaultdict(set)
for m, dets in mechanisms.items():
dets = list(dets)
if len(dets) == 2:
a, b = dets
adj[a].add(b)
adj[b].add(a)
visited = set()
stack = ["D0"]
while stack:
n = stack.pop()
if n in visited:
continue
visited.add(n)
stack.extend(adj[n] - visited)
isolated = [d for d in detector_coords if d not in visited]
print("缺失节点引用:", missing_nodes)
print("权重异常机制:", bad_weights)
print("孤立探测器:", isolated)
运行上述脚本,预期输出(教学示例):
缺失节点引用: []
权重异常机制: [('X4', 0.0), ('X9', 1.0)]
孤立探测器: []
若
missing_nodes 非空,说明机制表引用了坐标表中不存在的探测器 ID,需修正机制表或补全坐标表;若 bad_weights 非空,说明概率表存在 0 或 1 的退化值,需替换为合理的小概率(如 1e-3)或检查概率赋值逻辑;若 isolated 非空,说明该探测器没有任何机制边,通常是坐标邻接判断或机制表覆盖不全。修复与验证
针对本例注入的两处权重异常,修复方式是将 X4 的概率改为合理值(如 0.005),将 X9 改为 0.02,然后重新构建图并验证:
- 边数检查:内部机制边应为 12 条(3×3 网格的相邻对),边界边 4 条,总边数 16。
- 权重范围:所有边权重应为正有限值,典型范围约 3.9~5.3(对应 p=0.005~0.02)。
- 连通性:所有 9 个探测器节点应属于同一连通分量(边界边不计入内部连通性时,内部图应连通)。
- 译码结果:用修复后的图跑一次 MWPM,对单比特 X 错误注入的综合征应能正确匹配到对应机制边。
概率为 0 或 1 是权重异常最常见的来源。构建图时应显式校验
0 < p < 1,并对越界值抛出明确错误或钳制到安全范围,而不是让 -log(p/(1-p)) 产生 inf 或负权重后静默进入匹配算法。可复用检查清单
| 检查项 | 判断条件 | 异常处理 |
|---|---|---|
| 坐标表完整性 | 每个探测器 ID 均有唯一 (x,y,t) | 补全或去重坐标 |
| 机制表端点 | 所有端点 ID 存在于坐标表 | 修正机制表或坐标表 |
| 概率范围 | 0 < p < 1 | 替换退化值,记录告警 |
| 边覆盖 | 每个探测器至少有一条机制边或边界边 | 检查邻接判断与机制覆盖 |
| 连通性 | 内部图单一连通分量 | 定位孤立节点并补边 |
| 权重有限性 | 所有 w 为正有限值 | 回溯概率表与公式 |