פתרון בעיית פיצול השוק עם Iskay Quantum Optimizer של Kipu Quantum
פונקציות Qiskit הן תכונה ניסיונית הזמינה רק למשתמשי IBM Quantum® Premium Plan, Flex Plan, ו-On-Prem (דרך IBM Quantum Platform API) Plan. הן נמצאות בסטטוס פרסום תצוגה מקדימה וכפופות לשינויים.
הערכת שימוש: 20 שניות על מעבד Heron r2. (הערה: זוהי הערכה בלבד. זמן הריצה בפועל עשוי להשתנות.)
רקע
מדריך זה מדגים כיצד לפתור את בעיית פיצול השוק באמצעות Iskay quantum optimizer של Kipu Quantum [1]. בעיית פיצול השוק מייצגת אתגר אמיתי של הקצאת משאבים, שבו יש לחלק שווקים לאזורי מכירה מאוזנים כדי לעמוד ביעדי ביקוש מדויקים.
אתגר פיצול השוק
בעיית פיצול השוק מציגה אתגר שנראה פשוט אך קשה חישובית בתחום הקצאת משאבים. נתונה חברה עם מוצרים הנמכרים ב- שווקים שונים, כאשר כל שוק רוכש חבילת מוצרים ספציפית (המיוצגת על ידי עמודות המטריצה ). יעד העסק הוא לחלק את השווקים הללו לשני אזורי מכירה מאוזנים, כך שכל אזור יקבל בדיוק מחצית מהביקוש הכולל לכל מוצר.
ניסוח מתמטי:
אנו מחפשים וקטור השמה בינארי , שבו:
- משייך את שוק לאזור A
- משייך את שוק לאזור B
- האילוץ חייב להתקיים, כאשר מייצג את יעדי המכירות (בדרך כלל מחצית מהביקוש הכולל לכל מוצר)
פונקציית העלות:
לפתרון הבעיה, אנו ממזערים את הפרת האילוץ בריבוע:
כאשר:
- מייצג את המכירות של מוצר בשוק
- הוא ההשמה הבינארית של שוק
- הוא יעד המכירות למוצר בכל אזור
- העלות שווה לאפס בדיוק כאשר כל האילוצים מתקיימים
כל איבר בסכום מייצג את הסטייה בריבוע מיעד המכירות למוצר מסוים. כאשר מרחיבים את פונקציית העלות, מקבלים:
מאחר ש- הוא קבוע, מיזור שקול למיזור הפונקציה הריבועית , שהיא בדיוק בעיית QUBO (אופטימיזציה בינארית ריבועית ללא אילוצים).
מורכבות חישובית:
למרות הפרשנות העסקית הפשוטה שלה, הבעיה מציגה קושי חישובי ניכר:
- כישלון בקנה מידה קטן: פותרי תכנות שלם מעורב (Mixed Integer Programming) קונבנציונליים נכשלים על מופעים עם כמה שבעה מוצרים בלבד תחת פסק זמן של שעה אחת [4]
- גידול אקספוננציאלי: מרחב הפתרונות גדל באופן אקספוננציאלי ( השמות אפשריות), מה שהופך גישות כוח גס לבלתי ישימות
מחסום חישובי חמור זה, בשילוב עם הרלוונטיות המעשית שלו לתכנון טריטוריה והקצאת משאבים, הופך את בעיית פיצול השוק לבנצ'מרק אידיאלי לאלגוריתמי אופטימיזציה קוונטיים [4].
מה הופך את גישת Iskay לייחודית?
מייעל Iskay משתמש באלגוריתם bf-DCQO (אופטימיזציה קוונטית קאונטר-דיאבטית דיגיטלית עם שדה הטיה) [1], המהווה התקדמות משמעותית באופטי מיזציה קוונטית:
יעילות מעגל: אלגוריתם bf-DCQO משיג צמצום שערים משמעותי [1]:
- עד 10 פעמים פחות שערי סיבוך מאשר Digital Quantum Annealing (DQA)
- מעגלים רדודים משמעותית מאפשרים:
- פחות הצטברות שגיאות במהלך הביצוע הקוונטי
- יכולת להתמודד עם בעיות גדולות יותר על חומרה קוונטית נוכחית
- אין צורך בטכניקות הפחתת שגיאות
עיצוב לא-ווריאציוני: בניגוד לאלגוריתמים ווריאציוניים הדורשים כ-100 איטרציות, bf-DCQO בדרך כלל זקוק רק לכ-10 איטרציות [1]. זה מושג באמצעות:
- חישובי שדה הטיה חכמים מתוך התפלגויות מצב נמדדות
- התחלת כל איטרציה ממצב אנרגיה קרוב לפתרון הקודם
- עיבוד קלאסי לאחר-עיבוד משולב עם חיפוש מקומי
פרוטוקולים קאונטר-דיאבטיים: האלגוריתם משלב איברים קאונטר-דיאבטיים המדכאים עירורים קוונטיים לא רצויים בזמני התפתחות קצרים, ומאפשרים למערכת להישאר קרוב למצב הבסיסי אפילו עם מעברים מהירים [1].
דרישות מקדימות
לפני שמתחילים מדריך זה, יש לוודא שהרכיבים הבאים מותקנים:
- Qiskit IBM Runtime (
pip install qiskit-ibm-runtime) - Qiskit Functions (
pip install qiskit-ibm-catalog) - NumPy (
pip install numpy) - Requests (
pip install requests) - Opt Mapper Qiskit addon (
pip install qiskit-addon-opt-mapper)
כמו כן, יש להשיג גישה לפונקציית Iskay Quantum Optimizer מקטלוג פונקציות Qiskit.
הגדרה
ראשית, ייבא את כל החבילות הנדרשות למדריך זה.
# Added by doQumentation — installs packages not in the Binder environment
%pip install -q qiskit-addon-opt-mapper
import os
import tempfile
import time
from typing import Tuple, Optional
import numpy as np
import requests
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from qiskit_addon_opt_mapper import OptimizationProblem
from qiskit_addon_opt_mapper.converters import OptimizationProblemToQubo
print("All required libraries imported successfully")
הגדרת פרטי גישה ל-IBM Quantum
הגדר את פרטי הגישה ל-IBM Quantum® Platform. תזדקק ל:
- API Token: מפתח ה-API בן 44 התווים שלך מ-IBM Quantum Platform
- Instance CRN: מזהה מופע IBM Cloud® שלך
token = "<YOUR_API_KEY>"
instance = "<YOUR_INSTANCE_CRN>"
שלב 1: מיפוי קלטים קלאסיים לבעיה קוונטית
אנו מתחילים במיפוי הבעיה הקלאסית שלנו לייצוג תואם-קוונטי. שלב זה כולל:
- התחברות ל-Iskay Quantum Optimizer
- טעינת בעיית פיצול השוק וניסוחה
- הבנת אלגוריתם bf-DCQO שיפתור אותה
התחברות ל-Iskay Quantum Optimizer
אנו מתחילים בביסוס חיבור לקטלוג פונקציות Qiskit וטעינת Iskay Quantum Optimizer. מייעל Iskay הוא פונקציה קוונטית שסופקה על ידי Kipu Quantum ומממשת את אלגוריתם bf-DCQO לפתרון בעיות אופטימיזציה על חומרה קוונטית.
catalog = QiskitFunctionsCatalog(token=token, instance=instance)
iskay_solver = catalog.load("kipu-quantum/iskay-quantum-optimizer")
print("Iskay optimizer loaded successfully")
print("Ready to solve optimization problems using bf-DCQO algorithm")
טעינת הבעיה וניסוחה
הבנת פורמט נתוני הבעיה
מופעי בעיות מ-QOBLIB (ספריית בנצ'מרקים לאופטימיזציה קוונטית) [2] מאוחסנים בפורמט טקסט פשוט. בואו נבחן את התוכן הממשי של מופע היעד שלנו ms_03_200_177.dat:
3 20
60 92 161 53 97 2 75 81 6 139 132 45 108 112 181 93 152 200 164 51 1002
176 196 41 143 2 88 0 79 10 71 75 148 82 135 34 187 33 155 58 46 879
68 68 179 173 127 163 48 49 99 78 44 52 173 131 73 198 84 109 180 95 1040
מבנה הפורמט:
-
שורה ראשונה:
3 203= מספר המוצרים (אילוצים/שורות במטריצה )20= מספר השווקים (משתנים/עמודות במטריצה )
-
3 השורות הבאות: מטריצת המקדמים וקטור היעד
- כל שורה מכילה 21 מספרים: 20 הראשונים הם מקדמי השורה, האחרון הוא היעד
- שורה 2:
60 92 161 ... 51 | 1002- 20 המספרים הראשונים: כמה ממוצר 1 כל אחד מ-20 השווקים מוכר
- המספר האחרון (1002): יעד המכירות למוצר 1 באזור אחד
- שורה 3:
176 196 41 ... 46 | 879- מכירות מוצר 2 לשוק ויעד (879)
- שורה 4:
68 68 179 ... 95 | 1040- מכירות מוצר 3 לשוק ויעד (1040)
פרשנות עסקית:
- שוק 0 מוכר: 60 יחידות של מוצר 1, 176 יחידות של מוצר 2, 68 יחידות של מוצר 3
- שוק 1 מוכר: 92 יחידות של מוצר 1, 196 יחידות של מוצר 2, 68 יחידות של מוצר 3
- וכך הלאה עבור כל 20 השווקים...
- מטרה: לפצל 20 שווקים אלו לשני אזורים שבהם כל אזור מקבל בדיוק 1002 יחידות של מוצר 1, 879 יחידות של מוצר 2 ו-1040 יחידות של מוצר 3