ข้ามไปยังเนื้อหาหลัก

HI-VQE Chemistry - A Qiskit Function by Qunova Computing

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-catalog qiskit-ibm-runtime
# This cell is hidden from users
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy(operational=True, min_num_qubits=16).name
หมายเหตุ

Qiskit Functions เป็นฟีเจอร์ทดลองที่มีเฉพาะสำหรับผู้ใช้ IBM Quantum® Premium Plan, Flex Plan และ On-Prem (ผ่าน IBM Quantum Platform API) Plan เท่านั้น ยังอยู่ในสถานะ preview release และอาจมีการเปลี่ยนแปลง

ภาพรวม

ในเคมีควอนตัม ปัญหาโครงสร้างอิเล็กตรอนเน้นที่การหาคำตอบของสมการ Schrödinger อิเล็กทรอนิกส์ ซึ่งเป็นฟังก์ชันคลื่นควอนตัมที่อธิบายพฤติกรรมของอิเล็กตรอนในระบบ ฟังก์ชันคลื่นเหล่านี้เป็นเวกเตอร์ของแอมพลิจูดเชิงซ้อน โดยแต่ละแอมพลิจูดสอดคล้องกับการมีส่วนร่วมของการจัดวางอิเล็กตรอนที่เป็นไปได้

ground state คือฟังก์ชันคลื่นที่มีพลังงานต่ำสุดของระบบ และมีความสำคัญพิเศษในการศึกษาระบบโมเลกุล วิธีการที่แม่นยำที่สุดในการคำนวณ ground state พิจารณาการจัดวางอิเล็กตรอนทั้งหมดที่เป็นไปได้ แต่วิธีนี้ไม่สามารถทำได้จริงสำหรับระบบขนาดใหญ่ เนื่องจากจำนวนการจัดวางเพิ่มขึ้นแบบ exponential ตามขนาดของระบบ

Handover Iterative Variational Quantum Eigensolver (HI-VQE) เป็นวิธีไฮบริดควอนตัม-คลาสสิกที่ล้ำสมัยสำหรับการประมาณ ground state ของระบบโมเลกุลอย่างแม่นยำ ผสานรวม quantum hardware กับการคำนวณแบบคลาสสิก โดยใช้ quantum processor เพื่อสำรวจการจัดวางอิเล็กตรอนที่เป็นผู้สมัครอย่างมีประสิทธิภาพ และคำนวณฟังก์ชันคลื่นผลลัพธ์บนคอมพิวเตอร์คลาสสิก ด้วยการสร้างฟังก์ชันคลื่นที่กระชับแต่มีความแม่นยำทางเคมี HI-VQE ช่วยส่งเสริมการวิจัยและการค้นพบในเคมีควอนตัมและวิทยาศาสตร์วัสดุ

ภาพแสดงภาพรวมของอัลกอริทึม HI-VQE ของ Qunova

HI-VQE ลดความซับซ้อนทางการคำนวณของปัญหาโครงสร้างอิเล็กตรอนด้วยการประมาณ ground state อย่างมีประสิทธิภาพด้วยความแม่นยำสูง มุ่งเน้นที่ชุดย่อยของการจัดวางอิเล็กตรอนที่เกี่ยวข้องมากที่สุดที่คัดเลือกมาอย่างดี เพื่อเพิ่มประสิทธิภาพทั้งความแม่นยำและประสิทธิภาพการคำนวณ

ด้วยการรวมจุดแข็งของทั้งคอมพิวเตอร์คลาสสิกและควอนตัม HI-VQE ปรับปรุงและพัฒนาการประมาณฟังก์ชันคลื่นปัจจุบันแบบ iterative เทคนิคการสร้าง subspace เฉพาะตัวช่วยให้การเลือกการจัดวางมีประสิทธิภาพมากขึ้น ทำให้ผู้ใช้มีการควบคุมการคำนวณที่มากขึ้นและความแม่นยำที่ดีขึ้นในการจำลองเคมีควอนตัม

หากต้องการเรียนรู้เกี่ยวกับอัลกอริทึมในเชิงลึกมากขึ้น สามารถ อ่านบทความวิจัยที่เกี่ยวข้อง ได้

คำอธิบาย

จำนวนการจัดวางอิเล็กตรอนสำหรับระบบโมเลกุลเพิ่มขึ้นแบบ exponential ตามขนาดระบบ อย่างไรก็ตาม สำหรับสถานะอิเล็กทรอนิกส์บางอย่าง เช่น ground state มักพบว่ามีเพียงส่วนเล็กน้อยของการจัดวางที่มีส่วนร่วมอย่างมีนัยสำคัญต่อพลังงานของสถานะนั้น วิธี Selected configuration interaction (SCI) ใช้ประโยชน์จากความกระจัดกระจายนี้เพื่อลดต้นทุนการคำนวณโดยการระบุและมุ่งเน้นที่การจัดวางที่เกี่ยวข้องมากที่สุด ชุดย่อยของการจัดวางนี้เรียกว่า subspace

