HI-VQE Chemistry — funkcja Qiskit od Qunova Computing
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-catalog qiskit-ibm-runtime
# This cell is hidden from users
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy(operational=True, min_num_qubits=16).name
Funkcje Qiskit to eksperymentalna funkcjonalność dostępna wyłącznie dla użytkowników planów IBM Quantum® Premium Plan, Flex Plan oraz On-Prem (za pośrednictwem IBM Quantum Platform API). Mają status wersji podglądowej i mogą ulec zmianie.
Omówienie
W chemii kwantowej problem struktury elektronowej polega na znalezieniu rozwiązań elektronowego równania Schrödingera — kwantowych funkcji falowych opisujących zachowanie elektronów w danym układzie. Funkcje te są wektorami amplitud zespolonych, przy czym każda amplituda odpowiada wkładowi jednej z możliwych konfiguracji elektronowych.
Stan podstawowy to funkcja falowa układu o najniższej energii i odgrywa szczególną rolę w badaniu układów molekularnych. Najbardziej dokładne podejście do obliczania stanu podstawowego uwzględnia wszystkie możliwe konfiguracje elektronowe, lecz dla większych układów staje się niewykonalne, ponieważ liczba konfiguracji rośnie wykładniczo wraz z rozmiarem układu.
Handover Iterative Variational Quantum Eigensolver (HI-VQE) to nowatorska hybrydowa metoda kwantowo-klasyczna służąca do precyzyjnego szacowania stanu podstawowego układów molekularnych. Łączy sprzęt kwantowy z obliczeniami klasycznymi — procesory kwantowe służą do efektywnego przeszukiwania kandydatów na konfiguracje elektronowe, a wynikowa funkcja falowa jest obliczana na komputerach klasycznych. Generując zwarte, lecz chemicznie dokładne funkcje falowe, HI-VQE wspomaga badania i odkrycia w chemii kwantowej oraz nauce o materiałach.
HI-VQE zmniejsza złożoność obliczeniową problemu struktury elektronowej, efektywnie szacując stan podstawowy z dużą dokładnością. Skupia się na starannie dobranym podzbiorze najważniejszych konfiguracji elektronowych, optymalizując jednocześnie dokładność i wydajność.
Łącząc zalety komputerów klasycznych i kwantowych, HI-VQE iteracyjnie udoskonala bieżące przybliżenie funkcji falowej. Unikalne techniki budowy podprzestrzeni pomagają zwiększyć efektywność doboru konfiguracji, zapewniając użytkownikom większą kontrolę obliczeniową i lepszą dokładność symulacji chemii kwantowej.
Jeśli chcesz dokładniej poznać algorytm, możesz przeczytać powiązaną publikację naukową.
Opis
Liczba konfiguracji elektronowych w układzie molekularnym rośnie wykładniczo wraz z rozmiarem układu. Jednak dla pewnych stanów elektronowych, takich jak stan podstawowy, zazwyczaj tylko niewielki ułamek konfiguracji wnosi istotny wkład do energii stanu. Metody wybranej interakcji konfiguracyjnej (SCI) wykorzystują tę rzadkość do obniżenia kosztów obliczeniowych, identyfikując i koncentrując się na najbardziej istotnych konfiguracjach. Podzbiór tych konfiguracji określa się mianem podprzestrzeni.
HI-VQE wykorzystuje wrodzoną efektywność komputerów kwantowych w reprezentowaniu układów molekularnych, wspomagając przeszukiwanie podprzestrzeni. Integruje klasyczne i kwantowe procedury, aby rozwiązać problem struktury elektronowej z dużą dokładnością. W odróżnieniu od istniejących kwantowych metod SCI, HI-VQE łączy trenowanie wariacjne, iteracyjne budowanie podprzestrzeni oraz wstępne przesiewanie konfiguracji metodą pre-diagonalizacji, co zwiększa efektywność przez ograniczenie liczby pomiarów kwantowych, iteracji i kosztów klasycznej diagonalizacji. HI-VQE można zatem stosować do większych układów molekularnych wymagających większej liczby Qubitów, a koszt rozwiązania problemu danego rozmiaru z tym samym stopniem dokładności ulega zmniejszeniu.

