Langkau ke kandungan utama

Penepatan Kuantum Krylov Berasaskan Pensampelan (SKQD)

Pelajaran tentang penepatan kuantum Krylov berasaskan pensampelan (SKQD) ini menggabungkan kaedah yang dijelaskan dalam pelajaran-pelajaran sebelumnya. Ia terdiri daripada satu contoh yang memanfaatkan kerangka corak Qiskit:

  • Langkah 1: Petakan masalah kepada Circuit kuantum dan operator
  • Langkah 2: Optimumkan untuk perkakasan sasaran
  • Langkah 3: Laksanakan menggunakan Primitif Qiskit
  • Langkah 4: Pasca-proses

Langkah penting dalam kaedah penepatan kuantum berasaskan pensampelan ialah menghasilkan vektor berkualiti untuk subruang. Dalam pelajaran sebelumnya, kami menggunakan ansatz LUCJ untuk menghasilkan vektor subruang bagi Hamiltonian kimia. Dalam pelajaran ini, kami akan menggunakan keadaan Krylov kuantum[1] seperti yang dibincangkan dalam pelajaran 2. Pertama, kami akan mengkaji semula cara mencipta ruang Krylov pada komputer kuantum menggunakan operasi evolusi masa. Kami kemudian akan membuat sampel darinya. Kami akan memproyeksikan Hamiltonian sistem ke atas subruang yang disampling dan mentepatinya untuk menganggar tenaga keadaan asas. Algoritma ini terbukti dan cekap menumpu ke keadaan asas, di bawah andaian yang diterangkan dalam pelajaran 2.

0. Ruang Krylov​

Ingat bahawa ruang Krylov Kr\mathcal{K}^r berperingkat rr ialah ruang yang direntangi oleh vektor-vektor yang diperoleh dengan mendarab kuasa lebih tinggi matriks AA, sehingga rβˆ’1r-1, dengan vektor rujukan ∣v⟩\vert v \rangle.

Kr={∣v⟩,A∣v⟩,A2∣v⟩,...,Arβˆ’1∣v⟩}\mathcal{K}^r = \left\{ \vert v \rangle, A \vert v \rangle, A^2 \vert v \rangle, ..., A^{r-1} \vert v \rangle \right\}

Jika matriks AA ialah Hamiltonian HH, ruang yang sepadan disebut ruang Krylov kuasa KP\mathcal{K}_P. Dalam kes di mana AA ialah operator evolusi masa yang dijana oleh Hamiltonian U=eβˆ’iH(dt)U=e^{-iH(dt)}, ruang itu dirujuk sebagai ruang Krylov unitari KU\mathcal{K}_U. Subruang Krylov kuasa tidak boleh dijana secara langsung pada komputer kuantum kerana HH bukan operator unitari. Sebaliknya, kita boleh menggunakan operator evolusi masa U=eβˆ’iH(dt)U = e^{-iH(dt)} yang boleh ditunjukkan memberikan jaminan penumpuan yang serupa dengan ruang Krylov kuasa. Kuasa UU kemudian menjadi langkah masa yang berbeza Uk=eβˆ’iH(kdt)U^k = e^{-iH(k dt)} di mana k=0,1,2,...,(rβˆ’1)k = 0, 1, 2, ..., (r-1).

KUr={∣ψ⟩,U∣ψ⟩,U2∣ψ⟩,...,Urβˆ’1∣ψ⟩}\mathcal{K}_U^r = \left\{ \vert \psi \rangle, U \vert \psi \rangle, U^2 \vert \psi \rangle, ..., U^{r-1} \vert \psi \rangle \right\}

1. Petakan masalah kepada Circuit kuantum dan operator​

Dalam pelajaran ini, kami mempertimbangkan Hamiltonian untuk rantai spin-1/2 XX-Z antiferromagnet dengan L=22L = 22 tapak dengan syarat sempadan berkala:

H=βˆ‘i,jNJxy(XiXj+YiYj)+ZiZj H = \sum_{i, j}^{N} J_{xy} (X_{i} X_{j} + Y_{i} Y_{j}) + Z_{i} Z_{j}
# Added by doQumentation β€” required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-addon-sqd qiskit-addon-utils qiskit-ibm-runtime
from qiskit.transpiler import CouplingMap
from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian

num_spins = 22
coupling_map = CouplingMap.from_ring(num_spins)
H_op = generate_xyz_hamiltonian(coupling_map, coupling_constants=(0.3, 0.3, 1.0))