HI-VQE ใช้ประสิทธิภาพโดยธรรมชาติของ quantum computer ในการแสดงแทนระบบโมเลกุลเพื่อช่วยในการค้นหา subspace ผสมผสาน subroutine คลาสสิกและควอนตัมเพื่อแก้ปัญหาโครงสร้างอิเล็กตรอนด้วยความแม่นยำสูง ต่างจากวิธี quantum SCI ที่มีอยู่ HI-VQE รวมการฝึก variational, การสร้าง subspace แบบ iterative และการคัดกรองการจัดวางแบบ pre-diagonalization เพื่อเพิ่มประสิทธิภาพด้วยการลดการวัดควอนตัม, การ iteration และต้นทุน diagonalization แบบคลาสสิก HI-VQE จึงสามารถนำไปใช้กับระบบโมเลกุลขนาดใหญ่ขึ้นที่ต้องการ Qubit มากขึ้น และลดต้นทุนในการแก้ปัญหาขนาดที่กำหนดด้วยระดับความแม่นยำเดิม

ภาพแสดงคำอธิบายรายละเอียดของแต่ละขั้นตอนในอัลกอริทึม HI-VQE ของ Qunova

ในการคำนวณ ground state ของระบบ HI-VQE จะใช้แพ็กเกจเคมี PySCF แบบคลาสสิกก่อนเพื่อสร้างการแสดงแทนโมเลกุลจาก input ที่ผู้ใช้ระบุ เช่น ข้อมูลทางเรขาคณิตของโมเลกุลและข้อมูลโมเลกุลอื่น ๆ จากนั้นเข้าสู่ loop การ optimize แบบไฮบริดควอนตัม-คลาสสิก โดย iterative ปรับปรุง subspace เพื่อแสดงแทน ground state ได้อย่างเหมาะสมในขณะที่ลดจำนวนการจัดวางให้น้อยที่สุด loop จะดำเนินต่อไปจนกว่าจะตรงตามเกณฑ์การบรรจบ เช่น ขนาด subspace หรือความเสถียรของพลังงาน จากนั้นจึงส่งออกฟังก์ชันคลื่น ground state และพลังงานที่คำนวณได้ ผลลัพธ์เหล่านี้สามารถใช้สร้าง potential energy surface ที่แม่นยำและทำการวิเคราะห์เพิ่มเติมของระบบ

loop การ optimize มุ่งเน้นที่การปรับ parameter ของ quantum circuit เพื่อสร้าง subspace คุณภาพสูง HI-VQE มีตัวเลือก quantum circuit สามแบบ: excitation_preserving, efficient_su2 และ LUCJ การ optimize เริ่มต้นใกล้กับ reference state ของ Hartree-Fock เนื่องจากมีความเหมาะสมทั่วไป จากนั้น Circuit จะถูกประมวลผลบน quantum device และการจัดวางจะถูก sample จาก quantum state ผลลัพธ์ก่อนส่งกลับมาเป็น binary string เนื่องจาก noise ของ quantum device บางการจัดวางที่ sample มาอาจไม่ถูกต้องทางกายภาพ ล้มเหลวในการอนุรักษ์จำนวนอิเล็กตรอนหรือ spin HI-VQE แก้ปัญหานี้โดยใช้กระบวนการ configuration recovery จากแพ็กเกจ qiskit-addon-sqd เพื่อให้ผู้ใช้สามารถแก้ไขการจัดวางที่ไม่ถูกต้องหรือละทิ้งได้

การจัดวางที่ถูกต้องจะผ่านขั้นตอนการคัดกรองเพิ่มเติมโดยเป็นทางเลือก เพื่อลบรายการที่คาดว่าจะมีส่วนร่วมน้อยที่สุด ซึ่งลดขนาดของ subspace ทำให้ลดต้นทุนของขั้นตอน diagonalization หากเปิดใช้งานการคัดกรอง จะสร้าง subspace Hamiltonian เบื้องต้นจากการจัดวางที่ถูกต้อง และทำ diagonalization ด้วยเกณฑ์การสิ้นสุดที่ผ่อนปรนมาก แม้ว่าความแม่นยำของ amplitude ผลลัพธ์สำหรับแต่ละการจัดวางจะต่ำ แต่มีประสิทธิภาพในการทำนายว่าการจัดวางใดควรถูกยกเว้นจาก subspace ใน iteration นี้ และคำนวณได้รวดเร็ว

