Dans le cadre d'un algorithme variationnel, je voudrais construire un circuit quantique (idéalement avec pyQuil ) qui simule un hamiltonien de la forme:
En ce qui concerne le dernier terme, le problème est que pyQuil renvoie l'erreur suivante:
TypeError: PauliTerm coefficient must be real
J'ai commencé à plonger dans la littérature et cela semble être un problème non trivial. Je suis tombé sur cet article sur les hamiltoniens quantiques universels où les codages complexes-réels ainsi que les codages locaux sont discutés. Cependant, il n'est toujours pas clair pour moi comment on mettrait en pratique quelque chose comme ça. Quelqu'un peut-il me donner des conseils pratiques sur la façon de résoudre ce problème?
programming
simulation
hamiltonian-simulation
pyquil
Mark Fingerhuth
la source
la source
Réponses:
Un hamiltonien conventionnel est l'hermitien. Par conséquent, s'il contient un terme non hermitien, il doit également contenir son conjuagte hermitien comme un autre terme, ou avoir 0 poids. Dans ce cas particulier, puisque est Hermitien lui-même, le coefficient devrait être 0. Donc, si vous parlez d'hamiltoniens conventionnels, vous avez probablement fait une erreur dans votre calcul. Notez que si le conjugué hermitien du terme n'est pas présent, vous ne pouvez pas simplement réparer les choses en l'ajoutant; cela vous donnera un résultat complètement différent.Z⊗X⊗Y
D'un autre côté, vous souhaiterez peut-être implémenter un hamiltonien non hermitien . Ces choses existent, souvent pour la description des processus de bruit, mais ne sont pas aussi répandues. Vous devez inclure explicitement la terminologie "non hermitienne", sinon tout le monde pensera simplement que ce que vous faites est mal parce que ce n'est pas hermitien, et un hamiltonien devrait être hermitien. Je ne connais pas trop les capacités des différents simulateurs, mais je serais surpris s'ils intègrent la non-hermiticité.
Cependant, vous pouvez le simuler, au prix d'une implémentation non déterministe. Il y aura des méthodes plus sophistiquées que cela (voir les liens dans cette réponse ), mais permettez-moi d'en décrire une particulièrement simple: je vais supposer qu'il n'y a qu'une seule composante non hermitienne, qui est (un produit tensoriel de Paulis ). Je vais appeler ce produit tenseur de Paulis K . Le reste de l'hamiltonien est H . Vous voulez créer l'évolution e - i H t + K t Nous commençons par Trotteriser l'évolution, e - i H t + K t = Ni × K H
Nous introduisons un qubit ancilla dans l'état , et nous utilisons ce que le qubit de commande dans une contrôlée K grille. Ensuite, nous mesurons l'ancilla dans le { | ψ ⟩ , | ψ ⊥ ⟩ } base (où ⟨ ψ | ψ ⊥ ⟩ = 0 ). Si le résultat est | ψ ⟩ , puis sur les qubits cibles que nous avons mis en place l'opération | α || ψ⟩=a | 0⟩+β| 1⟩ K { | ψ ⟩ , | ψ⊥⟩ } ⟨ Ψ | ψ⊥⟩ = 0 | ψ⟩ , jusqu'à normalisation. Donc, si vous corrigez ( 1 - | α | 2 ) / | α | 2 = tanh ( δ t ) , vous avez parfaitement implémenté cette opération. Si la mesure échoue, c'est à vous de décider si vous voulez essayer de récupérer (cela pourrait ne pas être possible) ou recommencer.| α |2I + | β|2K ( 1 - | α |2) / | α |2= tanh( δt )
la source
La sortie est H:
Puisqu'il s'agit d'une vraie matrice, Hermitien signifie symétrique, mais ce n'est pas symétrique et donc pas Hermitien. Le triangle supérieur droit n'est pas égal au triangle inférieur droit.
Cependant, le triangle supérieur droit est le négatif du triangle inférieur droit, il est donc anti-hermitien.
Ainsi, la suggestion d'AHussain d'ajouter la transposition conjuguée donne 0. Exécutez simplement cette commande:
et vous obtiendrez une matrice 8x8 de 0.
Ainsi, lorsque vous faites votre hamiltonien hamiltonien en ajoutant la transposition conjuguée, vous obtenez 0 pour ce terme, et donc vous n'avez pas besoin d'avoir de coefficients imaginaires .
la source