Implementación a nivel de puerta de Eigenvalue-Inversion en HHL

Dec 28 2020

Estoy tratando de entender cómo funciona la implementación a nivel de puerta del paso de inversión de valor propio en el algoritmo HHL.

Estoy siguiendo esta referencia , donde se establece (Lema 4) que esto se puede lograr mediante el uso de rotaciones controladas:

$$ U_\theta: |\widetilde{\theta} \rangle |0 \rangle \rightarrow |\widetilde{\theta} \rangle \left(\cos \widetilde{\theta} |0\rangle + sin \widetilde{\theta} |1 \rangle \right ) $$

$$U_\theta = \sum_{\widetilde{\theta} \in \{0,1\}^n} |\widetilde{\theta}\rangle \langle \widetilde{\theta}| \otimes \exp \left(-i \widetilde{\theta} \sigma_y \right) $$

dónde $\widetilde{\theta}$ es la representación de precisión finita de n bits del ángulo $\theta$, y $\sigma_y$ la matriz de Y Pauli.

Mi pregunta es, ¿cómo son los ángulos de rotación $\widetilde{\theta}$ para el unitario $U_\theta$ calculado / aplicado sin conocimiento a priori de los valores propios $\lambda_j$ de la matriz del sistema $A$?

Entiendo que el estado-vector $|\widetilde{\theta} \rangle$ se obtiene en el paso anterior del algoritmo extrayendo los valores propios $|\lambda_j \rangle$ de $A$usando QPE (y luego aplicando una función inversa + arcsin como se describe aquí ), pero no estoy seguro de cómo se aplican estos ángulos también como parámetros para las puertas de rotación controlada (parámetro de exponente en$U_\theta$.)

Para su información, vi esta otra publicación donde se dice: "Usted ... ... tiene (al menos una buena aproximación a) sus valores propios registrados en un registro. Si controla ese registro, puede usarlo para decidir el ángulo de rotación de cada vector propio ".

Así que mi pregunta es cómo se "usa [el registro que contiene$|\widetilde{\theta} \rangle$] para decidir el ángulo de rotación [$\widetilde{\theta}$ en el $\exp$ funcion de $U_\theta$] "?

¡Gracias!

Respuestas

1 Alex Dec 28 2020 at 18:25

Usar el registro para decidir el ángulo de rotación significa lo siguiente: tiene un registro $|\tilde{\theta}\rangle$ (compuesto potencialmente por más de un qubit) y aplica rotaciones de otro registro controlado sobre el valor de los qubits de $|\tilde{\theta}\rangle$. Las diferentes rotaciones que aplicas dan como resultado que se implementen diferentes funciones en tus qubits ancilla. Pero eso posiblemente ya lo sabías.

La cuestión de qué rotaciones hacer para aplicar una función específica es mucho más complicada y no conozco ninguna solución general. Por una vez, Qiskit tiene su propia implementación de HHL, pero no sé hasta qué punto es general. Sin embargo, hay otros ejemplos en los que es "fácil" implementar, por ejemplo, la función de inversión de valores propios requerida para HHL. En este artículo , los autores implementan una aproximación de la subrutina de inversión de valores propios (el código en Quilse puede encontrar en el repositorio asociado de GitLab) que es exacto en el caso de valores propios que son potencias de 2. La razón por la que es exacto para potencias de 2 es porque en ese caso la inversión se puede escribir como una combinación de intercambios de bits, por lo que la subrutina de inversión de valores propios es una colección de puertas SWAP controladas (en la Fig. 3 de este artículo se muestra una representación gráfica del circuito ). Pero, como dije antes, hasta ahora no conozco formas generales de implementar grandes clases de funciones.