การจัดวางที่เลือกจะถูกเพิ่มเข้าใน subspace และ Hamiltonian ของระบบจะถูก project เข้าสู่ subspace นี้ subspace อัปเดตแบบ iterative โดยเก็บรักษาการจัดวางที่เกี่ยวข้องมากที่สุดในแต่ละ iteration แนวทางนี้แตกต่างจากวิธีอื่นเพราะ quantum circuit ไม่จำเป็นต้องประมาณ ground state เต็มรูปแบบในแต่ละขั้นตอน

ต่อจากนั้น subspace Hamiltonian จะถูก diagonalize แบบคลาสสิกเพื่อหา eigenvalue ต่ำสุดและ eigenvector ที่สอดคล้อง ซึ่งแสดงการประมาณ ground state และพลังงานของมัน เมื่อคุณภาพ subspace ดีขึ้นผ่านการ iteration ground state ที่คำนวณได้จะประมาณ ground state จริงได้ดีขึ้น ขั้นตอนการคัดกรองเพิ่มเติมสามารถดำเนินการได้ ณ จุดนี้ เพื่อลบการจัดวางที่ไม่มีส่วนร่วมอย่างมีนัยสำคัญใน ground state ที่คำนวณได้ออกจาก subspace ขั้นตอนนี้ทำให้ subspace ที่นำเข้าสู่ iteration ถัดไปกระชับที่สุด โดยประเมินจาก amplitude ที่ได้จาก diagonalization เนื่องจากสิ่งเหล่านี้แสดงถึงความสำคัญของการมีส่วนร่วมของแต่ละการจัดวางต่อ ground state ที่คำนวณได้

การตรวจสอบการบรรจบจะกำหนดว่าการฝึกเพิ่มเติมจะปรับปรุงผลลัพธ์หรือไม่ ถ้าใช่ จะทำขั้นตอน classical expansion เพิ่มเติม parameter ของ quantum circuit จะถูกอัปเดตเพื่อลดพลังงานที่คำนวณได้เพิ่มเติม และกระบวนการจะวนซ้ำ ขั้นตอน classical expansion สร้างการจัดวางเพิ่มเติมสำหรับ subspace โดย supplement การจัดวางที่ sample จาก quantum device โดยระบุการจัดวางที่มี amplitude ใหญ่สุดในผลการ diagonalization ก่อน จากนั้นสร้างการจัดวางใหม่ด้วย single และ double excitation จากการจัดวางที่ระบุ แล้วนำการจัดวางตามจำนวนที่ต้องการเพิ่มเข้าใน subspace

เมื่อพิจารณาแล้วว่า iteration บรรจบแล้ว HI-VQE จะส่งคืน ground state ที่คำนวณได้ (ในรูปแบบของสถานะใน subspace และ amplitude ของสถานะเหล่านั้นในฟังก์ชันคลื่น ground state), พลังงานของมัน และค่าวัด energy variance ที่บอกว่าสถานะที่คำนวณได้เป็น eigenstate ของ Hamiltonian ของระบบหรือไม่

ผู้ใช้สามารถกำหนด quantum circuit ที่ใช้และจำนวน shot สำหรับแต่ละ quantum circuit รวมถึงควบคุมขนาด subspace หรือเปิดใช้งานการสร้างการจัดวางเพิ่มเติมแบบคลาสสิกเพื่อช่วย quantum generated configuration ในลักษณะนี้ผู้ใช้สามารถปรับพฤติกรรมของ HI-VQE ให้เหมาะสมกับแอปพลิเคชันที่ต้องการได้

เริ่มต้นใช้งาน

ขั้นแรก ขอสิทธิ์เข้าถึง function จากนั้น authenticate โดยใช้ IBM Quantum® API key และสมมติว่าคุณได้ บันทึกบัญชีของคุณ ในสภาพแวดล้อมในเครื่องแล้ว เลือก Qiskit Function ดังนี้:

import reprlib
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("qunova/hivqe-chemistry")

Input

ดูตารางต่อไปนี้สำหรับ parameter input ทั้งหมดที่ function รับ ส่วน ตัวเลือกโมเลกุล และ ตัวเลือก HI-VQE ที่ตามมาจะให้รายละเอียดเพิ่มเติมเกี่ยวกับ argument เหล่านั้น

