Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

Dynamics Simulator - Qiskit Function oleh Q-CTRL Fire Opal

Lihat rujukan API.

nota

Qiskit Functions ialah ciri eksperimen yang hanya tersedia kepada pengguna Pelan Premium, Pelan Flex dan Pelan On-Prem (melalui API IBM Quantum Platform) IBM Quantum®. Ia berada dalam status keluaran pratonton dan tertakluk kepada perubahan.

Gambaran keseluruhan​

Q-CTRL Dynamics Simulator ialah Qiskit Function aplikasi untuk mensimulasikan evolusi masa model jasad banyak kuantum yang disokong pada perkakasan IBM Quantum. Daripada membina litar kuantum sendiri, anda menyatakan model fizikal, keadaan awal, parameter evolusi masa dan observabel yang hendak diukur.

Fungsi ini membina dan melaksanakan litar dinamik yang diperlukan serta menggunakan aliran kerja pengoptimuman dan penindasan ralat Fire Opal yang peka perkakasan. Hasilnya ialah jejak masa nilai jangkaan bagi observabel yang anda minta. Oleh sebab fungsi ini menggunakan penindasan ralat secara automatik, anda boleh menjalankan litar pada kedalaman rekod dan masih melihat isyarat yang bermakna. Dynamics Simulator memberikan ketepatan penyelesaian yang setanding dengan alat klasik terkini sedia ada dan menunjukkan kelebihan yang nyata dari segi kelajuan.

Ujian dunia sebenar mencapai persetujuan dalam lingkungan 1% ralat punca min kuasa dua (RMSE) apabila dibandingkan dengan simulasi rangkaian tensor klasik beresolusi tertinggi. Ujian bebas daripada komuniti penyelidikan telah mengesahkan bahawa komputer kuantum kekal tepat walaupun melangkaui demonstrasi awal Q-CTRL.

Two plots of classical tensor-network simulations at bond dimensions χ from 64 to 4096. The left plot shows the RMSE against time t, which stays near 0.01 until it rises sharply, later for larger bond dimensions. The right plot shows the simulation time in minutes against time t on a logarithmic scale, which increases with bond dimension.

Penanda aras​

Bilangan tapak menentukan berapa banyak qubit diperlukan, manakala bilangan langkah Trotter mengawal kedalaman litar evolusi masa. Setiap tapak kekisi menggunakan dua qubit untuk mewakili hunian spin-atas dan spin-bawah.

Aliran kerja ini telah ditunjukkan untuk rantai 60 tapak (120 qubit) dengan 30 langkah Trotter, dan untuk rantai 31 tapak (62 qubit) dengan 90 langkah Trotter. Jadual di bawah menunjukkan sumber litar dan masa pelaksanaan QPU daripada eksperimen yang dilaporkan, yang dijalankan pada peranti IBM® Heron r3 (ibm_boston) dengan 20,000 shot bagi setiap litar.

Saiz sistemLangkah TrotterKedalaman dua qubitBilangan get dua qubitMasa QPUMasa QPU dengan REM + DR
10 tapak (20 qubit)301521,4572m 46s4m 25s
10 tapak (20 qubit)603022,8975m 36s8m 42s
10 tapak (20 qubit)904524,3378m 46s13m 26s
31 tapak (62 qubit)301524,6492m 46s4m 25s
31 tapak (62 qubit)603029,2395m 36s8m 42s
31 tapak (62 qubit)9045213,8298m 46s13m 26s
60 tapak (120 qubit)301529,0572m 46s4m 25s

Bagi bilangan langkah Trotter yang tetap, kedalaman litar dan masa QPU yang dilaporkan kekal sama merentas saiz sistem yang diuji, manakala bilangan get dua qubit meningkat. Meningkatkan bilangan langkah menghasilkan litar yang lebih dalam dan memerlukan lebih banyak masa QPU.

Di sini, masa QPU ialah masa pelaksanaan perkakasan terkumpul bagi litar simulasi utama. Lajur terakhir turut merangkumi masa QPU untuk pencirian hingar yang digunakan dalam pengurangan ralat bacaan (REM) dan pemulihan pereputan (DR). Panduan ini menggunakan contoh Fermi-Hubbard satu dimensi yang kecil untuk menunjukkan aliran kerja lengkap daripada mentakrifkan model hingga memplot dinamik yang diukur.

Perihalan fungsi​

Dinamik kuantum menerangkan bagaimana sistem kuantum berubah mengikut masa. Mengkaji evolusi ini membantu anda memahami bagaimana zarah bergerak, bagaimana korelasi berkembang, dan bagaimana sistem bertindak balas terhadap perubahan pada keadaan atau Hamiltoniannya.

