Wariacyjny kwantowy solwer wartości własnych (VQE)
Ta lekcja wprowadza wariacyjny kwantowy solwer wartości własnych, wyjaśnia jego znaczenie jako fundamentalnego algorytmu w obliczeniach kwantowych, a także omawia jego mocne i słabe strony. VQE samo w sobie, bez metod uzupełniających, prawdopodobnie nie wystarczy do współczesnych obliczeń kwantowych na skalę użytkową. Mimo to jest ono ważne jako archetypiczna klasyczno-kwantowa metoda hybrydowa i stanowi istotny fundament, na którym budowanych jest wiele bardziej zaawansowanych algorytmów.
Ten film przedstawia ogólny zarys VQE oraz czynniki wpływające na jego wydajność. Tekst poniżej dodaje więcej szczegółów i implementuje VQE za pomocą Qiskit.
1. Czym jest VQE?
Wariacyjny kwantowy solwer wartości własnych to algorytm, który wykorzystuje obliczenia klasyczne i kwantowe łącznie, aby wykonać zadanie. W obliczeniu VQE występują 4 główne elementy:
- Operator: Często Hamiltonian, który będziemy oznaczać jako , opisujący właściwość systemu, którą chcesz zoptymalizować. Inaczej mówiąc, poszukujesz eigenvectora tego operatora odpowiadającego minimalnemu eigenvalue. Często nazywamy ten eigenvector „stanem podstawowym".
- „Ansatz" (niemieckie słowo oznaczające „podejście"): jest to obwód kwantowy, który przygotowuje stan kwantowy przybliżający poszukiwany eigenvector. W rzeczywistości ansatz to rodzina obwodów kwantowych, ponieważ niektóre z bramek w ansatzu są sparametryzowane, to znaczy przyjmują parametr, który możemy zmieniać. Ta rodzina obwodów kwantowych może przygotować rodzinę stanów kwantowych przybliżających stan podstawowy.
- Estymator: środek do oszacowania wartości oczekiwanej operatora dla bieżącego wariacyjnego stanu kwantowego. Czasami naprawdę zależy nam po prostu na tej wartości oczekiwanej, którą nazywamy funkcją kosztu. Czasami interesuje nas bardziej skomplikowana funkcja, którą nadal można zapisać wychodząc od jednej lub więcej wartości oczekiwanych.
- Optymalizator klasyczny: algorytm, który zmienia parametry, próbując zminimalizować funkcję kosztu.
Przyjrzyjmy się każdemu z tych elementów bardziej szczegółowo.
1.1 Operator (Hamiltonian)
W rdzeniu problemu VQE znajduje się operator opisujący interesujący nas system. Zakładamy tutaj, że najmniejszy eigenvalue i odpowiadający mu eigenvector tego operatora są użyteczne w jakimś celu naukowym lub biznesowym. Przykłady mogą obejmować Hamiltonian chemiczny opisujący cząsteczkę, taki że najmniejszy eigenvalue operatora odpowiada energii stanu podstawowego cząsteczki, a odpowiadający mu stan własny opisuje geometrię lub konfigurację elektronową cząsteczki. Albo operator mógłby opisywać koszt pewnego procesu do zoptymalizowania, a stany własne mogłyby odpowiadać trasom lub praktykom. W niektórych dziedzinach, takich jak fizyka, „Hamiltonian" prawie zawsze odnosi się do operatora opisującego energię systemu fizycznego. Jednak w obliczeniach kwantowych powszechne jest spotykanie operatorów kwantowych, które opisują problem biznesowy lub logistyczny, również nazywanych „Hamiltonianem". Przyjmiemy tutaj tę konwencję.

