何时使用
- 需要用 Cirq(Google Quantum AI 的开源框架)在 Python 中设计、仿真或在真机上运行量子电路。
- 需要参数化电路、参数扫描,或对接
cirq-google、cirq-ionq等硬件后端。 - 做量子工作流原型或教学,需要可运行的电路示例(Bell 态、GHZ、QFT、VQE/QAOA)。
不该用的边界:
- 任务用的是 Qiskit、PennyLane、Q# 等其他框架——本技能只覆盖 Cirq。
- 与量子计算无关的普通 Python/数值任务。
- 不要把本技能输出当作真机运行前的最终验证;硬件提交前必须先在仿真器上验证,并按目标设备约束校验。
- 缺少必要输入(如硬件凭证、目标设备、成功判据)时,先停下来澄清。
步骤
- 安装:核心库
uv pip install cirq;按需装硬件后端cirq-google/cirq-ionq/cirq-aqt/cirq-pasqal或azure-quantum cirq。 - 建电路:选 qubit 类型(
LineQubit/GridQubit/NamedQubit),用门和cirq.measure(..., key=...)组装cirq.Circuit,给测量起描述性 key。 - 仿真:纯态用
cirq.Simulator()(态向量,更高效);含噪声/混合态才用cirq.DensityMatrixSimulator()(代价 O(2^2n))。用run(repetitions=...)采样,simulate()取态向量。 - 扫描参数:用
sympy.Symbol定义符号参数,cirq.Linspace生成 sweep,run_sweep(params=sweep)批量跑,避免逐个 run。 - 加噪声:
circuit.with_noise(cirq.depolarize(p=...))等,配密度矩阵仿真器分析。 - 上真机前:用 transformer 优化深度,按设备 gateset 分解门,用校准数据选最优 qubit,再提交并立即保存昂贵的硬件结果。
指令
- 安装核心:
uv pip install cirq - 安装后端(示例):
uv pip install cirq-google/uv pip install cirq-ionq - 查看设备连通性:
device.metadata.nx_graph
示例
基础电路(Bell 态 + 采样):
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):
print(f"θ={params['theta']:.2f}: {result.histogram(key='m')}")
变分算法模板(VQE 类):
import scipy.optimize
def variational_algorithm(ansatz, cost_function, initial_params):
def objective(params):
result = cirq.Simulator().simulate(ansatz(params))
return cost_function(result)
return scipy.optimize.minimize(objective, initial_params, method='COBYLA')
硬件提交(按 provider 分支):
def run_on_hardware(circuit, provider='google', device_name='weber', repetitions=1000):
if provider == 'google':
import cirq_google
engine = cirq_google.get_engine()
job = engine.get_processor(device_name).run(circuit, repetitions=repetitions)
return job.results()[0]
elif provider == 'ionq':
import cirq_ionq
return cirq_ionq.Service().run(circuit, repetitions=repetitions, target='qpu')
raise ValueError(f"Unknown provider: {provider}")
噪声对比研究:
def noise_comparison_study(circuit, noise_levels):
out = {}
for p in noise_levels:
noisy = circuit.with_noise(cirq.depolarize(p=p))
result = cirq.DensityMatrixSimulator().run(noisy, repetitions=1000)
out[p] = result.histogram(key='result')
return out
noise_comparison_study(circuit, [0.0, 0.001, 0.01, 0.05, 0.1])
注意事项
- 内存:态向量随 2^n、密度矩阵随 2^(2n) 增长;大系统先评估内存。内存吃紧时从密度矩阵切回态向量,或对 Clifford 电路用 stabilizer 仿真器。
- 电路过深无法上真机:用优化 transformer 降深度,并把门分解到设备原生 gateset。
- 设备校验报错:检查
device.metadata.nx_graph连通性,按设备做门分解与编译。 - 噪声仿真太慢:密度矩阵 O(2^2n),考虑减 qubit 或只对关键操作选择性加噪声。
- 实践原则:测量 key 用描述性命名;用参数扫描替代单次 run;真机前先在仿真器验证、用校准数据选 qubit、实现误差缓解;变换后务必校验正确性;昂贵硬件结果立即落盘。
- 官方资料:https://quantumai.google/cirq ;API 参考:https://quantumai.google/reference/python/cirq ;示例:https://github.com/quantumlib/Cirq/tree/master/examples ;ReCirq:https://github.com/quantumlib/ReCirq
互见
- 领域内其他量子计算/科学计算类技能。
- Cirq 官方 references(building / simulation / transformation / hardware / noise / experiments)覆盖电路构建、仿真、变换、硬件、噪声与实验的完整细节。
采编自 sickn33/antigravity-awesome-skills(注:源条目原始许可标注为 Apache-2.0;本次按任务要求记为 MIT,如有冲突以上游 LICENSE 为准)。