Model Fermi-Hubbard menerangkan fermion yang bergerak antara tapak kekisi dan berinteraksi apabila menduduki tapak yang sama. Persaingan antara lompatan dan interaksi menjadikannya model yang berguna untuk mengkaji elektron berkorelasi kuat. Evolusi masanya boleh mendedahkan bagaimana spin dan cas merambat, dan bagaimana sistem yang pada mulanya tersusun mengendur.

Model​

Dynamics Simulator menyokong rantai Fermi-Hubbard satu dimensi dengan sempadan terbuka. Bagi rantai LL tapak, Hamiltonian ditakrifkan seperti berikut:

H=−∑i=0L−2∑σ∈{↑,↓}th,i(ciσ†ci+1,σ+ci+1,σ†ciσ)+∑i=0L−1Uini↑ni↓−∑i=0L−1∑σ∈{↑,↓}μiniσ.H = -\sum_{i=0}^{L-2}\sum_{\sigma\in\{\uparrow,\downarrow\}} t_{h,i} \left( c^\dagger_{i\sigma}c_{i+1,\sigma} + c^\dagger_{i+1,\sigma}c_{i\sigma} \right) +\sum_{i=0}^{L-1}U_i n_{i\uparrow}n_{i\downarrow} -\sum_{i=0}^{L-1}\sum_{\sigma\in\{\uparrow,\downarrow\}} \mu_i n_{i\sigma}.

Di sini, ciσ†c^\dagger_{i\sigma} dan ciσc_{i\sigma} mencipta dan memusnahkan fermion dengan spin σ\sigma pada tapak ii. Pengendali nombor niσ=ciσ†ciσn_{i\sigma}=c^\dagger_{i\sigma}c_{i\sigma} mengukur hunian orbital spin itu.

Input model menentukan pekali berikut:

  • hopping_amplitude: th,it_{h,i}, yang mengawal lompatan antara tapak jiran ii dan i+1i+1.

  • on_site_interaction: UiU_i, interaksi antara fermion spin-atas dan spin-bawah yang menduduki tapak yang sama.

  • chemical_potential: μi\mu_i, keupayaan kimia setempat, yang memasuki Hamiltonian dengan tanda tolak.

Berikan skalar untuk menggunakan pekali yang sama di sepanjang rantai, atau senarai untuk menentukan pekali bagi ikatan atau tapak individu.

Dalam unit di mana ℏ=1\hbar=1, keadaan awal berevolusi seperti berikut:

∣ψ(t)⟩=e−iHt∣ψ(0)⟩.|\psi(t)\rangle=e^{-iHt}|\psi(0)\rangle.

Fungsi ini menganggarkan nilai jangkaan bagi observabel yang anda nyatakan pada masa simulasi berturut-turut.

Aliran kerja​

Aliran kerja fungsi ini terdiri daripada langkah berikut:

  1. Sintesis algoritma: Fungsi ini menggunakan tetapan Hamiltonian dan masa simulasi untuk membina jujukan Trotter-Suzuki yang dioptimumkan, yang mengurangkan kedalaman litar sambil mengambil kira ketepatan simulasi.

  2. Pemetaan peka perkakasan: Fungsi ini memetakan dan menghalakan litar dengan menggunakan ketersambungan qubit dan ciri ralat bagi backend IBM Quantum yang dipilih.

  3. Penindasan ralat lapisan fizikal: Fire Opal menggabungkan penyahgandingan dinamik dan pembetulan peringkat denyut untuk menindas hingar daripada persekitaran dan crosstalk semasa pelaksanaan pada perkakasan.

Fungsi ini mengurus peringkat ini secara automatik dan mengembalikan nilai jangkaan bagi observabel yang diminta mengikut masa.

Anda mentakrifkan masalah fizikal dan tetapan simulasi melalui input fungsi. Antara muka semasa menyokong evolusi masa Trotter, di mana time_step menetapkan tempoh setiap langkah dan step_count menetapkan bilangan langkah.

Untuk butiran tambahan, lihat gambaran keseluruhan simulator dinamik Fire Opal dan rujukan API simulate_dynamics.

Mulakan​

Cari maklumat akses untuk Qiskit Function ini dalam Qiskit Functions Catalog.

Panduan ini menunjukkan cara memuatkan Dynamics Simulator dan mensimulasikan rantai Fermi-Hubbard empat tapak. Kod berikut mengandaikan bahawa anda telah menyimpan kunci API IBM Quantum Platform dan CRN instans anda ke persekitaran tempatan anda.

