Перейти до основного вмісту

SQD та SKQD

У цьому розділі ми розглянемо, як квантові та класичні комп'ютери співпрацюють для розв'язання однієї з найважливіших задач науки: точного оцінювання енергії молекул і матеріалів.

Іскандар Сітдіков описує алгоритмічний підхід у наступному відео.

Гамільтоніан

Ключем до цієї задачі є математичний оператор — Гамільтоніан, що представляє повну енергію системи. З обчислювальної точки зору цей Гамільтоніан можна розглядати як велику матрицю. Шукані нами розв'язки — зокрема основний стан системи — є найменшими власними значеннями цієї матриці. Проблема, однак, у тому, що для практичних задач матриця Гамільтоніана дуже велика. Вона зростає експоненційно з розміром системи, швидко стаючи надто великою (2n2^n, де nn — кількість кубітів) навіть для найпотужніших суперкомп'ютерів — зберегти або розв'язати її безпосередньо неможливо.

H=(H0,0H0,1H0,N1H1,0H1,1H1,N1HN1,0HN1,1HN1,N1)(N=2n)H = \begin{pmatrix} H_{0,0} & H_{0,1} & \cdots & H_{0,N-1} \\ H_{1,0} & H_{1,1} & \cdots & H_{1,N-1} \\ \vdots & \vdots & \ddots & \vdots \\ H_{N-1,0} & H_{N-1,1} & \cdots & H_{N-1,N-1} \end{pmatrix} \quad (N=2^n)

Щоб обійти це обмеження, використовують потужну стратегію — метод підпростору. Замість того, щоб працювати з усією матрицею, ми інтелектуально обираємо невеликий, але важливий фрагмент — «підпростір», — який, на нашу думку, містить найбільш суттєву інформацію про низькоенергетичний розв'язок, що нас цікавить.

(Hi,j)Full HamiltonianProjectH~Projected Hamiltonian=(b1Hb1b1HbLbLHb1bLHbL)Diagonalize(E000EL1)Eigenvalues\underset{\text{Full Hamiltonian}}{\begin{pmatrix} \ddots & \vdots \\ \cdots & H_{i,j} & \cdots \\ & \vdots & \ddots \end{pmatrix}} \quad \xrightarrow{\text{Project}} \quad \underset{\text{Projected Hamiltonian}}{\tilde{H}} = \begin{pmatrix} \langle b_1 | H | b_1 \rangle & \cdots & \langle b_1 | H | b_L \rangle \\ \vdots & \ddots & \vdots \\ \langle b_L | H | b_1 \rangle & \cdots & \langle b_L | H | b_L \rangle \end{pmatrix} \quad \xrightarrow{\text{Diagonalize}} \quad \underset{\text{Eigenvalues}}{\begin{pmatrix} E_0 & & 0 \\ & \ddots & \\ 0 & & E_{L-1} \end{pmatrix}}

Щойно цей малий підпростір визначено набором базисних станів {bi}\{|b_i\rangle\}, повний Гамільтоніан проектується на нього, утворюючи нову, меншу матрицю H~\tilde{H}. Кожен елемент цієї матриці обчислюється через базисні стани підпростору та вихідний Гамільтоніан як biHbj\langle b_i | H | b_j \rangle. Цю малу матрицю можна легко діагоналізувати на класичному комп'ютері, а отримані власні значення й будуть нашими оціненими енергіями.

Як ти вже, мабуть, здогадуєшся, успіх цього підходу суттєво залежить від вибору «хорошого» підпростору. Якщо наш підпростір не точно представляє справжній основний стан, кінцева відповідь буде неправильною. Саме тут у гру вступають квантові комп'ютери: вони дозволяють нам готувати та семплювати складні квантові стани, спроектовані для виявлення цих важливих підпросторів. Для справді масштабних задач — таких як складні хімічні структури або місця зв'язування — навіть спроектована матриця може бути важкою для діагоналізації. Тому такі задачі ідеально підходять для використання переваг як квантових, так і класичних обчислювальних ресурсів.

У наступних розділах ми розглянемо два просунутих алгоритми, SQD та SKQD, які використовують квантову механіку для пошуку та побудови цих підпросторів. Для більш глибокого занурення існує повний курс на IBM Quantum Learning, присвячений детальному розгляду цих тем. У межах нашого курсу ми обмежимось поясненням на високому рівні.