Mapowanie problemu fizycznego lub optymalizacyjnego na kubity jest zazwyczaj nietrywialnym zadaniem, ale te szczegóły nie są głównym tematem tego kursu. Ogólną dyskusję na temat mapowania problemu na operator kwantowy można znaleźć w Kwantowe obliczenia w praktyce. Bardziej szczegółowe spojrzenie na mapowanie problemów chemicznych na operatory kwantowe można znaleźć w Chemia kwantowa z VQE.
Na potrzeby tego kursu założymy, że postać Hamiltonianu jest znana. Na przykład Hamiltonian dla prostej cząsteczki wodoru (przy pewnych założeniach dotyczących przestrzeni aktywnej oraz używając mappera Jordana-Wignera) to:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime scipy
from qiskit.quantum_info import SparsePauliOp
hamiltonian = SparsePauliOp(
[
"IIII",
"IIIZ",
"IZII",
"IIZI",
"ZIII",
"IZIZ",
"IIZZ",
"ZIIZ",
"IZZI",
"ZZII",
"ZIZI",
"YYYY",
"XXYY",
"YYXX",
"XXXX",
],
coeffs=[
-0.09820182 + 0.0j,
-0.1740751 + 0.0j,
-0.1740751 + 0.0j,
0.2242933 + 0.0j,
0.2242933 + 0.0j,
0.16891402 + 0.0j,
0.1210099 + 0.0j,
0.16631441 + 0.0j,
0.16631441 + 0.0j,
0.1210099 + 0.0j,
0.17504456 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
0.04530451 + 0.0j,
],
)
Zauważ, że w powyższym Hamiltonianie są takie wyrazy jak ZZII i YYYY, które nie komutują ze sobą. To znaczy, aby wyliczyć ZZII, musielibyśmy zmierzyć operator Pauli Z na kubicie 3 (wśród innych pomiarów). Ale aby wyliczyć YYYY, musimy zmierzyć operator Pauli Y na tym samym kubicie, kubicie 3. Istnieje relacja nieoznaczoności pomiędzy operatorami Y i Z na tym samym kubicie; nie możemy zmierzyć obu tych operatorów jednocześnie. Wrócimy do tego punktu poniżej, a właściwie przez cały kurs.
Powyższy Hamiltonian jest operatorem macierzowym . Diagonalizacja tego operatora w celu znalezienia jego najmniejszego eigenvalue energetycznego nie jest trudna.
import numpy as np
A = np.array(hamiltonian)
eigenvalues, eigenvectors = np.linalg.eigh(A)
print("The ground state energy is ", min(eigenvalues), "hartrees")
The ground state energy is -1.1459778447627311 hartrees
Klasyczne solwery wartości własnych działające metodą brute force nie skalują się tak, aby opisać energie lub geometrie bardzo dużych układów atomów, takich jak leki czy białka. VQE jest jedną z wczesnych prób wykorzystania obliczeń kwantowych w tym problemie.
W tej lekcji napotkamy Hamiltoniany znacznie większe niż ten powyżej. Ale marnotrawstwem byłoby wypychanie granic tego, co VQE potrafi, zanim wprowadzimy niektóre z bardziej zaawansowanych narzędzi, które mogą uzupełnić lub zastąpić VQE, w dalszej części tego kursu.
1.2 Ansatz
Słowo „ansatz" pochodzi z języka niemieckiego i oznacza „podejście". Poprawną liczbą mnogą w języku niemieckim jest „ansätze", choć często można spotkać też formy „ansatzes" lub „ansatze". W kontekście VQE, ansatz to obwód kwantowy, którego używasz do utworzenia wielokubitowej funkcji falowej najbliżej przybliżającej stan podstawowy badanego układu, a zatem dającej najniższą wartość oczekiwaną twojego operatora. Ten obwód kwantowy będzie zawierał parametry wariacyjne (często zebrane razem w wektorze zmiennych ).

Wybierany jest początkowy zestaw wartości parametrów wariacyjnych. Operację unitarną ansatzu na obwodzie nazwiemy . Domyślnie wszystkie kubity w komputerach kwantowych IBM® są inicjalizowane do stanu . Po uruchomieniu obwodu stan kubitów będzie
Gdyby potrzebna była nam tylko najniższa energia (w języku układów fizycznych), moglibyśmy ją oszacować po prostu wielokrotnie mierząc energię i wybierając najniższą wartość. Ale zazwyczaj chcemy też poznać konfigurację, która daje tę najniższą energię lub wartość własną. Kolejnym krokiem jest więc oszacowanie wartości oczekiwanej Hamiltonianu, które jest dokonywane poprzez pomiary kwantowe. Dużo się na to składa. Możemy jednak zrozumieć ten proces jakościowo, zauważając, że prawdopodobieństwo zmierzenia energii (znów używając języka układów fizycznych) jest powiązane z wartością oczekiwaną wzorem:
Prawdopodobieństwo jest także powiązane z nakładaniem się stanu własnego i aktualnego stanu układu :
Tak więc, wykonując wiele pomiarów operatorów Pauli tworzących nasz Hamiltonian, możemy oszacować wartość oczekiwaną Hamiltonianu w aktualnym stanie układu