ชื่อชนิดคำอธิบายจำเป็นค่าเริ่มต้นตัวอย่าง
geometryUnion[List[List[Union[str, Tuple[float, float, float]]]], str]สามารถเป็น string หรือ list ที่มีโครงสร้างของคู่ atom และพิกัด หากระบุเป็น string ต้องเป็นรูปแบบ Cartesian Coordinate Format หากระบุเป็น list ควรระบุเป็น list ของ list ที่แต่ละ list ประกอบด้วย string ของ atom และ tuple พิกัดใช่N/A[['O', (0, 0, 0)], ['H', (0, 1, 0)], ['H', (0, 0, 1)]] หรือ "O 0 0 0; H 0 1 0; H 0 0 1"
backend_namestrชื่อของ Backend สำหรับส่ง queryใช่N/Aibm_fez
max_statesintขนาดสูงสุดของ subspace สำหรับ diagonalization จะใช้สถานะน้อยลงหากตัวเลขไม่ใช่กำลังสองสมบูรณ์ใช่N/A100
max_expansion_statesintจำนวนสูงสุดของ CI state ที่สร้างแบบคลาสสิกที่จะรวมในแต่ละ iterationใช่N/A10
molecule_optionsdictตัวเลือกที่เกี่ยวข้องกับโมเลกุลที่ใช้เป็น input ของ HI-VQE ดูส่วน ตัวเลือกโมเลกุล สำหรับรายละเอียดเพิ่มเติมไม่ดูส่วน ตัวเลือกโมเลกุล สำหรับรายละเอียด{"basis": "sto3g", "unit": "angstrom" }
hivqe_optionsdictตัวเลือกที่ควบคุมพฤติกรรมของอัลกอริทึม HI-VQE ดูส่วน ตัวเลือก HI-VQE สำหรับรายละเอียดเพิ่มเติมไม่ดูส่วน ตัวเลือก HI-VQE สำหรับรายละเอียด{"shots": 10_000, "max_iter": 10 }

ตัวเลือกโมเลกุล

ตารางต่อไปนี้แสดงรายละเอียดของ key และค่าทั้งหมดที่สามารถตั้งค่าได้ใน dictionary molecule_options รวมถึงชนิดข้อมูลและค่าเริ่มต้น key ทั้งหมดเป็นทางเลือก

Keyชนิดค่าค่าเริ่มต้นช่วงที่ถูกต้องคำอธิบาย
"charge"int0ต่าง ๆจำนวนเต็มที่ระบุประจุสุทธิรวมของระบบโมเลกุล ค่าเริ่มต้นคือ 0 แต่สามารถเป็นจำนวนเต็มใดก็ได้
"basis"str'sto-3g'ต่าง ๆString ที่ระบุชนิด basis; ส่งต่อไปยัง pyscf (เช่น: "sto-3g", "3-21g", "6-31g", "cc-pvdz")
"active_orbitals"List[int]ทุก orbital indexดัชนี spatial orbital ที่ถูกต้องสำหรับปัญหาList ของดัชนี active orbital ในช่วง [0, n) โดย n คือจำนวน Qubit ที่ใช้ในปัญหา หากระบุ ต้องระบุ frozen_orbitals ด้วย
"frozen_orbitals"List[int]ไม่มี indexดัชนี spatial orbital ที่ถูกต้องสำหรับปัญหา ยกเว้น active orbitalList ของดัชนี frozen orbital ในช่วงเดียวกับ active_orbitals หากระบุ ต้องระบุ active_orbitals ด้วย โปรดทราบว่าควร freeze เฉพาะ occupied orbital เนื่องจากจำนวน active electron จะลดลง 2 สำหรับแต่ละ occupied orbital ที่ถูก freeze
"orbital_coeffs"List[List[float]]Hartree-Fock molecular orbitalต่าง ๆสัมประสิทธิ์สำหรับ spatial orbital ที่ใช้ในการคำนวณ electronic repulsion integral ของระบบ ตัวอย่างที่ถูกต้อง เช่น Hartree-Fock molecular orbital, natural orbital และ AVAS orbital
"symmetry"Union[str, bool]FalseTrue หรือ Falseใช้เรียก point group symmetry สำหรับการคำนวณโมเลกุลเบื้องต้นเพื่อสร้าง symmetry adapted orbital basis orbital ที่ปรับ symmetry เหล่านี้ใช้เป็น basis function สำหรับการคำนวณ SCF ที่ตามมา ค่าเริ่มต้นคือ False; หากตั้งเป็น True จะถูกเรียกใช้และ point group ที่กำหนดเองจะถูกตรวจจับและใช้โดยอัตโนมัติ หากกำหนด symmetry เฉพาะ เช่น symmetry = "Dooh" จะเกิด error หากเรขาคณิตของโมเลกุลไม่อยู่ภายใต้ symmetry ที่กำหนดนั้น
"symmetry_subgroup"Optional[str]Noneดู เอกสาร pyscfสามารถใช้สร้าง subgroup ของ symmetry ที่ตรวจพบ ไม่มีผลเมื่อระบุ symmetry โดยใช้ keyword argument symmetry
"unit"str"angstrom"ดู เอกสาร pyscfระบุหน่วยการวัดที่ใช้สำหรับพิกัดอะตอมและระยะทาง ค่าเริ่มต้นใช้หน่วย angstrom
"nucmod"Optional[Union[dict, str]]Noneดู เอกสาร pyscfระบุโมเดลนิวเคลียสที่ใช้ ค่าเริ่มต้นใช้โมเดลนิวเคลียสแบบจุด ค่าอื่น ๆ เปิดใช้งานโมเดลนิวเคลียสแบบ Gaussian หากระบุเป็น function จะใช้กับโมเดลนิวเคลียสแบบ Gaussian เพื่อสร้างค่าการกระจายประจุนิวเคลียร์ 'zeta'
"pseudo"Optional[Union[dict, str]]Noneดู เอกสาร pyscfระบุ pseudopotential สำหรับอะตอมในโมเลกุล ค่าเริ่มต้นคือ None หมายความว่าไม่มีการใช้ pseudopotential และอิเล็กตรอนทั้งหมดจะถูกรวมในการคำนวณอย่างชัดเจน
"cart"boolFalseดู เอกสาร pyscfระบุว่าจะใช้ cartesian GTO เป็น angular momentum basis function ในการคำนวณหรือไม่ ค่าเริ่มต้น False จะใช้ spherical GTO
"magmom"Optional[List[Union[int, float]]]Noneดู เอกสาร pyscfตั้งค่า colinear spin magnetic moment ของแต่ละอะตอม ค่าเริ่มต้นคือ None และแต่ละอะตอมเริ่มต้นด้วย spin เป็นศูนย์
"avas_aolabels"Optional[List[str]]Noneเช่น ["H 1s", "O 2p"] สำหรับ H2Oกำหนด Atomic Orbital ที่จะรวมใน AVAS scheme ดู เอกสาร AVAS
"avas_threshold"float0.2ระหว่าง 0.0 ถึง 2.0ระบุค่า cutoff ที่ใช้กำหนดว่า Atomic Orbital (AO) ใดบ้างที่จะเก็บไว้ใน active space
"noons_level"Optional[str]None"mp2" หรือ "ccsd"กำหนดแนวทางทางทฤษฎีสำหรับการเตรียม natural orbital และการเลือก active orbital ตาม Natural Orbital Occupation Numbers (NOONs) scheme ดู เอกสาร NOONs ต้องระบุดัชนี active และ frozen orbital เพื่อควบคุมจำนวน orbital (และจำนวน Qubit)

