QUICK-PDE: Fungsi Qiskit oleh ColibriTD
Fungsi Qiskit adalah ciri eksperimental yang tersedia untuk pengguna Pelan Premium IBM Quantumยฎ, Pelan Flex, dan Pelan On-Prem (melalui API Platform IBM Quantum). Ia dalam status keluaran pratonton dan boleh berubah.
Gambaran Keseluruhanโ
Penyelesai Persamaan Pembezaan Separa (PDE) yang dibentangkan di sini adalah sebahagian daripada platform Quantum Innovative Computing Kit (QUICK) kami (QUICK-PDE), dan dipaketkan sebagai Fungsi Qiskit. Dengan fungsi QUICK-PDE, anda boleh menyelesaikan persamaan pembezaan separa khusus domain pada QPU IBM Quantum. Fungsi ini berdasarkan algoritma yang diterangkan dalam kertas penerangan H-DES ColibriTD. Algoritma ini mampu menyelesaikan masalah berbilang fizik yang kompleks, bermula dengan Dinamik Cecair Pengiraan (CFD) dan Ubah Bentuk Bahan (MD), serta kes penggunaan lain yang akan hadir tidak lama lagi.
Untuk menangani persamaan pembezaan, penyelesaian cubaan dikodkan sebagai gabungan linear fungsi ortogon (biasanya polinomial Chebyshev, dan lebih khususnya daripadanya di mana ialah bilangan qubit yang mengekod fungsi anda), diparameter oleh sudut Litar Kuantum Boleh Ubah (VQC). Ansatz menjana keadaan yang mengekod fungsi, yang dinilai oleh boleh cerap yang gabungannya membolehkan penilaian fungsi pada semua titik. Anda kemudian boleh menilai fungsi kerugian di mana persamaan pembezaan dikodkan, dan melaraskan sudut dalam gelung hibrid, seperti yang ditunjukkan berikut. Penyelesaian cubaan semakin menghampiri penyelesaian sebenar sehingga anda mencapai hasil yang memuaskan.
Selain gelung hibrid ini, anda juga boleh menyambungkan pengoptimum yang berbeza secara bersiri. Ini berguna apabila anda mahu pengoptimum global mencari set sudut yang baik, kemudian pengoptimum yang lebih halus untuk mengikuti kecerunan ke set sudut jiran terbaik. Dalam kes dinamik cecair pengiraan (CFD), urutan pengoptimuman lalai menghasilkan keputusan terbaik โ tetapi dalam kes ubah bentuk bahan (MD), walaupun lalai memberikan keputusan yang baik, anda boleh mengkonfigurasinya lebih lanjut untuk manfaat khusus masalah.
Perhatikan bahawa bagi setiap pemboleh ubah fungsi, kami menentukan bilangan qubit (yang boleh anda ubah). Dengan menindih 10 litar yang sama dan menilai 10 boleh cerap yang sama pada qubit berbeza sepanjang satu litar besar, anda boleh mengurangkan hingar dalam proses pengoptimuman CMA, bergantung pada kaedah pembelajaran hingar, dan mengurangkan bilangan tembakan yang diperlukan dengan ketara.
Input/outputโ
Dinamik Cecair Pengiraanโ
Persamaan Burgers' tak likat, memodelkan cecair tidak likat yang mengalir seperti berikut:
mewakili medan kelajuan cecair. Kes penggunaan ini mempunyai syarat sempadan temporal: anda boleh memilih keadaan awal dan kemudian membenarkan sistem berehat. Buat masa ini, satu-satunya syarat awal yang diterima ialah fungsi linear: .
Hujah untuk persamaan pembezaan CFD berada pada grid tetap, seperti berikut:
- berada antara 0 dan 0.95 dengan 30 titik sampel. berada antara 0 dan 0.95 dengan saiz langkah 0.2375.
Ubah Bentuk Bahanโ
Kes penggunaan ini memberi tumpuan pada ubah bentuk hipoelastik dengan ujian tegangan satu dimensi, di mana sebatang rod yang ditetapkan dalam ruang ditarik pada hujung satunya. Kami menerangkan masalah seperti berikut:
mewakili modulus pukal bahan yang diregangkan, eksponen hukum kuasa, daya per unit jisim, had tegasan berkadar, had terikan berkadar, fungsi tegasan, dan fungsi terikan.
Rod yang dipertimbangkan mempunyai panjang padu. Kes penggunaan ini mempunyai syarat sempadan untuk tegasan permukaan , atau jumlah kerja yang diperlukan untuk meregangkan rod.
Hujah untuk persamaan pembezaan MD berada pada grid tetap, seperti berikut:
- berada antara 0 dan 1 dengan saiz langkah 0.04.
Inputโ
Untuk menjalankan Fungsi Qiskit QUICK-PDE, anda boleh melaraskan parameter berikut:
| Nama | Jenis | Penerangan | Khusus kes penggunaan | Contoh |
|---|---|---|---|---|
| use_case | Literal["MD", "CFD"] | Togol untuk memilih sistem persamaan pembezaan yang hendak diselesaikan | Tidak | "CFD" |
| parameters | dict[str, Any] | Parameter persamaan pembezaan (lihat jadual seterusnya untuk maklumat lanjut) | Tidak | {"a": 1.0, "b": 1.0} |
| nb_qubits | Optional[dict[str, dict[str, int]]] | Bilangan qubit per fungsi dan per pemboleh ubah. Nilai dioptimumkan dipilih oleh fungsi, tetapi jika anda ingin mencuba gabungan yang lebih baik, anda boleh mengatasi nilai lalai | Tidak | {"u": {"x": 1, "t":3}} |
| depth | Optional[dict[str, int]] | Kedalaman ansatz per fungsi. Nilai dioptimumkan dipilih oleh fungsi, tetapi jika anda ingin mencuba gabungan yang lebih baik, anda boleh mengatasi nilai lalai | Tidak | {"u": 4} |
| optimizer | Optional[list[str]] | Pengoptimum yang akan digunakan, sama ada "CMAES" daripada perpustakaan python cma atau salah satu pengoptimum scipy | MD | "SLSQP" |
| shots | Optional[list[int]] | Bilangan tembakan yang digunakan untuk menjalankan setiap litar. Memandangkan beberapa langkah pengoptimuman diperlukan, panjang senarai mestilah sama dengan bilangan pengoptimum yang digunakan (4 untuk CFD). Lalai kepada [50_000] * nb_optimizers untuk MD dan [5_00, 2_000, 5_000, 10_000] untuk CFD | Tidak | [15_000, 30_000] |
| optimizer_options | Optional[dict[str, Any]] | Pilihan untuk dihantar kepada pengoptimum. Butiran input ini bergantung pada pengoptimum yang digunakan; untuk maklumat lanjut, rujuk dokumentasi pengoptimum yang digunakan | MD | {"maxiter": 50 } |
| initialization | Optional[Literal["RANDOM", "PHYSICALLY_INFORMED"]] | Sama ada untuk bermula dengan sudut rawak atau sudut yang dipilih secara bijak. Perhatikan bahawa sudut yang dipilih secara bijak mungkin tidak berfungsi dalam 100% kes. Lalai kepada "PHYSICALLY_INFORMED". | Tidak | "RANDOM" |
| backend_name | Optional[str] | Nama backend yang hendak digunakan. | Tidak | "ibm_torino" |
| mode | Optional[Literal["job", "session", "batch"]] | Mod pelaksanaan yang hendak digunakan. Lalai kepada "job". | Tidak | "job" |
Parameter persamaan pembezaan (parameter fizikal dan syarat sempadan) hendaklah mengikuti format yang diberikan:
| Kes penggunaan | Kunci | Jenis nilai | Penerangan | Contoh |
|---|---|---|---|---|
| CFD | a | float | Pekali nilai awal | 1.0 |
| CFD | b | float | Ofset nilai awal | 1.0 |
| MD | t | float | tegasan permukaan | 12.0 |
| MD | K | float | modulus pukal | 100.0 |
| MD | n | int | hukum kuasa | 4.0 |
| MD | b | float | daya per unit jisim | 10.0 |
| MD | epsilon_0 | float | had tegasan berkadar | 0.1 |
| MD | sigma_0 | float | had terikan berkadar | 5.0 |
Outputโ
Output ialah kamus dengan senarai titik sampel, serta nilai fungsi pada setiap titik tersebut:
# Added by doQumentation โ required packages for this notebook
!pip install -q matplotlib numpy qiskit-ibm-catalog
from numpy import array
solution = {
"functions": {
"u": array(
[
[0.01, 0.1, 1],
[0.02, 0.2, 2],
[0.03, 0.3, 3],
[0.04, 0.4, 4],
]
),
},
"samples": {
"t": array([0.1, 0.2, 0.3, 0.4]),
"x": array([0.5, 0.6, 0.7]),
},
}
Bentuk tatasusunan penyelesaian bergantung pada sampel pemboleh ubah:
assert len(solution["functions"]["u"].shape) == len(solution["samples"])
for col_size, samples in zip(
solution["functions"]["u"].shape, solution["samples"].values()
):
assert col_size == len(samples)
Pemetaan antara titik sampel pemboleh ubah fungsi dan dimensi tatasusunan penyelesaian dilakukan mengikut urutan alfanumerik nama pemboleh ubah. Contohnya, jika pemboleh ubah adalah "t" dan "x", satu baris solution["functions"]["u"] mewakili nilai penyelesaian untuk "t" yang tetap, dan satu lajur solution["functions"]["u"] mewakili nilai penyelesaian untuk "x" yang tetap.
Berikut ialah contoh cara mendapatkan nilai fungsi untuk set 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
Penanda Arasโ
Jadual berikut memaparkan statistik pelbagai jalankan fungsi kami.
| Contoh | Bilangan qubit | Pemulaan | Ralat | Jumlah masa (min) | Penggunaan masa jalan (min) |
|---|---|---|---|---|---|
| Persamaan Burgers' tak likat | 50 | PHYSICALLY_INFORMED | 66 | 25 | |
| Ujian tegangan 1D hipoelastik | 18 | RANDOM | 123 | 100 |
Mulakanโ
Isi borang untuk meminta akses kepada fungsi QUICK-PDE. Kemudian, dengan mengandaikan anda sudah menyimpan akaun anda ke persekitaran tempatan anda, pilih fungsi seperti berikut:
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
quick = catalog.load("colibritd/quick-pde")
Contohโ
Untuk bermula, cuba salah satu contoh berikut:
Dinamik Cecair Pengiraan (CFD)โ
Apabila syarat awal ditetapkan kepada , hasilnya adalah seperti 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})
Semak status atau dapatkan semula keputusan beban kerja Fungsi Qiskit anda seperti 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()

Ubah Bentuk Bahanโ
Kes penggunaan ubah bentuk bahan memerlukan parameter fizikal bahan anda dan daya yang dikenakan, seperti 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()
Dapatkan Mesej Ralatโ
Jika status beban kerja anda ialah ERROR, gunakan job.error_message() untuk mendapatkan mesej ralat bagi membantu nyahpepijat, seperti 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 Sokonganโ
Untuk sokongan, hubungi qiskit-function-support@colibritd.com.
Langkah Seterusnyaโ
- Isi borang untuk meminta akses kepada fungsi QUICK-PDE.
- Cuba memodelkan cecair tidak likat yang mengalir menggunakan QUICK-PDE dalam tutorial.
- Semak Jaffali, H., et al. (2025). H-DES: a Quantum-Classical Hybrid Differential Equation Solver. arXiv preprint arXiv:2410.01130.