Квантова діагоналізація на основі семплювання

Квантова діагоналізація на основі семплювання (SQD) — це потужний варіаційний алгоритм, що реалізує метод підпростору квантовим чином. Він уникає дорогих і складних процедур, як-от тест Адамара, використовуючи квантовий комп'ютер для підготовки пробного стану та семплювання бітрядків, які визначають підпростір для класичної діагоналізації.

A schematic of the workflow specific to sample-based quantum diagonalization. The steps include a variational quantum circuit, using measurements to project the Hamiltonian into a subspace, then using a classical optimizer to update variational parameters in the circuit and repeating.

Алгоритм SQD можна розкласти на такі кроки:

Крок 1: Підготовка стану анзацу

Нехай H=j=1QαjPjH = \sum_{j=1}^Q \alpha_j P_j — Гамільтоніан на nn кубітах. Хоча справжній основний стан може мати підтримку на всіх 2n2^n базисних станах, SQD найефективніший у випадках, коли основний стан можна добре апроксимувати розрідженим підпростором (поліноміально великим набором бітрядків).

Для побудови цього підпростору ми починаємо з початкового стану ϕ0|\phi_0\rangle, наприклад стану Хартрі–Фока (HF) у хімії. Потім застосовуємо параметризовану квантову схему U(θ)U(\theta), яка відома як анзац.

A diagram showing the overlap of the computational basis states making up the ansatz and those making up the true ground state. Specifically, the image shows that the two regions will have some overlap, but might not perfectly match.

Ця діаграма ілюструє мету хорошого анзацу. Анзац готує квантовий стан, підтримка якого (набір базисних станів, з яких він складається) в ідеалі має мати великий перетин із підтримкою справжнього основного стану. Ця схема дозволяє швидко проектувати анзац на обчислювальні базисні стани, які далі використовуються в класичній діагоналізації. Іншими словами: нам не потрібно вгадувати анзац, який є основним станом; нам лише потрібно, щоб він містив ті самі базисні стани. Тоді класична діагоналізація спроектованого Гамільтоніана дасть нам суперпозицію базисних станів, що найкраще апроксимує основний стан.

Крок 2: Семплювання підпростору

Семплюючи зі схеми, підготовленої анзацом, ми отримуємо набір бітрядків {bj}j=1L\{b_j\}_{j=1}^L. Ці бітрядки визначають базис нашого обраного підпростору. Квантовий час виконання цього кроку визначається глибиною схеми та кількістю взятих семплів.

Крок 3: Проекція та класична діагоналізація

Використовуючи семпльовані бітрядки, ми проектуємо Гамільтоніан на підпростір, який вони охоплюють. Для кожної пари бітрядків (j,k)(j, k) ми класично обчислюємо матричний елемент H~jk=bjHbk\tilde{H}_{jk} = \langle b_j | H | b_k \rangle. Оскільки оператори Паулі є розрідженими, цей крок класично ефективний для фізичних Гамільтоніанів. Отримана мала матриця H~\tilde{H} потім діагоналізується на класичному процесорі для оцінювання основного стану та його енергії.

