W ramach algorytmu wariacyjnego chciałbym zbudować obwód kwantowy (najlepiej z pyQuil ), który symuluje hamiltonian postaci:
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?
programming
simulation
hamiltonian-simulation
pyquil
Mark Fingerhuth
źródło
źródło
Odpowiedzi:
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.Z⊗ X⊗ Y
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 δ t ≈ e - i H δ t e K δi × K. H.
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| * F⟩=a- | 0⟩+β| 1⟩ K. { | * F ⟩ , | ψ⊥⟩ } ⟨ * F | ψ⊥⟩ = 0 | * F⟩ |α|2I+|β|2K (1−|α|2)/|α|2=tanh(δt)
źródło
Ten prosty kod MATLAB / Octave pokazuje, że nie jest pustelnikiem:i0.12Z1Y2X3
Wyjście to H:
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:
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 .
źródło