Simulation hamiltonienne à coefficients complexes


12

Dans le cadre d'un algorithme variationnel, je voudrais construire un circuit quantique (idéalement avec pyQuil ) qui simule un hamiltonien de la forme:

H=0,3Z3Z4+0,12Z1Z3+[...]+-11.03Z3-10,92Z4+0,12jeZ1Oui5X4

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?


1
Est-ce que cela génère une erreur lorsque vous remplacez ce i par ? Sj2(XjSjXj)2
AHusain

3
N'oubliez pas qu'un hamiltonien doit être hermitien. Ce n'est vrai que des coefficients réels.
DaftWullie

1
J'utilise peut-être une définition différente de que vous. Mais le fait est que vous pouvez trouver une combinaison qui aboutit à . i I d 2SiId2
AHusain

1
N'avez-vous pas un autre terme quelque part dans ces , c'est le conjugué hermitien? H = i A B - i B A H=iABiBA
AHusain

1
Ou tous les termes du formulaire sont-ils tels que ceux-ci sont annulés?
AHusain

Réponses:


10

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.ZXY

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 = Nje×KH

e-jeHt+Kt
Nδt=t. Nous travaillons maintenant sur la simulation d'un terme individuele-iHδt+Kδte-iHδteKδt(qui devient plus précis au sens largeN). Vous savez déjà comment traiter la partie hermitienne alors concentrez-vous sureKδt=
e-jeHt+Kt=je=1Ne-jeHδt+Kδt
Nδt=te-jeHδt+Kδte-jeHδteKδtN
eKδt=matraque(δt)je+sinh(δt)K.

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 | α ||ψ=α|0+β|1K{|ψ,|ψ}ψ|ψ=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.|α|2je+|β|2K(1-|α|2)/|α|2=tanh(δt)


3

je0,12Z1Oui2X3

z=[1 0 ; 0 -1];
x=[0 1;  1  0];
y=[0 -1i; 1i 0];

z1 = kron(z,eye(4));
y2 = kron(kron(eye(2),y),eye(2));
x3 = kron(eye(4),x);

H=0.12*1i*z1*y2*x3

La sortie est H:

    0     0    0 0.12    0    0     0     0
    0     0 0.12    0    0    0     0     0
    0 -0.12    0    0    0    0     0     0
-0.12     0    0    0    0    0     0     0
    0     0    0    0    0    0     0 -0.12
    0     0    0    0    0    0 -0.12     0
    0     0    0    0    0 0.12     0     0
    0     0    0    0 0.12    0     0     0

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:

H + H'

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 .


HMHM+HMHM

1
C'est pourquoi le commentaire de @ DaftWullie est erroné sans autres hypothèses.
AHusain

1
@MarkFingerhuth: Désolé pour le retard dans la relecture. J'ai été extrêmement occupée pendant les jours et je rentre chez moi vers minuit tous les jours ce mois-ci. Si vous pouvez me montrer le papier d'où viennent les équations, je peux penser à la façon dont vos résultats sont fondamentalement différents. Je peux changer ma réponse pour dire "PyQuil ne prend pas en charge les matrices non hermitiennes, mais cela ne signifie pas qu'un programme différent ne peut pas".
user1271772

1
@MarkFingerhuth: vous dites "je l'ai généré à partir des équations d'un article théorique" quelles équations à partir de quel article théorique? Le document lié dans la question fait 82 pages, ne pouvez-vous pas simplement me montrer quelles équations vous avez utilisées pour générer ce "hamiltonien"?
user1271772

1
@MarkFingerhuth, oui, nous pouvons parler hors ligne, mais je n'obtiendrai aucun point pour cela. Je n'ai reçu qu'un vote positif pour mes efforts ici, donc l'incitation est faible.
user1271772
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.