ตัวเลือก HI-VQE

ตารางต่อไปนี้แสดงรายละเอียดของ key และค่าทั้งหมดที่สามารถตั้งค่าได้ใน dictionary hivqe_options รวมถึงชนิดข้อมูลและค่าเริ่มต้น key ทั้งหมดเป็นทางเลือก

Keyชนิดค่าค่าเริ่มต้นช่วงที่ถูกต้องคำอธิบาย
"shots"int1_000ระหว่าง 1 ถึง 10,000จำนวน shot ที่ใช้บน quantum device ต่อ iteration
"max_iter"int25ระหว่าง 1 ถึง 50จำนวน iteration สูงสุดที่รันเพื่อ optimize ansatz อัลกอริทึมอาจใช้ iteration น้อยกว่าหากบรรจบก่อนหน้า
"initial_basis_states"List[str]สถานะ Hartree-FockBinary string ที่มีจำนวนบิตตรงกับจำนวน Qubit ที่จำเป็นสำหรับปัญหาใช้เริ่มต้นอัลกอริทึมใหม่ด้วย classical state จากผลลัพธ์ก่อนหน้า
"ansatz"str"epa""epa", "hea" หรือ "lucj"ระบุ quantum ansatz ที่จะ optimize เพื่อสร้างสถานะใหม่ "epa" เลือก excitation-preserving ansatz "hea" เลือก hardware-efficient ansatz "lucj" เลือก local unitary cluster Jastrow ansatz
"convergence_count"int3อย่างน้อย 2จำนวน iteration ที่ไม่มีการเปลี่ยนแปลงพลังงานที่คำนวณได้อย่างมีนัยสำคัญที่ต้องผ่านไปก่อนอัลกอริทึมจะถือว่าบรรจบ
"convergence_abstol"float1e-4มากกว่า 0 และไม่เกิน 1ขนาดของการเปลี่ยนแปลงพลังงานที่คำนวณได้ที่ถือว่ามีนัยสำคัญสำหรับการตรวจสอบการบรรจบ
"reset_convergence_count"boolTrueTrue หรือ Falseหาก True iteration convergence_count ต้องผ่านไปโดยไม่มีการเปลี่ยนแปลงที่มีนัยสำคัญมาขัดแทร็ก หาก False อัลกอริทึมจะหยุดหลัง convergence_count หากมีการเปลี่ยนแปลงเล็กน้อยเกิดขึ้นใน iteration ใดก็ตามระหว่างกระบวนการ optimize
"configuration_recovery"boolTrueTrue หรือ Falseว่าจะใช้ configuration recovery จากแพ็กเกจ qiskit-addon-sqd หรือไม่ หาก True สถานะที่ไม่ถูกต้องที่ sample จาก quantum device จะถูกแก้ไขแบบคลาสสิก หาก False จะถูกละทิ้ง
"ansatz_entanglement"str"circular"หนึ่งใน "linear", "reverse_linear", "pairwise", "circular", "full" หรือ "sca" หากใช้ ansatz "lucj" มีตัวเลือก "lucj_default" ด้วยระบุ entanglement scheme ที่ควรใช้ภายใน quantum circuit ตาม Qiskit ทั่วไปและ ffsim conventions สำหรับ LUCJ ansatz
"ansatz_reps"int2มากกว่า 0จำนวนการซ้ำของแต่ละ layer ใน quantum circuit
"amplitude_screening_tolerance"Union[float,int]0อย่างน้อย 0 และน้อยกว่า 1ค่า tolerance สำหรับการตัดสินใจว่าสถานะใดควรถูกคัดออกจาก subspace หลัง diagonalization ระบุ inclusion threshold สำหรับ subspace state ตาม amplitude ที่คำนวณได้
"overlap_screening_tolerance"float1e-2ระหว่าง 1e-4 ถึง 1e-1 รวมปลายทั้งสองค่า tolerance สำหรับการทำนายว่าสถานะใดควรถูกคัดออกจาก subspace ก่อน diagonalization ควบคุมความแม่นยำของ amplitude ที่ทำนายสำหรับแต่ละสถานะ ค่าที่เล็กกว่าให้การทำนายที่แม่นยำกว่า

