עקומות משטח אנרגיה פוטנציאלית בהתנתקות עם Qunova HiVQE
Qiskit Functions הם תכונה ניסיונית זמינה רק למשתמשי IBM Quantum® Premium Plan, Flex Plan, ו-On-Prem (דרך IBM Quantum Platform API) Plan. הם במצב גרסת תצוגה מקדימה ועלולים להשתנות.
אומדן שימוש (הערה: זהו אומדן בלבד. זמן הריצה שלך עשוי להשתנות.)
- Li2S: חמש דקות זמן QPU על מעבד Heron r2
- FeP-NO: חמש דקות זמן QPU על מעבד Heron r2
רקע
חישוב מדויק של אנרגיות תגובה כימית חיוני להתקדמות מדעית במדע החומרים, הנדסה כימית, גילוי תרופות ותחומים נוספים. בין מערכות כימיות שונות, מערכת Li-S זכתה לעניין משמעותי להבנה ופיתוח של הרכבי סוללות חדשים. מדריך זה מספק ניסיון מעשי בחישוב משטח האנרגיה הפוטנציאלית (PES) של התנתקות קשר Li-S במערכת על ידי הסרת אטום ליתיום אחד באמצעות חישובי HiVQE. ניתן להשוות את התוצאות עם חישובי ייחוס (CASCI) וכן עם שיטות קלאסיות כמו Hartree-Fock (HF) לבעיה של 20 קיוביטים.
דרישות
התקינו את התלויות הבאות כדי להריץ את הקוד במדריך זה.
!pip install --upgrade pip
!pip install -U qiskit-ibm-catalog "qiskit_ibm_runtime<0.42.0" pyscf numpy matplotlib typing_extensions
הגדרות
כדי להריץ מדריך זה, ייבאו את הפונקציה qunova/hivqe-chemistry דרך QiskitFunctionCatalog. נדרש חשבון IBM Quantum Premium Plan, Flex Plan, או On-Prem (IBM Quantum Platform API) Plan עם רישיון מ-Qunova כדי להריץ פונקציה זו.
from qiskit_ibm_catalog import QiskitFunctionsCatalog
from pyscf import gto, scf, mcscf
import matplotlib.pyplot as plt
import pprint
catalog = QiskitFunctionsCatalog(
channel="ibm_quantum_platform",
instance="INSTANCE_CRN",
token="YOUR_API_KEY", # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
)
hivqe = catalog.load("qunova/hivqe-chemistry")
חלק 1: Li2S (20Q)
שלב 1: מיפוי קלטים קלאסיים לבעיה קוונטית
הגדירו גיאומטריות בפורמט מילון עבור מרחקי קשר שונים של Li-S לחישוב עקומת PES. גיאומטריות אלו עברו אופטימיזציה באמצעות חישובי B3LYP/631g.
str_geometries = {
"1.51": "S -1.239044 0.671232 -0.030374; Li -1.506327 0.432403 -1.498949; Li -0.899996 0.973348 1.826768",
"1.91": "S -1.215858 0.692272 0.099232; Li -1.553305 0.390283 -1.758043; Li -0.876205 0.994426 1.956257",
"2.40": "S -1.741432 0.680397 0.346702; Li -0.529307 0.488006 -1.729343; Li -1.284307 0.989409 2.177209",
"3.10": "S -2.347450 0.657089 0.566194; Li -0.199353 0.527517 -1.665148; Li -1.008243 0.973206 1.893522",
"3.80": "S -2.707255 0.674298 0.909161; Li 0.079218 0.552012 -1.671656; Li -0.927010 0.931502 1.557063",
"4.50": "S -2.913363 0.709175 1.276987; Li 0.368656 0.559989 -1.798088; Li -1.010340 0.888647 1.315670",
}
str_geometries
{'1.51': 'S -1.239044 0.671232 -0.030374; Li -1.506327 0.432403 -1.498949; Li -0.899996 0.973348 1.826768',
'1.91': 'S -1.215858 0.692272 0.099232; Li -1.553305 0.390283 -1.758043; Li -0.876205 0.994426 1.956257',
'2.40': 'S -1.741432 0.680397 0.346702; Li -0.529307 0.488006 -1.729343; Li -1.284307 0.989409 2.177209',
'3.10': 'S -2.347450 0.657089 0.566194; Li -0.199353 0.527517 -1.665148; Li -1.008243 0.973206 1.893522',
'3.80': 'S -2.707255 0.674298 0.909161; Li 0.079218 0.552012 -1.671656; Li -0.927010 0.931502 1.557063',
'4.50': 'S -2.913363 0.709175 1.276987; Li 0.368656 0.559989 -1.798088; Li -1.010340 0.888647 1.315670'}
חישובי HiVQE יבוצעו עם האפשרויות המוגדרות למטה. באמצעות בסיס sto3g עבור , ישנם 19 אורביטלים מרחביים עם 22 אלקטרונים. כדי להריץ מקרה (10o,10e) עם חישוב HiVQE, ניתן להגדיר 10 אורביטלים פעילים ושישה אורביטלים קפואים. בכל איטרציה, יעשה שימוש ב-100 צילומים לדגימת תצורת אלקטרונים שנוצרה על ידי מעגל קוונטי ExcitationPreserving (epa) עם שזירה circular ושני חזרות (reps). מספר האיטרציות המקסימלי מוגדר להיות 30 כדי להבטיח סיום של איטרציה עם התכנסות אנרגיה.
molecule_options = {
"basis": "sto3g",
"active_orbitals": list(range(5, 15)),
"frozen_orbitals": list(range(5)),
}
hivqe_options = {
"shots": 100,
"max_iter": 30,
"ansatz": "epa",
"ansatz_entanglement": "circular",
"ansatz_reps": 2,
}
שלב 2 ו-3: אופטימיזציה של הבעיה לביצוע בחומרה קוונטית וביצוע באמצעות פונקציית HiVQE Chemistry
הגדירו את לולאת for להרצת חישובי HiVQE עם גיאומטריות עם אפשרויות מוגדרות למטה. משימות נשלחות בלולאת for. במדריך זה, תשלחו שש גיאומטריות ותאחזרו תוצאות כשכולן יסתיימו. בהרצת הפונקציה הראשית, עליכם להגדיר את max_states ו-max_expansion_states כדי לשלוט בגודל המקסימלי של מטריצת תת-המרחב ולשלוט בכמה מצבים ניתן ליצור באמצעות שיטות הרחבת CI קלאסיות לכל איטרציה. מזהי משימות הפונקציה יאוחסנו במילון עם כל תו וית גיאומטריה למעקב נוסף ועיבוד הפלט.
info_jobid = {}
for dis, geom in str_geometries.items():
hivqe_run = hivqe.run(
geometry=geom,
backend_name="",
max_states=40000,
max_expansion_states=100,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)
status = hivqe_run.status()
info_jobid[dis] = hivqe_run.job_id
print(info_jobid)
{'1.51': 'de3b8818-c9db-4fa3-a3c2-d51551c2dfaf', '1.91': '55d9467a-fc85-49a8-9bc6-8f6990e421e5', '2.40': '415112b3-69ff-4d53-8b10-cb4e3be68c9e', '3.10': 'ef67b600-3887-4225-b872-e354dfdf8454', '3.80': 'b16d3502-a9e4-4560-9775-852e9d07e70f', '4.50': '0c0bffc7-af77-4a56-a656-2a2610c991d6'}
בואו נבדוק האם כל המשימות עדיין פועלות או הושלמו.
completed_jobs_num = 0
running_jobs_num = 0
completed_jobs = {}
for i, info in enumerate(info_jobid.items()):
dis, job_id = info
submitted_job = catalog.get_job_by_id(job_id)
stat = submitted_job.status()
print(dis, submitted_job.job_id, stat)
if stat == "DONE":
completed_jobs_num += 1
completed_jobs[dis] = submitted_job
if (stat == "RUNNING") or (stat == "QUEUED"):
running_jobs_num += 1
print(
f"Completed {completed_jobs_num} job, Running or Queued {running_jobs_num} job"
)
1.51 de3b8818-c9db-4fa3-a3c2-d51551c2dfaf DONE
1.91 55d9467a-fc85-49a8-9bc6-8f6990e421e5 DONE
2.40 415112b3-69ff-4d53-8b10-cb4e3be68c9e DONE
3.10 ef67b600-3887-4225-b872-e354dfdf8454 DONE
3.80 b16d3502-a9e4-4560-9775-852e9d07e70f DONE
4.50 0c0bffc7-af77-4a56-a656-2a2610c991d6 DONE
Completed 6 job, Running or Queued 0 job
לאחר שכל המשימות הושלמו, בואו נאחזר את כל תוצאות החישוב.
hivqe_result = {}
if len(info_jobid) == completed_jobs_num:
print("All jobs are completed")
for i, job in enumerate(completed_jobs.items()):
dis, cal = job
print(dis, cal.result()["energy"])
hivqe_result[str(dis)] = cal.result()["energy"]
All jobs are completed
1.51 -407.8944801731773
1.91 -407.9800570932916
2.40 -407.9372992999806
3.10 -407.86278336000134
3.80 -407.83092972296157
4.50 -407.82971011225766
pprint.pprint(hivqe_result)
{'1.51': -407.8944801731773,
'1.91': -407.9800570932916,
'2.40': -407.9372992999806,
'3.10': -407.86278336000134,
'3.80': -407.83092972296157,
'4.50': -407.82971011225766}
ניתן לעקוב אחר כל זמן הריצה של QPU ששימש במשימה על ידי כניסה ל-IBM Quantum Platform וצפייה במשימות שנשלחו עם תווית qunova-chemistry-hivqe.