qiskit-documentation/tutorials/variational-quantum-eigenso.../vqe.ipynb

761 lines
112 KiB
Plaintext

{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "a6f69b77",
"metadata": {},
"source": [
"*Usage estimate: 73 minutes on ibm_kyiv or 28 minutes on ibm_manila. (NOTE: This is an estimate only. Your runtime may vary.)*\n",
"\n",
"## Background\n",
"\n",
"[Variational quantum algorithms](https://arxiv.org/abs/2012.09265) are promising candidate hybrid-algorithms for observing quantum computation utility on noisy near-term devices. Variational algorithms are characterized by the use of a classical optimization algorithm to iteratively update a parameterized trial solution, or \"ansatz\". Chief among these methods is the Variational Quantum Eigensolver (VQE) that aims to solve for the ground state of a given Hamiltonian represented as a linear combination of Pauli terms, with an ansatz circuit where the number of parameters to optimize over is polynomial in the number of qubits. Given that the size of the full solution vector is exponential in the number of qubits, successful minimization using VQE requires, in general, additional problem-specific information to define the structure of the ansatz circuit.\n",
"\n",
"\n",
"Executing a VQE algorithm requires the following components:\n",
"\n",
" 1. Hamiltonian and ansatz (problem specification)\n",
" 2. Qiskit Runtime estimator\n",
" 3. Classical optimizer\n",
"\n",
"Although the Hamiltonian and ansatz require domain-specific knowledge to construct, these details are immaterial to the Runtime, and we can execute a wide class of VQE problems in the same manner."
]
},
{
"cell_type": "markdown",
"id": "55b94021",
"metadata": {},
"source": [
"## Requirements\n",
"\n",
"Before starting this tutorial, ensure that you have the following installed:\n",
"\n",
"* Qiskit SDK 1.0 or later, with visualization support (`pip install 'qiskit[visualization]'`)\n",
"* Qiskit Runtime (`pip install qiskit-ibm-runtime`) 0.22 or later\n",
"* SciPy (`python -m pip install scipy`)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "7db2e559",
"metadata": {},
"source": [
"## Setup\n",
"\n",
"Here we import the tools needed for a VQE experiment."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "a0a48442",
"metadata": {},
"outputs": [],
"source": [
"# General imports\n",
"import numpy as np\n",
"\n",
"# Pre-defined ansatz circuit and operator class for Hamiltonian\n",
"from qiskit.circuit.library import EfficientSU2\n",
"from qiskit.quantum_info import SparsePauliOp\n",
"\n",
"# SciPy minimizer routine\n",
"from scipy.optimize import minimize\n",
"\n",
"# Plotting functions\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bc380c46",
"metadata": {},
"outputs": [],
"source": [
"# runtime imports\n",
"from qiskit_ibm_runtime import QiskitRuntimeService, Session\n",
"from qiskit_ibm_runtime import EstimatorV2 as Estimator\n",
"\n",
"# To run on hardware, select the backend with the fewest number of jobs in the queue\n",
"service = QiskitRuntimeService(channel=\"ibm_quantum\")\n",
"backend = service.least_busy(operational=True, simulator=False)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "988ee237",
"metadata": {},
"source": [
"## Step 1: Map classical inputs to a quantum problem\n",
"\n",
"Although the problem instance in question for the VQE algorithm can come from a variety of domains, the form for execution through Qiskit Runtime is the same. Qiskit provides a convenience class for expressing Hamiltonians in Pauli form, and a collection of widely used ansatz circuits in the [`qiskit.circuit.library`](https://docs.quantum-computing.ibm.com/api/qiskit/circuit_library).\n",
"\n",
"This example Hamiltonian is derived from a quantum chemistry problem."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "0ad66539",
"metadata": {},
"outputs": [],
"source": [
"hamiltonian = SparsePauliOp.from_list(\n",
" [(\"YZ\", 0.3980), (\"ZI\", -0.3980), (\"ZZ\", -0.0113), (\"XX\", 0.1810)]\n",
")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "acb83d48",
"metadata": {},
"source": [
"Our choice of ansatz is the `EfficientSU2` that, by default, linearly entangles qubits, making it ideal for quantum hardware with limited connectivity."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "59bffe5e",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 1039.79x200.667 with 1 Axes>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ansatz = EfficientSU2(hamiltonian.num_qubits)\n",
"ansatz.decompose().draw(\"mpl\", style=\"iqp\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "5bd1f7da",
"metadata": {},
"source": [
"From the previous figure we see that our ansatz circuit is defined by a vector of parameters, $\\theta_{i}$, with the total number given by:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "aa325696",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"16"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"num_params = ansatz.num_parameters\n",
"num_params"
]
},
{
"cell_type": "markdown",
"id": "ac6f36e3",
"metadata": {},
"source": [
"## Step 2: Optimize problem for quantum execution"
]
},
{
"cell_type": "markdown",
"id": "ed01c675-6506-4779-bf71-74f0de9212fb",
"metadata": {},
"source": [
"To reduce the total job execution time, Qiskit primitives only accept circuits (ansatz) and observables (Hamiltonian) that conform to the instructions and connectivity supported by the target QPU (referred to as instruction set architecture (ISA) circuits and observables)."
]
},
{
"cell_type": "markdown",
"id": "3390069d-572c-472c-abb5-9cde12fd82a2",
"metadata": {},
"source": [
"### ISA circuit"
]
},
{
"cell_type": "markdown",
"id": "ad6ddd99-b680-4ac4-b2d8-c0ac6266e6e8",
"metadata": {},
"source": [
"Schedule a series of [`qiskit.transpiler`](https://docs.quantum-computing.ibm.com/api/qiskit/transpiler) passes to optimize the circuit for a selected backend and make it compatible with the backend's ISA. This can be easily done with a preset pass manager from `qiskit.transpiler` and its `optimization_level` parameter.\n",
"\n",
"The lowest optimization level does the minimum needed to get the circuit running on the device; it maps the circuit qubits to the device qubits and adds swap gates to allow all two-qubit operations. The highest optimization level is much smarter and uses lots of tricks to reduce the overall gate count. Since multi-qubit gates have high error rates and qubits decohere over time, the shorter circuits should give better results."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1834cb22",
"metadata": {},
"outputs": [],
"source": [
"from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager\n",
"\n",
"target = backend.target\n",
"pm = generate_preset_pass_manager(target=target, optimization_level=3)\n",
"\n",
"ansatz_isa = pm.run(ansatz)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "20d9923c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABm8AAACuCAYAAADQxJkyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOf0lEQVR4nO3dd3hUZdrH8d+kF0JNIECA0Am9qyBCsCNiZbGA4NpWVMQCu5YXQdeKBRBxdRUQdRHFRRFcF1FRbPQeJLQQAgRIIBBIT+b9I5uQkDYzOVPP93Nde61kzplzP3Pu575n5pk5Y7FarVYBAAAAAAAAAADAI/i5OwAAAAAAAAAAAACcw+INAAAAAAAAAACAB2HxBgAAAAAAAAAAwIOweAMAAAAAAAAAAOBBWLwBAAAAAAAAAADwICzeAAAAAAAAAAAAeBAWbwAAAAAAAAAAADwIizcAAAAAAAAAAAAehMUbAAAAAAAAAAAAD8LiDQAAAAAAAAAAgAdh8QYAAAAAAAAAAMCDsHgDAAAAAAAAAADgQVi8AQAAAAAAAAAA8CAs3gAAAAAAAAAAAHgQFm8AAAAAAAAAAAA8CIs3AAAAAAAAAAAAHoTFGwAAAAAAAAAAAA/C4g0AAAAAAAAAAIAHYfEGAAAAAAAAAADAg7B4AwAAAAAAAAAA4EFYvAEAAAAAAAAAAPAgLN4AAAAAAAAAAAB4EBZvAAAAAAAAAAAAPAiLNwAAAAAAAAAAAB6ExRsAAAAAAAAAAAAPwuINAAAAAAAAAACAB2HxBgAAAAAAAAAAwIOweAMAAAAAAAAAAOBBWLwBAAAAAAAAAADwICzeAAAAAAAAAAAAeBAWbwAAAAAAAAAAADwIizcAAAAAAAAAAAAehMUbAAAAAAAAAAAAD8LiDQAAAAAAAAAAgAdh8QYAAAAAAAAAAMCDsHgDAAAAAAAAAADgQVi8AQAAAAAAAAAA8CAB7g4A5mK1WlWQnevuMGwWEBosi8VSq/uwWqWcQoMCcrMQf6k2D4e3nX/JmBwoyxvzobbnvSyzjx/mrAPemPdVMWI+eFsO0AfoA/QBY3lbDZDoA2WZsQ9IxvYCb8wHo+ugtz0G9AFjmaUGeFueO8qR+WGWHKiOt+WH2fuA5L5ewOINXKogO1cftx3t7jBsdvvejxQYFlKr+8gplAZ9bVBAbrZ6mBRai6rhbedfMiYHyvLGfKjteS/L7OOHOeuAN+Z9VYyYD96WA/QB+gB9wFjeVgMk+kBZZuwDkrG9wBvzweg66G2PAX3AWGapAd6W545yZH6YJQeq4235YfY+ILmvF3DZNAAAAAAAAAAAAA/C4g0AAAAAAAAAAIAHYfEGAAAAAAAAAADAg7B4AwAAAAAAAAAA4EH4yTUAALxcfn6R8guKFBzkJ39/PpcBAGZTWFik3LwiBQRYFBjgJ4vF4u6QAAAuZLValZNbKItFCg7ypw8AgI9g8QYAAC9SWFikFb8e0g/rjmj9jjRt/CNdpzLzSm9v1jhMfeIi1adzIw0f3FJ9Oke6MVoAgDNsSzyhL1cd0IaEdG1ISNPB1LOlt0WEB6p3XCP16RypIX2b6uqLYxQQwMI+APiSY+nZ+uzb/Vq77bg2JKRp5/5TKiqySpICAizq2q6B+sRF6sLujXXz5bGqXzfYzREDABzB4g0AAF7g5OlcvfPZH3rnsz+UdPhMldsdPpalw8eS9dWPyZr69ib17xql8aPidNuwtgoM5M07APBWhYVF+vS/+zVn0U79vOloldtlns3Xj+tT9eP6VL2+YLtimoTr3ps76i8jOymqYagLIwYAGO33Lcf05sIEfbZiv/ILiirdpqDAqs1/nNDmP07o/SWJevjl33XbsDaacFsXdevQ0MURAwBqg8UbwMNlblulxKfjy/3NLyRcwc06qNGQMWo8/CFZ/JnKvowc4DH48ocDuu/ZX3Q0PdvufdduP661249r1r92aP5zl/CCzUuZfQ6AHDD7+Hftz9CdU1brty3H7N435ehZTXlro2Z+vENznhqgP13ZxgkRwtnMPgdADph+/Gfz9Phra/Xu4l1275uVU6D3/p2ouV/s1uQ7u2nq/b0VHOTvhCjhTGafAyAHzDp+3xsR4KMaXHKr6vUZJlmtyj+ZqvRVC5Qy91HlpOxUqwfedXd4cAFywHyPQXZOgf7y3C9a8NWeWt/Xxp3p6nPLl3r+oT56fFw3roPtpcw2B1CR2XPAjOOf80mCHnttrXJyC2t1P+kZuRo16Qct/jZJc58dpDphgQZFCFcy4xxAeWbPATOO//ctxzRq8vdKPnK25o2rUVRk1Uvvb9XSVcn67NWh6ty2gUERwpXMOAdQntlzwGzjZ/EG8BJhbXqr0ZDRpf+OGjZeO8Z3Utq376nZ6OcVWC/KjdHBFcgBcz0GZ7Lyde1D32rVuiOG3Wd+QZEmv7FOqenZevWx/izgeCEzzQFUzuw5YLbxP/PWRj37ziZD7/OzFft1MPWM/jPnSn4DwQuZbQ6gIrPngNnGv/L3Q7puwkpl5RQYdp8JezM0aNxyrXjnKn4f0wuZbQ6gIrPngNnGz+INvNa4I4sNu6/5TW827L5cxT8kXOEdL1TGr4uVm7rX54qTLcgBcsBXH4O8/ELdMHGloQs3Zb2+YLtCg/3194f6OuX+XcXsNUDy3TlgK3KAHPDl8b88d4vhCzclft96XMMf+lbfvnOVQkO89yUhNcC354AtyAFywJfH/+vmoxox4Vtl59Tum5eVOXEqV1f+5Rutnj9ccW3qG37/rmT2OuDLc8AWZj//Ejng6+P33mfqqFZSUpJat25t07ZTp07VM8884+SIjBXePFJrn5mvhHeXuTsUt8pN3StJCqhjvt+wIAeKmTkHSvjiY/D3dzdr5e+HnXqM5/+5RYN6R+vKgTFOPY6zUAPO8cU5YAty4Byz5kAJXxz/zxtT9cTM9U49xi+bjuqpN9fr9UkXOvU4zkINOMcX54AtyIFzzJoDJXxx/Kcy8zRq0g9OWbgpkZ6Rq1sm/6B1C0coKNA7fwOHOlDMF+eALTj/55g1B0r48vhZvPFRISEhGjhwYJW3Z2ZmauvWrZKkAQMGuCosw7S4vK8OrnDuC1pPU5SbpYLTabJarSo4marj3/xD2fs2Kax9f4U07+Du8FyOHDBnDpjhMdiYkKYX3tti1z7rFo5QdGSYUtOy1O/WpTbvd/fUn7X93zeqXkSQvWG6nRlrgGSOOWArcsCcOWCG8WdlF+jOKatltdq3nyO9YMZHO3TjpbG6uHe0A5G6FzXAd+eArcgBc+aAWcb/2KtrlHLUvt+4caQPbE08ob+/u1nPPtDHkTDdzox1wCxzwBZmPP8SOWC28bN446Oio6P1888/V3n7K6+8oq1btyomJkaXXnqpCyMzRt020fpjfqq7w3CpIwuf0ZGF5b8hVf+iG9XyvrfcFJF7kQPFzJYDvv4YWK1W3fvsLyostO8du+jIMMU0Cbf7eClHz2rKWxs0828X2b2vu5mxBki+PwfsQQ6cY6YcMMP4X3hvs/Ykn7Z7P0d6gdUq3TPtZ+1YcpP8/Lzrd9CoAef42hywFTlwjplywAzj/3ljqt5fkmj3fo6+JnjhvS26fVhbdWxd3+593c2MdcAMc8BWZjz/EjlgtvGzeGNSCxYskCSNGTNGfn5+bo7GPgFhIco/k+PuMFwu8sp71WDASFkL85V9YJtS//2y8tJSZAkMKd0mc8dq7Xn26gr7WgvyZC0qVJ8lzvvKtSuRA+bNAV9/DH7ZdFQbEtJcesy5X+zWcw/2Ud063vPtG7PWAMn354CtyAHz5oCvjz8nt0D/+OwPlx7zj/2ntOLXQ7rqYu+5jCY1wHfngK3IAfPmgBnGP/PjHS49XmGhVXMW7fS6D3SZtQ6YYQ7YwqznXyIHzDZ+n1+8SUtL0yuvvKJ///vfSklJUVRUlG688Ua98MILmjBhgubOnas333xTDz74oLtDlVT8qWuLxbmfetuwYYN27Ch+MjB27FinHssZmg3urkM/2ndJIV8Q3LS96va8TJJUr8/VqhN3sXY9cbGS3/6L2kz6RJIU0WWQei06U26/vPTD+uOxvoq6xjNy3AjkgHlzwNcfg7c+2enyY57JytdHy/Zo/C2dXX5sR5m1Bki+PwdsRQ6YNwd8ffyf/ne/0jNyXX7ctz5J8KrFG2qA784BW5ED5s0BXx//oaNnteT7Ay4/7vylu/XChL4KDwt0+bEdZdY64OtzwFZmPf8SOWC28XvXVy7stHnzZnXr1k3Tp09XamqqOnfurPz8fM2aNUujRo3Szp3Fb5L17NnTaTEMGTJEFotFSUlJNW67detW9erVS3v27HFaPJL0wQcfSJIuuOACdezY0anHcobG/Trp+Lpd5f7W+4nbNO7IYrW7ZWil+1z1+TSNSVqo+h1buCJEl6gTN0ANh4zRyZ8X6czOXyvdpig/V/teulF1Ol+spiOfdHGEzkMOFDNzDpTwpccgK7tAn69McsuxF3zl3L5jNGrAOb40B+xBDpxj1hwo4Wvj/3CZe+rx8tUHlZ7hPZ9epQac42tzwFbkwDlmzYESvjb+T77ZZ/cllI1w+ky+lq5Kdvlxa4M6UMzX5oCtOP/nmDUHSvj6+H128SYtLU3XXnutUlNT9dhjj+nIkSPauHGjUlNT9fLLL2v58uVat26dLBaLunfv7u5wJUnz5s3Tli1bFB8fr3379jnlGPn5+Vq4cKEkady4cU45hlNZLJJFshYVlfvz5lc/1cmdB9R/6liFNW1Y7rbO9w5X9IAu2vzqImXsOujKaJ2u6aj/k/z8dfhfUyq9PXnOX1SUn6PYh+e7NjBnIgfKMWUOnMdXHoPNu9KVX1BU84ZOOfYJ5eV7ydeGqQEV+MocsBk5UIHpcuA8vjL+oiKr1u1w7aUzS1itcvllOx1GDajAV+aAzciBCkyXA+fxpfGv3X7cbcdet8N9x7YbdaAcX5oDNuH8V2C6HDiPL4/fZxdvJkyYoJSUFD344IN69dVXFRERUXrb5MmT1aNHDxUUFCg2NlZ169Z1Y6TnvPbaaxozZoxSUlIUHx9v07d17LV8+XKlpaUpODhYo0aNMvz+nS2qVzulbar4icSi/AKtfni2AsKCNfD18aV/r9u2mXr/7VYd35Co7XOWujJUlwhp2k4NB92izK3fKXPH6nK3Hftqlk6tX6a2T3whv+AwN0VoPHKgPDPmwPl85TFw55tmuXmF2rHnpNuObw9qQEW+MgdsRQ5UZLYcOJ+vjH/vwdM6lZnntuNvSEh327HtQQ2oyFfmgK3IgYrMlgPn86Xxu/M1wXo3fYDAEdSB8nxpDtiC81+R2XLgfL48fp9cvNm5c6cWLVqkyMhIvfjii5Vu06dPH0lSjx49Sv9WstjTv39/BQcHG/rbMykpKUpKSqr2f8nJyZo6daqGDh2q5ORkxcfHKznZ2K+tLliwQJI0YsQINWjQwND7NlqTC+Nk8S+fos3je+nQD5sr3f7Etv3a+uYSNR/SUx1GXyaLn58GzXpIkrT64dkVVuR9RfTIpyQ/v3Kry5lbf1DKgr+qzeTPFNwk1n3B1RI5YBtfzgFb+cJjsGNvhqmPXxlqgO18YQ5Uhhywna/mgK18Yfw79rp3Ed3dx68MNcB2vjAHKkMO2M5Xc8BWvjD+nNwC7T2Y6bbje+LrAYk6YCtfmAOV4fzbzldzwFa+Ov4AdwfgDAsXLlRRUZFuv/121alTp9JtQkNDJZVfvNmzZ48+//xz9evXT0FBQfrll18Mi2nQoEF275OUlKTRo0frp59+MiSG9PR0LV++XJIxl0zr27evUlNT7don0OqnZ9S/xu1iRwzQwNfu13djX1LqrzvO7V83TPmZWVXut+WNxWp5RV/1nXKHGnaJVVTv9lo7db5O7z1sV5wlOrTvoHxL7Qq7JShUTWbsdnj/iG5D1OfLqq95G9oiTn2WnLvcUe7RJO2b/ifFjJuuiG5DHD5uZTp0aC9rXrbD+9t6/iXfyoGyHMkHd+dAbc97WY7OB3c+BkaOvzonwm+UgntUetu6hSMUHVn1J0SiI0NL///gt7dUe5zUtCz1u7Xip40eevhx/e0v6+2I2DHe1gek2teB2vYByf11oIQR88HbcsAT+oDkO3XQ7OOvTlZQN6nOzZXeVlMfkGzvBVX1gc+XLNOqD0fbEbFjvK0GSPSBsszYByRjewF10PteE7mqDxRaQqUGf6vydqNeE1TVB05knFVMTIwdETvGLO8LGFH7y/KUPnA+R+aH2fuARB30tvFLtXsMoqOjtX69Y++3+OTizffffy9Jio+Pr3KblJQUSeUXby655BIdOXJEkjR16lRDF2+6deumoKAgm7ZNT08vvWRaXFycYTEsXLhQeXl5io6O1pVXXlnr+0tNTdWhQ4fs2ifI4i81qXm7pKW/qm7raLW4sl9pgQ5vHqmzKdVfg9VaUKjVD8/W8P+8pE7jrtLRNTuV8O5yu2Is6/CRw8qz1u53IPyCw2wZsiGKcrO098XrVa//CDW+5kHD7//w4cMqyq26QdbE1vMv+VYOlOXsfHBGDtT2vJflivlg9GNg5PirFZMlBVd+U3RkmGKahNd4FwH+fjZtV5mMjJPKOGFfTXeEt/UBqfZ1wJV9QHJuLzBiPnhbDnhbH5A8uw6affzVqtdcqvxzZzb3AcnxXpCTnW33c3tHeFsNkOgDZZmxD0jG9gLqoPe9JnJZH/APl6q5QIrTXxNYrR7VByTPqQOO1ABX1/6ynP3eUFmOzA+z9wGJOuht45dc2AvO45OLNwcOHJAktWrVqtLbCwoKShdmyi7e+Pk57ypyS5cuVWxsbI3bpaSkaPDgwZKkUaNGac6cOYbF8MEHH0iSbr/9dvn7+9f6/qKjo+3eJ9DqJ9m4UH3gP2t16fy/at0z8yVJLS7vq4Mral6lzD+dpaK8AvkHBSrlu43Fv8DqoGZNmxnyzRtXOfnr58rev0U5hxJ18udFFW7vMjtBQVEtHb7/Zs2a1fqbN7aef8l3cqAsZ+eDM3Kgtue9LFfMB6MfAyPHX52M0ACdreK21LTqnyBER4YqwN9PBYVFSk2rPtaq7qtBvXCFhTa3JdRa8bY+INW+DriyD0jO7QVGzAdvywFv6wOSZ9dBs4+/OtmBdXSiittq6gOS7b2gqvsKDfFXw+b0gcrQB84xYx+QjO0F1EHve03kqj5gVYCq+16AUa8Jqrofi/LVzMP6gOQZdcCRGuDq2l+Ws98bKsuR+WH2PiBRB71t/FLtHgNH3kMv4ZOLN2fPFr/9lZ1d+QO6aNEipaWlKSIiQq1bt3ZlaNU6dOiQ4uPjtW/fPt1888366KOPDFlkkaSEhITSr2cZcck0SQ593Ss/K0cft7XtcgynElMkq1S/Q4wyElMU0TpamfOP1rjfwBkPyC8wQBmJB9V94k1KWvqrMg/UvF9lEncnKjAsxKF9S2QXSIO+rtVd2KxR/Bg1ih/jtPtPTNyt0FpUDXvOv+Q7OVCWs/PBGTlQ2/Nelivmg9GPgZHjr87shQl66MXfKr2tsssalHXw21sU0yRcqWnZanH5Jw4d//uvP1TPTo0c2tce3tYHpNrXAVf2Acm5vcCI+eBtOeBtfUDy7Dpo9vFXZ0/yabUf/lmlt9XUB6Ta94Ipk+/S3+6aZfd+9vK2GiDRB8oyYx+QjO0F1EHve03kqj4gSe2Hf6Y9yacrvc3ZrwkG9WujH+el2L2fvczyvoCra39Zzn5vqCxH5ofZ+4BEHfS28Uuu7QVlOe+rJm5Uspq1cePGCrcdOXJEkyZNkiR1795dFovFpbFVZ9q0adqzZ49uuOEGLVy4UAEBxmXEggULJEm9e/dW165dDbtfZzv47Xq1uLKfAsJClH+m5tXNuLuGqenArtr8+mdadc9r8vP318A3xrsgUjgLOQCz6NPZ+QsnVQkO8leXttVco8GNqAEgB2AWbVtEqF6EbZdZdoY+nSPdduzqUANADsBM3PmawJ3Hrgl1wNw4/zAzn1y8ueyyyyRJL7/8shITE0v/vm7dOsXHxystLU2S1LNnT6fHMnjwYN10000KD6/5eqMzZ87UtGnTtGjRIkMXboqKivTRRx9JksaOHWvY/brCwRXr1eKKvmo2pIcO/7S12m0jWker95O36fim3do++wtlJKZo82ufKvqiLoq7a5iLIobRyAGYRY8OjRQY4J623KtTQwUGeuZTAmoAyAGYhcViUf+u7llA8fOzqHecZ75pRw0AOQAz6d81ypTHrgl1wNw4/zAzz3ynppYmT56sRo0a6eDBg+rSpYu6deum9u3bq3///mrTpo2GDh0qqfzv3TjLtGnTtHjxYkVF1dwEQ0NDNWXKFAUGBhoaw8qVK3Xo0CEFBgbqtttuM/S+ne3omp2q26apWl3dX8fX7ap6Q4tFF894UH5+fvr54dmyFhVfh3L7W18qbfMe9X7yNkW0ctdPxaE2yAGYRVhogEZe4Z5LeY4d0d4tx7UFNQDkAMzkjmvdU4+HX9JCjeobdykQI1EDQA7ATG65qo0CAlx/hZh6EUEaMaTy3432BNQBc+P8w8x8cvEmJiZGq1ev1jXXXKOQkBAlJSWpYcOGeuedd7R8+fLSb+O4YvHGE3zwwQeSpGuuuUaRkZ55OYSqWAuLdGjVluL/Lqr6h8G6/OVaNenfSZumL9Kp3YfO7V9UpJ8fns1XJL0YOQAzGT8qzuXHjAgP1O3XtHX5cW1FDQA5ADO5+fJYRTZw/SKKO/qPragBIAdgJs0ah+uGobEuP+6d17VXmDt+zMFG1AFz4/zDzHxy8UaS4uLitGzZMmVmZiozM1Nr1qzRvffeq7NnzyopKUl+fn5e9dsvtfHxxx/LarVqyZIl7g7FIcn/Wavkb9ZVeXu99s3Ve/ItOrZ+l3b846sKt/MVSe9HDsAsBvRsrH4uvmTO3Td2UES4+35jwRbUAJADMIuQ4ACN/5NrF1I6t62vyy9q7tJj2osaAHIAZjJxdBeXHi8gwOLRi/glqAPmxvmHWXnusrqT7NixQ1arVR06dFBYWFiF2xcvXixJSkhIKPfv2NhY9e3b13WBotSBZb9Ve/up3Yf0YevqLwe37c0l2vamZyxeZe3fogNv3aOi7EwFRbVS7CMfKrBelDZcZ1FIq66KueNl1etb3EiS352gU+uWKu/YAcW9sUlhbXqW3s+up+KVnbRFTUdNUZMRE90zGBfxtRwAqmKxWPTulIvV77YvVVBgdfrxWjWro2njezv9OLXlazXAnj6w7Z5YWQKC5RccKkmKvukJNRw0ShJ9oCxvywGgOn+7q7sW/XefdiWdcvqx/Pwsem/qxfLzc/0leuzhizXAnl5wauM3OvzR07IW5MkvOEwtx7+jsNbFV5EwSy/wxRwAqjKgZxPde3NHvbu4mstDGej/7u2l9q3queRYteHtdcCo94ISn7lCBSdTJT8/+YdGqMU9sxTWppck3+4J3n7+AUf57DdvqrJt2zZJVV8ybeTIkRo5cqQ+++yzcv+ePXu2y2KEb0uaOU6txr+rLm/tVIOL/6SUeY+X3tbxhdWlzVqSGgy8WR1f/FlBjStee7bj8z+ofv8RNh1z11NDlHs0qdaxwzMkPnOFEiZ0V8LEntr1xCBl7dvk7pCcKmv/Fu18vL92PBCn3VOvUv6p48rctkobR4YqYWJP5WcckyQd+vAp7ZjQTQkTeyphYk+d+OmT0vtImTdJW+9qqT0vXO+eQdihZ6dGevqennbtk5qWpZSjZ5WalmXXfu9PHeTx37rxRfb0AUlqM2mROs/YrM4zNpcu3Ej0ATMzWx+QbO8Fe1+4obQPJEzsqQ3X+yljzVJJ0tEv39D2+9opYWJP9w3EBqEhAZr33CC7F1Qc6QWPjumqi3pw7Xd3sLUXFJw5qf2v367YiR+o86ytaj5uuva/fvu5bekFpmSGPmBr3U9bOVc7JnTThhsCdHTpjHL3Ud1tnv76YPqj/dWyabhd+zjSB3p2aqgn7jLHTwq4m1HvBbWZ9Kk6z9qqzjM2q/GIR5U0c9y5+6EnmAq9wLZekDRznLbe2bz09UHKvEmlt3l6L5BM+M2bmhZvrFbnf9IZ5pW1b5P8Q+uUfmqiUfxYpcx9TEX5eZVuH9HlEpfEVXAmQwkTuqooL1tBkS1kzc9Vbuo+NRwyRrEPveeSGGC7NpM+VUCd+pKkk78tUdLMceo8c4t7g3KipJnjFDthnsLa9FTayrlKmfe4Ii+9UyHNO6rzjM2l2zW5YZKaj3lekpSXfkg7HohT3Z6XKaBupGLunK6Qll2UseYL9wzCTk/e3VO/bz2ub35JsWn7frcutfsYU+/vpUsvbGb3fqgde/uAq9AHvIvZ+oBkey9o++S5T1Oe3b1eu6ddpbq9r5IkNbnuEYW16aWD7090cfT2u6hHE73ySD89/tpam/extxcM7hut5x70/G9f+iJ7ekHukb0KiGik0JbFl1GK6DJIeceTlbV3o8LaGnv+6AXewwx9wNa6H9a2j9pM+lSpi1+scB/V3ebprw/q1gnSp9OH6tJ7/qOz2QU27WNvH4hqEKJFrwxVYKDpPtftcka+F1Qy9yWpMOuUZHHet2fpC56NXrC5dLvq6r1U/H5RZd9G8/ReILF4A7hU7tH9yj6wrdwnPotys5R/4lDVO7lAQJ36anjJbfIPjVDTUf+nUxv/q9TFL9CMPVRVT9Z88YlVVU9yGw2+vcK2ZR+XouwzktVa7Y8ZerLAQD99/vqlGjHhW3235rDh9z/5zm6a8pdeht8vauZIH0iacYessiq8fX81v+MlBdaLMjwu+oB3MVMfkOzrBWWlrXxfjYaMll+gd37D8LGx3ZSVU6Apb200/L4H9mqipbMuV0iw6V4OegR7ekFIs/YqyEzXmZ2/qk7cAGWsWaqi7EzlHksyfPGGXuA9fL0P2FP3Sy4haPGruABR3W3e4ILujfXVm5fr2oe+tXkBx1aRDUK04p2r1CHW8y+X5guMfi9o/xt3KHPbD5Kk9lO+NiLEStEXPBu94Bxvr/fVMd2z9e+//97dIcDkwttfoPbT/lv67y1jjH8TTipu5tkHtkqSco/s0Z5nh8nyvzcv2j7xhYKbxJbbPmv/ZjUePqH4v/duKL1mKjxTZU/WfPGJVVVPcvPSK3+Se+yrWTr29VvKT09RqwffU2D9xi6K1HhhoQFa/tYVGv/8r5q7JNGQ+wwK9NPLE/vp4dFdZHHiJ7RQPXv6QMcXflJQVEtZC/J16OOnlTRzrM0v0OgDvs0sfUCyvxcU356tk6sXquMLq10QofP833291KRRqCa+8ruycwoNuc9br26j96YOUlio6V4KehRbe4F/eD21nbxYhz58QkU5ZxTe8SKFtOgsi59t549e4Lt8uQ84Uvd9VXz/Zvr+vWG6ZfIP2n8o05D77Na+gT59dag6ta5vyP3BNka+F9T6kQWSpPTvP1DKgr867fWBRF/wdPQC2xz7aqbSV85VUFRLNbv97+V+R8rT8YwdcKHgJm2Ul5Zc+u/CrNMqzDmrwIbNDT9WSTOXiq9lGjthfqWNuET2/s2lTThr7wabr5MK96jqyZovPrGy50lu42snqPG1E5S1f4v2vzFadXteoYC6jVwRplMEB/nr/WmDdNNlsbpn2s86fMy+37Qpq3/XKM17bpA6t21gYISwl719ICiqpSTJEhCoJtdO1Pb7O9h8LPqAbzNTH5Dsf8Pj5K+LFdysg0Jjuzk7NKe79+ZOGtq/mf485Set3njU4ftp3DBEbz89UDdeFmtccHCIvb0gonu8OnaPlyQV5edq69hohbTsbNOx6AW+y9f7gKs+9OgN+neL0tbPb9ATM9dr9sIEh+/H39+iJ+/uoafv7amgQH8DI0RNnPVeUKOhY3Xg7b+o4HS6Ta977e0JEn3B09ELatZs9PMKbNBUFj8/nfxtiXY/e7W6vr1b/qF1jAzVaXzvu0SABwtr01MW/0Cd3vytJOn413PU8OJRbr+cR/GqtUVBjYqfOGQnbVVoK+9/s8MMGg0dq8xtP6jgdLqkik+svLVBl6jqSW5JrlYlrHUPBTVsrsztq5wcoWsMG9RCCUtu0muP91e7lnXt2vfiXk308YtD9MuC4SzceAB7+kBhzlkVnMko/feJ1QudNqfpA97L1/uA5FgvSFv5viIvu8sV4blEu5Z1tWruNfrs1aGK79fUrn1bNaujlyb21c4vb2bhxkPY+5og/8SR0v8+sug5RXQfqpCm7QyPi17gnXyxDzj6GsCX1QkL1JtPXKT1n1ynsSPaKzjI9sWXOmGBGj8qTts+v1HPPtCHhRs3MOq9oIIzGcpLP3dZ7Yzfv1BARCP5RzQ0NN4S9AXvQS+oWlCj5qWXU2tw0Q3yD62rnEO7DI3VmfjmDeBirR/9WEmz7lTy2/cruGk7tX70oyq3PTDnPp1av1z5J1O1e+qV8g+NUNd39hgeU9a+TeUKuX94fR37eo7XfaXSDArOZKgoN0tBjYp/aL7sk7XKnlg1HfmUG6OtvbJPcuv2vLz0Sa4loOKT3OzkBIX+71OouUf2KmvfJoW0sO1Tqd6gXkSQHr2jmyaO7qrv1hzWqnVHtCEhTRt3puv4yZzS7WKb1VGfzpHq0zlSwwbFqEdH7/3mka+ytQ8UZBzV3pdukooKZZVVwU3aKHbigkq3rS36gPcwWx+Q7OsFkpRzZI+y9qxXu6fs++FmT+fnZ9HNV7TWzVe0VsLek/rqx2RtSEjXhoQ0JR0+o6Iia/F2FmnoBc3Up3OkBveJ1hUDmsvfn8/seRp7XhMc/tcUZSaslgoLFN7pIrV68H2nxEQv8A5m6AP21n0z6dM5UvP/folee7y/Pl+ZpHXbj2tDQroS9mUoN6/48poWSf26RqlP50bq3y1KN14aq7p1eOzczYj3ggqzTmnfKyNVlJcti8VPAXWj1O7pZU67JDZ9wXPRC2yXl5aioMgYSdKZXb+rIDPdKR+CcRYWbwAXC43tprjX19u0bavx7xhyzI7Pr6r29vr9hqt+v+Gl/457bZ0hx4Xxqnuy5qtPrCp7kpt9YHuF7Q59MFm5R/fLEhAoi1+AWt43W6Et4twQsXP5+Vl0+UXNdflF5z5t0vzSf+nw8Ww1iwrV/m9GuTE62MLWPhAc3UadZ2wy5Jj0Ad9hxj4g2d4LJCl95VzVv+gm+YfZ901Fb9K5bYNy36a0Wq2KuWyhDh/PVtOoMH377tVujA62sOs1wYP/NOSY9ALfYJY+YGvdT/tuvg5//LQKz5xUxpovdPSLV9Xu6a8U1qZXtbd5u0b1Q3TvzZ10782dSv9W+pqgcZjW/ItLW3kaI94LCm7cSnGvrjUknpp6gkRf8GT0gvKqq/dJM8cp/9RRWfz85RcUqraTP5N/eD03jMYxLN4AHiKgfhMlPjVYzce8qHp9h9W4/a6n4pV3LEnhcQNdEB08RXVP1nz1iZWtT3Lb/d8yF0TjmUo+aeWsT1zBNegDsIUZ+4Bk3xsezce84ORoPI/FYqEH+Ah6AWpilj5ga92PvHScIi8dZ/dtvog+4J3srfvVoSeYB72gvOrqfYfnVhoclWuxeAN4iB4fpNq1fcfnf3BSJIDnswQEqeB0uhIm9lT7qSsUWL9xtdunzJukjLVLVafTABdFCNiPPgDYx95ecPTLN5S24p8KbNjMRREC9qMXAFWzt+5Xh9cH8BT21v3q0BNgBmbrBSzeAAC8Tp24Aeo+96DN28fcOV0xd053YkQAAFeztxc0ue4RNbnuESdGBABwJnvrfnV4fQAA3slsvYBfrgQAAAAAAAAAAPAgLN4AAAAAAAAAAAB4EIvVarW6OwiYh9VqVUF2rrvDsFlAaHCtf/TPapVyCg0KyM1C/KXaPBzedv4lY3KgLG/Mh9qe97LMPn5niblsoQ4dy1LzxmFKWXmru8OplhnrgDfmfVWMmA/elgP0AfqAN/QByXt6gbfVAIk+UJYZ+4BkbC/wxnwwug5622NAHzCWWWqAt+W5oxyZH2bJgep4W36YvQ9I7usF/OYNXMpisSgwLMTdYbiUxSKFMtMkmfP8n8/s+WD28cOcdYC8L8+MOVCW2fPB7OOHOWsAeV+eGXOgLPKBx8DszFIDyPOqmSUHqmP2/DD7+O3BZdMAAAAAAAAAAAA8CIs3AAAAAAAAAAAAHoTFGwAAAAAAAAAAAA/C4g0AAAAAAAAAAIAHYfEGAAAAAAAAAADAg7B4AwAAAAAAAAAA4EFYvAEAAAAAAAAAAPAgLN4AAAAAAAAAAAB4EBZvAAAAAAAAAAAAPAiLNwAAAAAAAAAAAB6ExRsAAAAAAAAAAAAPwuINAAAAAAAAAACAB2HxBgAAAAAAAAAAwIOweAMAAAAAAAAAAOBBWLwBAAAAAAAAAADwICzeAAAAAAAAAAAAeBAWbwAAAAAAAAAAADxIgLsDgLlYrVYVZOe6OwybBYQGy2Kx1Oo+rFYpp9CggNwsxF+qzcPhbedfMiYHyvLGfKjteS/L7OOHOeuAN+Z9VYyYD96WA/QB+gB9wFjeVgMk+kBZZuwDkrG9wBvzweg66G2PAX3AWGapAd6W545yZH6YJQeq4235YfY+ILmvF7B4A5cqyM7Vx21HuzsMm92+9yMFhoXU6j5yCqVBXxsUkJutHiaF1qJqeNv5l4zJgbK8MR9qe97LMvv4Yc464I15XxUj5oO35QB9gD5AHzCWt9UAiT5Qlhn7gGRsL/DGfDC6DnrbY0AfMJZZaoC35bmjHJkfZsmB6nhbfpi9D0ju6wVcNg0AAAAAAAAAAMCDsHgDAAAAAAAAAADgQVi8AQAAAAAAAAAA8CAs3gAAAAAAAAAAAHgQFm8AAAAAAAAAAAA8CIs3AAAAAAAAAAAAHoTFGwAAAAAAAAAAAA/C4g0AAAAAAAAAAIAHCXB3AACql7ltlRKfji/3N7+QcAU366BGQ8ao8fCHZPFnKvsycoDHAGAOwOw5YPbxA8wBmD0HzD5+gDkAs+eAWcfveyMCfFSDS25VvT7DJKtV+SdTlb5qgVLmPqqclJ1q9cC77g4PLkAO8BgAzAGYPQfMPn6AOQCz54DZxw8wB2D2HDDb+Fm8gdcad2SxYfc1v+nNht2Xs4S16a1GQ0aX/jtq2HjtGN9Jad++p2ajn1dgvSg3Ruce5ID5coDHAGWZrQZIzIHzkQPmywGzjx/lUQOYA+SA+XLA7ONHRWarA8yB8sx2/iVywGzjZ/HGwyUlJem7777TunXrtG7dOm3btk35+fkaO3as5s+fX+P+K1as0Ouvv65169YpOztbbdu21W233abHHntMQUFBzh+Ak4Q3j9TaZ+Yr4d1l7g7FbfxDwhXe8UJl/LpYual7fa441YQcIAckHgMzowYUM/McIAeKmTkHJMZvZtSAYmaeA+RAMTPngMT4zY46YO45wPkvZuYckHx//CzeeLgZM2Zo5syZDu372muv6fHHH5cktWrVSi1bttT27dv15JNPatmyZVq5cqVCQ0ONDNdlWlzeVwdXrHd3GG6Xm7pXkhRQp6GbI3E9cqCYmXOgBI+BOVEDzjHrHCAHzjFrDpQw+/jNihpwjlnnADlwjllzoITZx29m1IFiZp0DnP9zzJoDJXx5/CzeeLjIyEgNGzZM/fr1U9++ffWf//xHc+bMqXG/tWvXatKkSbJYLJo3b57Gjh0rSdq7d6+uuuoq/frrr3riiSc0Y8YMJ4/AOeq2idYf81PdHYZLFeVmqeB0mqxWqwpOpur4N/9Q9r5NCmvfXyHNO7g7PJcjB8yZAzwGKGHGGiAxB8oiB8yZA2YfP86hBjAHyAFz5oDZx4/yzFgHmAPnmPH8S+SA2cbP4o2He/rpp8v9+/fff7dpv+eee05Wq1V//vOfSxduJKlt27Z6//33NXjwYL399tt68skn1bhxY0NjdraAsBDln8lxdxgud2ThMzqy8Jlyf6t/0Y1qed9bborIfciBc8yWAzwG5xQVWbXy90Oas2injqRlS5JS07J1/3O/aPyoOHXr4HufOClh1hogMQdKkAPmzQGzj/98O/dl6O1Pd2rZjwd1+HiWJCktI0fLf0rWVQNj5O/v5+YInYMawBwgB8ybA2Yf//nSM3I074vd+nDZHh35Xx84diJHby/aqdHD2yoi3Hsvl18Ts9YB5kAxs55/iRww2/i9YvEmLS1Nr7zyiv79738rJSVFUVFRuvHGG/XCCy9owoQJmjt3rt588009+OCD7g5VkmS1WmWxWNx2/MzMTK1YsUKSdM8991S4/ZJLLlGHDh2UmJiopUuX6u6773Z1iLXSbHB3Hfpxi7vDcLnIK+9VgwEjZS3MV/aBbUr998vKS0uRJTCkdJvMHau159mrK+xrLciTtahQfZYUujJkpyEHzJsDPAbFdh84pRsmrtSOvRnl/l5YZNU/PvtD//jsD40Y0lIfvTjYJ1+wmbUGSMyBEuSAeXPA7OMvkZVdoD8/85MWfbO/wm25eUUa/uC3at+qrpa8cZm6tGvghgidixrAHCAHzJsDZh9/CavVqhkf7dCTs9YrJ7f8ePILijT++V/11xnrNOepARo9vJ2bonQus9YB5kAxs55/iRww2/g9/qNYmzdvVrdu3TR9+nSlpqaqc+fOys/P16xZszRq1Cjt3LlTktSzZ0+nxTBkyBBZLBYlJSXVuO3WrVvVq1cv7dmzx2nx1GTTpk3Ky8tTcHCw+vbtW+k2F198sSTbv8njSRr366Tj63aV+1vvJ27TuCOL1e6WoZXuc9Xn0zQmaaHqd2zhihCdIrhpe9XteZnq9bla0TdOVrunvlLWnnVKfvsvpdtEdBmkXovOlPtflzmJCoiIVLPbnnNj9MYiB8ybAzwGxQs3A+9YVmHh5nxLVyXrsnu+0dmsfNcE5kJmrQESc6AEOWDeHDD7+CUpN69Q1zy4otKFm7J2HzitgXcs07bEEy6KzHWoAeaeAxI5YOYcMPv4Szz3zmY9On1NhYWbsjLP5mvMkz/qn4v/cGFkrmPWOsAcKGbW8y+RA2Ybv0cv3qSlpenaa69VamqqHnvsMR05ckQbN25UamqqXn75ZS1fvlzr1q2TxWJR9+7d3R2uJGnevHnasmWL4uPjtW/fPrfEkJiYKElq1aqVAgIq/3JV27Zty23rNSwWySJZi4rK/Xnzq5/q5M4D6j91rMKalr9UUOd7hyt6QBdtfnWRMnYddGW0TlUnboAaDhmjkz8v0pmdv1a6TVF+rva9dKPqdL5YTUc+6eIInYQcKGXaHCjDbI9BUZFVNz7ynY6ftO3r4Wu3H9djr611clQuRg0ox2xzQBI5cB5T5kAZZhz/029u0Kp1R2za9tSZPF0/caUKCopq3thbUAPKMeMcIAfKM2UOlGHG8a/8/ZCembPR5u3vf/5X31vIpw6UMuMc4PyXZ8ocKMPXx+/RizcTJkxQSkqKHnzwQb366quKiIgovW3y5Mnq0aOHCgoKFBsbq7p167ox0nNee+01jRkzRikpKYqPj7fp2zpGO3nypCSpQYOqL5FQclvJtt4iqlc7pW2q+K2movwCrX54tgLCgjXw9fGlf6/btpl6/+1WHd+QqO1zlroyVJdoOur/JD9/Hf7XlEpvT57zFxXl5yj24fmuDcyJyIHyzJgD5zPTY/D92sPavse+uv3B0t06eTrXSRG5HjWgIjPNAYkcqIzZcuB8Zhr/2ax8vfu5fZ+g3peSqWU/JTspItejBlRkpjkgkQOVMVsOnM9s45/50Q67ti8stOqtRTudFI17UAfKM9sc4PxXZLYcOJ8vj99jF2927typRYsWKTIyUi+++GKl2/Tp00eS1KNHj3J/379/v0aMGKGIiAg1aNBAd9xxh9LT02sdU0pKipKSkqr9X3JysqZOnaqhQ4cqOTlZ8fHxSk527YulnJziT2QHBVX9OwfBwcGSpOzsbJfE5IgmF8bJct6PrDaP76VDP2yudPsT2/Zr65tL1HxIT3UYfZksfn4aNOshSdLqh2dXWJH3BSFN26nhoFuUufU7Ze5YXe62Y1/N0qn1y9T2iS/kFxzmpghrhxyoma/ngC3M9BjMceBFV05uoeZ/udsJ0TgfNcA2vjwHyAHb+HIO2MJM4//X13t1+oz9l8N0pH94AmqAbXx5DpADtvHlHLCFmcafdChTy1fb/62Bj5bt0ekzeU6IyPmoAzXz5TnA+beNL+eALXx5/JVfU8sDLFy4UEVFRbr99ttVp06dSrcJDQ2VVH7xJjMzU/Hx8WrYsKEWLlyo7OxsTZ48WcOHD9cvv/wiPz/H16sGDRpk9z5JSUkaPXq0fvrpJ4ePa6+QkOIfaMrLq7ox5+YWfwq75DF0RN++fZWammrXPoFWPz2j/jVuFztigAa+dr++G/uSUn8996mSwLphys/MqnK/LW8sVssr+qrvlDvUsEusonq319qp83V672G74izRoX0H5VtqV9gtQaFqMsN5b5xGj3xKJ1Yv1OF/TVHH53+QJGVu/UEpC/6q9lP+o+AmsYYdq0OH9rLmOb7gZ+v5l3wrB8pyRj44Owdqe97LctZ8cOZjYOT4ayu13iOSf32793vq7//Ua098bnxADvC2PiDVvg44uw9IrusFRswHb8sBb+gDkvfUQbOPv7ZOhl0rhVT+m5bVWfnLHsXExDghIvt5Ww2Q6ANlmbEPSMb2Auqg970m8qQ+kB3YSdaIW+3e72x2gdp1GaSgwkNOiMo+ZnlfwBW1vyxXvjdUliPzw+x9QKIOetv4pdo9BtHR0Vq/fr1D+3rs4s33338vSYqPj69ym5SUFEnlF2/effddHTp0SD/99JNatmwpSYqJidGAAQO0dOlSXX/99Q7H1K1bt2q/zVJWenp66SXT4uLiHD6mI2y5JJotl1arSWpqqg4dsq/xB1n8pSY1b5e09FfVbR2tFlf2Ky3Q4c0jdTbleLX7WQsKtfrh2Rr+n5fUadxVOrpmpxLeXW5XjGUdPnJYedaqfwDQFn7BYbYMuUoR3Yaoz5fWKm8PbRGnPkvOxZh7NEn7pv9JMeOmK6LbkFocuaLDhw+rKLfqBlkTW8+/5Fs5UJYj+eDuHKjteS/L0fngzsfAyPHXWl1/h3bLzim0u147i7f1Aan2daC2fUByfx0oYcR88LYc8IQ+IPlOHTT7+GstJl8KsX83qwLpA7VAHzjHjH1AMrYXUAe97zWRR/WB+jFSRM2bVeZ4+inprPt7gVneFzCi9pflKX3gfI7MD7P3AYk66G3jl9zXCzx28ebAgQOSpFatWlV6e0FBgX755RdJ5Rdvli1bposvvrh04UaSLrroIrVp00ZfffVVrRZvli5dqtjY2Bq3S0lJ0eDBgyVJo0aN0pw5cxw+piM6dOggqfgxLCgoUEBAxdO8d+/ects6Ijo62u59Aq1+ko0L1Qf+s1aXzv+r1j0zX5LU4vK+Orii5lXK/NNZKsorkH9QoFK+2yhZq57YNWnWtJkh37xxlaLcLO198XrV6z9Cja950PD7b9asWa2/eWPr+Zd8JwfKcnY+OCMHanvey3LFfDD6MTBy/LWVasmXI08Xw0KkBs2bGx6PI7ytD0i1rwOu7AOSc3uBEfPB23LA2/qA5Nl10Ozjr62MUD+ddWA/P+WqKX3AYfSBc8zYByRjewF10PteE3lSH8gODNMJB/eNalRHQfXd3wvM8r6Aq2t/Wc5+b6gsR+aH2fuARB30tvFLtXsMHHkPvYTHLt6cPVv8sqSq32RZtGiR0tLSFBERodatW5f+PSEhQSNHjqywfZcuXZSQkOCcYMs4dOiQ4uPjtW/fPt1888366KOP5O/v2CelHdWrVy8FBQUpNzdX69ev14UXXlhhm59//lmSdMEFFzh8HEe+7pWflaOP2462adtTiSmSVarfIUYZiSmKaB2tzPlHa9xv4IwH5BcYoIzEg+o+8SYlLf1VmQdq3q8yibsTFRjmwMcby8gukAZ9Xau7sNnJXz9X9v4tyjmUqJM/L6pwe5fZCQqKalnJnrZJTNyt0FpUDXvOv+Q7OVCWs/PBGTlQ2/Nelivmg9GPgZHjr62HXvxNsxfa38vmzXpUf7pythMisp+39QGp9nXAlX1Acm4vMGI+eFsOeFsfkDy7Dpp9/LX19eqDuuaBFXbvd8cNvTTvuRQnRGQ/b6sBEn2gLDP2AcnYXkAd9L7XRJ7UB05l5qn5ZQt1NrvArv2aNw5T0sa1Cghw/09fm+V9AVfX/rKc/d5QWY7MD7P3AYk66G3jl9zXCzyk/VQUHR2tkydPauPGjbrooovK3XbkyBFNmjRJktS9e3dZLJbS206ePKn69etXuL+GDRtq165dTo1ZkqZNm6Y9e/bohhtu0MKFCyv91ouzRURE6PLLL9fy5cv1z3/+s8LizU8//aTExEQFBQXpuuuuc3l89jj47Xq1uLKfzqSkKf9MzaubcXcNU9OBXbXhxX/p4Ddrde2K6Rr4xnh9c+MzLojW/RrFj1Gj+DHuDsNQ5IB9fDEH7OXLj8H9f+pk9+JNdGSorh9a+bdYvQE1wH6+NgfIAfv5Wg7Yy5fHf+WA5mrdPEL7D2Xatd/4Ua69jLORqAH287U5QA7Yz9dywF6+PP56EUEaPbyd3vnsD7v2u29kJ49YuHEUdcA+vjYHOP/287UcsJcvjd9jK/dll10mSXr55ZeVmJhY+vd169YpPj5eaWlpkqSePXs6PZbBgwfrpptuUnh4eI3bzpw5U9OmTdOiRYvcsnBT4umnn5bFYtG8efP0wQcflP597969uuuuuyRJ9913nxo3buyuEG1ycMV6tbiir5oN6aHDP22tdtuI1tHq/eRtOr5pt7bP/kIZiSna/Nqnir6oi+LuGuaiiGE0cgA4p3PbBrrpsli79vnrnd0VFOjab4AaiRoAcgA4x9/fT0/d06PmDcu4ckBz9esa5aSInI8aAHIAKO+R0V0UbsfHv6MahOiemzo6MSLnow6YG+cfZuaxizeTJ09Wo0aNdPDgQXXp0kXdunVT+/bt1b9/f7Vp00ZDhw6VVP73biSpQYMGysjIqHB/J06cUMOGDR2KZdq0aVq8eLGiomp+0RMaGqopU6YoMDDQoWOd75dfflFkZGTp/15//XVJ0ieffFLu7yW//1Piwgsv1EsvvSSr1apx48YpNjZWvXr1UqdOnbRnzx5dcMEFeumllwyJ0ZmOrtmpum2aqtXV/XV8XTXfnLJYdPGMB+Xn56efH54ta1HxdSi3v/Wl0jbvUe8nb1NEKyN/Kg6uQg4A5X3w90s0sJdtufzgrZ318OguTo7IuagBIAeA8u66saOeuMu2BZzecY30ySvxTo7IuagBIAeA8jq2rq/Fr12qkOCaP6BVPyJIy2ZfoejIMBdE5jzUAXPj/MPMPHbxJiYmRqtXr9Y111yjkJAQJSUlqWHDhnrnnXe0fPny0m/jnL94ExcXV+lv2yQkJCguzvsuF5Cfn6/09PTS/5X8BlBubm65v+fn51fYd/Lkyfrmm290+eWX69SpU/rjjz/UoUMHPf/88/rxxx8VFub5zdtaWKRDq7YU/3dR1T8M1uUv16pJ/07aNH2RTu0+dG7/oiL9/PBs+fn7a+Ab450eL4xHDgDlhYcF6tt3rtIDt8QpLKTyT9xFR4ZqxuQLNOtvF5a7tKg3ogaAHAAqeuHhvnpnykDFNKn8ygAhwf66+8YO+nHeNapfN9jF0RmLGgByAKjoqotj9MN7w3Rh96o/ZDy0f1P9smC4+nfz3m9flqAOmBvnH2bmsb95IxUvxCxbtqzC38+cOaOkpCT5+fmpa9eu5W4bPny4nnzySaWkpCgmJkaStGbNGu3du1fTp093SdxGGjJkiKxWq8P7X3nllbryyisNjMj1kv+zVqrmMajXvrl6T75Fx9bv0o5/fFXh9pKvSPZ58nbF3TVMO9930y/GwWHkAFBeaEiAZj85QM8/1FcLvtqtddvTdDa7QPUiAjXs4ha6Lr6VAgM99vMZdqMGgBwAKrr35k768/UdtHz1QX21KlkZmXkKDfFXr06NNO66DmpYz7sXbcqiBoAcACq6sEdj/fbRCG1MSNOHy/bo8PEsWSxSq6Z1dOf1HdSpdX13h2go6oC5cf5hVhZrbVYG3GTNmjW68MIL1bFjR/3xR/kfaTt9+rS6deumyMhITZs2TTk5OZo8ebKioqL022+/yc/Pd97M8kb5WTn6uO1od4dhs9v3fqTAsJBa3Ud2gTSoTE/I2r9FB966R0XZmQqKaqXYRz5UYL0obbjOopBWXRVzx8uq17f4Opw5h3cracZYFWSmyT+snmIfnq/QlsWXQNr1VLyyk7ao6agpajJiYq1itNXqYZIdl9atwNvOv2RMDpR1fj54g9qe97LMPn6Ysw7Upg+USFs5Twfe/LPaPrFE9S+8XpJ39gHJ+3KAPkAfoA8Yy9tqgGR8H5Ds6wWn1n+tQx8/LVmLZC0sUPQNk9Ro6FhJru8FZuwDkrG9gDrofY8BfcBYZqkBtXkNkPzuBJ1at1R5xw4o7o1NCmvTU5JUlJejfa/eopyDCfILClVAvcZqef/bCmnaTpL3vD4wSw5Ux+x10NvGL7mvF3jlSsa2bdskVbxkmiTVrVtX33//vZo2bapbbrlFd999twYMGKBly5axcAOPkDRznFqNf1dd3tqpBhf/SSnzHi+9reMLq8u9YZc85z5FXnmvur6dqOgb/6qkmePObfv8D6rff4RNx9z11BDlHk0yaghws8RnrlDChO5KmNhTu54YpKx9m9wdklNl7d+inY/3144H4rR76lXKP3VcmdtWaePIUCVM7Kn8jGOSpEMfPqnt4zsp4eEe2vloX53a+N/S+zj65Rvafl87JUzs6Z5BAGXY0wckKfdoktJW/FPhHS8s93f6gHmZrQ9ItvcCSTr29RzteCBOOyZ0U8LDPVSUlyNJSpk3SVvvaqk9L1zvnkEAZdjaC6xWq/a/MVqxD89X5xmb1e7pZTow5z4VZmUWb0svMCUz9AFb637ayrnaMaGbNtwQoKNLZ5S7j6LcLO179VZtv6+dtt/fQSd/WVx6Gz0BrmbPa4AGA29Wxxd/VlDjVhXuJ+qKe9Vlzi51nrlF9S+4Tgdm333ufugJpkIvsK0XlMg+uFMbR4bp4HsTS//mDe8VeeVnB6pbvJGktm3bVnq5NcDdsvZtkn9ondJPTTSKH6uUuY+pKD+vwrb5Gcd0ds96tZ+2QpJUf8BNSn73QeUc2VP6qQqjFJzJUMKErirKy1ZQZAtZ83OVm7pPDYeMUexD7xl6LNRem0mfKqBOfUnSyd+WKGnmOHWeucW9QTlR0sxxip0wT2Fteipt5VylzHtckZfeqZDmHdV5xubS7ep0HqSmf/o/+QWHKmv/Fu168hJ1n3dY/iHhanLdIwpr00sH35/otnEAkn19QCq+PvOB2Xerxb1vKmXeY06Liz7gXczWByTbe0HGmi914seP1emV3+UfXk/5p47L4h8oSYq5c7pCWnZRxpov3DMI4H/s7QWyWFR4NkOSVJh9WgERjWQJNP6yePQC72GGPmBr3Q9r20dtJn2q1MUvVriP1CWvyi8wWF3f2aPco/v1x6QLFNEtXgF1G9ET4FL21v2ILpdU+ne/oJByizzhHS7U0S9eNTzeEvQFz0Yv2Fy6XXW9QJKsBflKnnOvGlx4Q7m/e8N7RT65eAN4qtyj+5V9YFu5Fd2i3CzlnzhUYdu8tIMKbNBUFv/iaWqxWBQU1VJ5x5MNX7wJqFNfDS+5Tf6hEWo66v90auN/lbr4BZqxhyppzpJUmHVK+t8P0vviE6uqnuQ2Gnx7hW3r9bm69L9DW3WTrFYVnDou/5DKf8wZcAd7+oAkHf3yddWJG6jwdn2cGhd9wLuYqQ9I9vWC1CXT1eyWZ+QfXk+SFFjP+3+kGb7Hnl5gsVjU5vFF2vvijfIPCVfBmZNq+7d/yy8wyPC46AXew9f7gD11P6x18ftClkqutHLy50Vq9dD7kqTgJq0V0XWIMn5fosgr7q6wLeBM9r4GsNWxZTNVv/91tYyuavQFz0YvOKe6XiBJhxc9qwYDRqrgzInSD8R4C69cvPn+++/dHQLgsPD2F6j9tHOXc9oyxjlvKux/4w5lH9gqSco9skd7nh0my/9e5LV94gsFN4ktt33W/s1qPHxC8X/v3aCwNr2cEheMsf+NO5S57QdJUvspxRcK9cUnVlU9yc1Lr/5Jbvp38xQc3abSr5kD7mZrH8g+sF0Zv32uji/85NBx6AO+zSx9QLKvF+QcTNDZPet1+JNpsubnqlH8HWp87QQXRgvYxtZeYC0s0JHP/q62T/xbEV0u0dnd67Tn+RHqMmubAupG1ngceoHv8uU+4OhrgPPlHU9WcNS51wNBjWOVdzzZqDABuxj9XtCRz15Q7pE9avXcdzbvY29PkOgLno5eULOzu9bo7B+/qf2z3+rIJ9MMjtL5vHLxBvBWwU3aKC/t3JPFwqzTKsw5q8CGzStsGxTZQvknj8haWCCLf4CsVqvyjicrKKqlTcdq/ciC0v/e9dQQxU6YX2kjLpG9f3NpE87au8Hm66TCPUrOb/r3HyhlwV9Lm7QvPrGy90nu6S3f6fAn09Rh2rey/O+TJ4CnsKcPnElYrdxjSdp+f3tJUv7JVB04eK/yTx5R1NX313gs+oBvM1MfkOx7ozvv6H51fOEnFZ49qV1PDlZQdBvV7zfcVaECNbKnF2Tt26z8E4dLL6ET3r6fghrFKGvfJtXteXmNx6IX+C5f7wOu+tAj4Ar21H1bpC55VRm//Vvtn10pv+Awm/eztydI9AVPRy+oXlFulpLfGa82f13ste8PVf5dIgBOEdampyz+gTq9+VtJ0vGv56jhxaMqvexBYP3GCmvbW+mrPpIkZfz6uYIaxRh+yTRJ/1u1tiioUfETh+ykrcWXnYLHazR0rDK3/aCC0+mSKj6x8tYGXaKqJ7kluXq+zO0/KmnWnWr39FcKienoqjABm9nTB6Kuvl895h9Rt38mqds/kxTe8UK1Gv+uTQs39qIPeC9f7wOSfb0gKKqlGlxyqyz+/gqoG6l6fYbp7K7fXRkuUCN7ekFQVAvlnzii7IM7JUk5R/YoN3WvQpob/zyHXuCdfLEP2PsaoCpBUS2Ve/xA6b/zjiXZ/GFIwEj21P2aHP3ydZ1cvVDtn/223GWznIG+4D3oBZXLPbJXeceTlfh0vLbdE6tjX81Q2sq52j9jrDNCdgoWbwAXa/3oxzq04Altv6+dMrevUsyd06vcttX97yjtv+9o+/0dlPr5S4qdMM8pMWXt21SukPuH19exr+c45VionYIzGcpLP1z674zfv1BARCP5RzT0ySdWVT3JtQRUfJKbueMn7X9jjNo99WXp9U4BT2RPH3AV+oD3MFsfkOzrBQ0vuU2nN34jSSrKzVbm9lX0BHgkW3tBYP0mavXAu9o3/U9KeLiH9r54g1reO9spb0DTC7yDGfqAPXW/Og0GjlTaN/+QVHz5ncztq1T/wuuNDhewiT2vAQ7MuU9b/xyjvLQU7Z56pbbfV/wh3ry0FKXMfUwFZzOU+HS8Eib21M7HL3BazPQFz0UvsE1obDf1+PB46QciG187UZGX/VmtJ37grLANx2XTABcLje2muNfX27RtSExHdXrlt1ofs+Pzq6q9vX6/4eUuJxL32rpaHxPOUZh1SvteGamivGxZLH4KqBuldk8vk8ViqfKJlbdd1/R8rR/9WEmz7lTy2/cruGk7tX70I2Uf2F5huwNv3iVrfq6SZt15bt+JHyo01vuepMC32dMHyqqpltdmX/qA9zBjH5Bs7wVNrntUB+bcpx0PdJYsFjW46CY1GDjSDRED1bOnFzS85FY1vOTWWh+TXuAbzNIHbK37ad/N1+GPn1bhmZPKWPOFjn7xqto9/ZXC2vRSkxsm6cCsP2vbfW1l8fNXi3tn2/RbUYAz2FP3W41/p9K/B0XGqM+XVkPiseW1BX3Bc9ELyquuF3g7Fm8ADxFQv4kSnxqs5mNeVL2+w2rcftdT8co7lqTwuIEuiA6eIrhxK8W9urbS23z1iZWtT3K7/mO3C6IBnIc+AFuYsQ9ItvcCv6AQr/okHXA+egFqYpY+YGvdj7x0nCIvHVfpbf4h4WozeZHBkQHGsrfuV4eeYB70gvKq6wVlNbt1au2DcjEWbwAP0eODVLu27/j8D06KBPB8loAgFZxOV8LEnmo/dYUC6zeudvujX76htBX/VGDDZi6KELAffQCwj729IGXeJGWsXao6nQa4KELAfvQCoGr21v3q0BPgKeyt+9WhJ8AMjOwF3vBeEYs3AACvUydugLrPPWjz9k2ue0RNrnvEiREBAFzN3l4Qc+d0j/iNKQCAY+yt+9WhJwCAdzKyF3jDe0V+7g4AAAAAAAAAAAAA57B4AwAAAAAAAAAA4EEsVqvV6u4gYB5Wq1UF2bnuDsNmAaHBslgstboPq1XKKTQoIDcL8Zdq83B42/mXjMmBsrwxH2p73ssy+/hhzjrgjXlfFSPmg7flAH2APkAfMJa31QCJPlCWGfuAZGwv8MZ8MLoOettjQB8wlllqgLfluaMcmR9myYHqeFt+mL0PSO7rBSzeAAAAAAAAAAAAeBAumwYAAAAAAAAAAOBBWLwBAAAAAAAAAADwICzeAAAAAAAAAAAAeBAWbwAAAAAAAAAAADwIizcAAAAAAAAAAAAehMUbAAAAAAAAAAAAD8LiDQAAAAAAAAAAgAdh8QYAAAAAAAAAAMCDsHgDAAAAAAAAAADgQVi8AQAAAAAAAAAA8CAs3gAAAAAAAAAAAHgQFm8AAAAAAAAAAAA8CIs3AAAAAAAAAAAAHoTFGwAAAAAAAAAAAA/C4g0AAAAAAAAAAIAHYfEGAAAAAAAAAADAg7B4AwAAAAAAAAAA4EFYvAEAAAAAAAAAAPAgLN4AAAAAAAAAAAB4EBZvAAAAAAAAAAAAPAiLNwAAAAAAAAAAAB6ExRsAAAAAAAAAAAAPwuINAAAAAAAAAACAB2HxBgAAAAAAAAAAwIOweAMAAAAAAAAAAOBB/h+cpUtVkNVQoAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 2113.43x200.667 with 1 Axes>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ansatz_isa.draw(output=\"mpl\", idle_wires=False, style=\"iqp\")"
]
},
{
"cell_type": "markdown",
"id": "aab9e309-d643-496f-ad4b-c90173102ad6",
"metadata": {},
"source": [
"### ISA observable"
]
},
{
"cell_type": "markdown",
"id": "6c9e5dcd",
"metadata": {},
"source": [
"Transform the Hamiltonian to make it backend-compatible before running jobs with [`Runtime Estimator V2`](https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.EstimatorV2#run). Perform the transformation by using the `apply_layout` method of `SparsePauliOp` object."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3451901c",
"metadata": {},
"outputs": [],
"source": [
"hamiltonian_isa = hamiltonian.apply_layout(layout=ansatz_isa.layout)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "b4d480b3",
"metadata": {},
"source": [
"## Step 3: Execute using Qiskit Primitives\n",
"\n",
"Like many classical optimization problems, the solution to a VQE problem can be formulated as minimization of a scalar cost function. By definition, VQE looks to find the ground state solution to a Hamiltonian by optimizing the ansatz circuit parameters to minimize the expectation value (energy) of the Hamiltonian. With the Qiskit Runtime [`Estimator`](https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.EstimatorV2) directly taking a Hamiltonian and parameterized ansatz, and returning the necessary energy, the cost function for a VQE instance is quite simple.\n",
"\n",
"Note that the `run()` method of [Qiskit Runtime `EstimatorV2`](https://docs.quantum.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.EstimatorV2) takes an iterable of `primitive unified blocs (PUBs)`. Each PUB is an iterable in the format `(circuit, observables, parameter_values: Optional, precision: Optional)`."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b22a1b00",
"metadata": {},
"outputs": [],
"source": [
"def cost_func(params, ansatz, hamiltonian, estimator):\n",
" \"\"\"Return estimate of energy from estimator\n",
"\n",
" Parameters:\n",
" params (ndarray): Array of ansatz parameters\n",
" ansatz (QuantumCircuit): Parameterized ansatz circuit\n",
" hamiltonian (SparsePauliOp): Operator representation of Hamiltonian\n",
" estimator (EstimatorV2): Estimator primitive instance\n",
" cost_history_dict: Dictionary for storing intermediate results\n",
"\n",
" Returns:\n",
" float: Energy estimate\n",
" \"\"\"\n",
" pub = (ansatz, [hamiltonian], [params])\n",
" result = estimator.run(pubs=[pub]).result()\n",
" energy = result[0].data.evs[0]\n",
"\n",
" cost_history_dict[\"iters\"] += 1\n",
" cost_history_dict[\"prev_vector\"] = params\n",
" cost_history_dict[\"cost_history\"].append(energy)\n",
" print(f\"Iters. done: {cost_history_dict['iters']} [Current cost: {energy}]\")\n",
"\n",
" return energy"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "179ba2c4",
"metadata": {},
"source": [
"Note that, in addition to the array of optimization parameters that must be the first argument, we use additional arguments to pass the terms needed in the cost function, such as the `cost_history_dict`. This dictionary stores the current vector at each iteration, for example in case you need to restart the routine due to failure, and also returns the current iteration number and average time per iteration."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "a6bc1ade",
"metadata": {},
"outputs": [],
"source": [
"cost_history_dict = {\n",
" \"prev_vector\": None,\n",
" \"iters\": 0,\n",
" \"cost_history\": [],\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "e80ff7d9",
"metadata": {},
"source": [
"We can now use a classical optimizer of our choice to minimize the cost function. Here, we use the [COBYLA routine from SciPy through the `minimize` function](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html). Note that when running on real quantum hardware, the choice of optimizer is important, as not all optimizers handle noisy cost function landscapes equally well.\n",
"\n",
"To begin the routine, specify a random initial set of parameters:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "d6b90cca",
"metadata": {},
"outputs": [],
"source": [
"x0 = 2 * np.pi * np.random.random(num_params)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "d4587c1d-5d59-47aa-b36c-b6d07b5f84e4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2.51632747, 0.41779892, 5.85800259, 4.83749838, 3.20828874,\n",
" 5.23058321, 0.23909191, 5.93347588, 0.98307886, 5.8564212 ,\n",
" 3.41519817, 2.07444879, 0.7790487 , 0.72421971, 1.09848722,\n",
" 3.31663941])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x0"
]
},
{
"cell_type": "markdown",
"id": "67d09ca9",
"metadata": {},
"source": [
"Because we are sending a large number of jobs that we would like to execute together, we use a [`Session`](https://docs.quantum-computing.ibm.com/api/qiskit-ibm-runtime/qiskit_ibm_runtime.Session) to execute all the generated circuits in one block. Here `args` is the standard SciPy way to supply the additional parameters needed by the cost function."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "61a802d2-5c58-4495-a617-f15fabef367e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iters. done: 1 [Current cost: -0.41297466987766457]\n",
"Iters. done: 2 [Current cost: -0.4074417945791059]\n",
"Iters. done: 3 [Current cost: -0.3547606824167446]\n",
"Iters. done: 4 [Current cost: -0.28168907720107683]\n",
"Iters. done: 5 [Current cost: -0.4578159863650208]\n",
"Iters. done: 6 [Current cost: -0.3086594190935841]\n",
"Iters. done: 7 [Current cost: -0.15483382641187454]\n",
"Iters. done: 8 [Current cost: -0.5349854031388536]\n",
"Iters. done: 9 [Current cost: -0.3895567829431972]\n",
"Iters. done: 10 [Current cost: -0.4820250378135054]\n",
"Iters. done: 11 [Current cost: -0.18395917730188865]\n",
"Iters. done: 12 [Current cost: -0.5311791591751455]\n",
"Iters. done: 13 [Current cost: -0.49602925858832053]\n",
"Iters. done: 14 [Current cost: -0.3482916173440449]\n",
"Iters. done: 15 [Current cost: -0.5668230348151325]\n",
"Iters. done: 16 [Current cost: -0.521882967057639]\n",
"Iters. done: 17 [Current cost: -0.26976382760304113]\n",
"Iters. done: 18 [Current cost: -0.051127606468041646]\n",
"Iters. done: 19 [Current cost: -0.5213490424900524]\n",
"Iters. done: 20 [Current cost: -0.5519837695254404]\n",
"Iters. done: 21 [Current cost: -0.5729754281424254]\n",
"Iters. done: 22 [Current cost: -0.5369152381529558]\n",
"Iters. done: 23 [Current cost: -0.54862310847568]\n",
"Iters. done: 24 [Current cost: -0.5843821664926876]\n",
"Iters. done: 25 [Current cost: -0.58018047409157]\n",
"Iters. done: 26 [Current cost: -0.5153040139793709]\n",
"Iters. done: 27 [Current cost: -0.5950601168931274]\n",
"Iters. done: 28 [Current cost: -0.5919884877771185]\n",
"Iters. done: 29 [Current cost: -0.6295788565552562]\n",
"Iters. done: 30 [Current cost: -0.5909207781822071]\n",
"Iters. done: 31 [Current cost: -0.6029330648206948]\n",
"Iters. done: 32 [Current cost: -0.5731453720567535]\n",
"Iters. done: 33 [Current cost: -0.6017005875653386]\n",
"Iters. done: 34 [Current cost: -0.6061613567553928]\n",
"Iters. done: 35 [Current cost: -0.5527009036762591]\n",
"Iters. done: 36 [Current cost: -0.6174016810951264]\n",
"Iters. done: 37 [Current cost: -0.5331013786620393]\n",
"Iters. done: 38 [Current cost: -0.6174716771227629]\n",
"Iters. done: 39 [Current cost: -0.5256692009209388]\n",
"Iters. done: 40 [Current cost: -0.5936376314600634]\n",
"Iters. done: 41 [Current cost: -0.6174496293908639]\n",
"Iters. done: 42 [Current cost: -0.6415583284028612]\n",
"Iters. done: 43 [Current cost: -0.6568655223778936]\n",
"Iters. done: 44 [Current cost: -0.6252111792327242]\n",
"Iters. done: 45 [Current cost: -0.6588010261150293]\n",
"Iters. done: 46 [Current cost: -0.6031535817582718]\n",
"Iters. done: 47 [Current cost: -0.6448573357168782]\n",
"Iters. done: 48 [Current cost: -0.6314357577602281]\n",
"Iters. done: 49 [Current cost: -0.6310360137350473]\n",
"Iters. done: 50 [Current cost: -0.6311716934542182]\n",
"Iters. done: 51 [Current cost: -0.6195122556941205]\n",
"Iters. done: 52 [Current cost: -0.6052709851652176]\n",
"Iters. done: 53 [Current cost: -0.6353235502797585]\n",
"Iters. done: 54 [Current cost: -0.6172917549286481]\n",
"Iters. done: 55 [Current cost: -0.6157291352122161]\n",
"Iters. done: 56 [Current cost: -0.6250258800660834]\n",
"Iters. done: 57 [Current cost: -0.6238737928804968]\n",
"Iters. done: 58 [Current cost: -0.6331336376123765]\n",
"Iters. done: 59 [Current cost: -0.6174795053010914]\n",
"Iters. done: 60 [Current cost: -0.6286114171740883]\n",
"Iters. done: 61 [Current cost: -0.6289541704111539]\n",
"Iters. done: 62 [Current cost: -0.6214988287789815]\n",
"Iters. done: 63 [Current cost: -0.6349088785327752]\n",
"Iters. done: 64 [Current cost: -0.6434368257074341]\n",
"Iters. done: 65 [Current cost: -0.6435758714276368]\n",
"Iters. done: 66 [Current cost: -0.6392426194852974]\n",
"Iters. done: 67 [Current cost: -0.6395388664428873]\n",
"Iters. done: 68 [Current cost: -0.6288383465181286]\n",
"Iters. done: 69 [Current cost: -0.6396744408945687]\n",
"Iters. done: 70 [Current cost: -0.6313800275882947]\n",
"Iters. done: 71 [Current cost: -0.6253344175379661]\n",
"Iters. done: 72 [Current cost: -0.6157835899181318]\n",
"Iters. done: 73 [Current cost: -0.6335140148162095]\n",
"Iters. done: 74 [Current cost: -0.6314904503216308]\n",
"Iters. done: 75 [Current cost: -0.6400032416620431]\n",
"Iters. done: 76 [Current cost: -0.6467193690082172]\n",
"Iters. done: 77 [Current cost: -0.6274062557744253]\n",
"Iters. done: 78 [Current cost: -0.6382220718392321]\n",
"Iters. done: 79 [Current cost: -0.6353720791573834]\n",
"Iters. done: 80 [Current cost: -0.6559597232796966]\n",
"Iters. done: 81 [Current cost: -0.6483482402979868]\n",
"Iters. done: 82 [Current cost: -0.6362917844251428]\n",
"Iters. done: 83 [Current cost: -0.638689906716738]\n",
"Iters. done: 84 [Current cost: -0.6398683206762882]\n",
"Iters. done: 85 [Current cost: -0.6411425890703265]\n",
"Iters. done: 86 [Current cost: -0.6420124690404581]\n",
"Iters. done: 87 [Current cost: -0.6361424203927645]\n",
"Iters. done: 88 [Current cost: -0.6304230811374153]\n",
"Iters. done: 89 [Current cost: -0.6460686380415002]\n",
"Iters. done: 90 [Current cost: -0.6393627867774831]\n",
"Iters. done: 91 [Current cost: -0.6353801863066766]\n",
"Iters. done: 92 [Current cost: -0.6370827028067767]\n",
"Iters. done: 93 [Current cost: -0.6367252584729324]\n",
"Iters. done: 94 [Current cost: -0.6369091807759274]\n",
"Iters. done: 95 [Current cost: -0.6358923615709814]\n",
"Iters. done: 96 [Current cost: -0.6374055046408706]\n",
"Iters. done: 97 [Current cost: -0.6449879432951772]\n",
"Iters. done: 98 [Current cost: -0.646341931913156]\n",
"Iters. done: 99 [Current cost: -0.6329474251488447]\n",
"Iters. done: 100 [Current cost: -0.640483532296447]\n",
"Iters. done: 101 [Current cost: -0.6387821271169515]\n",
"Iters. done: 102 [Current cost: -0.6444401199777418]\n",
"Iters. done: 103 [Current cost: -0.624905121027599]\n",
"Iters. done: 104 [Current cost: -0.6254651227936383]\n",
"Iters. done: 105 [Current cost: -0.6350106349636292]\n",
"Iters. done: 106 [Current cost: -0.6452221411408458]\n",
"Iters. done: 107 [Current cost: -0.6510959797011343]\n",
"Iters. done: 108 [Current cost: -0.6335108244050601]\n",
"Iters. done: 109 [Current cost: -0.6463731459675923]\n",
"Iters. done: 110 [Current cost: -0.6453116341043271]\n",
"Iters. done: 111 [Current cost: -0.6500434300085539]\n",
"Iters. done: 112 [Current cost: -0.6498155030176934]\n",
"Iters. done: 113 [Current cost: -0.6165876514864352]\n",
"Iters. done: 114 [Current cost: -0.6379032301303812]\n",
"Iters. done: 115 [Current cost: -0.6238652143915986]\n",
"Iters. done: 116 [Current cost: -0.6303015369454892]\n",
"Iters. done: 117 [Current cost: -0.6387276591694434]\n",
"Iters. done: 118 [Current cost: -0.6216154977895596]\n",
"Iters. done: 119 [Current cost: -0.6254429094384901]\n",
"Iters. done: 120 [Current cost: -0.6244723070534346]\n",
"Iters. done: 121 [Current cost: -0.6331274845209857]\n",
"Iters. done: 122 [Current cost: -0.6320092007865726]\n",
"Iters. done: 123 [Current cost: -0.6280195555442015]\n",
"Iters. done: 124 [Current cost: -0.633118817842713]\n",
"Iters. done: 125 [Current cost: -0.6545316861761059]\n",
"Iters. done: 126 [Current cost: -0.6109521608105805]\n",
"Iters. done: 127 [Current cost: -0.6413687240373942]\n",
"Iters. done: 128 [Current cost: -0.6329171488537345]\n",
"Iters. done: 129 [Current cost: -0.6508873536148351]\n",
"Iters. done: 130 [Current cost: -0.6343396180590694]\n",
"Iters. done: 131 [Current cost: -0.6453833725535618]\n",
"Iters. done: 132 [Current cost: -0.6142726913357903]\n",
"Iters. done: 133 [Current cost: -0.6209357951339112]\n",
"Iters. done: 134 [Current cost: -0.6316232515088392]\n",
"Iters. done: 135 [Current cost: -0.6534320416334607]\n",
"Iters. done: 136 [Current cost: -0.6403781274445913]\n",
"Iters. done: 137 [Current cost: -0.6472281981296323]\n",
"Iters. done: 138 [Current cost: -0.6560563807840072]\n",
"Iters. done: 139 [Current cost: -0.6381191598219642]\n",
"Iters. done: 140 [Current cost: -0.635047673191689]\n",
"Iters. done: 141 [Current cost: -0.6346354679202391]\n",
"Iters. done: 142 [Current cost: -0.6426649674647372]\n",
"Iters. done: 143 [Current cost: -0.643370774702743]\n",
"Iters. done: 144 [Current cost: -0.6429365799217991]\n",
"Iters. done: 145 [Current cost: -0.641164172799006]\n",
"Iters. done: 146 [Current cost: -0.634701203143904]\n"
]
}
],
"source": [
"with Session(backend=backend) as session:\n",
" estimator = Estimator(mode=session)\n",
" estimator.options.default_shots = 10000\n",
"\n",
" res = minimize(\n",
" cost_func,\n",
" x0,\n",
" args=(ansatz_isa, hamiltonian_isa, estimator),\n",
" method=\"cobyla\",\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "937f5a6e",
"metadata": {},
"source": [
"At the terminus of this routine we have a result in the standard SciPy `OptimizeResult` format. From this we see that it took `nfev` number of cost function evaluations to obtain the solution vector of parameter angles (`x`) that, when plugged into the ansatz circuit, yield the approximate ground state solution we were looking for."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4e76845a-3fa0-4d12-86b5-de5b2bdee86c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
" message: Optimization terminated successfully.\n",
" success: True\n",
" status: 1\n",
" fun: -0.634701203143904\n",
" x: [ 2.581e+00 4.153e-01 ... 1.070e+00 3.123e+00]\n",
" nfev: 146\n",
" maxcv: 0.0"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res"
]
},
{
"cell_type": "markdown",
"id": "50b94af2",
"metadata": {},
"source": [
"## Step 4: Post-process, return result in classical format"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "733431ad",
"metadata": {},
"source": [
"If the procedure terminates correctly, then the `prev_vector` and `iters` values in our `cost_history_dict` dictionary should be equal to the solution vector and total number of function evaluations, respectively. This is easy to verify:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "31dc35ea-6554-4ca7-9c3b-0b5394c46e4e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all(cost_history_dict[\"prev_vector\"] == res.x)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "a90d1664-1728-4a8a-bb11-03f15e3f5639",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cost_history_dict[\"iters\"] == res.nfev"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "19459b48",
"metadata": {},
"source": [
"We can also now view the progress toward convergence as monitored by the cost history at each iteration:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "8501d609",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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lq0xddBoBCydez7ONlhCauUQTY3iuRtBEPDizFH4Znc5pg8N7+7a0YZBiCjCAp24PHNsDt4vKpPPB6Lo1y8tHv3QdbY1oO4t3qjDNaN6R/oyOpwg+jvpkGRmsxlJSUmoqamByaTOM52IiIi6m1C/fnOSj4iIiLotBiEiIiLqthiEiIiIqNtiECIiIqJui0GIiIiIui0GISIiIuq2GISIiIio22IQIiIiom6LQYiIiIi6LQYhIiIi6rYYhIiIiKjbYhAiIiKibotBiIiIiLotBiEiIiLqtnSRvoBoJ4oiAMBsNkf4SoiIiChU0tdt6et4IAxCLaitrQUA5OTkRPhKiIiIqLVqa2uRlJQU8H5BbCkqdXMOhwMnTpxAYmIiBEEI2+uazWbk5OSgrKwMJpMpbK+rBt31vfN98313B931fQPd971H6/sWRRG1tbXIzs6GRhN4EogVoRZoNBr07t27w17fZDJF1V+cztRd3zvfd/fC9939dNf3Ho3vO1glSMJhaSIiIuq2GISIiIio22IQihCj0YhHHnkERqMx0pfS6brre+f75vvuDrrr+wa673tX+/vmsDQRERF1W6wIERERUbfFIERERETdFoMQERERdVsMQkRERNRtMQhFyCuvvILc3FzExMRg3LhxKCwsjPQlhdWiRYswduxYJCYmIiMjA1dffTX27Nnj8Zimpibceeed6NGjBxISEnDdddfh1KlTEbrijvHXv/4VgiDg3nvvlW/rqu/7+PHj+OUvf4kePXogNjYWw4cPx6ZNm+T7RVHEn//8Z/Ts2ROxsbGYOnUq9u3bF8Erbj+73Y6HH34Y/fr1Q2xsLAYMGIAnnnjC42yjrvK+165diyuvvBLZ2dkQBAGffvqpx/2hvM+qqirMmjULJpMJycnJuPXWW1FXV9eJ76L1gr1vq9WKhx56CMOHD0d8fDyys7Pxq1/9CidOnPB4ja72vr3dfvvtEAQBL7zwgsftannfDEIR8L///Q/3338/HnnkEWzevBkjR47EpZdeioqKikhfWtisWbMGd955J3766SesXLkSVqsV06ZNQ319vfyY++67D1988QU+/PBDrFmzBidOnMC1114bwasOr6KiIrz++usYMWKEx+1d8X2fPXsWEydOhF6vx1dffYXdu3fj2WefRUpKivyYv/3tb3jppZfw2muvYePGjYiPj8ell16K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++47v/+mb775ZlEUQ3ufZ86cEW+66SYxISFBNJlM4i233CLW1tZG4N2ELtj7PnToUMD/67777jv5Nbra+/bHXxBSy/sWRFGxBSoRERFRN8IZISIiIuq2GISIiIio22IQIiIiom6LQYiIiIi6LQYhIiIi6rYYhIiIiKjbYhAiIiKibotBiIiIiLotBiEiIi+5ubl44YUXIn0ZRNQJGISIKKLmzJmDq6++GgBw0UUX4d577+20z/32228jOTnZ5/aioiLMmzev066DiCJHF+kLICIKN4vFAoPB0Obnp6enh/FqiCiasSJERFFhzpw5WLNmDV588UUIggBBEHD48GEAwM6dO3HZZZchISEBmZmZmD17NiorK+XnXnTRRZg/fz7uvfdepKWl4dJLLwUAPPfccxg+fDji4+ORk5ODO+64A3V1dQCA77//Hrfccgtqamrkz/foo48C8G2NHT16FFdddRUSEhJgMplwww034NSpU/L9jz76KM455xy8++67yM3NRVJSEmbOnIna2lr5MR999BGGDx+O2NhY9OjRA1OnTkV9fX0H/W4SUagYhIgoKrz44osYP3485s6di5MnT+LkyZPIyclBdXU1LrnkEowaNQqbNm3CihUrcOrUKdxwww0ez//Pf/4Dg8GA9evX47XXXgMAaDQavPTSS9i1axf+85//YPXq1fj9738PAJgwYQJeeOEFmEwm+fP97ne/87kuh8OBq666ClVVVVizZg1WrlyJgwcP4sYbb/R43IEDB/Dpp59i+fLlWL58OdasWYO//vWvAICTJ0/ipptuwq9//WuUlJTg+++/x7XXXgueeU0UeWyNEVFUSEpKgsFgQFxcHLKysuTbX375ZYwaNQpPPfWUfNubb76JnJwc7N27F4MHDwYADBo0CH/72988XlM5b5Sbm4snn3wSt99+O/7xj3/AYDAgKSkJgiB4fD5v3377LXbs2IFDhw4hJycHAPDOO+9g6NChKCoqwtixYwE4A9Pbb7+NxMREAMDs2bPx7bff4i9/+QtOnjwJm82Ga6+9Fn379gUADB8+vB2/W0QULqwIEVFU27ZtG7777jskJCTIH3l5eQCcVRjJ6NGjfZ67atUqTJkyBb169UJiYiJmz56NM2fOoKGhIeTPX1JSgpycHDkEAUBBQQGSk5NRUlIi35abmyuHIADo2bMnKioqAAAjR47ElClTMHz4cFx//fX45z//ibNnz4b+m0BEHYZBiIiiWl1dHa688kps3brV42Pfvn2YPHmy/Lj4+HiP5x0+fBhXXHEFRowYgY8//hjFxcV45ZVXADiHqcNNr9d7/FoQBDgcDgCAVqvFypUr8dVXX6GgoACLFy/GkCFDcOjQobBfBxG1DoMQEUUNg8EAu93ucdu5556LXbt2ITc3FwMHDvT48A4/SsXFxXA4HHj22Wdx/vnnY/DgwThx4kSLn89bfn4+ysrKUFZWJt+2e/duVFdXo6CgIOT3JggCJk6ciMceewxbtmyBwWDAJ598EvLziahjMAgRUdTIzc3Fxo0bcfjwYVRWVsLhcODOO+9EVVUVbrrpJhQVFeHAgQP4+uuvccsttwQNMQMHDoTVasXixYtx8OBBvPvuu/IQtfLz1dXV4dtvv0VlZaXfltnUqVMxfPhwzJo1C5s3b0ZhYSF+9atf4cILL8SYMWNCel8bN27EU089hU2bNuHo0aNYtmwZTp8+jfz8/Nb9BhFR2DEIEVHU+N3vfgetVouCggKkp6fj6NGjyM7Oxvr162G32zFt2jQMHz4c9957L5KTk6HRBP4vbOTIkXjuuefw9NNPY9iwYViyZAkWLVrk8ZgJEybg9ttvx4033oj09HSfYWvAWcn57LPPkJKSgsmTJ2Pq1Kno378//ve//4X8vkwmE9auXYsZM2Zg8ODB+NOf/oRnn30Wl112Wei/OUTUIQSR6zeJiIiom2JFiIiIiLotBiEiIiLqthiEiIiIqNtiECIiIqJui0GIiIiIui0GISIiIuq2GISIiIio22IQIiIiom6LQYiIiIi6LQYhIiIi6rYYhIiIiKjb+v9vl9e6ejvOiwAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(range(cost_history_dict[\"iters\"]), cost_history_dict[\"cost_history\"])\n",
"ax.set_xlabel(\"Iterations\")\n",
"ax.set_ylabel(\"Cost\")\n",
"plt.draw()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "ee3ac2fa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'0.23.0'"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import qiskit_ibm_runtime\n",
"\n",
"qiskit_ibm_runtime.version.get_version_info()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "11c9e788",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'1.0.2'"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import qiskit\n",
"\n",
"qiskit.version.get_version_info()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}