SQD для оцінки енергії хімічного гамільтоніана
У цьому уроці ми застосуємо SQD для оцінки енергії основного стану молекули.
Зокрема, ми розглянемо такі теми, використовуючи -кроковий підхід шаблону Qiskit:
- Крок 1: Відображення задачі на квантові схеми та оператори
- Налаштування молекулярного гамільтоніана для .
- Пояснення натхненного хімією й апаратно сумісного локального унітарного кластерного анзацу Жастрова (LUCJ) [1]
- Крок 2: Оптимізація під цільове залізо
- Оптимізація кількості вентилів і розкладки анзацу для виконання на залізі
- Крок 3: Виконання на цільовому залізі
- Запуск оптимізованої схеми на реальному QPU для генерування зразків підпростору.
- Крок 4: Постобробка результатів
- Ознайомлення з самоузгодженим циклом відновлення конфігурацій [2]
- Постобробка повного набору бітрядкових зразків з вико ристанням апріорного знання про кількість частинок і середню орбітальну заповненість, обчислену на останній ітерації.
- Ймовірнісне створення пакетів підзразків із відновлених бітрядків.
- Проекція та діагоналізація молекулярного гамільтоніана для кожного зразкового підпростору.
- Збереження мінімальної енергії основного стану серед усіх пакетів та оновлення середньої орбітальної заповненості.
- Ознайомлення з самоузгодженим циклом відновлення конфігурацій [2]
Протягом уроку ми використовуватимемо кілька програмних пакетів.
PySCF— для визначення молекули та налаштування гамільтоніана.- Пакет
ffsim— для побудови анзацу LUCJ. Qiskit— для транспіляції анзацу під виконання на залізі.Qiskit IBM Runtime— для виконання схеми на QPU та збору зразків.Qiskit addon SQD— відновлення конфігурацій та оцінка енергії основного стану за допомогою проекції підпростору та матричної діагоналізації.
1. Відображення задачі на квантові схеми та оператори
Молекулярний гамільтоніан
Молекулярний гамільтоніан має загальний вигляд:
/ — феміонні оператори народження/знищення, пов'язані з -м елементом базисного набору та спіном . і — одно- та двочастинкові електронні інтеграли. За допомогою pySCF ми визначимо молекулу та обчислимо одно- й двочастинкові інтеграли гамільтоніана для базисного набору 6-31g.
# Added by doQumentation — required packages for this notebook
!pip install -q ffsim matplotlib numpy pyscf qiskit qiskit-addon-sqd qiskit-ibm-runtime
import warnings
import pyscf
import pyscf.cc
import pyscf.mcscf
warnings.filterwarnings("ignore")
# Specify molecule properties
open_shell = False
spin_sq = 0
# Build N2 molecule
mol = pyscf.gto.Mole()
mol.build(
atom=[["N", (0, 0, 0)], ["N", (1.0, 0, 0)]], # Two N atoms 1 angstrom apart
basis="6-31g",
symmetry="Dooh",
)
# Define active space
n_frozen = 2
active_space = range(n_frozen, mol.nao_nr())
# Get molecular integrals
scf = pyscf.scf.RHF(mol).run()
num_orbitals = len(active_space)
n_electrons = int(sum(scf.mo_occ[active_space]))
num_elec_a = (n_electrons + mol.spin) // 2
num_elec_b = (n_electrons - mol.spin) // 2
cas = pyscf.mcscf.CASCI(scf, num_orbitals, (num_elec_a, num_elec_b))
mo = cas.sort_mo(active_space, base=0)
hcore, nuclear_repulsion_energy = cas.get_h1cas(mo) # hcore: one-body integrals
eri = pyscf.ao2mo.restore(1, cas.get_h2cas(mo), num_orbitals) # eri: two-body integrals
# Compute exact energy for comparison
exact_energy = cas.run().e_tot
converged SCF energy = -108.835236570774
CASCI E = -109.046671778080 E(CI) = -32.8155692383188 S^2 = 0.0000000
У цьому уроці ми використаємо перетворення Йордана–Вігнера (JW) для відображення феміонної хвильової функції на кубітову, щоб її можна було підготувати за допомогою квантової схеми. Перетворення JW відображає простір Фока феміонів у M просторових орбіталях на гільбертів простір 2M кубітів, тобто просторова орбіталь розбивається на дві спін-орбіталі: одна пов'язана з електроном зі спіном вгору (), інша — зі спіном вниз (). Спін-орбіталь може бути зайнятою або вільною. Зазвичай, коли ми говоримо про кількість орбіталей, мається на увазі кількість просторових орбіталей. Кількість спін-орбіталей буде вдвічі більшою. У квантових схемах кожна спін-орбіталь представлена одним кубітом. Отже, один набір кубітів представлятиме спін-вгору або -орбіталі, а інший — спін-вниз або -орбіталі. Наприклад, молекула для базисного набору 6-31g має просторових орбіталей (тобто + = спін-орбіталі). Отже, нам знадобиться квантова схема на кубіти (можливо, з додатковими допоміжними кубітами, як обговорюватиметься пізніше). Кубіти вимірюються у обчислювальному базисі для отримання бітрядків, які представляють електронні конфігурації або детермінанти (Слейтера). Протягом цього уроку ми будемо використовувати терміни «бітрядки», «конфігурації» та «детермінанти» як взаємозамінні. Бітрядки показують заповненість електронами спін-орбіталей: на певній позиції означає, що відповідна спін-орбіталь зайнята, а означає, що вона вільна. Оскільки задачі електронної структури зберігають кількість частинок, лише фіксована кількість спін-орбіталей має бути зайнята. Молекула має спін-вгору () та спін-вниз () електронів. Отже, будь-який бітрядок, що представляє - та -орбіталі, повинен мати по п'ять для молекули .
1.1 Квантова схема для генерування зразків: анзац LUCJ
У цьому уроці ми використаємо анзац локального унітарного зв'язаного кластера Жастрова (LUCJ) \[1\] для підготовки квантового стану та подальшого зразкування. Спочатку ми пояснимо різні будівельні блоки повного анзацу UCJ та наближення, використані в його локальній версії. Потім, за допомогою пакету ffsim, ми побудуємо анзац LUCJ та оптимізуємо його за допомогою транспілятора Qiskit для виконання на залізі.
Анзац UCJ має такий вигляд (для добутку шарів або повторень оператора UCJ):
де — опорний стан, який зазвичай береться як стан Хартрі–Фока (HF). Оскільки стан Хартрі–Фока визначається як такий, у якому зайняті орбіталі з найменшими номерами, підготовка стану HF потребує застосування вентилів X для встановлення кубітів, що відповідають зайнятим орбіталям, у одиницю. Наприклад, блок підготовки стану HF для 4 просторових орбіталей і 2 електронів зі спіном вгору та 2 зі спіном вниз може виглядати так: