QUICK-PDE: O Funcție Qiskit de la ColibriTD
Consultă referința API
Funcțiile Qiskit sunt o caracteristică experimentală disponibilă utilizatorilor planurilor IBM Quantum® Premium, Flex și On-Prem (prin IBM Quantum Platform API). Acestea se află în stare de previzualizare și pot suferi modificări.
Prezentare generală
Rezolvatorul de Ecuații cu Derivate Parțiale (PDE) prezentat aici face parte din platforma noastră Quantum Innovative Computing Kit (QUICK) (QUICK-PDE) și este ambalat ca o Funcție Qiskit. Cu funcția QUICK-PDE, poți rezolva ecuații cu derivate parțiale specifice unui domeniu pe QPU-urile IBM Quantum. Această funcție se bazează pe algoritmul descris în lucrarea de prezentare H-DES a ColibriTD Acest algoritm poate rezolva probleme complexe de multi-fizică, începând cu Dinamica Computațională a Fluidelor (CFD) și Deformarea Materialelor (MD), urmând să fie adăugate și alte cazuri de utilizare în curând.
Pentru a aborda ecuațiile diferențiale, soluțiile de test sunt codificate ca combinații liniare de funcții ortogonale (de obicei polinoame Chebyshev, și mai specific dintre ele, unde este numărul de qubiți care codifică funcția ta), parametrizate prin unghiurile unui Circuit Cuantic Variabil (VQC). Ansatz-ul generează o stare care codifică funcția, evaluată prin observabile ale căror combinații permit evaluarea funcției în toate punctele. Poți apoi evalua funcția de pierdere în care sunt codificate ecuațiile diferențiale și ajusta fin unghiurile într-un ciclu hibrid, după cum este prezentat în continuare. Soluțiile de test se apropie treptat de soluțiile reale până când obții un rezultat satisfăcător.
Pe lângă acest ciclu hibrid, poți de asemenea înlănțui diferiți optimizatori. Acest lucru este util atunci când dorești ca un optimizator global să găsească un set bun de unghiuri, iar apoi un optimizator mai fin să urmeze un gradient către cel mai bun set de unghiuri vecine. În cazul dinamicii computaționale a fluidelor (CFD), secvența de optimizare implicită produce cele mai bune rezultate — dar în cazul deformării materialelor (MD), deși valorile implicite oferă rezultate bune, le poți configura mai detaliat pentru beneficii specifice problemei.
Reține că, pentru fiecare variabilă a funcției, specificăm numărul de qubiți (cu care poți experimenta). Prin stivuirea a 10 circuite identice și evaluarea celor 10 observabile identice pe qubiți diferiți de-a lungul unui circuit mare, poți aplica atenuarea zgomotului în cadrul procesului de optimizare CMA, bazându-te pe metoda de învățare a zgomotului, și reduce semnificativ numărul de shot-uri necesare.
Dinamica computațională a fluidelor
Ecuația Burgers fără vâscozitate modelează curgerea fluidelor nevâscoase după cum urmează:
reprezintă câmpul vitezei fluidului. Acest caz de utilizare are o condiție la limită temporală: poți selecta condiția inițială și apoi permite sistemului să se relaxeze. În prezent, singurele condiții inițiale acceptate sunt funcțiile liniare: .
Argumentele pentru ecuațiile diferențiale ale CFD se află pe o grilă fixă, după cum urmează:
- este între 0 și 0.95 cu 30 de puncte de eșantionare. este între 0 și 0.95 cu un pas de 0.2375.
Deformarea Materialelor
Acest caz de utilizare se concentrează pe deformarea hipoelastică cu testul de tracțiune unidimensional, în care o bară fixată în spațiu este trasă la celălalt capăt. Descriem problema după cum urmează:
reprezintă modulul de compresibilitate al materialului întins, exponentul unei legi de putere, forța pe unitate de masă, limita de stres proporțional, limita de deformare proporțională, funcția de stres și funcția de deformare.
Bara considerată are lungime unitară. Acest caz de utilizare are o condiție la limită pentru stresul de suprafață , adică cantitatea de lucru necesară pentru a întinde bara.
Argumentele pentru ecuațiile diferențiale ale MD se află pe o grilă fixă, după cum urmează:
- este între 0 și 1 cu un pas de 0.04.
Benchmark-uri
Tabelul următor prezintă statistici pentru diverse rulări ale funcției noastre.
| Exemplu | Număr de qubiți | Inițializare | Eroare | Timp total (min) | Utilizare runtime (min) |
|---|---|---|---|---|---|
| Ecuația Burgers fără vâscozitate | 50 | PHYSICALLY_INFORMED | 66 | 25 | |
| Test de tracțiune hipoelastic 1D | 18 | RANDOM | 123 | 100 |
Primii pași
Completează formularul pentru a solicita acces la funcția QUICK-PDE. Apoi, presupunând că ți-ai salvat deja contul în mediul local, selectează funcția după cum urmează:
# 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")
Exemple
Pentru a începe, încearcă unul dintre următoarele exemple:
Dinamica Computațională a Fluidelor (CFD)
Când condițiile inițiale sunt setate la , rezultatele sunt după cum urmează:
# 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})
Verifică statusul sarcinii de lucru a Funcției Qiskit sau returnează rezultatele după cum urmează:
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()

Deformarea Materialelor
Cazul de utilizare al deformării materialelor necesită parametrii fizici ai materialului tău și forța aplicată, după cum urmează:
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()

Urmează un exemplu despre cum să obții valoarea funcției pentru un set specific de coordonate:
# 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
Obține mesaje de eroare
Dacă statusul sarcinii tale de lucru este ERROR, folosește job.error_message() pentru a obține mesajul de eroare care te ajută la depanare, după cum urmează:
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'
Obține suport
Pentru suport, contactează qiskit-function-support@colibritd.com.
Pașii următori
- Completează formularul pentru a solicita acces la funcția QUICK-PDE.
- Vizitează referința API pentru această Funcție Qiskit.
- Încearcă să modelezi un fluid nevâscos în curgere folosind QUICK-PDE în tutorial.
- Consultă Jaffali, H., et al. (2025). H-DES: a Quantum-Classical Hybrid Differential Equation Solver. arXiv preprint arXiv:2410.01130.