Aby obliczyć stan podstawowy układu, HI-VQE najpierw używa klasycznego pakietu chemicznego PySCF do wygenerowania reprezentacji molekularnej na podstawie danych wejściowych podanych przez użytkownika, takich jak geometria molekularna i inne informacje o cząsteczce. Następnie wchodzi w hybrydową pętlę optymalizacji kwantowo-klasycznej, iteracyjnie udoskonalając podprzestrzeń, by optymalnie reprezentować stan podstawowy przy minimalizacji liczby zawartych konfiguracji. Pętla działa do momentu spełnienia kryteriów zbieżności, takich jak rozmiar podprzestrzeni lub stabilność energii; po ich osiągnięciu wynikiem jest obliczona funkcja falowa stanu podstawowego wraz z energią. Wyniki te można wykorzystać do konstruowania dokładnych powierzchni energii potencjalnej i przeprowadzania dalszej analizy układu.
Pętla optymalizacji skupia się na dostosowywaniu parametrów Circuit kwantowego w celu wygenerowania wysokiej jakości podprzestrzeni. HI-VQE oferuje trzy opcje Circuit kwantowego: excitation_preserving, efficient_su2 oraz LUCJ. Optymalizacja jest inicjalizowana blisko stanu referencyjnego Hartree-Focka ze względu na jego ogólną przydatność. Następnie Circuit jest wykonywany na urządzeniu kwantowym i z wynikowego stanu kwantowego pobierane są próbki konfiguracji, które są zwracane jako ciągi binarne. Ze względu na szumy urządzenia kwantowego niektóre próbkowane konfiguracje mogą być fizycznie nieprawidłowe — nie zachowują liczby elektronów ani spinu. HI-VQE rozwiązuje ten problem, stosując proces odtwarzania konfiguracji z pakietu qiskit-addon-sqd, dzięki czemu użytkownicy mogą albo poprawiać nieprawidłowe konfiguracje, albo je odrzucać.
Prawidłowe konfiguracje przechodzą opcjonalny krok przesiewania, usuwający te, które przewiduje się jako wnoszące minimalny wkład. Zmniejsza to wymiar podprzestrzeni, obniżając tym samym koszt kroku diagonalizacji. Jeśli przesiewanie jest włączone, na podstawie prawidłowych konfiguracji konstruowany jest wstępny hamiltonian podprzestrzeni, a diagonalizacja wykonywana jest z bardzo luźnymi kryteriami zakończenia. Choć dokładność wynikowych amplitud dla każdej konfiguracji jest niska, jest ona skuteczna do przewidywania, które konfiguracje pominąć w podprzestrzeni w danej iteracji, i jest szybka do obliczenia.
Wybrane konfiguracje są dodawane do podprzestrzeni, a hamiltonian układu jest rzutowany do tej podprzestrzeni. Podprzestrzeń aktualizuje się iteracyjnie, zachowując najważniejsze konfiguracje pomiędzy iteracjami. Podejście to różni się od metod alternatywnych tym, że Circuit kwantowy nie musi przybliżać pełnego stanu podstawowego w każdym kroku.
Następnie hamiltonian podprzestrzeni jest klasycznie diagonalizowany w celu uzyskania najniższej wartości własnej i odpowiadającego jej wektora własnego, reprezentującego przybliżenie stanu podstawowego i jego energii. W miarę jak jakość podprzestrzeni poprawia się w kolejnych iteracjach, obliczony stan podstawowy coraz lepiej przybliża rzeczywisty stan podstawowy. Na tym etapie można przeprowadzić dodatkowy krok przesiewania, usuwający z podprzestrzeni wszelkie konfiguracje, które nie wnoszą istotnego wkładu do obliczonego stanu podstawowego. Krok ten zapewnia, że podprzestrzeń przenoszona do następnej iteracji jest możliwie jak najbardziej zwarta. Ocena odbywa się na podstawie amplitud zwróconych przez diagonalizację, gdyż reprezentują one ważność wkładu każdej konfiguracji do obliczonego stanu podstawowego.
Sprawdzenie zbieżności rozstrzyga, czy dalsze trenowanie mogłoby poprawić wyniki. Jeśli tak, wykonywany jest opcjonalny krok klasycznej ekspansji, parametry Circuit kwantowego są aktualizowane w celu dalszej minimalizacji obliczonej energii, a proces się powtarza. Krok klasycznej ekspansji generuje dodatkowe konfiguracje dla podprzestrzeni, uzupełniając konfiguracje próbkowane z urządzenia kwantowego. Najpierw identyfikuje konfigurację o największej amplitudzie w wynikach diagonalizacji, a następnie generuje nowe konfiguracje z pojedynczymi i podwójnymi wzbudzeniami z tej konfiguracji. Żądana liczba tych konfiguracji jest następnie dodawana do podprzestrzeni.
Gdy zostanie stwierdzona zbieżność iteracji, HI-VQE zwraca obliczony stan podstawowy (w postaci stanów w podprzestrzeni i ich amplitud w funkcji falowej stanu podstawowego), jego energię oraz miarę wariancji energii, która wskazuje, czy obliczony stan stanowi stan własny hamiltonianu układu.
Użytkownicy mogą decydować o używanym Circuit kwantowym i liczbie strzałów (shots) dla każdego Circuit kwantowego, a także kontrolować rozmiar podprzestrzeni lub włączyć klasyczne generowanie dodatkowych konfiguracji wspomagających konfiguracje generowane kwantowo. Dzięki temu użytkownicy mogą dostosować zachowanie HI-VQE do swoich docelowych zastosowań.
Pierwsze kroki
Najpierw poproś o dostęp do funkcji. Następnie uwierzytelnij się przy użyciu swojego klucza API IBM Quantum® i — zakładając, że masz już zapisane konto w środowisku lokalnym — załaduj funkcję Qiskit w następujący sposób:
import reprlib
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
function = catalog.load("qunova/hivqe-chemistry")
Dane wejściowe
W poniższej tabeli znajdziesz wszystkie parametry wejściowe przyjmowane przez funkcję. Kolejne sekcje Opcje cząsteczki oraz Opcje HI-VQE omawiają te argumenty szczegółowo.
| Nazwa | Typ | Opis | Wymagany | Domyślnie | Przykład |
|---|---|---|---|---|---|
| geometry | Union[List[List[Union[str, Tuple[float, float, float]]]], str] | Może być ciągiem znaków lub strukturalnymi listami zawierającymi pary atom–współrzędne. Jeśli podany jest jako ciąg, musi to być geometria cząsteczki w formacie Cartesian Coordinate Format. Jeśli podany jest jako lista, powinien być listą list zawierających ciąg atomu i krotkę współrzędnych. | Tak | N/A | [['O', (0, 0, 0)], ['H', (0, 1, 0)], ['H', (0, 0, 1)]] lub "O 0 0 0; H 0 1 0; H 0 0 1" |
| backend_name | str | Nazwa Backend, do którego kierowane jest zapytanie. | Tak | N/A | ibm_fez |
| max_states | int | Maksymalny wymiar podprzestrzeni przeznaczonej do diagonalizacji. Zostanie użyta mniejsza liczba stanów, jeśli podana wartość nie jest idealnym kwadratem. | Yes | N/A | 100 |
| max_expansion_states | int | Maksymalna liczba klasycznie generowanych stanów CI dołączanych w każdej iteracji. | Yes | N/A | 10 |
| molecule_options | dict | Opcje związane z cząsteczką przekazywaną jako dane wejściowe do HI-VQE. Więcej informacji znajdziesz w sekcji Opcje cząsteczki. | No | See the Molecule options section for details. | {"basis": "sto3g", "unit": "angstrom" } |
| hivqe_options | dict | Opcje sterujące zachowaniem algorytmu HI-VQE. Więcej informacji znajdziesz w sekcji Opcje HI-VQE. | No | See the HI-VQE options section for details. | {"shots": 10_000, "max_iter": 10 } |
Opcje cząsteczki
Poniższa tabela opisuje wszystkie klucze i wartości, które można ustawić w słowniku molecule_options, wraz z ich typami danych i wartościami domyślnymi. Wszystkie klucze s ą opcjonalne.
| Key | Value type | Default Value | Valid range | Explanation |
|---|---|---|---|---|
"charge" | int | 0 | Various | Liczba całkowita określająca całkowity ładunek netto układu molekularnego. Wartość domyślna wynosi 0, ale może być dowolną liczbą całkowitą. |
"basis" | str | 'sto-3g' | Various | Ciąg znaków określający typ bazy; wartości te są przekazywane do pyscf. (np.: "sto-3g", "3-21g", "6-31g", "cc-pvdz") |
"active_orbitals" | List[int] | Every orbital index. | The spatial orbital indices valid for the problem. | Lista indeksów aktywnych orbitali w przedziale [0, n), gdzie n to liczba Qubitów użytych w zadaniu. Jeśli ten parametr jest podany, argument frozen_orbitals musi być również określony. |
"frozen_orbitals" | List[int] | No indices. | The spatial orbital indices valid for the problem, excluding active orbitals. | Lista indeksów zamrożonych orbitali w tym samym zakresie co active_orbitals. Jeśli jest podany, active_orbitals musi być również określony. Pamiętaj, że zamrażać należy wyłącznie orbitale obsadzone, ponieważ liczba aktywnych elektronów zmniejsza się o 2 dla każdego zamrożonego orbitalu obsadzonego. |
"orbital_coeffs" | List[List[float]] | Hartree-Fock molecular orbitals. | Various. | Współczynniki dla orbitali przestrzennych używanych przy obliczaniu całek odpychania elektronowego w układzie. Poprawnymi przykładami są orbitale molekularne Hartree-Focka, orbitale naturalne oraz orbitale AVAS. |
"symmetry" | Union[str, bool] | False | True or False | Służy do włączenia symetrii grupy punktowej w początkowych obliczeniach molekularnych, mających na celu konstrukcję bazy orbitalnej dopasowanej do symetrii. Te orbitale dopasowane do symetrii są używane jako funkcje bazowe w kolejnych obliczeniach SCF. Wartość domyślna to False; po ustawieniu na True symetria zostanie włączona, a arbitralne grupy punktowe będą wykrywane i stosowane automatycznie. Jeśli zostanie przypisana konkretna symetria, na przykład symmetry = "Dooh", błąd zostanie zgłoszony, jeśli geometria molekularna nie spełnia wymaganej symetrii. |
"symmetry_subgroup" | Optional[str] | None | See pyscf documentation. | Może być używany do wygenerowania podgrupy wykrytej symetrii. Nie ma żadnego efektu, gdy symetria jest określona za pomocą argumentu kluczowego symmetry. |
"unit" | str | "angstrom" | See pyscf documentation. | Określa jednostkę miary używaną do współrzędnych atomowych i odległości. Domyślnie stosowane są angstromy. |
"nucmod" | Optional[Union[dict, str]] | None | See pyscf documentation. | Określa model jądrowy, który ma być używany. Domyślnie stosowany jest punktowy model jądrowy; inne wartości włączają gaussowski model jądrowy. Jeśli podana zostanie funkcja, zostanie ona użyta wraz z gaussowskim modelem jądrowym do wygenerowania wartości rozkładu ładunku jądrowego 'zeta'. |
"pseudo" | Optional[Union[dict, str]] | None | See pyscf documentation. | Określa pseudopotencjał dla atomów w cząsteczce. Domyślnie ma wartość None, co oznacza, że żadne pseudopotencjały nie są stosowane, a wszystkie elektrony są jawnie uwzględniane w obliczeniach. |
"cart" | bool | False | See pyscf documentation. | Określa, czy w obliczeniach mają być używane kartezjańskie GTO jako funkcje bazowe momentu pędu. Domyślna wartość False spowoduje użycie sferycznych GTO. |
"magmom" | Optional[List[Union[int, float]]] | None | See pyscf documentation. | Ustawia kolinearny spinowy moment magnetyczny każdego atomu. Domyślnie ma wartość None i każdy atom jest inicjalizowany ze spinem równym zero. |
"avas_aolabels" | Optional[List[str]] | None | i.e. ["H 1s", "O 2p"] for H2O | Definiuje orbitale atomowe (AO) do uwzględnienia w schemacie AVAS. Zobacz dokumentację AVAS. |
"avas_threshold" | float | 0.2 | Between 0.0 and 2.0 | Określa wartość graniczną używaną do decydowania, które orbitale atomowe (AO) są zachowywane w aktywnej przestrzeni. |
"noons_level" | Optional[str] | None | "mp2" or "ccsd" | Definiuje podejście teoretyczne do przygotowania orbitali naturalnych i selekcji aktywnych orbitali na podstawie schematu Liczb Obsadzenia Orbitali Naturalnych (NOONs). Zobacz dokumentację NOONs. Aby kontrolować liczbę orbitali (i liczbę Qubitów), należy podać zarówno indeksy aktywnych, jak i zamrożonych orbitali. |
Opcje HI-VQE
Poniższa tabela opisuje wszystkie klucze i wartości, które można ustawić w słowniku hivqe_options, wraz z ich typami danych i wartościami domyślnymi. Wszystkie klucze są opcjonalne.
| Key | Value type | Default Value | Valid range | Explanation |
|---|---|---|---|---|
"shots" | int | 1_000 | Between 1 and 10 000. | Liczba pomiarów (shots) do wykonania na urządzeniu kwantowym na iterację. |
"max_iter" | int | 25 | Between 1 and 50. | Maksymalna liczba iteracji do przeprowadzenia w celu optymalizacji ansatzu. Algorytm może użyć mniejszej liczby iteracji, jeśli zbieżność zostanie osiągnięta wcześniej. |
"initial_basis_states" | List[str] | The Hartree-Fock state. | Binary strings with the number of bits matching the required number of qubits for the problem. | Może być używany do ponownego uruchomienia algorytmu ze stanami klasycznymi z poprzedniego wyniki. |
"ansatz" | str | "epa" | "epa", "hea", or "lucj" | Określa kwantowy ansatz do optymalizacji w celu generowania nowych stanów. "epa" wybiera ansatz zachowujący wzbudzenia. "hea" wybiera ansatz wydajny sprzętowo. "lucj" wybiera lokalny unitarny ansatz cluster Jastrow. |
"convergence_count" | int | 3 | At least 2. | Liczba iteracji bez znaczącej zmiany obliczonej energii, jaka musi upłynąć, zanim algorytm zostanie uznany za zbieżny. |
"convergence_abstol" | float | 1e-4 | More than 0 and at most 1. | Wartość zmiany obliczonej energii uznawana za znaczącą na potrzeby sprawdzania zbieżności. |
"reset_convergence_count" | bool | True | True or False | Jeśli True, wymagana liczba iteracji convergence_count musi wystąpić bez przerywającej znaczącej zmiany, aby kwalifikować się jako zbieżność. Jeśli False, algorytm zatrzyma się po convergence_count iteracjach, jeśli w jakiejkolwiek iteracji podczas procesu optymalizacji wystąpiły nieznaczące zmiany. |
"configuration_recovery" | bool | True | True or False. | Określa, czy ma być używane odtwarzanie konfiguracji z pakietu qiskit-addon-sqd. Jeśli True, nieprawidłowe stany próbkowane z urządzenia kwantowego są poprawiane klasycznie. Jeśli False, są odrzucane. |
"ansatz_entanglement" | str | "circular" | Any one of "linear", "reverse_linear", "pairwise", "circular", "full", or "sca". If using the "lucj" ansatz, "lucj_default" is also an option. | Określa schemat splątania używany wewnątrz Circuit kwantowego, zgodnie ze wspólnymi konwencjami Qiskit i konwencjami ffsim dla ansatzu LUCJ. |
"ansatz_reps" | int | 2 | Greater than 0. | Liczba powtórzeń każdej warstwy w Circuit kwantowym. |
"amplitude_screening_tolerance" | Union[float,int] | 0 | At least 0, and less than 1. | Tolerancja decydująca o tym, które stany powinny być odsiewane z podprzestrzeni po diagonalizacji. Określa próg uwzględniania stanów podprzestrzeni na podstawie ich obliczonych amplitud. |
"overlap_screening_tolerance" | float | 1e-2 | Between 1e-4 and 1e-1, inclusive. | Tolerancja służąca do przewidywania, które stany powinny być odsiewane z podprzestrzeni przed diagonalizacją. Kontroluje dokładność przewidywanych amplitud dla każdego stanu — mniejsza wartość skutkuje dokładniejszymi przewidywaniami. |
Dane wyjściowe
Funkcja zwraca słownik z czterema kluczami i wartościami. Klucze i wartości są opisane w poniższej tabeli:
| Key | Value Type | Explanation |
|---|---|---|
"energy" | float | Przybliżona energia stanu podstawowego cząsteczki. |
"states" | List[str] | Wybrane determinanty tworzące podprzestrzeń użytą do obliczenia energii. Są w naprzemiennym formacie alfa-beta. |
"eigenvector" | List[float] | Wektor własny odpowiadający stanowi podstawowemu podprzestrzeni złożonej ze "states". |
"energy_variance" | float | Wariancja energii stanu podstawowego podprzestrzeni złożonej ze "states", stanowiąca wskazówkę dotyczącą jakości rozwiązania. Wartość ta jest nieujemna, a niższa wartość oznacza, że stan podstawowy podprzestrzeni jest bliższy stanowi własnemu Hamiltonianu układu. |
"energy_history" | List[float] | Energie obliczane w każdej iteracji podczas hybrydowego procesu optymalizacji, w kolejności, w jakiej zostały obliczone. Dwie energie są obliczane na iterację jako część procesu optymalizacji SPSA. |
Przykład
Pierwszy przykład pokazuje, jak obliczyć energię stanu podstawowego cząsteczki NH3 przy użyciu algorytmu HI-VQE.
Zdefiniuj geometrię molekularną i opcje
Geometria molekularna NH3 jest podana we współrzędnych kartezjańskich oddzielonych znakiem ";" dla każdego atomu.
# Define the molecule geometry
geometry = """
N -0.85188 -0.02741 0.03141;
H 0.16545 0.00593 -0.01648;
H -1.16348 -0.39357 -0.86702;
H -1.16348 0.94228 0.06281;
"""
Dodatkowe opcje można zdefiniować i przekazać dla układu molekularnego w następującym formacie słownika.
# Configure some options for the job.
molecule_options = {"basis": "sto3g"}
hivqe_options = {"shots": 100, "max_iter": 20}
Uruchom funkcję, podając geometrię i opcje jako dane wejściowe.
# Run HI-VQE
job = function.run(
geometry=geometry,
# `backend_name` is the name of a backend with at least 16 qubits, for example, "ibm_marrakesh".
backend_name=backend_name,
max_states=2000,
max_expansion_states=10,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)
Dobrym pomysłem jest wydrukowanie identyfikatora zadania Function, aby móc go podać w zgłoszeniu do pomocy technicznej, jeśli coś pójdzie nie tak.
print("Job ID:", job.job_id)
Job ID: 128ee399-7cfc-4be2-91e9-c4abd22b97c7
Ten przykład wykorzystuje 16 Qubitów z 8 orbitalami bazy sto3g dla cząsteczki NH3. Sprawdź status zadania Qiskit Function lub pobierz wyniki w następujący sposób:
print(job.status())
QUEUED
Po zakończeniu zadania wyniki można uzyskać za pomocą instancji result().
result = job.result()
# Output can be long, so we display a shortened representation
shortened_result = reprlib.repr(result)
print(shortened_result)
{'eigenvector': [0.9824200343205695, 0.009520846167419264, 6.365368845740147e-08, 3.6832123006425615e-07, 0.0012869941182066654, 2.3403891050875465e-05, ...], 'energy': -55.521146537970466, 'energy_history': [-55.52091922342852, -55.52113695367561, -55.521146537970466, -55.52114653864798, -55.521146537970466, -55.521146537970466, ...], 'energy_variance': 9.788555455342562e-12, ...}
Aby uzyskać dostęp do energii stanu podstawowego, użyj klucza "energy". Klucz "eigenvector" dostarcza współczynniki CI wraz z odpowiadającą im notacją bitstring konfiguracji elektronowej, przechowywaną pod kluczem "states" wyników.
fci_energy = -55.521148034704126 # the exact energy using FCI method
hivqe_energy = result["energy"]
print(
f"|Exact Energy - HI-VQE Energy|: {abs(fci_energy - hivqe_energy) * 1000} mHa"
)
print(f"Sampled Number of States: {len(result['states'])}")
|Exact Energy - HI-VQE Energy|: 0.0014967336596782843 mHa
Sampled Number of States: 1936
Wynik:
|Exact Energy - HI-VQE Energy|: 0.077237504 mHa Sampled Number of States: 1936
Wydajność
W tej sekcji przedstawiono wyniki wzorcowych obliczeń HI-VQE: przypadek 24-Qubitowy dla Li2S, przypadek 40-Qubitowy dla cząsteczki N2 oraz przypadek 44-Qubitowy dla układu FeP-NO.
Krzywa potencjalnej powierzchni energii dysocjacji dla cząsteczki Li2S z 24 Qubitami
Krzywa PES jest pokazana wraz z referencją FCI i początkowym przybliżeniem z RHF, a także błędem energii względem referencji FCI.

