Cirq 是 Google Quantum AI 的开源量子计算框架,目标是在量子计算机与模拟器上设计、模拟和运行量子电路,使用 Python 作为主要接口。
用途 适用于使用 Cirq 生态设计、模拟或执行量子电路的场景;需要 Google Quantum AI 风格的基元、参数化电路,或 cirq-google、cirq-ionq 等集成时;以及在 Python 中进行量子工作流原型设计或教学并需要具体电路示例时。
安装 基础安装:uv pip install cirq 硬件集成:
- Google Quantum Engine:uv pip install cirq-google
- IonQ:uv pip install cirq-ionq
- AQT(Alpine Quantum Technologies):uv pip install cirq-aqt
- Pasqal:uv pip install cirq-pasqal
- Azure Quantum:uv pip install azure-quantum cirq
主要能力
- 电路构建:支持 GridQubit、LineQubit、NamedQubit 等量子比特类型;单比特与双比特门;参数化门与操作;自定义门分解;以 moment 组织电路;标准电路模式(Bell 态、GHZ、QFT);OpenQASM 与 JSON 导入导出;qudit 与观测量。
- 模拟:精确模拟(态向量、密度矩阵);采样与测量;单参数与多参数扫描;含噪模拟;态直方图与可视化;Quantum Virtual Machine(QVM);期望值与观测量;性能优化。
- 电路变换:Transformer 框架;门分解;电路优化(合并门、弹出 Z 门、丢弃可忽略操作);面向硬件的电路编译;量子比特路由与 SWAP 插入;自定义 transformer;变换流水线。
- 硬件集成:Google Quantum AI(cirq-google,Sycamore、Weber 处理器);IonQ(cirq-ionq,离子阱量子计算机);Azure Quantum(azure-quantum,IonQ 与 Honeywell 后端);AQT(cirq-aqt);Pasqal(cirq-pasqal,中性原子量子计算机)。涉及设备表示、量子比特选择、认证、任务管理与面向硬件的电路优化。
- 噪声建模:噪声通道(去极化、振幅阻尼、相位阻尼);噪声模型(常量、门相关、量子比特相关、热噪声);向电路添加噪声;读出噪声;噪声表征(随机基准测试、XEB);噪声可视化(热力图);错误缓解技术。
- 量子实验:实验设计模式;参数扫描与数据采集;ReCirq 框架结构;常见算法(VQE、QAOA、QPE);数据分析与可视化;统计分析与保真度估计;并行数据采集。
使用方式(示例) 基本电路: import cirq import numpy as np q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.H(q0), cirq.CNOT(q0, q1), cirq.measure(q0, q1, key='result') ) print(circuit) simulator = cirq.Simulator() result = simulator.run(circuit, repetitions=1000) print(result.histogram(key='result'))
参数化电路: import sympy theta = sympy.Symbol('theta') circuit = cirq.Circuit( cirq.ry(theta)(q0), cirq.measure(q0, key='m') ) sweep = cirq.Linspace('theta', start=0, stop=2*np.pi, length=20) results = simulator.run_sweep(circuit, params=sweep, repetitions=1000) for params, result in zip(sweep, results): theta_val = params['theta'] counts = result.histogram(key='m') print(f"θ={theta_val:.2f}: {counts}")
硬件执行模板: def run_on_hardware(circuit, provider='google', device_name='weber', repetitions=1000): if provider == 'google': import cirq_google engine = cirq_google.get_engine() processor = engine.get_processor(device_name) job = processor.run(circuit, repetitions=repetitions) return job.results()[0] elif provider == 'ionq': import cirq_ionq service = cirq_ionq.Service() result = service.run(circuit, repetitions=repetitions, target='qpu') return result elif provider == 'azure': from azure.quantum.cirq import AzureQuantumService service = AzureQuantumService(workspace) result = service.run(circuit, repetitions=repetitions, target='ionq.qpu') return result else: raise ValueError(f"Unknown provider: {provider}")
变分算法模板: import scipy.optimize
def variational_algorithm(ansatz, cost_function, initial_params): def objective(params): circuit = ansatz(params) simulator = cirq.Simulator() result = simulator.simulate(circuit) return cost_function(result) result = scipy.optimize.minimize(objective, initial_params, method='COBYLA') return result
def my_ansatz(params): q = cirq.LineQubit(0) return cirq.Circuit(cirq.ry(params[0])(q), cirq.rz(params[1])(q))
def my_cost(result): state = result.final_state_vector return np.real(state[0])
result = variational_algorithm(my_ansatz, my_cost, [0.0, 0.0])
噪声研究模板: def noise_comparison_study(circuit, noise_levels): results = {} for noise_level in noise_levels: noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level)) simulator = cirq.DensityMatrixSimulator() result = simulator.run(noisy_circuit, repetitions=1000) results[noise_level] = { 'histogram': result.histogram(key='result'), 'dominant_state': max(result.histogram(key='result').items(), key=lambda x: x[1]) } return results
noise_levels = [0.0, 0.001, 0.01, 0.05, 0.1] results = noise_comparison_study(circuit, noise_levels)
适用场景 量子电路设计与模拟、量子算法原型与教学示例、参数化电路与参数扫描、含噪模拟与错误缓解研究、面向硬件的电路编译与优化、对接 Google、IonQ、AQT、Pasqal、Azure Quantum 等后端运行量子任务,以及使用 ReCirq 开展量子实验与数据分析。
最佳实践(摘要) 电路设计:按拓扑选择合适的量子比特类型;保持电路模块化可复用;为测量设置描述性 key;执行前按设备约束校验电路。 模拟:纯态优先使用态向量模拟;仅在需要(混合态、噪声)时使用密度矩阵模拟;多用参数扫描;关注大系统内存增长(2^n)。 硬件执行:先在模拟器上测试;依据校准数据选择最佳量子比特;针对目标硬件门集优化电路;生产运行实施错误缓解;及时保存昂贵硬件结果。 电路优化:从内置高层 transformer 起步;串联多种优化;跟踪深度与门数下降;变换后验证正确性。 噪声建模:使用由校准数据得到的真实噪声模型;涵盖门、退相干、读出等误差源;先表征再缓解;保持电路浅以减小噪声累积。 实验:结构化分离数据生成、采集与分析;使用 ReCirq 模式保证可复现;频繁保存中间结果;并行化独立任务;用元数据完整记录。
限制 仅在任务与上述范围明确匹配时使用;输出不能替代针对具体环境的验证、测试或专家评审;若缺少必要输入、权限、安全边界或成功标准,应停止并请求澄清。
附加资源 官方文档:https://quantumai.google/cirq API 参考:https://quantumai.google/reference/python/cirq 教程:https://quantumai.google/cirq/tutorials 示例:https://github.com/quantumlib/Cirq/tree/master/examples ReCirq:https://github.com/quantumlib/ReCirq
常见问题
- 电路对硬件过深:使用电路优化 transformer 降低深度,参见 transformation.md。
- 模拟内存问题:由密度矩阵切换为态向量模拟器;减少量子比特数,或对 Clifford 电路使用 stabilizer 模拟器。
- 设备校验错误:用 device.metadata.nx_graph 检查量子比特连接性;将门分解为设备原生门集,参见 hardware.md。
- 含噪模拟过慢:密度矩阵模拟复杂度为 O(2^2n),考虑减少量子比特;仅在关键操作上选择性使用噪声模型,参见 simulation.md。
关于上游支持:随附支持文件以 skill 相对路径提供,其固定来源、许可证、哈希与导入变更见 UPSTREAM-NOTICE.md。