Variational Quantum Eigensolver (VQE) สไตล์เด็กคอม
คำนวน Ground state energy ด้วย Variational Quantum Eigensolver
วิชาเคมี ที่เราเรียนกันมาตั้งแต่ประถมนั้น เป็นหนึ่งในศาสตร์ที่คาดว่า เราสามารถนำ Quantum computing เข้าไปจับได้ในหลาย ๆ งานเนื่องจากคุณสมบัติทาง Quantum ทำให้เราสามารถจำลองลักษณะทางธรรมชาติที่เกิดขึ้นในระดับเล็ก ๆ ได้แม่นยำมากกว่าแบบจำลองที่ทำบนระบบแบบเดิม
ซึ่งงานที่จะมาพูดถึงในวันนี้คือ การจำลอง Molecule ของ Hydrogen atom ด้วย Quantum algorithm
โดย Algorithm ที่ใช้ มีชื่อว่า Variational Quantum Eigensolver (VQE)
Variational Quantum Eigensolver (VQE)
ถ้าพูดถึง Variational algorithm ใน Quantum จะเป็นลักษณะของ Algorithm ที่มีตัวแปรแฝงอยู่ใน Algorithm นั้น และ เราสามารถ Update ค่าตัวแปรนั้น เพื่อทำให้ได้ผลลัพท์ของ Algorithm ที่ดีขึ้น
ซึ่งในปัจจุบันมี Variational algorithm อยู่มากมาย เช่น
- Variational Quantum Eigensolver (VQE)
- Quantum Adiabatic Optimization Algorithm (QAOA)
- Quantum Neural Networks (QNN)
- Quantum Support Vector Machines (QSVM)
- Variational Quantum Classifier (VQC)
โดยแต่ละตัวก็ใช้สำหรับงานที่ต่างกันออกไป
ในส่วนของ VQE เป็น Algorithm ที่ทำงาน เพื่อ Optimize ผลจาก Ansatz ให้ได้ผลลัพท์เป็น Minimum eigenvalue ของ Hamiltonian ที่เรากำหนด ซึ่งในโจทย์การจำลอง Molecule ของ Hydrogen atom ตัว Minimum eigenvalue ที่ได้จะเป็น Ground state energy ของ Hamiltonian นั้น ๆ
Hamiltonian
ถ้ามองภาพง่าย ๆ Hamiltonian ก็คือโจทย์ ที่เราทำการ Encode ให้อยู่ในรูป Combination ของ Quantum operator เช่น
ตัวอย่าง Hamiltonian ของโจทย์การหา Ground state energy หรือ Minimum eigenvalue ของ H2
ซึ่งเราสามารถลดรูปให้อยู่ใน Operator ลักษณะนี้ได้
Ansatz
คือ Variational quantum circuit ที่เรากำหนดมา เพื่อใช้ประมาณค่า Eigenvector ของ Hamiltonian ซึ่งเราสามารถกำหนด Ansatz ได้หลายรูปแบบด้วยกัน เช่น EfficientSU2
Objective function
ในส่วนของ Objective function ที่ใช้จะเป็น Expectation ของของ Hamiltonian ซึ่งจุดประสงค์ของ Objective function นี้คือ ให้เรา Minimize ให้ค่าของ Eigenvalue มีค่าน้อยที่สุด เพื่อให้ได้เป็น Minimum eigenvalue หรือ Ground state energy นั้นเอง
Optimization
ในขั้นตอน Optimization ทั้งหมดจะมีขั้นตอนดังภาพ คือ
- Initialize parameters θ
- ใช้ θ เป็น Parameter ของ Gate ใน Ansatz
- ทำการ run เพื่อหา State ผลลัพท์จาก Ansatz และ Hamiltonian
- นำ State ผลลัพท์ มาหา Eigenvalue ด้วย Objective function
- นำผลลัพท์จาก Objective function ไปผ่าน Classical optimizer
- ทำการ Update ค่าที่ได้จาก Optimizer ไปที่ θ
- ทำซ้ำ Step 2–6
Implementation
ในครั้งนี้ผมใช้ Qiskit เป็น Library สำหรับการ Implement โดยจะมีการทำงานดังนี้
- กำหนด Hamiltonian
ในขั้นตอนแรกจะทำการกำหนด Hamiltonian หรือโจทย์ที่เราต้องการ
hamiltonian = (-1.052373245772859 * I ^ I) + \(0.39793742484318045 * I ^ Z) + \(-0.39793742484318045 * Z ^ I) + \(-0.01128010425623538 * Z ^ Z) + \(0.18093119978423156 * X ^ X)
- กำหนด Ansatz
ตัว Antsatz นี้จะใช้เป็น EfficientSU2 ขนาด 2 qubits
ansatz = EfficientSU2(num_qubits, reps=2, entanglement='linear', insert_barriers=True)print(ansatz)
- กำหนด Optimizer
ในที่นี้จะใช้ Simultaneous Perturbation Stochastic Approximation (SPSA) optimizer
optimizer = SPSA(maxiter = 1000)
- กำหนด VQE
โดยตัว VQE นี้เราสามารถกำหนด Parameter ที่เกี่ยวข้องได้ เช่น Ansatz circuit, Optimizer ที่ต้องการใช้, ค่า θ เริ่มต้น รวมถึง Callback เพื่อทำ Monitoring ผลลัพท์ระหว่างการ Optimize model
local_vqe = VQE(ansatz=ansatz,optimizer=optimizer,initial_point=initial_point,quantum_instance=QasmSimulatorPy(),callback=callback)
- Run VQE
local_result = local_vqe.compute_minimum_eigenvalue(hamiltonian)
จะพบว่า ค่า Energy สามารถลู่เข้าได้
- Evaluate
สามารถดูผลลัพท์สุดท้ายของ VQE ได้ด้วยคำสั่ง
local_result.__dict__
References
Simulating Molecules using VQE (qiskit.org)
VQE — Qiskit runtime 0.1.0 0.1.0 documentation
Electronic structure — Qiskit Nature 0.1.4 documentation
qiskit.circuit.library.EfficientSU2 — Qiskit 0.28.0 documentation
The Variational Quantum Eigensolver (VQE) — OpenQEMIST 0.2.0 documentation (1qbit.com)