Output

function ส่งคืน dictionary ที่มี key และค่าสี่รายการ key และค่าได้รับการบันทึกไว้ในตารางต่อไปนี้:

Keyชนิดค่าคำอธิบาย
"energy"floatพลังงาน ground state โดยประมาณของโมเลกุล
"states"List[str]determinant ที่เลือกซึ่งก่อตัวเป็น subspace ที่ใช้หาคำตอบพลังงาน อยู่ในรูปแบบ alternating alpha-beta
"eigenvector"List[float]eigenvector ที่สอดคล้องกับ ground state ของ subspace ที่ประกอบด้วย "states"
"energy_variance"floatenergy variance ของ ground state ของ subspace ที่ประกอบด้วย "states" บ่งบอกคุณภาพของคำตอบ ค่านี้ไม่เป็นลบ ค่าที่ต่ำกว่าหมายความว่า ground state ของ subspace ประมาณ eigenstate ของ Hamiltonian ของระบบได้ใกล้เคียงกว่า
"energy_history"List[float]พลังงานที่คำนวณในแต่ละ iteration ระหว่างกระบวนการ hybrid optimization ตามลำดับที่คำนวณ คำนวณพลังงานสอง iteration ต่อหนึ่ง iteration เป็นส่วนหนึ่งของกระบวนการ SPSA optimization

ตัวอย่าง

ตัวอย่างแรกแสดงวิธีคำนวณพลังงาน ground state สำหรับโมเลกุล NH3 โดยใช้อัลกอริทึม HI-VQE

กำหนดเรขาคณิตของโมเลกุลและตัวเลือก

เรขาคณิตของโมเลกุล NH3 ระบุด้วยพิกัด Cartesian ที่คั่นด้วย ";" สำหรับแต่ละอะตอม

# Define the molecule geometry
geometry = """
N -0.85188 -0.02741 0.03141;
H 0.16545 0.00593 -0.01648;
H -1.16348 -0.39357 -0.86702;
H -1.16348 0.94228 0.06281;
"""

สามารถกำหนดและระบุตัวเลือกเพิ่มเติมสำหรับระบบโมเลกุลในรูปแบบ dictionary ต่อไปนี้

# Configure some options for the job.
molecule_options = {"basis": "sto3g"}
hivqe_options = {"shots": 100, "max_iter": 20}

ประมวลผล function ด้วย input เรขาคณิตและตัวเลือก

# Run HI-VQE
job = function.run(
geometry=geometry,
# `backend_name` is the name of a backend with at least 16 qubits, for example, "ibm_marrakesh".
backend_name=backend_name,
max_states=2000,
max_expansion_states=10,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)

ควร print Function job ID เพื่อให้สามารถใส่ใน support request ได้หากมีปัญหา

