Skip to content
首页/SDK/Google Cirq
🔵

Google Cirq

Google 面向 NISQ 算法的开源框架。内置强大的本地模拟器、紧密的硬件集成,以及为近期设备打造的出色工具链。

开源专注 NISQ本地模拟器Python

什么是 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