什么是 Cirq?
Cirq 是 Google 专为 NISQ(含噪中等规模量子)设备设计的量子计算框架。它提供对门级操作的精细控制,非常适合算法开发和硬件实验。Cirq 内置多个免费模拟器,并可通过合作伙伴关系在 Google 的量子硬件上运行。
Cirq is built for NISQ-era devices — compare it with the other SDK before you commit to one.
安装
terminal
pip install cirq # Core + simulator
pip install cirq-google # Google hardware access (optional)
pip install cirq-web # Web visualization (optional)基础电路与模拟
cirq_basic.py
import cirq
import numpy as np
# Create qubits
q0, q1 = cirq.LineQubit.range(2)
# Build a Bell state circuit
circuit = cirq.Circuit([
cirq.H(q0),
cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key='result')
])
print(circuit)
# 0: ───H───@───M('result')───
# │ │
# 1: ───────X───M─────────────
# Simulate with shots (sampling)
sim = cirq.Simulator()
result = sim.run(circuit, repetitions=1000)
print(result.histogram(key='result'))
# Counter({0: 504, 3: 496}) (0=|00⟩, 3=|11⟩)状态向量与密度矩阵模拟
cirq_statevector.py
import cirq
q0, q1 = cirq.LineQubit.range(2)
# Build without measurement for statevector
circuit = cirq.Circuit([cirq.H(q0), cirq.CNOT(q0, q1)])
# Exact statevector simulation (free, local)
sim = cirq.Simulator()
result = sim.simulate(circuit)
print(result.final_state_vector)
# [0.707+0j, 0+0j, 0+0j, 0.707+0j]
# Density matrix simulation (for noisy circuits)
noise_model = cirq.ConstantQubitNoiseModel(
cirq.depolarize(p=0.01)
)
noisy_sim = cirq.DensityMatrixSimulator(noise=noise_model)
noisy_result = noisy_sim.simulate(circuit)
print(noisy_result.final_density_matrix)Clifford 模拟器(对稳定子电路高效)
cirq_clifford.py
import cirq
# CliffordSimulator efficiently handles stabilizer circuits
# Simulates 1000s of qubits for Clifford gates
qubits = cirq.LineQubit.range(50) # 50 qubits!
circuit = cirq.Circuit(
[cirq.H(q) for q in qubits],
[cirq.CNOT(qubits[i], qubits[i+1]) for i in range(49)],
cirq.measure(*qubits, key='ghz')
)
sim = cirq.CliffordSimulator()
result = sim.run(circuit, repetitions=100)
print(result.histogram(key='ghz'))使用 Cirq 的变分算法
cirq_vqa.py
import cirq
import numpy as np
from scipy.optimize import minimize
q0, q1 = cirq.LineQubit.range(2)
def ansatz(theta: float) -> cirq.Circuit:
return cirq.Circuit([
cirq.ry(theta)(q0),
cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key='m')
])
def cost(params):
circuit = ansatz(params[0])
sim = cirq.Simulator()
result = sim.run(circuit, repetitions=200)
counts = result.histogram(key='m')
# Minimize energy (simplified objective)
return -counts.get(0, 0) / 200 # maximize |00⟩ prob
result = minimize(cost, x0=[0.5], method='COBYLA')
print(f"Optimal theta: {result.x[0]:.4f}")Keep exploring
💡
Also available via HLQuantum
Want to run the same circuit on multiple backends without rewriting your code? HLQuantum abstracts this SDK (and 5 others) behind a single unified API.
python
import hlquantum as hlq
qc = hlq.Circuit(2)
qc.h(0).cx(0, 1).measure_all()
# One line to switch between any backend
result = hlq.run(qc, shots=1024) # auto-detect
result = hlq.run(qc, shots=1024, backend="cirq") # explicit