Крок 4: Оптимізація анзацу (необов'язково)

Процес можна зробити ітеративним. Розглядаючи оцінену енергію основного стану як цільову функцію, можна оптимізувати параметри схеми (θ\theta) методами на кшталт градієнтного спуску, покращуючи анзац і, відповідно, апроксимацію енергії в наступній ітерації.

Ключові переваги SQD

SQD пропонує кілька потужних властивостей, що робить його провідним кандидатом для демонстрації квантової переваги:

  • Висока стійкість до шуму: припустимо, що справжній основний стан підтримується лише двома бітрядками. Якщо їх було семпльовано хоча б раз — навіть якщо їхній перетин з анзацом невеликий — діагоналізація призначить їм відповідні ваги і фактично проігнорує всі інші сторонні, зашумлені бітрядки, які також могли потрапити у вибірку. Це вбудоване фільтрування робить SQD особливо стійким до шуму.
  • Класична перевірність: на відміну від QPE або VQAs, SQD дає класичну апроксимацію основного стану. Це означає, що будь-хто, маючи список бітрядків та їхніх ваг, може безпосередньо перерахувати та перевірити оцінку енергії на класичному комп'ютері.

SQD вже використовувався для оцінювання енергії дисоціації основного стану N2_2 та електронних властивостей кластерів [2Fe-2S] і [4Fe-4S] [2], зі схемами розміром до 77 кубітів і 10 570 вентилів.

Перевір своє розуміння

Правда чи хиба: SQD можна застосовувати до хімічних систем.

Відповідь:

Правда

Перевір своє розуміння

Назвемо множину всіх обчислювальних базисних станів, що складають твій анзац, AA. Назвемо множину всіх обчислювальних базисних станів, що складають справжній основний стан системи, GG. Яке з наведених нижче відповідає «хорошому» анзацу? Вибери всі правильні варіанти.

(a) AGA \subset G \\ (b) AGA \subseteq G\\ (c) GAG \subset A\\ (d) GAG \subseteq A\\

Відповідь:

(c) та (d)

SKQD (Квантова діагоналізація Крилова на основі семплювання)

Квантова діагоналізація Крилова на основі семплювання (SKQD) — ще один потужний квантовий алгоритм на основі семплювання, що будується на принципах SQD. Хоча його мета та сама — знайти хороший підпростір для діагоналізації — SKQD використовує більш структурований метод генерування бітрядків, особливо для задач на кшталт ґраткових Гамільтоніанів.

Ключова ідея SKQD полягає в тому, що замість оптимізації параметризованої схеми для пошуку хорошого анзацу можна довести збіжність до основного стану, семплюючи з набору станів, породжених власною природною часовою еволюцією системи — простору Крилова. Алгоритм SKQD можна розкласти на такі кроки:

Крок 1: Побудова простору Крилова за допомогою часової еволюції

Процес починається з початкового стану ϕ0.|\phi_0\rangle. Важливо, що цей початковий стан не обов'язково повинен мати «хороший» перетин з основним станом. Він лише повинен бути «поліноміально великим», тобто описуватися поліномом від розміру системи. Сам алгоритм далі наближатиме стан дедалі ближче до основного стану системи. SKQD застосовує оператор часової еволюції eiHte^{-iHt} для різних інтервалів часу. Це створює набір з dd різних квантових станів, визначених як:

ϕj=eiδtjHϕ0,for j=0,1,,d1|\phi_j\rangle = e^{-i \,\delta t j H}|\phi_0\rangle, \quad \text{for } j = 0, 1, \dots, d-1 \quad \text{}

Ця сукупність станів, еволюціонованих у часі, утворює базис Крилова. Цей крок особливо ефективний для ґраткових Гамільтоніанів, де кількість доданків у Гамільтоніані невелика. Для хімічних задач така часова еволюція може призводити до дуже глибоких схем, саме тому SQD часто рекомендується для цих випадків.

Крок 2: Семплювання з базисних станів Крилова

Далі збираються семпли бітрядків з кожного з dd різних станів (ϕ0,ϕ1,,ϕd1|\phi_0\rangle, |\phi_1\rangle, \dots, |\phi_{d-1}\rangle), підготовлених на попередньому кроці. Усі ці бітрядки об'єднуються в спільний пул і утворюють базис підпростору.

Крок 3: Проекція та класична діагоналізація

Цей крок ідентичний відповідному кроку в SQD. Зібрані бітрядки використовуються для проектування повного Гамільтоніана на підпростір, який вони охоплюють. Отримана мала матриця H~\tilde{H} потім діагоналізується на класичному комп'ютері для знаходження енергії основного стану.

Ключові переваги та гарантії SKQD

Структурований підхід SKQD забезпечує унікальні переваги:

  • Доведена збіжність: ключова перевага SKQD — його теоретична гарантія збіжності за конкретних, чітко визначених умов. Якщо справжній основний стан є розрідженим (може бути добре апроксимований поліноміальною кількістю бітрядків) і енергетична щілина до першого збудженого стану не надто мала, метод доведено працює ефективно. За цих умов SKQD гарантує, що знайде ключові бітрядки, які складають основний стан, і може апроксимувати енергію основного стану з високою точністю. Для цього потрібна лише поліноміальна кількість квантових експериментів і шотів. Ця гарантія ставить семпл-орієнтований підхід на строгу теоретичну основу, подібну до усталених методів на кшталт квантового оцінювання фази.

  • Спільні переваги з SQD: подібно до SQD, SKQD також має властивість стійкості до шуму. Іншими словами, якщо в наборі семпльованих бітрядків присутні всі «хороші» бітрядки, діагоналізація присвоює майже нульову вагу хибним бітрядкам, що робить процедуру стійкою до шуму. До того ж, оскільки розв'язок отримується на класичному HPC, енергія розв'язку класично перевірна.

В експериментах SKQD застосовувався з використанням до 70 кубітів і тисяч вентилів для вивчення основного стану складних чотири-домішкових моделей Андерсона, досягнувши відмінної відповідності з найсучаснішими класичними методами, такими як DMRG.[1]

Перевір своє розуміння

Яка частина алгоритму SKQD робить його більш придатним для фізичних задач, як-от спінові ґратки, ніж для хімічних задач? Чому?

Відповідь:

Часова еволюція вимагає схем Троттера, які є дуже глибокими для Гамільтоніанів, що є складними і нерозрідженими. Спін-ґраткові взаємодії керуються спіновими матрицями, еквівалентними матрицям Паулі. Тому Гамільтоніани спінових ґраток, особливо з взаємодіями між найближчими сусідами, зазвичай більш компактно виражаються через матриці Паулі.

SQD та SKQD як гетерогенні обчислення

Підсумовуючи, алгоритми на основі семплювання можна представити як комбінацію різних моделей програмування на наборі гетерогенних ресурсів. Наприклад, наш алгоритм можна представити у вигляді потоку задач.

A schematic of the workflow specific to sample-based quantum diagonalization. The steps include a variational quantum circuit, using measurements to project the Hamiltonian into a subspace, then using a classical optimizer to update variational parameters in the circuit and repeating.

Ця схема ілюструє фундаментальний чотириетапний робочий процес. Спочатку матимемо задачу підготовки квантової схеми, яка перекривається з нашим цільовим станом, потім задачу транспіляції, що вимагає лише класичних ресурсів. Далі — задача використання примітивів для виконання квантової схеми, яка вимагає квантових ресурсів. Нарешті, задача постобробки, яка сама по собі може бути паралельним алгоритмом діагоналізації, що виконується на кількох вузлах.

Крім того, ми можемо захотіти запустити один із цих алгоритмів багато разів, варіюючи наш анзац, або запускати їх повністю паралельно з різними популяціями.

A schematic of an SQD workload being split among several resources. It shows several processes running sequentially, using the results of one iteration to inform the next, but also performing many such processes in parallel.

Як зображено вище, ти можеш запускати кілька робочих процесів одночасно, виконуючи наступне:

  • Варіюючи параметри або структуру анзацу, щоб знайти найефективніший варіант.
  • Починаючи з різних початкових станів або конфігурацій («популяцій»), щоб уникнути локальних мінімумів і забезпечити більш надійний результат.

Цей багаторівневий підхід, що поєднує задача-орієнтовану гетерогенність із паралелізмом на рівні робочих процесів, є ключем до розкриття повного потенціалу цих алгоритмів.

Практика програмування

Попрактикуємо алгоритм SKQD, демонструючи гетерогенний робочий процес, описаний раніше. Процес розбито на чотири окремі етапи, кожен зі своїм Python-скриптом і відповідним shell-скриптом для подання завдань.

Відображення (mapping.py та mapping.sh)

Перший крок у нашому робочому процесі — визначити фізичну задачу та відобразити її у набір квантових схем.

mapping.py визначає параметри конкретної фізичної задачі — у цьому випадку моделі домішки Андерсона з сімома вузлами ванни (n_bath = 7). Він конструює одночастинкові (h1e) і двочастинкові (h2e) інтеграли, що представляють гамільтоніан системи.


...

n_bath = 7 # number of bath sites

...

# One body matrix elements in the "position" basis
h1e = -t * np.diag(np.ones(n_bath), k=1) - t * np.diag(np.ones(n_bath), k=-1)
h1e[impurity_index, impurity_index + 1] = -V
h1e[impurity_index + 1, impurity_index] = -V
h1e[impurity_index, impurity_index] = eps

# Two body matrix elements in the "position" basis
h2e = np.zeros((n_bath + 1, n_bath + 1, n_bath + 1, n_bath + 1))
h2e[impurity_index, impurity_index, impurity_index, impurity_index] = U

...

# The one-body time evolution
free_fermion_evolution = ffsim.qiskit.OrbitalRotationJW(n_modes, Utar)

# The two-body time evolution
def append_diagonal_evolution(dt, U, impurity_qubit, num_orb, q_circuit):
"""Append two-body time evolution to a quantum circuit."""
if U != 0:
q_circuit.append(
CPhaseGate(-dt / 2 * U),
[impurity_qubit, impurity_qubit + num_orb],
)

Далі скрипт генерує квантові схеми, необхідні для алгоритму SKQD. Спочатку він створює початковий стан (initial_state), а потім застосовує оператори еволюції в часі для різної кількості кроків (d = 8), щоб отримати різні базисні стани Крилова, ϕj=(eiHt)jϕ0|\phi_j\rangle = (e^{-iHt})^j |\phi_0\rangle.


# The reference state
def initial_state(q_circuit, norb, nocc):
"""Prepare an initial state."""
for i in range(nocc):
q_circuit.append(XGate(), [i])
q_circuit.append(XGate(), [norb + i])
rot = XXPlusYYGate(np.pi / 2, -np.pi / 2)

for i in range(3):
for j in range(nocc - i - 1, nocc + i, 2):
q_circuit.append(rot, [j, j + 1])
q_circuit.append(rot, [norb + j, norb + j + 1])
q_circuit.append(rot, [j + 1, j + 2])
q_circuit.append(rot, [norb + j + 1, norb + j + 2])

...

# Generate the initial state
qubits = QuantumRegister(2 * n_modes, name="q")
init_state = QuantumCircuit(qubits)
initial_state(init_state, n_modes, n_modes // 2)

...

d = 8 # Number of Krylov basis states
circuits = []
for i in range(d):
circ = init_state.copy()
circuits.append(circ)
for _ in range(i):
append_diagonal_evolution(dt, U, impurity_index, n_modes, circ)
circ.append(free_fermion_evolution, qubits)
append_diagonal_evolution(dt, U, impurity_index, n_modes, circ)
circ.measure_all()

print(circuits[0].draw(scale=0.4, fold=-1))

Скрипт зберігає список із 8 згенерованих схем (кожна з доданими вимірюваннями) у файл circuits.qpy.

mapping.sh — це пакетний скрипт Slurm для подання завдання mapping.py. Оскільки це класичне обчислення, він запитує ресурси зі звичайного розділу ЦП (--partition=normal).

#!/bin/bash
#
#SBATCH --job-name=sqd-mapping
#SBATCH --output=sqd-mapping.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/mapping.py

Оптимізація (optimization.py та optimization.sh)

Після того як схеми готові, їх потрібно оптимізувати та скомпілювати для ефективного виконання на цільовому квантовому обладнанні.

У optimization.py цей скрипт спочатку завантажує файл circuits.qpy, створений на етапі відображення, і отримує інформацію про квантові ресурси через QRMI() — менеджер квантових ресурсів. Потім він використовує generate_preset_pass_manager з Qiskit із високим рівнем оптимізації (optimization_level=3), щоб перетворити абстрактні логічні схеми на схеми у форматі набору інструкцій архітектури (ISA). Цей процес переписує схеми з використанням нативних вентилів обладнання та оптимізує їх для зменшення глибини та мінімізації похибок.


...
qrmi = QRMI()
resources = qrmi.resources()
quantum_resource = resources[0]
target = quantum_resource.target

pass_manager = generate_preset_pass_manager(
optimization_level=3,
target=target
)
isa_circuits = pass_manager.run(circuits)

Транспільовані схеми, готові для запуску на обладнанні, зберігаються у новий файл isa_circuits.qpy.

Як і скрипт відображення, це завдання Slurm також виконується на класичному розділі ЦП (--partition=normal), оскільки транспіляція є класичним завданням.

#!/bin/bash
#
#SBATCH --job-name=sqd-mapping
#SBATCH --output=sqd-mapping.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/mapping.py

Виконання (execution.py та execution.sh)

Це єдиний етап, де використовується квантовий комп'ютер. Тут ми виконуємо оптимізовані схеми та збираємо результати вимірювань.

execution.py завантажує оптимізований файл isa_circuits.qpy, потім ініціалізує примітив SamplerV2, підключений до квантового ресурсу. Далі він викликає sampler.run(), щоб виконати схеми на QPU із заданою кількістю знімків (shots=500).


...

qrmi = QRMI()
resources = qrmi.resources()
quantum_resource = resources[0]

# Sample from the circuits
noisy_sampler = Sampler(quantum_resource)
job = noisy_sampler.run(isa_circuits, shots=500)

Після завершення виконання виміряні результати (бітрядки) з усіх схем збираються та об'єднуються, а їхні лічильники зберігаються у файл counts.json.

Slurm-скрипт execution.sh відрізняється від решти на цьому етапі. Він запитує запуск у квантовому розділі (--partition=quantum) і конкретно вимагає один QPU (--gres=qpu:1).

#!/bin/bash
#
#SBATCH --job-name=sqd-execution
#SBATCH --output=sqd-execution.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=quantum
#SBATCH --gres=qpu:1

srun python /data/ch4/sqd/execution.py

Постобробка (postprocessing.py та postprocessing.sh)

На фінальному кроці ми повертаємося до класичного комп'ютера, щоб проаналізувати дані квантового експерименту та обчислити кінцевий результат: енергію основного стану цільової системи.

Програма postprocessing.py спочатку зчитує файл counts.json із результатами вимірювань. Потім вона відновлює гамільтоніан моделі Андерсона (використовуючи ті самі параметри, що й у mapping.py). Далі вона передає виміряні бітрядки та визначення гамільтоніана у функцію diagonalize_fermionic_hamiltonian. Ця функція виконує основну логіку SKQD: використовує бітрядки для побудови проєктованого гамільтоніана H~\tilde{H} і діагоналізує його, щоб знайти енергію основного стану.


...

def callback(results: list[SCIResult]):
result_history.append(results)
iteration = len(result_history)
print(f"Iteration {iteration}")
for i, result in enumerate(results):
print(f"\tSubsample {i}")
print(f"\t\tEnergy: {result.energy}")
print(f"\t\tSubspace dimension: {np.prod(result.sci_state.amplitudes.shape)}")

rng = np.random.default_rng(24)
result = diagonalize_fermionic_hamiltonian(
h1e,
h2e,
bit_array,
samples_per_batch=300,
norb=n_modes,
nelec=nelec,
num_batches=3,
max_iterations=10,
symmetrize_spin=True,
callback=callback,
seed=rng,
)

Насамкінець програма виводить обчислену енергію SKQD і порівнює її з відомою точною енергією для цієї задачі, показуючи підсумкову абсолютну похибку обчислень.

Фінальний скрипт завдання виконується на класичному розділі (--partition=normal), оскільки весь аналіз є класичним. Для великих підпросторів цей крок може потребувати більше класичних ресурсів HPC.

#!/bin/bash
#
#SBATCH --job-name=sqd-postprocessing
#SBATCH --output=sqd-postprocessing.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/postprocessing.py

Підсумок

Ось і все! Ми розглянули кілька концепцій і прикладів, які допоможуть тобі розпочати роботу з управління складними гібридними програмами. Звичайно, це лише початок усього, що можна зробити, поєднуючи квантові та класичні ресурси HPC.

Щоб дослідити більше сценаріїв використання та алгоритмів, переглядай нашу документацію і навчальні матеріали на IBM Quantum Platform, а також обов'язково завітай до ресурсів, наданих у наступному уроці, — там є більше інформації про алгоритми та програмне забезпечення як для обчислювальних учених, так і для адміністраторів центрів обробки даних.

Посилання

[1] Quantum-Centric Algorithm for Sample-Based Krylov Diagonalization. https://arxiv.org/abs/2501.09702

[2] Chemistry beyond the scale of exact diagonalization on a quantum-centric supercomputer. https://www.science.org/doi/10.1126/sciadv.adu9991