Untuk membina ruang Krylov, kita memerlukan tiga bahan utama:

  1. Pilihan dimensi Krylov (rr) dan langkah masa (dtdt).
  2. Keadaan awal (rujukan) (vektor ∣v⟩\vert v \rangle di atas) dengan pertindihan polinomial dengan keadaan sasaran (asas), di mana keadaan sasaran adalah jarang. Keperluan untuk pertindihan polinomial ini sama seperti dalam algoritma anggaran fasa kuantum.
  3. Operator evolusi masa Uk=eβˆ’iH(kβˆ—dt)U^{k}=e^{-iH(k * dt)} (k=0,1,2,...,rβˆ’1k = 0, 1, 2, ..., r-1).

Untuk nilai rr yang dipilih (dan, dtdt), kita akan mencipta rr Circuit kuantum berasingan dan membuat sampel darinya. Setiap Circuit kuantum dicipta dengan menggabungkan representasi Circuit kuantum keadaan rujukan dan operator evolusi masa untuk nilai kk.

Dimensi Krylov yang lebih besar meningkatkan penumpuan tenaga yang dianggar. Kami menetapkan dimensi kepada 55 dalam pelajaran ini untuk menggambarkan trend penumpuan.

Ref [2] menunjukkan bahawa langkah masa yang cukup kecil untuk KQD ialah Ο€/∣∣H∣∣\pi / \vert \vert H \vert \vert, dan lebih baik untuk meremehkan nilai ini daripada melebih-lebihkan. Sebaliknya, memilih dtdt yang terlalu kecil membawa kepada pengkondisian subruang Krylov yang lebih lemah, kerana vektor asas Krylov kurang berbeza dari satu langkah masa ke langkah masa berikutnya. Selain itu, walaupun pilihan dtdt ini terbukti mencukupi untuk penumpuan SKQD, dalam konteks berasaskan pensampelan ini, pilihan optimum dtdt dalam praktik adalah topik kajian berterusan. Dalam pelajaran ini, kami menetapkan dt=0.15dt = 0.15.

Selain dimensi Krylov dan langkah masa, kita perlu menetapkan bilangan langkah Trotter untuk evolusi masa. Menggunakan terlalu sedikit langkah membawa kepada ralat Trotterisasi yang lebih besar, manakala terlalu banyak langkah membawa kepada Circuit yang lebih dalam. Dalam pelajaran ini, kami menetapkan bilangan langkah Trotter kepada 66.

# Set parameters for quantum Krylov algorithm
krylov_dim = 5 # size of krylov subspace
dt = 0.15
num_trotter_steps = 6

Seterusnya, kita perlu memilih keadaan rujukan ∣ψ⟩\vert \psi \rangle yang mempunyai sedikit pertindihan dengan keadaan asas. Untuk Hamiltonian ini, kami menggunakan keadaan Neel dengan 1 dan 0 berselang-seli ∣...101...010...101⟩\vert ...101...010...101 \rangle sebagai keadaan rujukan kami.

# Prep `Neel` state as the reference state for evolution
from qiskit import QuantumCircuit

qc_state_prep = QuantumCircuit(num_spins)
for i in range(num_spins):
if i % 2 == 0:
qc_state_prep.x(i)

Akhir sekali, kita perlu memetakan operator evolusi masa kepada Circuit kuantum. Ini telah dilakukan dalam pelajaran 2, tetapi di sini kami akan memanfaatkan kaedah dalam Qiskit, khususnya kaedah bernama synthesis. Terdapat kaedah berbeza untuk mensintesis operator matematik kepada Circuit kuantum dengan Gate kuantum. Banyak teknik sedemikian tersedia dalam modul sintesis Qiskit. Kami akan menggunakan pendekatan LieTrotter untuk sintesis [3] [4].

from qiskit.circuit import QuantumRegister
from qiskit.circuit.library import PauliEvolutionGate
from qiskit.synthesis import LieTrotter

evol_gate = PauliEvolutionGate(
H_op, time=(dt / num_trotter_steps), synthesis=LieTrotter(reps=num_trotter_steps)
) # `U` operator

qr = QuantumRegister(num_spins)
qc_evol = QuantumCircuit(qr)
qc_evol.append(evol_gate, qargs=qr)

circuits = []
for rep in range(krylov_dim):
circ = qc_state_prep.copy()

# Repeating the `U` operator to implement U^0, U^1, U^2, and so on, for power Krylov space
for _ in range(rep):
circ.compose(other=qc_evol, inplace=True)

circ.measure_all()
circuits.append(circ)
circuits[1].decompose().draw("mpl", fold=-1)

Output of the previous code cell

circuits[2].decompose().draw("mpl", fold=-1)

