Symulacja hamiltonowska ze złożonymi współczynnikami

12

W ramach algorytmu wariacyjnego chciałbym zbudować obwód kwantowy (najlepiej z pyQuil ), który symuluje hamiltonian postaci:

H=0.3Z3Z4+0.12Z1Z3+[...]+11.03Z310.92Z4+0.12iZ1Y5X4

Jeśli chodzi o ostatni termin, problem polega na tym, że pyQuil zgłasza następujący błąd:

TypeError: PauliTerm coefficient must be real

Zacząłem nurkować w literaturze i wydaje się to nietrywialnym problemem. Natknąłem się na ten artykuł na temat uniwersalnych Hamiltonianów kwantowych, w których omawiane są kodowania złożone do rzeczywistych, a także kodowania lokalne. Jednak nadal nie jest dla mnie jasne, jak można praktycznie zrealizować coś takiego. Czy ktoś może udzielić praktycznej porady, jak rozwiązać ten problem?

Mark Fingerhuth
źródło
1
Czy błąd, gdy zamieniasz ja na ? Sj2(XjSjXj)2
AHusain
3
Pamiętaj, że Hamiltonian powinien być pustelnikiem. To prawda, że ​​współczynniki są prawdziwe.
DaftWullie
1
Być może używam innej definicji dla niż ty. Ale chodzi o to, że możesz znaleźć kombinację, która daje . I I d 2SiId2
AHusain
1
Nie masz gdzieś w tych innego terminu , czyli koniugatu Hermitian? H = i A B - i B A H=iABiBA
AHusain
1
Czy wszystkie warunki formularza są takie, że anulują się?
AHusain

Odpowiedzi:

10

Tradycyjny hamiltonian to pustelnik. Stąd, jeśli zawiera termin niehermański, musi albo zawierać swój koniugat hermitowski jako inny termin, albo mieć wagę 0. W tym konkretnym przypadku, ponieważ jest samym hermitianem, współczynnik musiałby wynosić 0. Więc jeśli mówisz o konwencjonalnych hamiltonianach, prawdopodobnie popełniłeś błąd w swoich obliczeniach. Zauważ, że jeśli koniugat hermitowski tego terminu nie jest obecny, nie możesz po prostu naprawić rzeczy, dodając go; da ci zupełnie inny wynik.ZXY

Z drugiej strony możesz chcieć wdrożyć niehermiański hamiltonian. Te rzeczy istnieją, często dla opisu procesów hałasu, ale nie są tak rozpowszechnione. Musisz wyraźnie dołączyć terminologię „niehermańską”, w przeciwnym razie wszyscy będą myśleć, że to, co robisz, jest złe, ponieważ to nie jest pustelnik, a Hamiltonian powinien być pustelnikiem. Nie jestem zbytnio zaznajomiony z możliwościami, jakie zapewniają różne symulatory, ale byłbym zaskoczony, gdyby miały wbudowane funkcje niehermityczne.

Można to jednak zasymulować kosztem niedeterministycznej implementacji. Będą bardziej wyrafinowane metody niż to (patrz linki w tej odpowiedzi ), ale pozwólcie, że opiszę szczególnie prosty: założę, że jest tylko jeden niehermański komponent, którym jest (iloczyn tensorowy Paul jest). Zadzwonię ten produkt tensor Paulis . Reszta jest Hamiltona . Chcesz stworzyć ewolucję Zaczynamy od Trotterising ewolucji, gdzie . Teraz pracujemy nad symulacją pojedynczego terminuK H e - i H t + K t e - i H t + K t = N i = 1 e - i H δ t + K δ t N δ t = t e - i H δ t + K δ te - i H δ t e K δi×KH

eiHt+Kt
eiHt+Kt=i=1NeiHδt+Kδt
Nδt=t N e K hemibursztynianu t =cosh(δt) I +sinh(δt),K.eiHδt+KδteiHδteKδt (co staje się dokładniejsze przy dużym ). Wiesz już, jak radzić sobie z częścią hermitowską, więc skup się naN
eKδt=cosh(δt)I+sinh(δt)K.

Wprowadzamy kubit ancilla w stanie i używamy go jako kubitu kontrolnego w bramce kontrolowanejNastępnie mierzymy ancilla w podstawie (gdzie ). Jeśli wynikiem jest , to w kubitach docelowych zaimplementowaliśmy operację , aż do normalizacji. Jeśli więc naprawisz , doskonale tę operację. Jeśli pomiar się nie powiedzie, od Ciebie zależy, czy chcesz spróbować odzyskać (może to nie być możliwe), czy zacząć od nowa.K { | * F , | * F } * F | * F = 0 | * F | α | 2 I + | β | 2 K ( 1 - | α | 2 ) / | α | 2 = tanh|ψ=α|0+β|1K{|ψ,|ψ}ψ|ψ=0|ψ|α|2I+|β|2K(1|α|2)/|α|2=tanh(δt)

DaftWullie
źródło
3

Ten prosty kod MATLAB / Octave pokazuje, że nie jest pustelnikiem:i0.12Z1Y2X3

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

Wyjście to 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

Ponieważ jest to prawdziwa matryca, pustelnik oznacza symetryczny, ale nie jest symetryczny, a zatem nie jest pustelnikiem. Trójkąt w prawym górnym rogu nie jest równy trójkątowi w prawym dolnym rogu.

Jednak prawy górny trójkąt jest ujemny z dolnego prawego trójkąta, więc jest anty-pustelnikiem.

Tak więc wykonanie sugestii AHussaina o dodaniu transpozycji sprzężonej daje wynik 0. Po prostu uruchom to polecenie:

H + H'

a otrzymasz macierz 8x8 zer.

Tak więc, kiedy tworzysz hermitianina Hamiltona przez dodanie transpozycji sprzężonej, dostajesz 0 dla tego terminu, a zatem nie musisz mieć żadnych wyimaginowanych współczynników .

użytkownik1271772
źródło
HMHM+HMHM
1
Dlatego komentarz @ DaftWullie jest błędny bez dalszych założeń.
AHusain
1
@MarkFingerhuth: Przepraszam za opóźnienie w powtórce. Byłem bardzo zajęty w ciągu tych dni i wracam do domu prawie o północy każdego dnia w tym miesiącu. Jeśli możesz mi pokazać artykuł, z którego pochodzą równania, mogę pomyśleć o tym, jak zasadniczo różnią się twoje wyniki. Mogę zmienić swoją odpowiedź, mówiąc: „PyQuil nie obsługuje matryc innych niż hermitowskie, ale to nie znaczy, że inny program nie może”.
user1271772
1
@MarkFingerhuth: mówisz „Wygenerowałem to na podstawie równań z papieru teoretycznego”, które równania z którego papieru teoretycznego? Artykuł, do którego link ma pytanie, ma 82 strony, czy możesz mi tylko pokazać, jakie równania wykorzystałeś do wygenerowania tego „hamiltonianu”?
user1271772,
1
@MarkFingerhuth, tak, możemy rozmawiać offline, jednak nie dostanę za to żadnych punktów. Mam tu tylko 1 głos za mój wysiłek, więc motywacja jest niska.
user1271772,