حلقات التحسين
في هذا الدرس، سنتعلم كيفية استخدام محسِّن لاستكشاف الحالات الكمية المُعاملة لـansatz بشكل تكراري:
- تمهيد حلقة التحسين
- فهم المقايضات عند استخدام المحسِّنات المحلية والعالمية
- استكشاف المستويات المجدبة وكيفية تجنبها
على المستوى العالي، تُعدّ المحسِّنات محورية في استكشاف فضاء البحث لدينا. يستخدم المحسِّن تقييمات دالة التكلفة لاختيار المجموعة التالية من المعاملات في الحلقة التغايرية، ويكرر العملية حتى يصل إلى حالة مستقرة. عند تلك النقطة، تُعاد مجموعة مثلى من قيم المعاملات .
المحسِّنات المحلية والعالمية
سنُعدّ مسألتنا أولاً قبل استكشاف كل صنف من ال محسِّنات. سنبدأ بدائرة تحتوي على ثمانية معاملات تغايرية:
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit scipy
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import TwoLocal
import numpy as np
theta_list = (2 * np.pi * np.random.rand(1, 8)).tolist()
observable = SparsePauliOp.from_list([("XX", 1), ("YY", -3)])
reference_circuit = QuantumCircuit(2)
reference_circuit.x(0)
variational_form = TwoLocal(
2,
rotation_blocks=["rz", "ry"],
entanglement_blocks="cx",
entanglement="linear",
reps=1,
)
ansatz = reference_circuit.compose(variational_form)
ansatz.decompose().draw("mpl")
def cost_func_vqe(params, ansatz, hamiltonian, estimator):
"""Return estimate of energy from estimator
Parameters:
params (ndarray): Array of ansatz parameters
ansatz (QuantumCircuit): Parameterized ansatz circuit
hamiltonian (SparsePauliOp): Operator representation of Hamiltonian
estimator (Estimator): Estimator primitive instance
Returns:
float: Energy estimate
"""
pub = (ansatz, hamiltonian, params)
cost = estimator.run([pub]).result()[0].data.evs
return cost
from qiskit.primitives import StatevectorEstimator
estimator = StatevectorEstimator()
المحسِّنات المحلية
تبحث المحسِّنات المحلية عن نقطة تُصغّر دالة التكلفة بدءاً من نقطة (أو نقاط) أولية وتنتقل إلى نقاط مختلفة بناءً على ما تلاحظه في المنطقة التي تُقيّمها حالياً عبر تكرارات متعاقبة. هذا يعني أن تقارب هذه الخوارزميات سيكون سريعاً في العادة، لكنه قد يعتمد اعتماداً كبيراً على النقطة الأولية. المحسِّنات المحلية غير قادرة على رؤية ما هو أبعد من المنطقة التي تُقيّمها وقد تكون عرضة بشكل خاص للحدود الدنيا المحلية، إذ تُبلّغ عن التقارب عند إيجادها متجاهلةً الحالات ذات التقييمات الأكثر ملاءمة.
# SciPy minimizer routine
from scipy.optimize import minimize
x0 = np.ones(8)
result = minimize(
cost_func_vqe, x0, args=(ansatz, observable, estimator), method="SLSQP"
)
result
message: Optimization terminated successfully
success: True
status: 0
fun: -3.9999999964520634
x: [ 1.000e+00 1.000e+00 -1.571e+00 -4.556e-05 -1.207e+00
-1.935e+00 4.079e-01 -4.079e-01]
nit: 12
jac: [ 0.000e+00 0.000e+00 -7.957e-04 2.543e-04 1.381e-03
1.381e-03 5.430e-04 5.431e-04]
nfev: 112
njev: 12
المح سِّنات العالمية
تبحث المحسِّنات العالمية عن النقطة التي تُصغّر دالة التكلفة في عدة مناطق من مجالها (أي غير محلية)، وتُقيّمها بشكل تكراري (أي عند التكرار ) على مجموعة من متجهات المعاملات تُحدِّدها المحسِّنة. هذا يجعلها أقل عرضة للحدود الدنيا المحلية وشبه مستقلة عن التهيئة، لكنه أيضاً أبطأ بشكل ملحوظ في التقارب نحو الحل المقترح.
تمهيد التحسين
التمهيد، أو تعيين القيمة الأولية للمعاملات استناداً إلى تحسين سابق، يمكن أن يساعد محسِّننا على التقارب نحو حل بشكل أسرع. نشير إلى هذه بالنقطة الأولية ، وإلى