Obliczenia zostały przeprowadzone dla następujących geometrii i opcji.
# This cell is hidden from users
backend_name = service.least_busy(operational=True, min_num_qubits=38).name
# Define Li2S geometries
Li2S_geoms = {
"Li2S_1.51": "S -1.239044 0.671232 -0.030374;Li -1.506327 0.432403 -1.498949;Li -0.899996 0.973348 1.826768;",
"Li2S_2.40": "S -1.741432 0.680397 0.346702;Li -0.529307 0.488006 -1.729343;Li -1.284307 0.989409 2.177209;",
"Li2S_3.80": "S -2.707255 0.674298 0.909161;Li 0.079218 0.552012 -1.671656;Li -0.927010 0.931502 1.557063;",
}
# Configure some options for the job.
molecule_options = {
"basis": "sto3g",
}
hivqe_options = {
"shots": 100,
"max_iter": 20,
}
results = []
for geom in ["Li2S_1.51", "Li2S_2.40", "Li2S_3.80"]:
# Run HI-VQE
job = function.run(
geometry=Li2S_geoms[geom],
backend_name=backend_name, # can use any device with at least 38 qubits
max_states=2000,
max_expansion_states=10,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)
results.append(job.result())
Czerwone punkty reprezentują wyniki obliczeń HI-VQE dla sześciu różnych geometrii; trzy geometrie odpowiadające odległościom 1,51, 2,40 i 3,80 angstrema podano jako dane wejściowe w powyższej komórce.
Krzywa PES dysocjacji dla cząsteczki N2 z 40 Qubitami
Cząsteczka azotu została zidentyfikowana jako układ wieloreferencyjny z dużymi wkładami energii korelacyjnej wykraczającymi poza stan Hartree-Focka. Przeprowadzono obliczenia wzorcowe dla cząsteczki N2 z bazą cc-pvdz, (20o,14e) z wykorzystaniem homo-lumo do wyboru aktywnych orbitali. Liczba stanów reprezentujących ten problem w pełnej przestrzeni aktywnej (CAS) wynosi 6 009 350 400. Rozwiązanie zagadnienia własnego (dla energii i struktury elektronowej) przy tej liczbie stanów nie jest możliwe nawet na wydajnym komputerze stacjonarnym (16 CPU/64 GB). Dzięki HI-VQE możesz efektywnie przeszukiwać podprzestrzeń stanów CAS, uzyskując wyniki o chemicznej dokładności przy znacznie mniejszym zużyciu zasobów obliczeniowych. Poniższe wykresy przedstawiają krzywą PES obliczoną metodą HI-VQE (40 Qubitów) dla dysocjacji cząsteczki N2.

