Saltar al contenido principal

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 ρ=UR0|\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: 0n|0\rangle^{\otimes n}. Para el estado predeterminado, URIU_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=X0000|001\rangle = X_0 |000\rangle.

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

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
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 URX2CNOT01H0000U_{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.