Lewati ke konten utama

QUICK-PDE: Sebuah Qiskit Function oleh ColibriTD

Lihat referensi API

catatan

Qiskit Functions adalah fitur eksperimental yang tersedia untuk pengguna IBM Quantum® Premium Plan, Flex Plan, dan On-Prem (via IBM Quantum Platform API) Plan. Fitur ini berstatus rilis pratinjau dan dapat berubah sewaktu-waktu.

Ikhtisar

Solver Persamaan Diferensial Parsial (PDE) yang disajikan di sini merupakan bagian dari platform Quantum Innovative Computing Kit (QUICK) kami (QUICK-PDE), dan dikemas sebagai Qiskit Function. Dengan fungsi QUICK-PDE, kamu bisa menyelesaikan persamaan diferensial parsial khusus domain di IBM Quantum QPU. Fungsi ini didasarkan pada algoritma yang dijelaskan dalam makalah deskripsi H-DES dari ColibriTD. Algoritma ini mampu memecahkan masalah multi-fisika yang kompleks, dimulai dari Computational Fluid Dynamics (CFD) dan Material Deformation (MD), serta kasus penggunaan lainnya yang segera hadir.

Untuk menangani persamaan diferensial, solusi percobaan dikodekan sebagai kombinasi linier dari fungsi ortogonal (biasanya polinomial Chebyshev, lebih tepatnya 2n2^n di antaranya di mana nn adalah jumlah qubit yang mengkodekan fungsimu), diparametrikan oleh sudut-sudut dari Variable Quantum Circuit (VQC). Ansatz menghasilkan state yang mengkodekan fungsi, yang dievaluasi oleh observabel yang kombinasinya memungkinkan evaluasi fungsi di semua titik. Kamu kemudian bisa mengevaluasi fungsi loss di mana persamaan diferensial dikodekan, dan menyetel ulang sudut-sudut dalam loop hybrid, seperti yang ditunjukkan berikut ini. Solusi percobaan secara bertahap semakin mendekati solusi sebenarnya hingga kamu mendapatkan hasil yang memuaskan.

Alur kerja fungsi QUICK-PDE

Selain loop hybrid ini, kamu juga bisa menggabungkan beberapa optimizer secara berantai. Ini berguna ketika kamu ingin optimizer global menemukan sekumpulan sudut yang bagus, lalu optimizer yang lebih halus mengikuti gradien menuju sekumpulan sudut tetangga terbaik. Dalam kasus computational fluid dynamics (CFD), urutan optimasi default menghasilkan hasil terbaik — tetapi dalam kasus material deformation (MD), meskipun default memberikan hasil yang baik, kamu bisa mengonfigurasinya lebih lanjut untuk manfaat spesifik masalah.

Perhatikan bahwa untuk setiap variabel fungsi, kita menentukan jumlah qubit (yang bisa kamu ubah-ubah). Dengan menumpuk 10 sirkuit identik dan mengevaluasi 10 observabel identik pada qubit berbeda sepanjang satu sirkuit besar, kamu bisa melakukan mitigasi noise dalam proses optimasi CMA, mengandalkan metode noise learner, dan secara signifikan mengurangi jumlah shot yang dibutuhkan.

Computational Fluid Dynamics

Persamaan Burgers' tanpa viskositas memodelkan aliran fluida non-viskos sebagai berikut:

ut+uux=0,\frac{\partial u}{\partial t} + u\frac{\partial u}{\partial x} = 0,

uu merepresentasikan medan kecepatan fluida. Kasus penggunaan ini memiliki kondisi batas temporal: kamu bisa memilih kondisi awal lalu membiarkan sistem berelaksasi. Saat ini, satu-satunya kondisi awal yang diterima adalah fungsi linear: ax+bax + b.

Argumen untuk persamaan diferensial CFD berada pada grid tetap, sebagai berikut:

  • tt berada antara 0 dan 0.95 dengan 30 titik sampel. xx berada antara 0 dan 0.95 dengan ukuran langkah 0.2375.

Deformasi Material

Kasus penggunaan ini berfokus pada deformasi hypoelastic dengan uji tarik satu dimensi, di mana sebuah batang yang terpasang di ruang ditarik di ujung lainnya. Kami mendeskripsikan masalahnya sebagai berikut:

uσ3K23ϵ0(σσ03)n=0u' - \frac{\sigma}{3K} - \frac{2}{\sqrt{3}}\epsilon_0\left(\frac{\sigma'}{\sigma_0\sqrt{3}}\right)^n = 0

σb=0,\sigma' - b = 0,