Output of the previous code cell

2. Optimumkan untuk perkakasan sasaran​

Setelah mencipta Circuit, kita boleh mengoptimumkannya untuk perkakasan sasaran. Kami memilih QPU berskala utiliti.

import warnings

from qiskit import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService

warnings.filterwarnings("ignore")

service = QiskitRuntimeService()
# Use the least-busy backend or specify a quantum computer using the syntax commented out below.
backend = service.least_busy(operational=True, simulator=False)
# backend = service.backend("ibm_brisbane")

Sekarang, kami men-transpile Circuit ke Backend sasaran menggunakan pengurus laluan pra-tetap.

pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
isa_circuits = pm.run(circuits=circuits)

3. Laksanakan pada perkakasan sasaran​

Setelah mengoptimumkan Circuit untuk pelaksanaan perkakasan, kami sedia untuk menjalankannya pada perkakasan sasaran dan mengumpulkan sampel untuk anggaran tenaga keadaan asas.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)
job = sampler.run(isa_circuits, shots=100_000) # Takes approximately 2m 58s of QPU time
counts_all = [job.result()[k].data.meas.get_counts() for k in range(krylov_dim)]

4. Pasca-proses keputusan​

Seterusnya, kami mengagregat kiraan untuk dimensi Krylov yang meningkat secara kumulatif. Menggunakan kiraan kumulatif, kami akan merentangi subruang untuk dimensi Krylov yang meningkat dan menganalisis tingkah laku penumpuan.

from collections import Counter

counts_cumulative = []
for i in range(krylov_dim):
counter = Counter()
for d in counts_all[: i + 1]:
counter.update(d)

counts = dict(counter)
counts_cumulative.append(counts)

Untuk memproyeksikan dan mentepati Hamiltonian, kami menggunakan keupayaan daripada qiskit-addon-sqd. Addon ini menawarkan fungsi untuk memproyeksikan Hamiltonian berasaskan rentetan Pauli ke atas subruang dan menyelesaikan nilai eigen menggunakan SciPy.

from qiskit_addon_sqd.counts import counts_to_arrays
from qiskit_addon_sqd.qubit import solve_qubit

Pada dasarnya, kita boleh menapis rentetan bit dengan corak yang tidak betul sebelum merentangi subruang. Sebagai contoh, keadaan asas untuk Hamiltonian antiferromagnet dalam pelajaran ini biasanya mempunyai bilangan spin "atas" dan "bawah" yang sama, iaitu bilangan "1" dalam rentetan bit mestilah tepat separuh daripada jumlah bilangan bit (spin) dalam sistem. Fungsi berikut menapis rentetan bit dengan bilangan "1" yang tidak betul daripada kiraan.

# Filters out bitstrings that do not have specified number (`num_ones`) of `1` bits.
def postselect_counts(counts, num_ones):
filtered_counts = {}
for bitstring, freq in counts.items():
if bitstring.count("1") == num_ones:
filtered_counts[bitstring] = freq

return filtered_counts

Menggunakan rentetan bit dengan bilangan elektron atas/bawah yang betul, kami merentangi subruang dan mengira nilai eigen untuk dimensi Krylov yang meningkat. Bergantung pada saiz masalah dan sumber klasik yang tersedia, kami mungkin perlu menggunakan subpensampelan (serupa dengan pelajaran tentang SQD) untuk mengekalkan dimensi subruang dalam had yang terkawal. Selain itu, kami boleh menggunakan konsep pemulihan konfigurasi serupa dengan Pelajaran 4. Kami boleh mengira penghunian elektron per tapak daripada eigen-keadaan yang dibina semula dan menggunakan maklumat tersebut untuk membetulkan rentetan bit dengan bilangan elektron atas/bawah yang tidak betul. Kami tinggalkan ini sebagai latihan untuk pembaca yang berminat.

import numpy as np

num_batches = 10
rand_seed = 0
scipy_kwargs = {"k": 2, "which": "SA"}

