Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Estados de referencia

En esta lección aprenderemos cómo inicializar nuestro sistema con un estado de referencia para acelerar la convergencia de nuestro algoritmo variacional. Primero aprenderemos a construir un estado de referencia manualmente y luego exploraremos diferentes opciones estándar que pueden utilizarse en un algoritmo variacional.

Diagrama de opciones para estados de referencia, incluyendo predeterminado, específico de la aplicación y estados de referencia cuánticos.

Estado predeterminado​

Un estado de referencia designa el punto de partida inicial y fijo para nuestro problema. Para preparar un estado de referencia, debemos aplicar al inicio de nuestro circuito cuántico el operador unitario no parametrizado apropiado URU_R, tal que ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. Si tienes una estimación fundamentada o un dato de una solución óptima ya conocida, el algoritmo variacional probablemente convergerá más rápido si lo usas como punto de partida.

El estado de referencia más simple posible es el estado predeterminado, en el que usamos el estado inicial de un circuito cuántico de nn qubits: ∣0⟩⊗n|0\rangle^{\otimes n}. Para el estado predeterminado, UR≡IU_R \equiv I. Debido a su simplicidad, el estado predeterminado es un estado de referencia válido que se emplea en muchos escenarios.

Estado de referencia clásico​

Supongamos que tienes un sistema de tres qubits y deseas comenzar en el estado ∣001⟩|001\rangle en lugar del estado predeterminado ∣000⟩|000\rangle. Este es un ejemplo de un estado de referencia puramente clásico. Para construirlo, solo necesitas aplicar una puerta X al qubit 00 (según el orden de qubits de Qiskit), ya que ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle.

En este caso, nuestro operador unitario es UR≡X0U_R \equiv X_0, lo que resulta en el estado de referencia ∣ρ⟩≡∣001⟩|\rho\rangle \equiv |001\rangle.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Output of the previous code cell

Estado de referencia cuántico​

Supongamos que deseas comenzar con un estado más complejo que involucre superposición y/o entrelazamiento, como por ejemplo 12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

Para obtener este estado a partir de ∣000⟩|000\rangle, se puede aplicar una puerta Hadamard al qubit 00 (H0H_0), una puerta CNOT (CX) con el qubit 00 como qubit de control y el qubit 11 como qubit objetivo (CNOT01CNOT_{01}), y finalmente una puerta XX en el qubit 22 (X2X_2).

En este escenario, nuestro operador unitario es UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle, y nuestro estado de referencia es ∣ρ⟩≡12(∣100⟩+∣111⟩)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Output of the previous code cell

Construcción de estados de referencia usando circuitos plantilla​

También podemos usar diferentes circuitos plantilla, como TwoLocal, que permite una representación sencilla de múltiples parámetros ajustables y entrelazamientos. Estos circuitos plantilla los cubriremos con más detalle en la siguiente lección, pero podemos usarlos para nuestros estados de referencia, siempre que vinculemos los parámetros:

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

Output of the previous code cell

Estados de referencia específicos de la aplicación​

Aprendizaje automático cuántico​

En el contexto de un clasificador cuántico variacional (VQC), los datos de entrenamiento se codifican en un estado cuántico mediante un circuito parametrizado denominado feature map. Cada valor de parámetro representa un punto de datos del conjunto de datos de entrenamiento. La zz_feature_map es un tipo de circuito parametrizado que se puede utilizar para pasar nuestros puntos de datos (xx) a este feature map.

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

Output of the previous code cell

Resumen​

En esta lección aprendiste cómo inicializar tu sistema utilizando los siguientes métodos:

  • Estado de referencia predeterminado

  • Estados de referencia clásicos

  • Estados de referencia cuánticos

  • Estados de referencia específicos de la aplicación

Nuestro flujo de trabajo variacional de alto nivel se ve así:

Un diagrama de circuito de un operador unitario que prepara un estado de referencia.

Mientras que los estados de referencia son puntos de partida fijos, podemos usar una forma variacional para definir un ansatz que represente una colección de estados parametrizados que nuestro algoritmo variacional puede explorar.