KK merepresentasikan modulus bulk material yang direntangkan, nn eksponen dari hukum pangkat, bb gaya per satuan massa, ϵ0\epsilon_0 batas tegangan proporsional, σ0\sigma_0 batas regangan proporsional, uu fungsi tegangan, dan σ\sigma fungsi regangan.

Batang yang dipertimbangkan memiliki panjang satuan. Kasus penggunaan ini memiliki kondisi batas untuk tegangan permukaan tt, atau jumlah kerja yang dibutuhkan untuk meregangkan batang.

Argumen untuk persamaan diferensial MD berada pada grid tetap, sebagai berikut:

  • xx berada antara 0 dan 1 dengan ukuran langkah 0.04.

Benchmark

Tabel berikut menyajikan statistik dari berbagai run fungsi kami.

ContohJumlah qubitInisialisasiErrorTotal waktu (menit)Penggunaan runtime (menit)
Persamaan Burgers' tanpa viskositas50PHYSICALLY_INFORMED10210^{-2}6625
Uji tarik 1D Hypoelastic18RANDOM10210^{-2}123100

Mulai

Isi formulir untuk meminta akses ke fungsi QUICK-PDE. Kemudian, dengan asumsi kamu sudah menyimpan akunmu ke lingkungan lokal, pilih fungsinya sebagai berikut:

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit-ibm-catalog
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

quick = catalog.load("colibritd/quick-pde")

Contoh

Untuk memulai, coba salah satu contoh berikut:

Computational Fluid Dynamics (CFD)

Ketika kondisi awal ditetapkan ke u(0,x)=xu(0,x) = x, hasilnya adalah sebagai berikut:

# launch the simulation with initial conditions u(0,x) = a*x + b
job = quick.run(use_case="cfd", physical_parameters={"a": 1.0, "b": 0.0})

Periksa status workload Qiskit Function kamu atau ambil hasil sebagai berikut:

print(job.status())
solution = job.result()
'QUEUED'
import numpy as np
import matplotlib.pyplot as plt

_ = plt.figure()
ax = plt.axes(projection="3d")

# plot the solution using the 3d plotting capabilities of pyplot
t, x = np.meshgrid(solution["samples"]["t"], solution["samples"]["x"])
ax.plot_surface(
t,
x,
solution["functions"]["u"],
edgecolor="royalblue",
lw=0.25,
rstride=26,
cstride=26,
alpha=0.3,
)
ax.scatter(t, x, solution["functions"]["u"], marker=".")
ax.set(xlabel="t", ylabel="x", zlabel="u(t,x)")

plt.show()

Output dari sel kode sebelumnya

Deformasi Material

Kasus penggunaan deformasi material memerlukan parameter fisik material dan gaya yang diterapkan, sebagai berikut:

import matplotlib.pyplot as plt

# select the properties of your material
job = quick.run(
use_case="md",
physical_parameters={
"t": 12.0,
"K": 100.0,
"n": 4.0,
"b": 10.0,
"epsilon_0": 0.1,
"sigma_0": 5.0,
},
)

# plot the result
solution = job.result()

_ = plt.figure()
stress_plot = plt.subplot(211)
plt.plot(solution["samples"]["x"], solution["functions"]["u"])
strain_plot = plt.subplot(212)
plt.plot(solution["samples"]["x"], solution["functions"]["sigma"])

plt.show()

Output dari sel kode sebelumnya

Berikut adalah contoh cara mendapatkan nilai fungsi untuk sekumpulan koordinat tertentu:

# u(t=0.2, x=0.7) == 2
assert solution["samples"]["t"][1] == 0.2
assert solution["samples"]["x"][2] == 0.7
assert solution["functions"]["u"][1, 2] == 2

Ambil pesan error

Jika status workload kamu adalah ERROR, gunakan job.error_message() untuk mengambil pesan error guna membantu debugging, sebagai berikut:

job = quick.run(use_case="mdf", physical_params={})

print(job.error_message())

# or write a wrapper around it for a more human readable version
def pprint_error(job):
print("".join(eval(job.error_message())["error"]))

print("___")
pprint_error(job)
{"error": ["qiskit.exceptions.QiskitError: 'Unknown argument \"physical_params\", did you make a typo? -- https://docs.quantum.ibm.com/errors#1804'\n"]}
___
qiskit.exceptions.QiskitError: 'Unknown argument "physical_params", did you make a typo? -- https://docs.quantum.ibm.com/errors#1804'

Dapatkan dukungan

Untuk dukungan, hubungi qiskit-function-support@colibritd.com.

Langkah selanjutnya

Rekomendasi