想象有一座只为 Google 量身定制的量子音乐厅——“氦歌剧院”。台上的乐手个个天赋异禀,却都很“娇气”:他们的完美状态只能保持几十微秒,稍纵即逝,一旦超过时限就会集体走音。更重要的是,这座音乐厅的声学结构独一无二,任何外来的指挥家都摸不清哪里回声重、哪里灯光暗。于是 Google 培养了一位专属舞台总监——Cirq。他不仅认得每一位乐手(量子比特)、看得懂总谱(量子电路)、熟悉每一条演奏指令(量子门),还掌握着把每个音符精确安排到纳秒级的独门绝技。这位总监会用排练厅(模拟器)反复彩排,最终指挥乐团在真实舞台上完成演出。本文就带你认识这位总监,看他如何排演量子算法,以及如何与另一位“巡回指挥”Qiskit 相处。
学会 Cirq,你就掌握了在真实量子芯片上“排演”量子算法的核心技能。量子机器学习、量子化学模拟这些前沿方向,都会用到这位总监的看家本领。
可视化演示
展示轮询、最少连接、加权轮询三种负载均衡策略的请求分发过程,实时显示各服务器负载状态。
本节配有交互动效(进入视口后自动加载,约 3KB)。
轮询策略 RR 请求按顺序依次分配到每台服务器 青色节点正常负载橙色高负载 next=(i+1) mod N 点击按钮切换负载均衡策略
Cirq初识
Google 的量子硬件团队发现,市面上的通用量子编程工具就像一位“只会看泛泛总谱”的巡回指挥,拿到 Sycamore 芯片这块独一无二的舞台时,总在细节处碰壁——这台设备的比特之间只有特定连线、某些门只能在特定时刻执行。于是团队在 2018 年搬出了一位专属舞台总监:Cirq。Cirq 是 Google Quantum AI 开源的 Python 量子计算框架,它的第一设计原则不是“什么硬件都能指挥”,而是“把我们自家的 NISQ 硬件指挥到极致”。
“含噪中等规模量子(NISQ)”听起来复杂,其实就是上一代演出条件:乐手们状态脆弱、舞台到处漏风。Cirq 的解决思路是时刻(Moment)优先——把同一时刻发生的所有操作归为一组,让总监对每一拍都了如指掌。安装很简单,一条 pip install cirq-core 命令就能把总监请进你的开发环境。而理解量子计算的一切,都绕不开量子态这个基础概念:
总监上任先做三件事:认人(认识每一位量子比特)、认谱(读懂电路总谱)、认时刻(把一个动作安置在最合适的那一拍)。这就是 Cirq 初识的全部奥义。
- 量子态符号 ψ希腊字母 psi 表示乐手此刻的“状态”。它既不是纯粹的 |0⟩,也不是纯粹的 |1⟩,而是两种基础状态的混合。
- 两种基础音色 |0⟩ 与 |1⟩|0⟩ 像“静音基调”,|1⟩ 像“高音亮点”,竖线加尖括号是量子力学的狄拉克记号,表示一个状态容器。
- 混合权重 α 与 β复振幅,相当于两种音色的混合比例。它们模的平方分别对应测到 |0⟩ 和 |1⟩ 的概率。
- 概率归一化条件|α|² 加 |β|² 等于 1,意思是一个乐手总的得演奏某种音色,所有可能性加起来的概率必须是 100%。
量子比特与电路
舞台总监手里有一份乐手名单。在 Cirq 里,这份名单由 cirq.Qubit 负责管理。普通 Qubit 只是一个抽象称呼,真正上 Google 芯片时要使用 GridQubit——它用行列坐标标注乐手站在二维网格的哪个位置,就像演唱会座位图上的排号和座号。临时实验还可以用 NamedQubit 随手起个名字,比如 "q0"、"ans"。
把乐手组织好之后,就要写总谱了。Cirq 的总谱容器叫 Circuit(电路),它像一本活页谱夹,往里一页页追加乐谱。这里的每一页,对应一个 Moment(时刻)。Moment 不是单个音符,而是“同一时刻所有乐手同时演奏的动作集合”。这个设计非常贴近真实硬件:芯片上多个门同时执行,谁和谁同拍,必须精确到纳秒。
最贴心的是,Cirq 能直接把总谱打印成 ASCII 线路图——每条水平线是一个量子比特,从左到右是时间流动方向,观众一眼就能看懂整场演出的流程。而多个乐手组成的乐队,其整体状态要用张量积来描述:
Circuit 是总谱本,Moment 是每一拍,Qubit 是乐手名单。舞台总监的所有灵感,都写在这本总谱里。
- 乐手编号 q₀ 到 qₙ₋₁n 位乐手(量子比特)各自的状态,它们共同构成整支乐队。
- 张量积符号 ⊗读作“张量积”,表示“编组”。两个比特的状态编组在一起时,不能简单相加,而是用这个符号拼接成更大的状态空间。
- 完整的乐队状态 |ψ⟩全体状态的容量随乐手数指数增长——30 个比特编组起来,状态数已经超过地球上所有原子之和。这就是为什么真实的量子模拟如此吃内存。
量子门操作
总谱上的音符,就是量子门。门是给乐手的具体演奏指令:有的是翻谱(翻转状态),有的是调音(改变相位),有的则是让一位乐手“看另一位乐手的脸色”行事。Cirq 用一套简洁的 API 表达这些动作,其中最基础的是单比特门 X 与 H,以及纠缠主力 CNOT。
X 门像“反转开关”:把 |0⟩ 变成 |1⟩,把 |1⟩ 变回 |0⟩。H 门是 Cirq 中最神奇的“混合器”:它把确定状态变成五五开的叠加态,仿佛让乐手同时准备好两种音色。CNOT 则是“看脸色”的门:只有控制比特为 |1⟩ 时,目标比特才翻转,这一特性是构建纠缠态的关键。它们对应的数学工具是矩阵:
门就是乐手最基础的动作库。Cirq 还允许给门装上“音量旋钮”——参数化门可以在运行前调节参数,这正是后面量子机器学习的伏笔。
- X 门的矩阵一个二维方阵,行和列分别对应输入输出状态。它把 |0⟩ 和 |1⟩ 的权重互换,所以叫“翻转门”。
- 矩阵作用于状态把门看作“指令表”,旧的音色向量乘上这个表,就得到新的音色向量。
- H 门的矩阵四个元素全是 1 或 -1,再乘上归一化系数 1/√2。它把确定音色变成“一半 |0⟩ 加一半 |1⟩”的叠加音色。
- 归一化系数 1/√2保证叠加后的概率之和仍为 1,相当于混音器上把两路音轨同时开到 70.7% 音量。
模拟器与运行
总谱写完,不能直接上正式舞台——排练厅里先试演。Cirq 的 Simulator 就是一座虚拟排练厅,它在经典电脑里完整模拟乐团的每一次演出。sim.run(circuit, repetitions=50) 表示让同一个节目连演 50 遍,每次记录评委亮出的分数,从而得到测量结果的分布。
测量这件事非常特殊:评委一亮分,乐手的叠加态瞬间“坍缩”成某一个确定结果。比如一位乐手明明准备了两种音色,评委一打分,实际听到的只能是其中一种。模拟器能准确模拟这个过程,它依据的正是概率规则:
排练厅还有个进阶模式:DensityMatrixSimulator 支持叠加噪声模型。这相当于在排练厅里加上风声、雨声、观众咳嗽声,模拟真实硬件的退相干。彩排再多次,真实舞台的意外还是比模拟多——所以模拟器好用,但绝不能全信。
- 目标结果 |m⟩评委可能亮出的某个确定结果,比如“第二位乐手奏出 |1⟩”。
- 内积 ⟨m|ψ⟩求“重叠度”——当前状态与目标结果在数学上重合了多少。这是量子力学中的投影操作。
- 模平方 |·|²把可能为负数的内积变成非负概率值,就像把振幅的“距离”转成“强度”。
- 概率 P(m)评委亮出 m 分的概率。所有可能 m 的概率之和为 1。
与Qiskit对比
量子编程圈有两位著名指挥:Google 的舞台总监 Cirq,和 IBM 的巡回指挥 Qiskit。Qiskit 诞生于 IBM 的量子云平台,目标是适配全球各地不同厂家的量子硬件;Cirq 则深耕 Google 自家芯片,把“纳秒级时刻编排”打磨到极致。这就好比一位指挥擅长和任何乐团合作,另一位则把某个音乐厅的每一块砖都刻进了脑子里。
时序控制的精细度是二者最大的分水岭。Cirq 的 Moment 抽象天然强调“哪些门同时执行”;Qiskit 的电路更偏向“操作序列”,虽然也有 Pulse 级控制,但使用门槛更高。硬件耦合程度方面,Cirq 的 GridQubit 直接对应芯片拓扑,这让它在编译到 Sycamore 时格外高效。生态上 Qiskit 背靠 IBM Quantum 平台,教学资源与第三方库更丰富;Cirq 则与 Google 的 TensorFlow Quantum 等工具链紧密相连。
为什么“时刻编排”如此重要?因为 NISQ 硬件的每个门都有出错率,门数越多,整场演出越容易走样:
选专属总监还是巡回指挥,取决于你的舞台在哪。做 Google 硬件实验选 Cirq,做跨平台教学与原型选 Qiskit,两者各有拥趸。
- 门出错率 εᵢ第 i 个门操作犯错的概率,类似乐手每次演奏可能出现的走音率。
- 门深度 d电路从开始到结束总共串了多少层门操作,层数越多,风险越大。
- 连乘符号 ∏把每一层的“成功率”乘起来。每乘一个小于 1 的数,总保真度就掉一截。
- 保真度 F演出对观众而言的还原度。F 随 d 呈指数式衰减,这就是为什么总监要把门数压到最少、把时刻排到最准。
量子机器学习
舞台总监不满足于照着总谱演奏,他想让乐团学会“即兴改编”——这正是量子机器学习。传统机器学习是让模型从数据中找规律,量子机器学习则把规律藏在量子态的干涉图样里。具体做法分三步:先把经典数据编码成量子态,再让参数化量子电路(PQC)对状态做变换,最后用经典优化器调整电路参数,反复迭代。
数据编码线路像是把乐谱转写成乐手习惯的符号——比如用门的旋转角度表示数据值。参数化变分电路则是一块“混音台”,上面许多旋钮(参数 θ)可以微调。VQE(变分量子本征求解器)用它找分子的基态能量,QAOA 用它求解组合优化问题,而量子神经网络(QNN)则把 PQC 当作可训练的网络层。损失函数衡量“当前改编”与“理想和声”的差距:
TensorFlow Quantum 把 Cirq 电路与 TensorFlow 经典优化器缝合在一起,形成“量子-经典混合”流水线。乐团的即兴能力不是天生的,而是一轮轮排练(参数更新)磨出来的。
- 参数化电路 U(θ)带旋钮的酉变换,初态 |0⋯0⟩ 经过它变成依赖于 θ 的状态。
- 状态 |ψ(θ)⟩改编后的结果状态,随旋钮转动而改变。
- 目标态 ψ_target我们希望达到的“理想和声”,比如分子最低能量对应的量子态。
- 内积模平方衡量当前状态与目标态的相似度。1 减去它得到损失 L(θ),损失越小,改编越接近理想效果。
实战量子算法
最后,让我们看一场完整的演出——Bernstein-Vazirani(BV)算法,一个“猜暗号”游戏。幕布后面藏着一个秘密比特串 s,观众可以提问任意串 x,黑盒只回答“x 与 s 的按位点积是奇数还是偶数”。经典玩法是逐位试探:问 100 次才能确定 100 位暗号。而 BV 算法只用一次查询,就能让整个暗号浮出水面。
Cirq 实现这个魔术的关键是构造 Oracle——一张把暗号“刻”进电路的变调卡。做法是:若秘密的第 i 位是 1,就在第 i 个量子比特与辅助比特之间加一个 CNOT 门。然后让所有比特先通过 H 门进入叠加态,经过 Oracle,再通过 H 门,最后测量——测量结果就是秘密本身。Oracle 编码的数学关系是:
在模拟器里运行 BV 电路并重复采样 50 次,几乎每次都能观测到同一个答案——暗号被一次合奏彻底解开。这便是量子查询复杂度的魅力,也是 Cirq 这位舞台总监最得意的一场演出。
- 秘密串 s暗号本体,由 0 和 1 组成,比如 1011。
- 查询串 x观众(算法)向黑盒提交的问题串。
- 点积 s·x把两个串按位相乘再加总,看每一对“1 和 1 碰到几次”。
- 模 2 运算 mod 2只取奇偶性——结果是 0 表示偶数,1 表示奇数。黑盒就回答这个 0 或 1。
AI 应用场景
量子化学模拟:VQE 求解分子基态能量
阶段:量子算法研发与实验验证
解决的问题:传统化学模拟在分子电子结构上计算量随体系指数爆炸,经典方法把大量算力耗在近似上。Cirq 的参数化电路能构造试凑波函数,配合经典优化器反复调节参数,逼近分子基态能量,把指数级难题变成可迭代的优化问题。
具体案例:量子化学团队用 cirq.Simulator 搭建一个 4 量子比特的 VQE 电路表示氢气分子,将键长数据编码进参数门,循环上百轮后获得与理论值吻合的基态能量曲线。整个过程先在模拟器上跑通,再提交到 Google 量子硬件验证。
混合量子机器学习:量子神经网络做分类
阶段:模型训练与实验对比
解决的问题:经典神经网络在特征空间纠缠表达上代价高昂。用 Cirq 构造参数化量子电路作数据编码层和变分层,数据先映射到高维量子态,再用经典优化器更新门的参数,形成“量子特征提取 + 经典分类头”的混合模型。
具体案例:机器学习工程师用 TensorFlow Quantum 与 Cirq 搭建量子分类器,对手写数字的降维特征做二分类。实验分别记录量子模型与经典逻辑回归的准确率随训练轮次的变化,验证叠加态特征映射在小样本任务上的表现。
Python 演示
import collectionsimport cirq def build_bv_circuit(secret): n = len(secret) qubits = [cirq.NamedQubit('q{}'.format(i)) for i in range(n)] answer = cirq.NamedQubit('ans') circuit = cirq.Circuit() circuit.append(cirq.X(answer)) circuit.append(cirq.H(answer)) for q in qubits: circuit.append(cirq.H(q)) for q, s in zip(qubits, secret): if s == 1: circuit.append(cirq.CNOT(q, answer)) for q in qubits: circuit.append(cirq.H(q)) circuit.append(cirq.measure(*qubits, key='m')) return circuit def main(): secret = [1, 0, 1, 1] circuit = build_bv_circuit(secret) print('circuit:') print(circuit) sim = cirq.Simulator() result = sim.run(circuit, repetitions=50) counts = collections.Counter(tuple(row) for row in result.measurements['m']) best, cnt = counts.most_common(1)[0] guess = ''.join(str(b) for b in best) secret_str = ''.join(map(str, secret)) print('secret:', secret_str) print('guess:', guess, ' counts:', cnt, '/50') print('match:', guess == secret_str) if __name__ == '__main__': main()
qubits = [cirq.NamedQubit('q{}'.format(i)) for i in range(n)]给 n 位乐手起名字,创建量子比特列表。circuit.append(cirq.X(answer))先把辅助比特翻转到 |1⟩,为后面的 H 门叠加做准备。for q in qubits: circuit.append(cirq.H(q))让所有乐手进入叠加态,这是 BV 算法的第一步魔法。if s == 1: circuit.append(cirq.CNOT(q, answer))把秘密串写进电路:暗号位是 1 时插入受控翻转门。circuit.append(cirq.measure(*qubits, key='m'))在总谱结尾给所有比特装上评委,记录测量结果。result = sim.run(circuit, repetitions=50)在虚拟排练厅连演 50 遍,收集全部评分。counts.most_common(1)[0]取出现次数最多的答案,它就是要猜的暗号。
常见误区
误区都是 Python 量子框架,能画电路、能模拟、能上量子硬件,换个厂商换个包名而已,写出来的代码大同小异。
正解两个框架的设计哲学差异明显。Cirq 以 Moment(同一时刻的操作组)为核心抽象,强调纳秒级时序编排,紧贴 Google 芯片的二维格点拓扑;Qiskit 更偏向跨硬件云平台,操作序列清晰、教学生态丰富,虽然也支持脉冲级控制但门槛更高。好比专属舞台总监和全球巡演指挥,擅长的事完全不同。
为何常见:初学者通常从“搭建电路 → 模拟 → 测量”的相似流程入手,框架表面的 API 相似性掩盖了背后的时序控制理念差异。
误区模拟器返回理想结果,说明电路逻辑没问题,那上真实量子芯片也应该得到一样的答案。
正解模拟器是无声无噪的“理想排练厅”,真实硬件则有退相干、门误差、连通性限制。门数一多,保真度按 (1−ε)ᵈ 指数衰减;芯片上不相邻的比特执行双门操作还需要额外的 SWAP 搬运。因此必须用含噪模拟、错误缓解和硬件校准来弥合差距。
为何常见:教程大多从模拟器演示出发,让初学者误以为模拟器就是硬件的完美替身,忽略了 NISQ 时代“噪声才是主角”的现实。
误区经典计算里步骤越多通常结果越细,量子电路也应该门数越多、表达力越强、答案越准。
正解真实硬件上每增加一个门就多一分噪声风险,保真度随门深度指数下降。Cirq 的 Moment 编排理念恰恰是“少而准”:把不必要的门合并、把同刻操作对齐,用尽量浅的电路完成计算。较深的电路只适合在理想模拟器中评估理论效果。
为何常见:叠加态“同时处理所有可能”的直觉让人误以为反正处理能力强,多走几步也没关系,忽略了叠加态同时也会被噪声破坏。
误区测量就是读个最终答案,像查看成绩单一样,量子态应该继续保持不变。
正解测量会瞬间坍缩量子态,把叠加态压缩到某一个确定态,所有相干叠加信息当场消失。P(m)=|⟨m|ψ⟩|² 说明“看一眼”本身就是一个破坏性操作。所以 Cirq 中测量门通常放在电路最后,并且测量后若继续追加操作,只能作用于坍缩后的经典化状态。
为何常见:经典程序里读取变量不会改变变量值,这套直觉被直接移植到了量子世界,忽略了量子测量特有的坍缩特性。
面试题
Q1. Cirq 是由哪家公司开源的量子计算框架?
- A.谷歌量子团队← 正确答案
- B.IBM 量子团队
- C.微软量子团队
- D.亚马逊量子团队
答案:A。Cirq 由 Google Quantum AI 团队于 2018 年开源,所有抽象都紧贴 Google 自家 NISQ 硬件的物理特性。IBM 的对应框架是 Qiskit,微软是 Q#,亚马逊则主要通过 AWS Braket 提供多框架接入。
Q2. 在 Cirq 中,把量子比特放到二维网格坐标上、最贴近 Google 芯片物理布局的类是什么?
- A.基类 cirq.Qubit
- B.格点类 cirq.GridQubit← 正确答案
- C.直线类 cirq.LineQubit
- D.模拟器类 cirq.Simulator
答案:B。GridQubit 用行列坐标对应芯片上的物理量子比特,适合 Sycamore 这类二维格点结构;LineQubit 只管一维编号,Qubit 是抽象基类,Simulator 是模拟器而非比特类。
Q3. 关于 Cirq 的设计目标和特点,以下正确的是?
- A.重点适配 NISQ 噪声硬件← 正确答案
- B.主要面向容错量子计算机
- C.支持纳秒级的门时序安排← 正确答案
- D.只能做经典电路仿真
答案:AC。Cirq 生来为 NISQ 设备服务,用 Moment 抽象狠抓门操作的精确时刻,这是它区别于通用框架的最大特色。容错量子计算机尚未到来,Cirq 并不专注于此,它也绝不是经典电路仿真器。
Q4. 在 Cirq 中,Moment 表示什么?
- A.一条量子比特线路
- B.同一时刻的并行操作组← 正确答案
- C.一个单比特逻辑门
- D.一次测量的结果集合
答案:B。Moment 是“同一时刻”的音乐小节,把同时发生的门操作归为一组。它确保你清楚知道哪些门在哪个时刻同时演奏,这正是 Cirq 时刻编排思想的精华所在。
Q5. 对 |0⟩ 施加 H 门后,量子比特会变成什么?
- A.保持为 |0⟩ 不变
- B.变成五五开叠加态← 正确答案
- C.一定翻转为 |1⟩
- D.变成二比八叠加态
答案:B。H 门把确定态变成 50% 概率的叠加态,数学形式为 (|0⟩+|1⟩)/√2。它像让乐手同时准备好两种音色,测量时才随机亮出其中一种。
Q6. CNOT 门的作用是?
- A.无条件翻转两个量子比特
- B.控制位为 1 时翻转目标位← 正确答案
- C.交换两比特的状态
- D.将两个比特合并呈现
答案:B。CNOT 是“看脸色行事”的门:只有控制比特处于 |1⟩ 时目标比特才翻转,控制比特为 |0⟩ 则目标不动。它是制造量子纠缠的重要纽带。
Q7. 在 Bernstein-Vazirani 问题中,经典黑盒最坏需要多少次查询才能确定 n 位秘密?
- A.恰好 1 次
- B.恰好 n 次← 正确答案
- C.恰好 2ⁿ 次
- D.永远无法确定
答案:B。经典只能逐位试探,最坏需要 n 次查询;而量子 BV 算法只用 1 次 oracle 调用就能读出整个秘密串。这正是量子查询复杂度优势的典型示范。
Q8. 若每层门的错误率 ε=0.001,总门深度 d=1000,则电路保真度 F 约为多少?
- A.约 99.0%
- B.约 36.8%← 正确答案
- C.约 50.5%
- D.约 99.9%
答案:B。根据 F=(1−ε)ᵈ,代入得 0.999¹⁰⁰⁰ ≈ e⁻¹ ≈ 36.8%。这说明噪声随门数指数累积,所以 Cirq 才要像舞台总监一样把电路排得又浅又准。
Q9. 关于 Cirq 的模拟器,以下说法正确的是?
- A.模拟理想态演化过程← 正确答案
- B.支持密度矩阵含噪模拟← 正确答案
- C.能完全替代真实硬件
- D.可设置重复采样次数← 正确答案
答案:ABD。模拟器是“虚拟排练厅”,既能跑理想无噪声线路,也能叠加噪声模型做密度矩阵模拟,还能用 repetitions 参数批量采样;但它终究是经典计算机的模拟,无法完全复现真实硬件的物理表现。
Q10. 用参数化量子电路做机器学习时,哪些属于常见组件或流程?
- A.数据编码线路编码经典输入← 正确答案
- B.可训练参数门充当网络层← 正确答案
- C.经典优化器反复更新参数← 正确答案
- D.量子电路完全替代经典网络
答案:ABC。量子机器学习是“量子电路 + 经典优化”的混血:数据编码、变分层和经典更新三步缺一不可。量子层擅长做特征映射,但远不能完全替代经典神经网络。