הפצת אופרטורים אחורה (OBP) לאומדן ערכי תוחלת
אומדן שימוש: 16 דקות על מעבד Eagle r3 (הערה: זהו אומדן בלבד. זמן הריצה שלך עשוי להשתנות.)
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-addon-obp qiskit-addon-utils qiskit-ibm-runtime rustworkx
# This cell is hidden from users;
# it disables linting rules.
# ruff: noqa
רקע
הפצת אופרטורים אחורה היא טכניקה הכוללת ספיגת פעולות מסוף מעגל קוונטי לתוך האובזרבל הנמדד, בדרך כלל מקטינה את העומק של המעגל במחיר איברים נוספים באובזרבל. המטרה היא להפיץ אחורה כמה שיותר מהמעגל מבלי לאפשר לאובזרבל לגדול יותר מדי. יישום מבוסס Qiskit זמין בתוסף OBP Qiskit, פרטים נוספים ניתן למצוא בתיעוד המתאים עם דוגמה פשוטה להתחלה.
נבחן דוגמת מעגל שעבורו יש למדוד אובזרבל , כאשר הם אופרטורי Pauli ו- הם מקדמים. נסמן את המעגל כאוניטרי בודד שניתן לחלק באופן לוגי ל- כפי שמוצג באיור למטה.

הפצת אופרטורים אחורה סופגת את האוניטרי לתוך האובזרבל על ידי התפתחותו כ-. במילים אחרות, חלק מהחישוב מבוצע קלאסית באמצעות ההתפתחות של האובזרבל מ- ל-. ניתן כעת לנסח מחדש את הבעיה המקורית כמדידת האובזרבל עבור המעגל החדש בעומק נמוך יותר שהאוניטרי שלו הוא .
האוניטרי מיוצג כמספר פרוסות . קיימות דרכים מרובות להגדרת פרוסה. לדוגמה, במעגל הדוגמה לעיל, כל שכבה של וכל שכבה של שערי יכולה להיחשב כפרוסה בודדת. הפצה אחורה כוללת חישוב של באופן קלאסי. כל פרוסה יכולה להיות מיוצגת כ-, כאשר הוא Pauli של -קיוביטים ו- הוא סקלר. קל לוודא ש:
בדוגמה לעיל, אם , אז עלינו להריץ שני מעגלים קוונטיים, במקום אחד, כדי לחשב את ערך התוחלת. לכן, הפצה אחורה עשויה להגדיל את מספר האיברים באובזרבל, מה שמוביל למספר גבוה יותר של ביצועי מעגלים. דרך אחת לאפשר הפצה אחורה עמוקה יותר לתוך המעגל, תוך מניעת האופרטור מלגדול יותר מדי, היא לקטום איברים עם מקדמים קטנים, במקום להוסיף אותם לאופרטור. לדוגמה, בדוגמה לעיל, אפשר לבחור לקטום את האיבר הכולל בתנאי ש- קטן מספיק. קיטום איברים יכול להביא למעגלים קוונטיים פחותים לביצוע, אך פעולה זו גורמת לשגיאה מסוימת בחישוב ערך התוחלת הסופי פרופורציונלית לגודל המקדמים של האיברים הקטומים.
מדריך זה מממש תבנית Qiskit לסימולציית הדינמיקה הקוונטית של שרשרת ספין היזנברג באמצעות qiskit-addon-obp.
דרישות
לפני תחילת מדריך זה, וודא שהדברים הבאים מותקנים:
- Qiskit SDK v1.2 ואילך (
pip install qiskit) - Qiskit Runtime v0.28 ואילך (
pip install qiskit-ibm-runtime) - תוסף OBP Qiskit (
pip install qiskit-addon-obp) - כלי עזר לתוספי Qiskit (
pip install qiskit-addon-utils)
הגדרה
import numpy as np
import matplotlib.pyplot as plt
from qiskit.primitives import StatevectorEstimator as Estimator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler import CouplingMap
from qiskit.synthesis import LieTrotter
from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian
from qiskit_addon_utils.problem_generators import (
generate_time_evolution_circuit,
)
from qiskit_addon_utils.slicing import slice_by_gate_types, combine_slices
from qiskit_addon_obp.utils.simplify import OperatorBudget
from qiskit_addon_obp import backpropagate
from qiskit_addon_obp.utils.truncating import setup_budget
from rustworkx.visualization import graphviz_draw
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2, EstimatorOptions