דלג לתוכן הראשי

אופטימיזטורים קלאסיים

מה זה אופטימיזטור?

ויקטוריה ליפינסקה מסבירה לנו על אופטימיזטורים קלאסיים וכיצד הם פועלים כחלק מ-VQE.

תשמעו על כמה אופטימיזטורים לדוגמה וכיצד הם מתפקדים עם רעש ובלעדיו.

מקורות

המאמרים הבאים מוזכרים בסרטון למעלה.

קידוד אופטימיזטור קלאסי

בשיעורים הקודמים למדתם איך לבנות המילטוניאן המתאים לשימוש במחשב קוונטי וכיצד ליצור מעגל וריאציוני. למדתם גם שהמעגל הוריאציוני (או ה-ansatz) מכיל פרמטרים שיש לשנות, והבחירה האופטימלית של הפרמטרים היא זו שמניבה את פונקציית העלות או האנרגיה הנמוכה ביותר האפשרית. לכן, הבעיה שלנו מצטמצמת לחיפוש במרחב הפרמטרים אחרי הקבוצה האופטימלית. רוב העבודה על אופטימיזטורים קלאסיים כבר נעשתה עבורנו, שכן אופטימיזטורים מצוינים זמינים ממספר מקורות.

בשיעור זה תלמדו:

  • כיצד אופטימיזטורים קלאסיים משתלבים בחישוב VQE
  • אילו אופטימיזטורים קלאסיים זמינים מ-SciPy
  • אילו אופטימיזטורים עדיין אינם זמינים דרך SciPy וכיצד להשלים בינתיים באמצעות qiskit.algorithms
  • אילו אפשרויות קיימות לאופטימיזטורים אלה ומה המשמעות עבור מחשוב קוונטי

SciPy היא ספריית Python חינמית וקוד-פתוח עם חבילות הרלוונטיות לתחומים רבים של מחשוב מדעי, כולל אופטימיזציה. בפרט, ל-SciPy יש חבילת אופטימיזציה הכוללת את minimize:

from scipy.optimize import minimize This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:

  • The cost function (cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions.
  • An initial state (x0) for the system, often the Hartree Fock state
  • Other arguments, including arguments of the cost function itself
  • The method set to the classical optimizer you select
  • Options for the classical optimizer (not to be confused with Session options discussed in the next section)

Some example code is shown below. We restrict our discussion here to the last two arguments.

    cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

ל-SciPy יש תיעוד על כל שיטות minimize הזמינות. הנה כמה דוגמאות בולטות, כולן שיטות לצמצום פונקציה סקלרית של משתנה אחד או יותר:

  • cobyla: אלגוריתם Optimization BY Linear Approximation (COBYLA).
  • slsqp: Sequential Least Squares Programming (SLSQP).
  • nelder-mead אלגוריתם Nelder-Mead.

רוב אלגוריתמי האופטימיזציה הקלאסיים הזמינים הם ממזערים מקומיים, כלומר הם משתמשים בשיטות שונות למציאת מינימום מקומי, אך אינם מובטחים למצוא מינימום גלובלי. חלק מהאופטימיזטורים הקלאסיים מעריכים גרדיאנטים במפורש ומשתמשים בהם למציאת מינימום מקומי. אחרים עשויים להשתמש בקירובים לינאריים או ריבועיים עוקבים של פונקציית המטרה כדי למצוא מינימום.

לאלגוריתמים אלה יש מספר אפשרויות משותפות, אך עם הבדלים עדינים. לדוגמה, לכולם יש אפשרות לציין מספר מקסימלי של איטרציות באמצעות הסימון 'maxiter': 200 מלמעלה. לכולם יש אפשרות המציינת קריטריון עצירה שונה המבוסס על ערכי פונקציה או משתנה, אם כי קריטריונים אלה שונים מעט עבור אלגוריתמים שונים. COBYLA, לדוגמה, מאפשר לציין סובלנות (לדוגמה, 'tol': 0.0001) שהיא הגבול התחתון על "אזור אמון". לעומת זאת, SLSQP מאפשר לציין יעד בדיוק של הפונקציה המשמשת בקריטריון העצירה ('ftol'). Nelder-Mead מאפשר לציין סובלנות בהפרש בין ניחושי פרמטר (xx) עוקבים (xatol) או סובלנות בהפרש בין ערכים עוקבים שהתקבלו עבור פונקציית העלות f(x)f(x) (fatol) (או שניהם). לרשימה מלאה של האלגוריתמים והאפשרויות הזמינות, בקרו בתיעוד minimize של SciPy.