QUICK-PDE: دالة Qiskit من ColibriTD
راجع مرجع API
Qiskit Functions ميزة تجريبية متاحة لمستخدمي IBM Quantum® Premium Plan وFlex Plan وOn-Prem (عبر IBM Quantum Platform API). هذه الميزات في مرحلة الإصدار التجريبي وقابلة للتغيير.
نظرة عامة
حلّال المعادلات التفاضلية الجزئية (PDE) المقدَّم هنا جزء من منصة Quantum Innovative Computing Kit (QUICK) الخاصة بنا (QUICK-PDE)، وهو مغلَّف كدالة Qiskit. بواسطة دالة QUICK-PDE، يمكنك حل المعادلات التفاضلية الجزئية المتخصصة بمجالات محددة على وحدات معالجة الكم (QPUs) من IBM Quantum. تستند هذه الدالة إلى الخوارزمية الموصوفة في ورقة H-DES من ColibriTD. وتستطيع هذه الخوارزمية حل مسائل الفيزياء المتعددة المعقدة، بدءًا من ديناميكيات الموائع الحسابية (CFD) وتشوه المواد (MD)، مع حالات استخدام أخرى قيد التطوير.
للتعامل مع المعادلات التفاضلية، تُرمَّز الحلول التجريبية على شكل تركيبات خطية من الدوال المتعامدة (عادةً كثيرات حدود شيبيشيف، وتحديدًا منها، حيث هو عدد الـ qubits التي ترمّز دالتك)، ومُعامَلة بزوايا دائرة كمية متغيرة (VQC). ينتج الـ ansatz حالة ترمّز الدالة، ويُقيَّم عبر مرصودات تتيح مجموعاتها تقييم الدالة عند جميع النقاط. يمكنك بعد ذلك تقييم دالة الخسارة التي تُرمَّز فيها المعادلات التفاضلية، وضبط الزوايا في حلقة هجينة كما هو موضح أدناه. تقترب الحلول التجريبية تدريجيًا من الحلول الفعلية حتى تصل إلى نتيجة مُرضية.
إضافةً إلى هذه الحلقة الهجينة، يمكنك أيضًا تسلسل محسِّنات مختلفة. يفيد هذا عندما تريد محسِّنًا شاملًا للعثور على مجموعة جيدة من الزوايا، ثم محسِّنًا أدق لاتباع التدرج نحو أفضل مجموعة من الزوايا المجاورة. في حالة ديناميكيات الموائع الحسابية (CFD)، يُعطي تسلسل التحسين الافتراضي أفضل النتائج - أما في حالة تشوه المواد (MD)، فبينما يُعطي الافتراضي نتائج جيدة، يمكنك ضبطه أكثر للحصول على فوائد خاصة بالمسألة.
لاحظ أنه لكل متغير من متغيرات الدالة، نحدد عدد الـ qubits (يمكنك تجربتها). بتكديس 10 دوائر متطابقة وتقييم 10 مرصودات متطابقة على qubits مختلفة عبر دائرة كبيرة واحدة، يمكنك تخفيف الضوضاء ضمن عملية تحسين CMA معتمدًا على طريقة تعلم الضوضاء، وتقليل عدد القياسات المطلوبة بشكل ملحوظ.
ديناميكيات الموائع الحسابية
معادلة Burgers' غير اللزجة تُنمذج الموائع غير اللزجة المتدفقة كما يلي:
يُمثّل حقل سرعة المائع. لهذه الحالة شرط حدي زمني: يمكنك اختيار الشرط الابتدائي ثم السماح للنظام بالاسترخاء. حاليًا، الشروط الابتدائية الوحيدة المقبولة هي الدوال الخطية: . الحل التحليلي هو:
معادلات أويلر عديمة الضغط تُنمذج تدفق مائع قابل للانضغاط غير لزج مع التخميد كما يلي:
يمثل حقل الكثافة، حقل السرعة، و معامل التخميد. في صياغتنا، نضع ، لذا لن يُستخدم كمعامل فيما يلي. تحتوي حالة الاستخدام هذه على شروط حدية زمنية: و. الحل التحليلي هو:
وسيطات المعادلات التفاضلية لـ CFD تقع على شبكة ثابتة كما يلي:
- يقع بين 0 و0.95 بـ 41 نقطة عينة. يقع بين 0 و0.95 بـ 41 نقطة عينة.
تشوه المواد
تركّز هذه الحالة على التشوه ناقص المرونة (hypoelastic) في اختبار الشد أحادي البعد، حيث يُثبَّت قضيب في الفضاء ويُسحب من طرفه الآخر. نصف المسألة كما يلي:
يمثّل معامل الحجم للمادة المشدودة، الأُس في قانون القوى، القوة لكل وحدة كتلة، حد الإجهاد التناسبي، حد الانفعال التناسبي، دالة الإجهاد، و دالة الانفعال. الحل التحليلي هو:
حيث هو الشرط الحدي على الانفعال عند .
طول القضيب المدروس يساوي الوحدة. لهذه الحالة شرط حدي لإجهاد السطح ، أي مقدار الشغل اللازم لشد القضيب.
وسيطات المعادلات التفاضلية لـ MD تقع على شبكة ثابتة كما يلي:
- يقع بين 0 و1 بـ 30 نقطة عينة.
المعايير القياسية
يعرض الجدول التالي إحصائيات حول تشغيلات مختلفة لدالتنا.
| المثال | عدد الـ qubits | التهيئة | الخطأ | الوقت الإجمالي (دقيقة) | استخدام وقت التشغيل (دقيقة) |
|---|---|---|---|---|---|
| معادلة بيرغرز غير اللزجة | 50 | PHYSICALLY_INFORMED | 66 | 25 | |
| معادلات أويلر عديمة الضغط | 70 | PHYSICALLY_INFORMED | 48 | 34 | |
| اختبار الشد أحادي البعد ناقص المرونة | 18 | RANDOM | 123 | 100 |
ابدأ الآن
أكمل النموذج لطلب الوصول إلى دالة QUICK-PDE. ثم، بافتراض أنك حفظت حسابك في بيئتك المحلية، اختر الدالة كما يلي:
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"matplotlib": "matplotlib", "numpy": "numpy", "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_cloud / ibm_quantum_platform",
instance="USER_CRN / HGP",
token="USER_API_KEY / IQP_API_TOKEN",
)
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# Verify that you have access to the function
catalog.list()
quick = catalog.load("colibritd/quick-pde")
أمثلة
للبدء، جرّب أحد الأمثلة التالية:
معادلة Burgers' غير اللزجة (CFD)
بالنسبة لمعادلة Burgers'، عند ضبط الشروط الابتدائية على ، تكون النتائج كما يلي:
# launch the simulation with initial conditions u(0,x) = a*x + b
job = quick.run(
use_case="CFD_BURGER", physical_parameters={"a": 1.0, "b": 0.0}
)
تحقق من حالة عبء عمل دالة Qiskit أو استرجع النتائج كما يلي:
# Print the ID so you can use it later, if necessary
print(job.job_id)
print(job.status())
solution = job.result()
import numpy as np
import matplotlib.pyplot as plt
def plot_result_3d(result):
fig = plt.figure()
ax = fig.add_subplot(projection="3d")
t, x = np.meshgrid(result["samples"]["t"], result["samples"]["x"])
ax.plot_surface(
t,
x,
result["functions"]["u"],
edgecolor="royalblue",
lw=0.25,
rstride=26,
cstride=26,
alpha=0.3,
)
ax.scatter(t, x, result["functions"]["u"], marker=".")
ax.set(xlabel="t", ylabel="x", zlabel="u(t,x)")
plt.show()
# Call
plot_result_3d(solution)
معادلة أويلر عديمة الضغط (CFD)
بالنسبة لمعادلة أويلر، عند ضبط الشروط الابتدائية على و، من أجل معطى (هنا، ) و، تكون النتائج كما يلي:
# Launches the solving for an arbitrary mu
job = quick.run(use_case="CFD_EULER", physical_parameters={"mu": 0.1})
solution = job.result()
# Colorplot function
def plot_result_2d(result):
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
configs = {
"g": {"cmap": "viridis", "title": "g(t, x)"},
"u": {"cmap": "plasma", "title": "u(t, x)"},
}
t = result["samples"]["t"]
x = result["samples"]["x"]
for ax, (field, cfg) in zip(axes, configs.items()):
v = result["functions"][field]
im = ax.contourf(t, x, v, levels=50, cmap=cfg["cmap"])
fig.colorbar(im, ax=ax, label=cfg["title"])
ax.set_xlabel("t")
ax.set_ylabel("x")
ax.set_title(cfg["title"], fontsize=13, fontweight="bold")
plt.tight_layout()
plt.show()
plot_result_2d(solution)
تشوه المواد
تتطلب حالة تشوه المواد المعاملات الفيزيائية للمادة والقوة المطبّقة، كما يلي:
# 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()
المثال التالي يوضح كيفية الحصول على قيمة الدالة عند مجموعة محددة من الإحداثيات:
# 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
استرجاع رسائل الخطأ
إذا كانت حالة عبء عملك ERROR، استخدم job.error_message() لاسترجاع رسالة الخطأ للمساعدة في تصحيح الأخطاء، كما يلي:
job = quick.run(use_case="MD", physical_params={})
print(job.error_message())
# A wrapper can also be used for a more human readable version
def pprint_error(job):
print("".join(eval(job.error_message())["error"]))
print("___")
pprint_error(job)
الحصول على الدعم
للدعم، تواصل عبر qiskit-function-support@colibritd.com.
الخطوات التالية
- أكمل النموذج لطلب الوصول إلى دالة QUICK-PDE.
- زُر مرجع API لدالة Qiskit هذه.
- جرّب نمذجة مائع غير لزج متدفق باستخدام QUICK-PDE في البرنامج التعليمي.
- راجع Jaffali, H., et al. (2025). H-DES: a Quantum-Classical Hybrid Differential Equation Solver. arXiv preprint arXiv:2410.01130.