Skip to content
Inicio/SDK/Google Cirq
🔵

Google Cirq

El framework de código abierto de Google para algoritmos NISQ. Incluye potentes simuladores locales, una estrecha integración con el hardware y excelentes herramientas para dispositivos a corto plazo.

Código abiertoEnfoque NISQSimulador localPython

¿Qué es Cirq?

Cirq es el framework de computación cuántica de Google diseñado para dispositivos NISQ (cuánticos ruidosos de escala intermedia). Ofrece un control detallado sobre las operaciones a nivel de puerta, lo que lo hace ideal para el desarrollo de algoritmos y los experimentos con hardware. Cirq incluye varios simuladores gratuitos y puede ejecutarse en el hardware cuántico de Google mediante colaboraciones.

Cirq is built for NISQ-era devices — compare it with the other SDK before you commit to one.

Instalación

terminal
pip install cirq           # Core + simulator
pip install cirq-google    # Google hardware access (optional)
pip install cirq-web       # Web visualization (optional)

Circuito básico y simulación

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⟩)

Simulación de vector de estado y matriz de densidad

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)

Simulador de Clifford (eficiente para circuitos estabilizadores)

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'))

Algoritmos variacionales con 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