Krzywa PES dysocjacji dla pięciokoordynacyjnego żelaza(II)-porfiryny z układem NO z 44 Qubitami
Innym interesującym układem chemicznym jest kompleks żelaza(II)-porfiryny (FeP) z skoordynowanym tlenkiem azotu (NO) jako ligandem — jest to biologicznie istotny układ metaloporfiryny odgrywający kluczową rolę w różnych procesach fizjologicznych. W tym przykładzie HI-VQE zostało wykorzystane do oszacowania dokładnej krzywej potencjalnej powierzchni energii oddziaływania międzycząsteczkowego między FeP a NO (energia stanu podstawowego dla geometrii o różnych odległościach). Połączony układ ma 450 orbitali i 202 elektrony (450o,202e) z bazą 6-31g(d). Do obliczenia mniejszego przypadku z rzeczywistego układu (22o,22e) zastosowano selekcję aktywnych orbitali homo-lumo. Na podstawie poniższych wyników wzorcowych udało się osiągnąć dokładność chemiczną (> 1,6 mHa) w odniesieniu do klasycznych obliczeń CASCI(DMRG) (22o,22e).

Testy wydajnościowe
- Dokładny rozmiar macierzy to liczba determinantów dla dokładnego rozwiązania, takiego jak FCI i CASCI.
- HI-VQE próbkuje i oblicza podprzestrzeń tej macierzy (tj. rozmiar macierzy HI-VQE).
- Całkowity czas obejmuje czas pracy QPU oraz uruchomienia Qiskit Function z procesorem CPU.
- Dokładność jest szacowana na podstawie różnicy energii od dokładnego rozwiązania.
| Układ chemiczny | Liczba Qubitów | Dokładny rozmiar macierzy | Rozmiar macierzy HI-VQE | E(różn.) od dokładnego (mHa) | Liczba iteracji | Całkowity czas | Czas pracy QPU |
|---|---|---|---|---|---|---|---|
| (8o,10e) | 16 | 3136 | 1936 | 0,08 | 6 | 37 s | 34 s |
| (10o,10e) | 20 | 63504 | 3969 | 0,60 | 5 | 250 s | 50 s |
| (15o,10e) | 30 | 9018009 | 49729 | 0,90 | 5 | 354 s | 54 s |
| (16o,14e) | 32 | 130873600 | 1798281 | 1,10 | 9 | 6531 s | 121 s |
| (18o,24e) | 36 | 344622096 | 399424 | 0,90 | 24 | 5174 s | 130 s |
| (20o,14e) | 40 | 6009350400 | 9012004 | 1,20 | 21 | 46547 s | 258 s |
Pobieranie komunikatów o błędach
Jeśli twoje zadanie zakończy się niepowodzeniem, status będzie miał wartość ERROR, a wywołanie job.result() spowoduje zgłoszenie wyjątku:
job = function.run(
geometry="invalid-geometry", # This will cause an error
backend_name=backend_name,
max_states=2000,
max_expansion_states=15,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)
job.result()
job.status()
'ERROR'
Uzyskaj wsparcie
Możesz wysłać wiadomość e-mail na adres qiskit.support@qunovacomputing.com, aby uzyskać pomoc dotyczącą tej funkcji.
Jeśli potrzebujesz pomocy w rozwiązaniu konkretnego błędu, podaj identyfikator zadania Function, w którym wystąpił błąd.
Następne kroki
- Poproś o dostęp do funkcji, wypełniając ten formularz.
- Wypróbuj samouczek Obliczanie krzywej PES dysocjacji dla FeP-NO z HI-VQE.
- Zapoznaj się z Pellow-Jarman, A., et al. (2025). HIVQE: Handover Iterative Variational Quantum Eigensolver for Efficient Quantum Chemistry Calculations. arXiv preprint arXiv:2503.06292.
- Wypróbuj samouczek Krzywe PES dysocjacji z Qunova HiVQE.