ground_state_energies = []
for idx, counts in enumerate(counts_cumulative):
counts = postselect_counts(counts, num_ones=num_spins // 2)
bitstring_matrix, probs = counts_to_arrays(counts=counts)

eigenvals, eigenstates = solve_qubit(
bitstring_matrix, H_op, verbose=False, **scipy_kwargs
)
gs_en = np.min(eigenvals)
ground_state_energies.append(gs_en)

Seterusnya, kami memplot tenaga yang dikira sebagai fungsi dimensi Krylov dan membandingkan dengan tenaga tepat. Tenaga tepat dikira secara berasingan menggunakan kaedah Brute force klasik. Kita dapat melihat bahawa tenaga keadaan asas yang dianggar menumpu dengan peningkatan dimensi ruang Krylov. Walaupun dimensi Krylov 55 adalah terhad, hasilnya masih menunjukkan penumpuan yang mengagumkan, yang dijangka bertambah baik dengan dimensi Krylov yang lebih besar [1].

import matplotlib.pyplot as plt

exact_gs_en = -23.934184
plt.plot(
range(1, krylov_dim + 1),
ground_state_energies,
color="blue",
linestyle="-.",
label="estimate",
)
plt.plot(
range(1, krylov_dim + 1),
[exact_gs_en] * krylov_dim,
color="red",
linestyle="-",
label="exact",
)
plt.xticks(range(1, krylov_dim + 1), range(1, krylov_dim + 1))
plt.legend()
plt.xlabel("Krylov space dimension")
plt.ylabel("Energy")
plt.ylim([-24, -22.50])
plt.title(
"Estimating Ground state energy with Sample-based Krylov Quantum Diagonalization"
)
plt.show()

Output of the previous code cell

Semak pemahaman kamu​

Baca soalan di bawah, fikirkan jawapan kamu, kemudian klik segitiga untuk mendedahkan penyelesaian.

Apakah yang boleh dilakukan untuk meningkatkan penumpuan dalam plot di atas?

Jawapan:

Tingkatkan dimensi Krylov. Secara umum, seseorang juga boleh meningkatkan bilangan shots, tetapi ini sudah agak tinggi dalam pengiraan di atas.

Apakah kelebihan utama SKQD berbanding (a) SQD, dan (b) KQD?

Jawapan:

Mungkin ada jawapan lain yang sah, tetapi jawapan lengkap harus merangkumi perkara berikut:

(a) SKQD dilengkapi dengan jaminan penumpuan yang tidak dimiliki SQD. Dalam SQD kamu sama ada perlu membuat tekaan yang sangat baik untuk ansatz kamu yang mempunyai pertindihan yang sangat baik dengan sokongan keadaan asas dalam asas pengkomputeran, atau kamu perlu memperkenalkan komponen variasional ke dalam pengiraan untuk membuat sampel keluarga ansaetze.

(b) SKQD memerlukan masa QPU yang jauh lebih sedikit, kerana ia mengelakkan pengiraan elemen matriks yang mahal melalui ujian Hadamard.

5. Ringkasan​

  • Anggaran tenaga keadaan asas melalui pensampelan keadaan asas Krylov sangat sesuai untuk model kekisi termasuk sistem spin, masalah jirim pekat, dan teori tolok kekisi. Pendekatan ini berskala jauh lebih baik daripada VQE, kerana ia tidak memerlukan pengoptimuman ke atas banyak parameter dalam ansatz variasional seperti dalam VQE, atau dalam SQD berasaskan ansatz heuristik (contohnya, masalah kimia dalam pelajaran sebelumnya).
    • Untuk mengekalkan kedalaman Circuit yang rendah, adalah bijak untuk menangani masalah kekisi yang sesuai untuk perkakasan pra-toleransi kesalahan.
  • SKQD tidak menghadapi masalah pengukuran kuantum seperti dalam VQE. Tiada kumpulan operator Pauli yang bertukar-ganti yang perlu dianggar.
  • SKQD tahan terhadap sampel yang bising kerana seseorang boleh menggunakan rutin pemilihan pasca yang khusus masalah (contohnya, menapis rentetan bit yang tidak mematuhi corak khusus masalah) atau menanggung overhead penepatan klasik (iaitu, mentepati dalam subruang yang lebih besar) untuk menghapuskan kesan bunyi secara berkesan.

Rujukan​

[1] Jeffery Yu et al., "Quantum-Centric Algorithm for Sample-Based Krylov Diagonalization" (2025). arxiv:quant-ph/2501.09702.

[2] Ethan N. Epperly, Lin Lin, and Yuji Nakatsukasa. "A theory of quantum subspace diagonalization". SIAM Journal on Matrix Analysis and Applications 43, 1263–1290 (2022).

[2] N. Hatano and M. Suzuki, "Finding Exponential Product Formulas of Higher Orders" (2005). arXiv:math-ph/0506007.

[4] D. Berry, G. Ahokas, R. Cleve and B. Sanders, "Efficient quantum algorithms for simulating sparse Hamiltonians" (2006). arXiv:quant-ph/0508139.

Source: IBM Quantum docs β€” updated 5 Mac 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 26 Mac 2026