print("Job ID:", job.job_id)
Job ID: 128ee399-7cfc-4be2-91e9-c4abd22b97c7

ตัวอย่างนี้ใช้ 16 Qubit กับ 8 orbital ของ basis sto3g สำหรับโมเลกุล NH3 ตรวจสอบสถานะของ Qiskit Function workload หรือดึงผลลัพธ์ดังนี้:

print(job.status())
QUEUED

หลังจาก job เสร็จสิ้น สามารถรับผลลัพธ์ด้วย instance result()

result = job.result()

# Output can be long, so we display a shortened representation
shortened_result = reprlib.repr(result)
print(shortened_result)
{'eigenvector': [0.9824200343205695, 0.009520846167419264, 6.365368845740147e-08, 3.6832123006425615e-07, 0.0012869941182066654, 2.3403891050875465e-05, ...], 'energy': -55.521146537970466, 'energy_history': [-55.52091922342852, -55.52113695367561, -55.521146537970466, -55.52114653864798, -55.521146537970466, -55.521146537970466, ...], 'energy_variance': 9.788555455342562e-12, ...}

ในการเข้าถึงพลังงาน ground state ให้ใช้ key "energy" key "eigenvector" ให้ CI coefficient พร้อมกับสัญลักษณ์ bitstring ของการจัดวางอิเล็กตรอนที่เก็บไว้ใน "states" ของผลลัพธ์

fci_energy = -55.521148034704126  # the exact energy using FCI method
hivqe_energy = result["energy"]
print(
f"|Exact Energy - HI-VQE Energy|: {abs(fci_energy - hivqe_energy) * 1000} mHa"
)
print(f"Sampled Number of States: {len(result['states'])}")
|Exact Energy - HI-VQE Energy|: 0.0014967336596782843 mHa
Sampled Number of States: 1936

Output:

|Exact Energy - HI-VQE Energy|: 0.077237504 mHa Sampled Number of States: 1936

ประสิทธิภาพ

ส่วนนี้แสดงการคำนวณ benchmark ที่พิสูจน์แล้วของ HI-VQE กับ 24 Qubit สำหรับ Li2S, 40 Qubit สำหรับโมเลกุล N2 และ 44 Qubit สำหรับระบบ FeP-NO

Dissociation potential energy surface curve สำหรับโมเลกุล Li2S ด้วย 24 Qubit

แสดง PES curve พร้อม FCI reference และ initial guess จาก RHF รวมถึง energy error จาก FCI reference

ภาพแสดงว่า HI-VQE ให้คำตอบที่อยู่ในความแม่นยำทางเคมีของ PES curve แบบคลาสสิกสำหรับระบบ Li2S

การคำนวณดำเนินการด้วยเรขาคณิตและตัวเลือกต่อไปนี้

# This cell is hidden from users
backend_name = service.least_busy(operational=True, min_num_qubits=38).name
# Define Li2S geometries
Li2S_geoms = {
"Li2S_1.51": "S -1.239044 0.671232 -0.030374;Li -1.506327 0.432403 -1.498949;Li -0.899996 0.973348 1.826768;",
"Li2S_2.40": "S -1.741432 0.680397 0.346702;Li -0.529307 0.488006 -1.729343;Li -1.284307 0.989409 2.177209;",
"Li2S_3.80": "S -2.707255 0.674298 0.909161;Li 0.079218 0.552012 -1.671656;Li -0.927010 0.931502 1.557063;",
}

# Configure some options for the job.
molecule_options = {
"basis": "sto3g",
}
hivqe_options = {
"shots": 100,
"max_iter": 20,
}

results = []
for geom in ["Li2S_1.51", "Li2S_2.40", "Li2S_3.80"]:
# Run HI-VQE
job = function.run(
geometry=Li2S_geoms[geom],
backend_name=backend_name, # can use any device with at least 38 qubits
max_states=2000,
max_expansion_states=10,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)
results.append(job.result())

จุดสีแดงแสดงผลการคำนวณ HI-VQE สำหรับหกเรขาคณิตที่แตกต่างกัน และ input ในเซลล์ข้างต้นระบุสามเรขาคณิตที่สอดคล้องกับ 1.51, 2.40 และ 3.80 Angstrom

Dissociation PES curve สำหรับโมเลกุล N2 ด้วย 40 Qubit

