量子计算机模拟器
用 JavaScript 编写小型量子电路,直接在浏览器中模拟,并查看电路图、概率和状态向量。你也可以从较高层次描述一项运算(例如加法),观察系统如何自动生成真正可逆的量子电路。
噪声模型
真正的量子计算机无法完美运算:量子位极为敏感,会因与周围环境发生任何非预期相互作用——例如热量、电磁场或相邻量子位——而丢失部分信息,这称为退相干。门操作也不可能完全精确,就连最后的读取也可能出错。本模拟器默认进行理想计算;你可以在这里启用典型错误模型,直接观察它们对结果的影响。
使用 quantum.add、quantum.subtract、quantum.multiply、quantum.divide 或 quantum.random 描述一项运算。按 Ctrl+Enter 开始模拟。点击“文档”按钮查看详细说明。
此代码根据上方的程序代码自动生成并直接模拟。你可以在这里手动编辑后再次运行。
生成的 Circuit 已被手动修改,因此图中的寄存器分组已隐藏。再次运行上方的程序代码会覆盖这些修改。
最多 4000 个字符。可用的 QuantumCircuit 方法:x、y、z、h、s、sdg、t、tdg、rx、ry、rz、cnot、cz、ccnot(别名:toffoli)、swap、measureAll、run。按 Ctrl+Enter 开始模拟。
电路图
分步视图会显示执行所选门后的精确概率和状态向量。下方的测量次数结果始终对应完整电路。
OpenQASM 2.0
OpenQASM 2.0 是广泛使用的量子电路交换格式,Qiskit 等工具均可读取。注意比特顺序:本模拟器将 q0 视为最高有效位(左侧比特),Qiskit 则将 q[0] 视为最低有效位,因此测得的比特串在那里会呈镜像顺序。
概率
根据状态向量精确计算每个可能比特串被测得的概率。读取顺序:q0 是左侧的最高有效位。
Bloch 球
每个量子位的状态以 Bloch 球中的箭头表示:北极为 |0⟩,南极为 |1⟩,赤道上的点表示等权叠加态,而相位决定箭头沿赤道指向何处。如果箭头明显短于球半径,该量子位就没有自己的纯态,而是与其他量子位纠缠。噪声也会让箭头变短:启用噪声模型时,量子位会失去相干性,箭头向球心收缩。这里的含噪 Bloch 球是近似结果,Bloch 向量取各噪声轨迹的平均值。使用上方的分步视图,可以看到箭头逐门移动,但仅适用于无噪声情况。
测量次数结果
显示每个比特串在模拟测量中实际出现的次数。存在多个可能结果时,这些次数会围绕精确概率随机波动。
状态向量
概率背后的复振幅:一个振幅的模平方(实部² + 虚部²)就是对应状态的概率。
| 状态 | 实部 | 虚部 |
|---|
基础知识:它如何工作?
从程序到物理量子位
真正的量子计算机并不只是一块芯片。经典控制电子设备会把电路转换为精确脉冲。在图示示例中,冷却激光、再泵浦激光、量子位激光和读出激光在光学平台上塑造这些信号,并将其导入屏蔽的真空腔。它们在那里改变和测量量子位状态,测量结果随后返回经典计算机。
量子位与基态
经典比特只能是 0 或 1。量子位还可以存在于这两个基态 |0⟩ 和 |1⟩的叠加态中。多个量子位的所有基态以比特串表示,例如 |10⟩ 表示 2 个量子位;在本模拟器中, q0 始终是最高有效位,也就是左侧比特。
叠加态
处于叠加态的量子位同时包含多个基态的成分。这些成分用复振幅描述,振幅的模平方就是测量时得到对应状态的概率。
Bloch 球
单个量子位的状态可以表示为球内的箭头:北极表示 |0⟩,南极表示 |1⟩,赤道上的所有点都是等权叠加态;相位决定箭头沿赤道指向何处。旋转门 rx、 ry和 rz 让箭头绕对应轴旋转,S 和 T 等相位门则让它绕 Z 轴旋转。量子位发生纠缠时,箭头会向球心缩短:单个量子位此时不再拥有自己的纯态,因此可以直观地“看见”纠缠。
测量与 shots
measureAll() 会同时测量所有量子位并结束电路。由于单次测量只会给出一个随机结果,使用 run({ shots })时可以将其理解为重复测量电路相应的 shots 次,从而以直方图显示概率分布。精确概率还会直接从状态向量计算,不受 shots 随机性的影响。
Hadamard 门
Hadamard 门 h(q) 会将处于确定状态(|0⟩ 或 |1⟩)的量子位变为 |0⟩ 和 |1⟩ 的等权叠加态,因此测量结果大约各占 50%。
相位门:S 和 T
门 s(q) 和 t(q) 不会改变单个量子位的测量概率,只会旋转 |1⟩ 振幅的相位:S 旋转 90°,T 旋转 45°。它们只有与叠加态结合时才会显现作用:位于两个 Hadamard 门之间时,相位决定振幅如何叠加或抵消,也就是干涉。Dagger 变体 sdg(q) 和 tdg(q) 沿相反方向精确旋转,分别撤销 S 和 T。两个 T 等于一个 S,两个 S 等于一个 Z。
CNOT 与条件纠缠
CNOT 门 cnot(control, target) 只有在控制量子位处于状态 |1⟩时才会翻转目标量子位。若控制量子位事先处于叠加态,这一操作就可能产生纠缠,两个量子位将无法独立描述,如贝尔态示例所示。若控制量子位处于确定基态,CNOT 只进行条件比特翻转,不会产生纠缠。因此,并非每个 CNOT 都会自动产生纠缠。
CZ:CNOT 的对称近亲
CZ 门 cz(a, b) 只在两个量子位都为 |1⟩时反转振幅符号。与 CNOT 不同,它没有控制量子位和目标量子位之分,对两个量子位的作用相同,因此图中绘制为两个相连的点。CZ 和 CNOT 可以相互转换:在 CZ 的目标量子位前后各应用一个 Hadamard 门,就得到 CNOT。CZ 是 Grover 搜索等许多算法的核心组件。
GHZ 态:三个量子位的纠缠
GHZ 态以 Greenberger、Horne 和 Zeilinger 三人的名字命名,将贝尔态原理扩展到三个量子位:一个 Hadamard 门加两个 CNOT 将三者纠缠,使测量只会得到 |000⟩ 或 |111⟩ ,绝不会得到混合比特串。每个量子位都不再拥有独立状态,信息只存在于它们共同的关联中。
Deutsch 算法:最小的量子优势
Deutsch 算法只求值一次未知预言机,就能回答经典计算机需要求值两次的问题:函数是常数函数还是平衡函数?诀窍是让输入以叠加态通过预言机;随后,干涉会让答案明确出现在输入量子位中。其背后的相位回传原理是几乎所有量子算法的核心。
Grover 搜索:增强振幅
Grover 搜索能用远少于经典方法的查询次数,在无序集合中找到被标记的条目。预言机通过相位翻转标记目标状态(这里使用 CZ 门),扩散算子随后牺牲其他振幅来增强被标记的振幅。对于 2 个量子位,只需一次迭代就能以 100% 的概率测得目标。
可逆加法:从 quantum.add() 到电路
上方的程序代码编辑器会将 quantum.add({ a, b }) 转换为由 X、CNOT 和 CCNOT(Toffoli)门组成的电路,以完全可逆的方式模拟经典加法。每个门都可以精确撤销,因为没有信息被丢弃。CCNOT 门(ccnot(c1, c2, target))只有在两个控制量子位都为 |1⟩ 时才会翻转目标量子位。仅凭这一组件就能以可逆方式构建任何经典电路,包括带进位的全加器。输入 A 和 B 首先用 X 门初始化为确定的基态,不使用叠加态。由于整个电路只经过确定状态而非叠加态,最终测量会以 100% 的概率得到唯一结果,也就是经典计算正确的和。这正是 quantum.add() 在量子模拟中仍给出确定结果,而不会产生多个低于 100% 概率状态的原因。
减法:反向执行加法
由于量子电路中的每个门都可精确逆转,整个加法电路也可以反向执行,从而将加法变为减法: quantum.subtract({ a, b }) 以相反顺序使用加法器的同一组门,计算 a − b。这并非技巧展示,而是可逆计算的基本原则:没有任何步骤销毁信息,每一步都能撤销。此版本要求 a ≥ b,以避免负结果。
乘法:quantum.multiply()
这里的乘法使用与加法完全相同的可逆组件:按照竖式方法,根据因数 b 中置为 1 的比特,将因数 a 多次移位后相加。每次部分加法都使用同一个可逆行波进位加法器,进位会传入下一乘积位。由于结果寄存器会随乘积增长,因数限制为 3 比特(0–7);只有这样,因数、乘积和进位量子位才能共同放入本模拟器的 10 个量子位。
除法:quantum.divide()
除法同样只使用可逆组件: quantum.divide({ a, b }) 通过从余数寄存器中反复执行移位后的可逆减法来完成长除法,结果包含商 以及 余数(a = quotient · b + remainder)。被除数、除数、商 和 一个借位量子位必须共同放入 10 个量子位,因此除法是限制最严格的运算,必须满足 bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 ,并且除数 b 必须 ≥ 1,不能除以 0。若输入超出预算,编辑器会显示错误,而不是进行计算。
真随机:quantum.random()
经典计算机无法生成真正的随机数,它们的“随机数”来自确定性算法,也就是伪随机。量子计算机则可以: quantum.random({ bits }) 使用 Hadamard 门让每个比特进入 50/50 叠加态,只有测量时才会以从根本上不可预测的方式决定结果。在真正的量子硬件上,这是物理真随机;本模拟器则使用浏览器的伪随机来模拟这一过程。
模拟器与真正的量子硬件
本模拟器使用浏览器中的经典浮点运算精确计算状态,这只因为这里处理的电路很小,最多包含 10 个量子位。真正的量子计算机使用易受退相干和噪声影响的物理量子位;只有在电路大到经典计算实际无法模拟时,其优势才会显现。本工具用于学习,并非真正的量子处理器。