QUICK-PDE: функція Qiskit від ColibriTD
Дивись довідник API
Функції Qiskit — це експериментальна можливість, доступна користувачам IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API) Plan. Вони перебувають у статусі попереднього релізу та можуть змінюватись.
Огляд
Розв'язувач диференціальних рівнянь у частинних похідних (PDE), представлений тут, є частиною нашої платформи Quantum Innovative Computing Kit (QUICK) (QUICK-PDE) і запакований як функція Qiskit. За допомогою функції QUICK-PDE ти можеш розв'язувати предметно-орієнтовані диференціальні рівняння в частинних похідних на QPU IBM Quantum. Ця функція базується на алгоритмі, описаному в статті ColibriTD про H-DES. Цей алгоритм може розв'язувати складні мультифізичні задачі, починаючи з обчислювальної гідродинаміки (CFD) та деформації матеріалів (MD), і незабаром з'являться нові варіанти використання.
Щоб впоратися з диференціальними рівняннями, пробні розв'язки кодуються як лінійні комбінації ортогональних функцій (зазвичай поліноми Чебишева, і конкретніше таких, де — кількість кубітів, що кодують твою функцію), параметризовані кутами Змінного Квантового Ланцюга (VQC). Анзац генерує стан, що кодує функцію, яку обчислюють спостережувані величини, комбінації яких дозволяють обчислити функцію у всіх точках. Потім ти можеш обчислити функцію втрат, у якій закодовано диференціальні рівняння, та налаштувати кути в гібридному циклі, як показано нижче. Пробні розв'язки поступово наближаються до фактичних розв'язків, доки не буде досягнуто задовільного результату.
На додаток до цього гібридного циклу, ти також можеш поєднувати різні оптимізатори в ланцюжок. Це корисно, коли потрібно, щоб глобальний оптимізатор знайшов хороший набір кутів, а потім точніший оптимізатор пішов за градієнтом до найкращого набору сусідніх кутів. У випадку обчислювальної гідродинаміки (CFD) стандартна послідовність оптимізації дає найкращі результати — але у випадку деформації матеріалів (MD), хоча стандартні налаштування і дають хороші результати, ти можеш налаштувати її додатково для переваг, специфічних для конкретної задачі.
Зауваж, що для кожної змінної функції ми вказуємо кількість кубітів (з якою ти можеш експериментувати). Стекуючи 10 ідентичних схем та обчислюючи 10 ідентичних спостережуваних на різних кубітах в одній великій схемі, ти можеш знижувати шуми в процесі CMA-оптимізації, спираючись на метод навчання шумів, та значно зменшити потрібну кількість знімків (shots).
Обчислювальна гідродинаміка
Невʼязке рівняння Бюргерса моделює потік невʼязкої рідини таким чином:
представляє поле швидкості рідини. Цей варіант використання має часову граничну умову: ти можеш задати початкову умову, а потім дозволити системі розслабитись. Наразі єдиними прийнятними початковими умовами є лінійні функції: .
Аргументи диференціальних рівнянь CFD знаходяться на фіксованій сітці, таким чином:
- знаходиться між 0 і 0.95 з 30 точками вибірки. знаходиться між 0 і 0.95 з кроком 0.2375.
Деформація матеріалів
Цей варіант використання зосереджений на гіпопружній деформації з одновимірним випробуванням на розтяг, у якому стержень, закріплений в просторі, тягнуть за інший кінець. Ми описуємо задачу таким чином:
представляє об'ємний модуль матеріалу, що розтягується, — показник степеневого закону, — силу на одиницю маси, — межу пропорційного напруження, — межу пропорційної деформації, — функцію напруження, а — функцію деформації.
Розглянутий стержень має одиничну довжину. Цей варіант використання має граничну умову для поверхневого напруження , тобто кількість роботи, необхідної для розтягування стержня.
Аргументи диференціальних рівнянь MD знаходяться на фіксованій сітці, таким чином:
- знаходиться між 0 і 1 з кроком 0.04.
Бенчмарки
У наступній таблиці представлено статистику різних запусків нашої функції.
| Приклад | Кількість кубітів | Ініціалізація | Похибка | Загальний час (хв) | Використання середовища виконання (хв) |
|---|---|---|---|---|---|
| Невʼязке рівняння Бюргерса | 50 | PHYSICALLY_INFORMED | 66 | 25 | |
| Гіпопружне одновимірне розтягнення | 18 | RANDOM | 123 | 100 |
Початок роботи
Заповни форму для запиту доступу до функції QUICK-PDE. Потім, якщо ти вже зберіг свій обліковий запис у локальному середовищі, вибери функцію таким чином:
# 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")
Приклади
Щоб розпочати, спробуй один із наступних прикладів:
Обчислювальна гідродинаміка (CFD)
Коли початкові умови задані як , результати такі:
# 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})
Перевір статус або отримай результати навантаження своєї функції Qiskit таким чином:
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()

Деформація матеріалів
Варіант використання деформації матеріалів вимагає фізичних параметрів твого матеріалу та прикладеної сили, таким чином:
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()

Нижче наведено приклад того, як отримати значення функції для конкретного набору координат:
# 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="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'
Отримати підтримку
Для підтримки звертайся на qiskit-function-support@colibritd.com.
Наступні кроки
- Заповни форму для запиту доступу до функції QUICK-PDE.
- Відвідай довідник API для цієї функції Qiskit.
- Спробуй змоделювати потік невʼязкої рідини за допомогою QUICK-PDE у підручнику.
- Ознайомся з Jaffali, H., та ін. (2025). H-DES: a Quantum-Classical Hybrid Differential Equation Solver. arXiv preprint arXiv:2410.01130.