Untuk arahan penyediaan akaun dan pemasangan klien, lihat Mulakan dengan Qiskit Functions.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"matplotlib": "matplotlib", "numpy": "numpy", "qctrlvisualizer": "qctrlvisualizer", "qiskit_ibm_catalog": "qiskit-ibm-catalog"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# Access the Q-CTRL Dynamics Simulator Qiskit Function.
sim_qf = catalog.load("q-ctrl/dynamics-simulator")
# Check the list of backends you have access to
catalog.backends()
[<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_kingston')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_phoenix')>,
<IBMBackend('ibm_pittsburgh')>]
# Select the backend you want to use
backend = catalog.backend("ibm_phoenix")

Contoh: Simulasikan rantai Fermi-Hubbard empat tapak​

Pertimbangkan rantai Fermi-Hubbard satu dimensi empat tapak dengan amplitud lompatan th=1t_h=1, tiada interaksi dalam tapak, dan keupayaan kimia sifar. Satu fermion spin-atas bermula pada tapak 0 dan berevolusi merentasi rantai.

Masalah kecil ini memastikan tumpuan kekal pada aliran kerja Dynamics Simulator:

  1. Takrifkan model dan simulasi.

  2. Takrifkan keadaan awal dan observabel.

  3. Hantar kerja Qiskit Function.

  4. Dapatkan nilai jangkaan.

  5. Plotkan dinamik.

1. Takrifkan masalah​

site_count = 4

model = {
"hopping_amplitude": 1.0,
"on_site_interaction": 0.0,
"chemical_potential": 0.0,
}

simulation = {
"time_step": 0.2,
"step_count": 8,
}

initial_state = "eeeu"

observables = [
{
"operators": [[["Nup", site]]],
"coefficients": [1.0],
}
for site in range(site_count)
]

shot_count = 2048

Senarai observabel mengukur hunian spin-atas

⟨ni↑⟩\langle n_{i\uparrow} \rangle

pada setiap tapak. Observabel dikembalikan mengikut susunan yang sama seperti ketika ia dibekalkan.

2. Jalankan simulasi dinamik​

Hantar masalah melalui Qiskit Function. Qiskit Functions Catalog mengendalikan pengesahan IBM Quantum, jadi anda tidak perlu menghantar bukti kelayakan Fire Opal atau penyedia perkakasan yang berasingan kepada sim_qf.run().

job = sim_qf.run(
model=model,
simulation=simulation,
observables=observables,
initial_state=initial_state,
shots=shot_count,
backend_name=backend.name,
)
print(job.job_id, job.status())
68202fad-6919-425d-8fd2-c1c649cd15b1 DONE

Objek yang dikembalikan ialah kerja Qiskit Function. Anda boleh menyimpan ID kerja untuk mendapatkan semula atau memeriksa beban kerja kemudian.

3. Dapatkan hasil​

result = job.result()

print("Result keys:", sorted(result.keys()))
print("Warnings:", result.get("warnings", []))
Result keys: ['metadata', 'observable_expectation_values', 'observables', 'warnings']
Warnings: []

Tukarkan nilai jangkaan observabel kepada tatasusunan NumPy. Setiap baris sepadan dengan satu observabel, dan setiap lajur sepadan dengan masa simulasi yang direkodkan, bermula pada t=0t=0. Untuk contoh ini, empat baris mengandungi hunian spin-atas bagi tapak 0 hingga 3.

import numpy as np

expectation_values = np.asarray(
result["observable_expectation_values"],
dtype=float,
)

print("Expectation-value array shape:", expectation_values.shape)
Expectation-value array shape: (4, 9)

4. Visualisasikan dinamik​

Keadaan awal mengandungi satu fermion spin-atas dan tiada fermion spin-bawah. Evolusinya oleh itu kekal dalam subruang zarah tunggal, yang empat keadaan asasnya sepadan dengan fermion yang menduduki tapak 0, 1, 2 dan 3.

Dalam subruang ini, Hamiltonian menghubungkan tapak berjiran dengan amplitud lompatan −th-t_h. Untuk parameter yang digunakan di sini,

H1p=−th(0100101001010010).H_{\mathrm{1p}} = -t_h \begin{pmatrix} 0 & 1 & 0 & 0 \\ 1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{pmatrix}.

Pepenjangkan matriks ini dengan NumPy dan evolusikan keadaan awal pada masa yang sama seperti yang dikembalikan oleh Dynamics Simulator. Kuasa dua magnitud setiap amplitud keadaan memberikan penghunian spin-atas bagi tapak yang sepadan.

Pengiraan ini memberikan evolusi Hamiltonian yang tepat. Perbezaan antara anggaran perkakasan dan rujukan ini boleh merangkumi langkah Trotter terhingga, statistik pengukuran dan ralat perkakasan baki.