โมเลกุลไนโตรเจนได้รับการระบุว่าเป็นระบบ multireference ที่มีการมีส่วนร่วมของพลังงาน correlation ขนาดใหญ่นอกเหนือจาก Hartree-Fock state เราดำเนินการคำนวณ benchmark สำหรับโมเลกุล N2 ด้วย basis cc-pvdz, (20o,14e) โดยใช้การเลือก active orbital แบบ homo-lumo จำนวน complete active space (CAS) เพื่อแสดงแทนปัญหานี้คือ 6,009,350,400 ไม่สามารถหาคำตอบ eigenvalue problem (สำหรับพลังงานและโครงสร้างอิเล็กทรอนิกส์) ด้วยสถานะจำนวนนี้โดยใช้เดสก์ท็อปที่ทรงพลัง (16cpu/64GB) ด้วย HI-VQE ผู้ใช้สามารถค้นหา subspace ของ CAS state อย่างมีประสิทธิภาพเพื่อหาผลลัพธ์ที่มีความแม่นยำทางเคมีในขณะที่ประหยัดทรัพยากรการคำนวณอย่างมีนัยสำคัญ กราฟต่อไปนี้แสดง PES curve ของการคำนวณ HI-VQE 40 Qubit สำหรับ dissociation ของโมเลกุล N2

ภาพแสดงว่า HI-VQE ให้คำตอบที่อยู่ในความแม่นยำทางเคมีของ PES curve แบบคลาสสิกสำหรับระบบ N2

Dissociation PES curve สำหรับ five-coordinated iron(II)-porphyrin กับระบบ NO ด้วย 44 Qubit

ระบบเคมีที่น่าสนใจอีกอย่างคือ iron(II)-porphyrin (FeP) complex ที่มี nitric oxide (NO) ligand ประสาน ซึ่งเป็นระบบ metalloporphyrin ที่เกี่ยวข้องทางชีววิทยาซึ่งมีบทบาทสำคัญในกระบวนการทางสรีรวิทยาต่าง ๆ ในตัวอย่างนี้ HI-VQE ถูกใช้เพื่อประมาณ potential energy surface curve ที่แม่นยำของปฏิกิริยา intermolecular ระหว่าง FeP และ NO (พลังงาน ground state สำหรับเรขาคณิตที่แยกกันต่างกัน) ระบบรวมมี 450 orbital และ 202 อิเล็กตรอน (450o,202e) ด้วย basis 6-31g(d) รวมทั้งหมด การเลือก active orbital แบบ homo-lumo ถูกใช้เพื่อคำนวณกรณีที่เล็กกว่าจากกรณีจริงด้วย (22o,22e) จากผลลัพธ์ benchmark ต่อไปนี้ เราสามารถบรรลุความแม่นยำทางเคมี (> 1.6 mHa) กับการคำนวณเคมีคอมพิวเตอร์คลาสสิกล้ำสมัยของ CASCI(DMRG) (22o,22e) reference

ภาพแสดงว่า HI-VQE ให้คำตอบที่อยู่ในความแม่นยำทางเคมีของ PES curve แบบคลาสสิกสำหรับระบบ FeP-NO

Benchmark

  • Exact matrix size คือจำนวน determinant สำหรับคำตอบที่แน่นอน เช่น FCI และ CASCI
  • การคำนวณ HI-VQE sample และคำนวณ subspace ของมัน (นั่นคือ HI-VQE matrix size)
  • Total time รวม QPU runtime และ Qiskit Function ที่รันด้วย CPU
  • ความแม่นยำประมาณจาก energy difference จากคำตอบที่แน่นอน
ระบบเคมีจำนวน QubitExact matrix sizeHI-VQE matrix sizeE(diff) จากที่แน่นอน (mHa)จำนวน iterationเวลารวมQPU runtime usage
NH3NH_3 (8o,10e)16313619360.08637 s34 s
Li2SLi_2S (10o,10e)206350439690.605250 s50 s
NH3NH_3 (15o,10e)309018009497290.905354 s54 s
N2N_2 (16o,14e)3213087360017982811.1096531 s121 s
3H2O3H_2O (18o,24e)363446220963994240.90245174 s130 s
N2N_2 (20o,14e)40600935040090120041.202146547 s258 s

ดึง error message

หาก workload ล้มเหลว สถานะจะเป็น ERROR และการเรียก job.result() จะเกิด exception:

job = function.run(
geometry="invalid-geometry", # This will cause an error
backend_name=backend_name,
max_states=2000,
max_expansion_states=15,
molecule_options=molecule_options,
hivqe_options=hivqe_options,
)

job.result()
job.status()
'ERROR'

รับการสนับสนุน

สามารถส่งอีเมลไปที่ qiskit.support@qunovacomputing.com สำหรับความช่วยเหลือเกี่ยวกับ function นี้

หากต้องการความช่วยเหลือในการแก้ไขปัญหา error เฉพาะ โปรดระบุ Function job ID ของ job ที่พบ error ด้วย

ขั้นตอนถัดไป

Source: IBM Quantum docs — updated 1 เม.ย. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of 11 มี.ค. 2569