Como parte de un algoritmo variacional, me gustaría construir un circuito cuántico (idealmente con pyQuil ) que simule un Hamiltoniano de la forma:
Cuando se trata del último término, el problema es que pyQuil arroja el siguiente error:
TypeError: PauliTerm coefficient must be real
Empecé a sumergirme en la literatura y parece un problema no trivial. Me encontré con este artículo sobre Hamiltonianos cuánticos universales donde se discuten las codificaciones de complejo a real, así como las codificaciones locales. Sin embargo, todavía no está claro para mí cómo uno prácticamente implementaría algo como esto. ¿Alguien puede darme algunos consejos prácticos sobre cómo resolver este problema?
programming
simulation
hamiltonian-simulation
pyquil
Mark Fingerhuth
fuente
fuente
Respuestas:
Un hamiltoniano convencional es hermitiano. Por lo tanto, si contiene un término no hermitiano, también debe contener su conjugado hermitiano como otro término o tener un peso 0. En este caso particular, dado que es Hermitiano, el coeficiente tendría que ser 0. Entonces, si está hablando de Hamiltonianos convencionales, probablemente haya cometido un error en su cálculo. Tenga en cuenta que si el conjugado hermitiano del término no está presente, no puede simplemente arreglar las cosas agregándolo; Te dará un resultado completamente diferente.Z⊗X⊗Y
Por otro lado, es posible que desee implementar un Hamiltoniano no hermitiano . Estas cosas existen, a menudo para la descripción de los procesos de ruido, pero no están tan extendidas. Debe incluir explícitamente la terminología "no hermitiana", de lo contrario, todos pensarán que lo que está haciendo está mal porque no es hermitiano, y un hamiltoniano debería ser hermitiano. No estoy demasiado familiarizado con las capacidades que brindan los diversos simuladores, pero me sorprendería si no tienen incorporado Hermiticity.
Sin embargo, puede simularlo, a costa de una implementación no determinista. Habrá métodos más sofisticados que este (ver los enlaces en esta respuesta ), pero permítanme describir uno particularmente simple: voy a suponer que solo hay un componente no hermitiano, que es (un producto tensorial de Paul es). Voy a llamar a este producto tensorial de Paulis . El resto del hamiltoniano es . Desea crear la evolución Comenzamos por Trotterizar la evolución, donde . Ahora trabajamos simulando un término individuali× K H
Introducimos un qubit ancilla en el estado , y lo usamos como el qubit de control en una puerta controlada . Luego medimos la ancilla en la base (donde ). Si el resultado es , entonces en los qubits de destino hemos implementado la operación , hasta la normalización. Entonces, si arreglas , has implementado perfectamente esa operación. Si la medición falla, depende de usted si desea intentar recuperarse (esto puede no ser posible) o comenzar de nuevo.|ψ⟩=α|0⟩+β|1⟩ K {|ψ⟩,|ψ⊥⟩} ⟨ψ|ψ⊥⟩=0 |ψ⟩ |α|2I+|β|2K (1−|α|2)/|α|2=tanh(δt)
fuente
Este código simple de MATLAB / Octave muestra que no es hermitiano:i0.12Z1Y2X3
La salida es H:
Como es una matriz real, Hermitian significa simétrico, pero esto no es simétrico y, por lo tanto, no es Hermitian. El triángulo superior derecho no es igual al triángulo inferior derecho.
Sin embargo, el triángulo superior derecho es el negativo del triángulo inferior derecho, por lo que es anti-ermitaño.
Entonces, al hacer la sugerencia de AHussain de agregar la transposición conjugada, resulta en 0. Simplemente ejecute este comando:
y obtendrás una matriz 8x8 de ceros.
Entonces, cuando haces tu Hamiltoniano Hermitiano agregando la transposición conjugada, obtienes 0 para este término, y por lo tanto no necesitas tener coeficientes imaginarios .
fuente