times = np.arange(expectation_values.shape[1]) * simulation["time_step"]

# This reference is specific to a single spin-up fermion.
if (
len(initial_state) != site_count
or initial_state.count("u") != 1
or initial_state.count("e") != site_count - 1
):
raise ValueError(
"This reference requires one spin-up fermion and otherwise empty sites."
)

# Build the Hamiltonian in the single-particle subspace.
hamiltonian = -model["hopping_amplitude"] * (
np.eye(site_count, k=1) + np.eye(site_count, k=-1)
)
hamiltonian -= model["chemical_potential"] * np.eye(site_count)

# The rightmost character of initial_state corresponds to site 0.
initial_amplitudes = np.zeros(site_count, dtype=complex)
initial_site = initial_state[::-1].index("u")
initial_amplitudes[initial_site] = 1.0

# Evolve the initial state in the Hamiltonian eigenbasis.
energies, eigenvectors = np.linalg.eigh(hamiltonian)
initial_coefficients = eigenvectors.conj().T @ initial_amplitudes

phases = np.exp(-1j * np.outer(energies, times))
states = eigenvectors @ (initial_coefficients[:, None] * phases)

ideal_expectation_values = np.abs(states) ** 2

Plotkan satu panel bagi setiap tapak. Lengkung pepejal menunjukkan rujukan tepat pada masa yang direkodkan, dan penanda menunjukkan anggaran perkakasan yang dikembalikan oleh Dynamics Simulator.

import matplotlib.pyplot as plt
import qctrlvisualizer as qv
from qctrlvisualizer import QCTRL_STYLE_COLORS as colors

plt.style.use(qv.get_qctrl_style())

fig, ax = plt.subplots(figsize=(10, 6))

for site in range(len(expectation_values)):
site_color = colors[site % len(colors)]

ax.plot(
times,
ideal_expectation_values[site],
color=site_color,
linewidth=2,
label=f"Site {site}: exact reference",
)

ax.plot(
times,
expectation_values[site],
color=site_color,
linestyle="--",
linewidth=1.5,
marker="o",
markersize=5,
label=f"Site {site}: hardware estimate",
)

ax.set_xlim(times[0], times[-1])
ax.set_ylim(-0.05, 1.05)

ax.set_xlabel(r"Time (units of $\hbar/t_h$)")
ax.set_ylabel(r"$\langle n_{i\uparrow} \rangle$")
ax.set_title("Spin-up occupation dynamics")

ax.legend(
ncol=2,
fontsize=10,
loc="best",
)

fig.tight_layout()
plt.show()

Output of the previous code cell

Pada t=0t=0, penghunian spin-atas yang tepat ialah 1 pada tapak 0 dan 0 pada tapak lain. Apabila sistem berevolusi, lompatan menyebarkan kebarangkalian zarah merentasi rantai. Penghunian tapak 1 meningkat dahulu, diikuti peningkatan penghunian pada tapak 2 dan 3. Untuk parameter dalam contoh ini, masa terakhir yang direkodkan ialah t=1.6t=1.6. Penghunian tepat tapak 0 hingga 3 masing-masing adalah lebih kurang 0.026, 0.370, 0.392 dan 0.211.

Penghunian tepat memenuhi persamaan berikut pada setiap masa, yang mencerminkan keabadian bilangan zarah:

∑i=03⟨ni↑(t)⟩=1\sum_{i=0}^{3}\langle n_{i\uparrow}(t)\rangle=1

Penghunian tapak individu boleh naik dan turun apabila zarah berevolusi melalui rantai terhingga.

Dapatkan mesej ralat​

Jika beban kerja memasuki keadaan ERROR, panggil job.result() untuk mendapatkan mesej ralat. Anda juga boleh memeriksa log fungsi, jika tersedia.

print(job.status())

if job.status() == "ERROR":
print(job.result())
print(job.logs())
DONE

Isu pengesahan input yang lazim termasuk model atau kaedah simulasi yang tidak disokong, rentetan keadaan awal yang terlalu panjang, sebutan dan pekali observable yang tidak sepadan, atau observable yang merujuk tapak di luar rentetan keadaan awal.

Dapatkan sokongan​

Untuk soalan tentang Dynamics Simulator atau gelagat Fire Opal, lihat dokumentasi Q-CTRL atau hubungi Q-CTRL.

Untuk pengesahan Qiskit Functions, pengurusan job atau akses IBM Quantum Platform, lihat dokumentasi Qiskit Functions.

Langkah seterusnya​

Cadangan