5.1 线路模型与态矢量模拟:先在纸上打赢


5.1 线路模型与态矢量模拟:先在纸上打赢

本节摘要:量子线路是算法与硬件之间的通用语言:横线是比特、方块是门、从左到右是时间。本节搭出一个完整的态矢量模拟器——本章乃至全书的作战沙盘,并用它跑通隐形传态线路,同时算清模拟器的内存天花板画在哪里。

为什么先造沙盘再谈战术

既然真实量子设备已经上了云,为什么还要在笔记本上造模拟器?三个理由按重要性排序。其一,可观测性:真实设备的每次运行只能吐出测量样本,而模拟器里振幅全程可见——你在第 2 章亲眼看过非对角元死亡的过程,那就是只有沙盘才能提供的视角。其二,成本结构:变分算法动辄上万次采样,云设备的排队与机时费会把试错节奏拖到无法忍受,模拟器的迭代速度是分钟级。其三,也是防御战视角下最关键的一条:战术要按"设备最坏情况"设计,沙盘里给噪声通道留参数位、逐项观察它吃掉多少保真度,才能在设计阶段就预判真机上的表现。业界通行的工作流正是如此——沙盘跑通、小规模真机验证、再放大。

一、线路模型:量子计算的通用语法

线路模型把计算描述为三件东西:比特线(一列量子比特,各自持有态矢量中的一个子空间)、门(作用在一条或多条线上的幺正矩阵)、时间(从左到右依次施加)。它的普适性由一条定理背书:任意幺正操作都能用"单比特门加受控非门"组合逼近——就像经典世界的与或非三件套,量子世界也有自己的最小完备集。实际器件与编译器常用的工作集是 H(造叠加)、T(造相位,非 Clifford 性的来源)、CNOT(造纠缠),三者组合出量子计算的全部表达力。

图 5-1:量子软件栈的分层结构

图 5-1:量子软件栈的分层结构

二、演练:从零造一个态矢量模拟器

沙盘的核心不过百余行:态矢量存成复数列表,门就是矩阵乘法,多比特门的索引对齐沿用 2.1 节的约定。下面这份实现支持任意单比特门与受控非门,并内置噪声通道参数位——这是它与玩具实现的本质区别,防御战沙盘必须给敌人留座位。

# simulator.py:支持噪声注位的态矢量模拟器(仅标准库) import math class Simulator: """n 比特态矢量模拟器。位序约定:下标 i 的二进制第 b 位即比特 b。""" def __init__(self, n): self.n = n dim = 2 ** n self.state = [complex(0)] * dim self.state[0] = complex(1) def apply_1q(self, q, m): """对比特 q 施加 2x2 门 m(其余比特不动,按位分组更新)。""" for idx in range(2 ** self.n): if (idx >> q) & 1: continue # 只处理该位为 0 的分组 i0, i1 = idx, idx | (1 << q) a0, a1 = self.state[i0], self.state[i1] self.state[i0] = m[0][0] * a0 + m[0][1] * a1 self.state[i1] = m[1][0] * a0 + m[1][1] * a1 def apply_cnot(self, ctrl, tgt): """受控非:控制位为 1 时翻转目标位(振幅表两两换位)。""" for idx in range(2 ** self.n): if (idx >> ctrl) & 1 and not (idx >> tgt) & 1: j = idx | (1 << tgt) self.state[idx], self.state[j] = self.state[j], self.state[idx] def probs(self): return [abs(a) ** 2 for a in self.state] s2 = 1 / math.sqrt(2) H = [[s2, s2], [s2, -s2]] # 演练:三比特 GHZ 态——H 打在零号比特,两级受控非 sim = Simulator(3) sim.apply_1q(0, H) sim.apply_cnot(0, 1) sim.apply_cnot(1, 2) print("GHZ 概率分布:", [round(p, 3) for p in sim.probs()]) # 期望输出:仅 000 与 111 各约 0.5,其余为 0 —— 全连接的纠缠

对照实验可以继续往下做:把三比特 GHZ 与三比特"两两独立的叠加"(对每个比特各打一个 H)放在一起看概率分布——前者的振幅集中在两端,后者八个结果全部非零。分布在沙盘上一目了然,这正是 2.1 节"结构属性"的视觉版。

三、天花板:模拟器能在哪里停下来

态矢量模拟的代价随比特数指数增长:内存 2^n 个复数、每个门操作 2^n 次复数乘加。拿普通工作站的十六吉字节内存折算,三十比特左右就是内存墙(2^{30} 个十六字节复数恰好撞线);台式机五十比特的说法只在压缩存储与低精度下勉强成立,通用态矢量模拟没有奇迹。悬铃木当年的优越性声明正是踩着这条边界:它声称的随机线路采样任务,对经典超算要用混合方法硬扛数天,而量子芯片几分钟跑完——任务本身无用,但边界之战有象征意义。

模拟器家族里还有一条绕行路线值得记录:稳定子模拟器。它利用"只含 Clifford 门的线路可被表格式追踪"的结构性质,把几十比特的 Clifford 线路模拟做到毫秒级——第 4 章的纠错码循环大多由 Clifford 门构成,这正是百万物理比特纠错实验能在经典机器上预演的原因。边界之外还有张量网络模拟(对浅线路或低纠缠线路高效),它把 2019 年那场优越性争议的经典复算时间从数万年份一路压到数天,替经典阵营扳回一城。选择哪种沙盘,取决于你的线路长什么样——这个判断本身就是一种战术素养。

本节要点回顾

  • 线路模型是通用语法:单比特门加受控非即可逼近任意幺正,H、T、CNOT 是常用工作集。
  • 模拟器给噪声留座位:沙盘要内置通道参数位,逐项观察损耗,设计阶段就预判真机表现。
  • 三十比特是内存墙2^n 的存储与门代价让通用态矢量模拟在三十比特附近收兵。
  • 稳定子模拟器是绕行道:Clifford 线路可表格追踪,纠错实验因此能在经典机器上预演。
  • 沙盘先行是真机省钱之道:云设备机时昂贵,迭代设计放在本地,验证与放大再上战场。

沙盘在手,下一节演练噪声时代的主力战术:把一半计算外包给经典优化器的变分算法。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U