Digamos que tenemos un problema de optimización en la forma:
donde es una función objetivo, son restricciones de desigualdad y son restricciones de igualdad.
Recientemente estaba leyendo sobre la computación cuántica adiabática . La Wikipedia dice:
Primero, se encuentra un hamiltoniano (potencialmente complicado) cuyo estado fundamental describe la solución al problema de interés. A continuación, se prepara un sistema con un Hamiltoniano simple y se inicializa al estado fundamental. Finalmente, el hamiltoniano simple evoluciona adiabáticamente al hamiltoniano complicado deseado. Según el teorema adiabático, el sistema permanece en el estado fundamental, por lo que al final el estado del sistema describe la solución del problema. La computación cuántica adiabática ha demostrado ser polinomialmente equivalente a la computación cuántica convencional en el modelo de circuito.
¿Existe algún método general para expresar el problema de optimización (por ejemplo, como se presentó anteriormente) en el formalismo hamiltoniano utilizado en la computación cuántica adiabática ?
fuente
Respuestas:
Como se solicitó en los comentarios, aquí hay un ejemplo trabajado. El cuerpo principal se ocupa de minimizar para un problema específico. En la parte inferior sigue una breve discusión de las restricciones y luego una breve discusión sobre el caso general.f(x)
Vamos a resolver el problema de corte máximo ponderado ya que esto
Para comprender el problema, comenzamos con un gráfico no dirigido de vértices , donde cada vértice tiene un peso y cada borde que conecta y tiene un peso . Luego cortamos el gráfico en dos partes. No es necesario que el corte sea recto, pero no debe auto-intersectarse y no puede cortar ningún borde dos veces. Luego calculamos un " pago " para nuestro corte. El pago es la suma de los pesos de los bordes que cortamos, más la suma de los pesos de los vértices en un lado del corte.n {V} vi∈V wi≥0 vi vj wij≥0 P 1P 1
Fuente
En esta imagen, el pago sería, para los bordes más para los vértices (suponiendo que el número dentro de cada vértice sea su peso) . El problema de optimización es maximizar para un gráfico dado .1+4+3+3+2=13 5+6+1=12 →P=25 P 2
Para escribir esto matemáticamente, podemos pensar en términos de cadenas de bits. Definimos un corte por una cadena donde no se cuenta en la suma y se cuenta en la suma. Para hacer las matemáticas un poco más limpias, si el gráfico no está completamente conectado, haga que el gráfico esté completamente conectado y establezca para cualquier par no conectado .s∈{0,1}n si=0→vi si=1→vi wij=0 vi,vj
Por ejemplo, mirando de nuevo la imagen de arriba, interpretemos los números dentro de los vértices como el índice de vértice en lugar del peso como supusimos anteriormente. Entonces el corte dibujado corresponde a . están en el lado "bueno" del corte y se cuentan, mientras que están en el lado "malo" del corte y no se cuentan .s=100011 s1=s5=s6=1→v1,v5,v6 s2=s3=s4=0
Esto nos permite escribirP(s)=∑isiwi+∑i,jsi(1−sj)wij
El primer término solo cuenta los pesos de todos los vértices en el lado "bueno" del corte. El segundo término cuenta el peso de un borde si los vértices que conecta están en lados opuestos del corte. Tenga en cuenta que esto no cuenta dos veces, ya que solo cuenta el borde cuando y no cuando .si=1,sj=0 si=0,sj=1
Entonces, nuestro problema de optimización es encontrar la cadena que maximiza . La idea aquí es pensar en como una medida de energía de un sistema como el estado del sistema. Esto significa que podemos relacionar con nuestro hamiltoniano. Aquí hay una ligera sutilidad de que estamos tratando de maximizar pero generalmente hablamos de encontrar el estado fundamental de un hamiltoniano. Esto no es un problema, pero quería señalarlo: en su lugar, podemos ver el estado excitado con la energía más alta (estado anti-tierra si lo desea) o usar como nuestra función de energía y luego trabajar con el estado fundamental como normal El trabajo de Let con el más alto estado excitado y maximizar .s P(s) P(s) s P(s) P(s) −P(s) P
Nos gustaría crear un hamiltoniano de modo que su estado de energía más alto sea modo que sea máximo. Esencialmente queremos convertir , una función de energía, en , un operador de energía. Hacemos esto al notar que para tenemos|s0⟩ P(s0) P(s) H^ |s⟩∈{|0⟩,|1⟩} I−Z2|s⟩=s|s⟩→ define s^i=I−Zi2
Donde es el Pauli actuando en qubit . Ahora obtenemos nuestro Hamiltoniano reemplazando con (y 1 con ) enZi Z i s s^ I P
Esto se puede limpiar expandiendo y viendo∑i,j(Zi−Zj)=0→
Podemos limpiar esto aún más multiplicando por 2 y eliminando un cambio de energía constante (elimine los términos ). Nuevo hamiltoniano con los mismos estados propios con valores propios escalados y desplazados (claramente la energía máxima no se ve afectada por estas transformaciones)I
Si eres un físico de materia condensada, probablemente reconocerás a este hamiltoniano como un vidrio giratorio Ising. No es realmente relevante para el problema, pero creo que es genial.
Entonces ahora tenemos un hamiltoniano cuyo estado (anti-) fundamental codifica la cadena de bits que maximiza y resuelve el problema.s0 P(s)
Lo último que necesitamos es un Hamiltoniano inicial , que lentamente (adiabáticamente) transformamos en nuestro Hamiltoniano final para que podamos definir el Hamiltoniano completoH0 H HT(t)=(1−f(t))H0+f(t)H:f(0)=0,f(tf)=1
Como punto de partida, se usa a menudo por simplicidad. El mínimo determinado por la precisión deseada y la brecha espectral . La brecha espectral es la diferencia de energía mínima, sobre todo , entre el estado (anti-) fundamental y el siguiente estado de energía. El análisis de la brecha es altamente no trivial (consulte https://arxiv.org/abs/quant-ph/0509162 ) y determina la complejidad / eficiencia del algoritmo. No se garantiza que un algoritmo con 0 gap funcione en absoluto.f(t)∝t tf 3 t
Entonces queremos un tal queH0
Para este problema, un buen Hamiltoniano inicial es porque su estado de energía más alto es fácil de encontrar, es . Es fácil de preparar, simplemente aplique a . No tengo tiempo para entrar en el análisis de la brecha espectral, pero es poco probable que este hamiltoniano sea ideal en ese sentido (ver https://arxiv.org/abs/1701.05584 ).H0=∑iXi |+⟩⊗n H⊗n |0⟩⊗n
Con esta elección de y tomando hemos terminado. Nuestro hamiltoniano esH0 f(t)=t/tf
Comenzando en el estado , evolucionando según el Hamiltoniano anterior para el tiempo (elegir un adecuado es, nuevamente, generalmente altamente no trivial ) luego, medir en la base computacional debería devolver (con alta probabilidad) la cadena que maximiza .|ψ0⟩=H⊗n|0⟩⊗n tf tf s=s0 P(s)
Restricciones
Digamos que queremos modificar el problema anterior para requerir que exactamente vértices estén en el lado "bueno" de nuestro corte. Matemáticamente esto es . Para hacer cumplir esto, agregamos un término de penalización en nuestro Hamiltoniano para soluciones que rompan esta restricción. Entonces, agregamos un término como eligiendo suficientemente grande como para garantizar que un estado que viola esta restricción no puede ser el estado de mayor energía.5 ∑isi−5=0 Hc=−α(∑is^i−5I)2 α
Digamos que queremos exigir que no haya más de vértices en el lado "bueno" de nuestro corte. Esto, al parecer, es bastante difícil de hacer. En https://arxiv.org/abs/1702.06248 afirman que la aproximación de una restricción de desigualdad al orden requiere -spin acoplamientos que requerirían aún más sobrecarga para divídalos en acoplamientos de 2 qubits, que a menudo es necesario en una arquitectura dada. Esencialmente, la estrategia es aproximar una función de paso usando un5 k O(N2k) k kth orden polinomial. Esto parece una forma terrible de hacerlo, pero no puedo pensar en una mejor manera. Esto viene de Troyer en 2017, por lo que es relativamente poco probable, aunque ciertamente posible, que actualmente se conozca una mejor manera.
El caso general
La pregunta se refiere a un método general para codificar un problema de optimización en un hamiltoniano. Específicamente, queremos minimizar sujeto a un conjunto de restricciones. En la sección anterior discutí agregar las restricciones al hamiltoniano. Entonces, para una completamente general , ¿hay alguna forma de codificarla en un hamiltoniano? El método general para esto en la literatura es asumir que tenemos acceso a un oráculo cuántico eficiente que implementa . Podemos pensar que esto tiene una operación de caja negra (es decir, oráculo cuántico) tal que . Entonces podemos construir nuestro Hamiltoniano comof(x) f(x) f ( x ) f ( x ) f ( x ) | x ⟩ = f ( x ) | x ⟩ H = Σ x f ( x ) | x ⟩ ⟨ x | F ( x ) f ( x )f(x) f^(x) f^(x)|x⟩=f(x)|x⟩ H=∑xf^(x)|x⟩⟨x|
Por supuesto, esto simplemente empuja la parte difícil a encontrar / construir . De hecho, los argumentos de conteo simples muestran que casi todos (en el sentido matemático) los oráculos cuánticos son exponencialmente ineficientes para implementar (ver http://www.ar-tiste.com/imp-oracles/imps2.pdf ). Entonces, si bien esta es una codificación general de un problema de optimización en un Hamiltoniano, no es realmente práctico. Parecería ser el caso de que si desea codificar su problema de optimización en un Hamiltoniano de una manera útil , deberá aprovechar alguna estructura de . Tengo entendido que los detalles específicos de cómo hacer esto y cómo hacerlo de la mejor maneraf^(x) f(x) no se entiende completamente y es objeto de una investigación activa.
fuente