diff --git a/docs/tutorials/07_leveraging_qiskit_runtime.ipynb b/docs/tutorials/07_leveraging_qiskit_runtime.ipynb new file mode 100644 index 0000000000..266e76379c --- /dev/null +++ b/docs/tutorials/07_leveraging_qiskit_runtime.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Leveraging Qiskit Runtime " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Iterative algorithms, such as the Variational Quantum Eigensolver (VQE), traditionally send one batch of circuits (one \"job\") to be executed on the quantum device in each iteration. Sending a job involves certain overhead, mainly\n", + "* the time to process the requests and send the data (API overhead, usually about 10s)\n", + "* the job queue time, that is how long you have to wait before it's your turn to run on the device (usually about 2min)\n", + "\n", + "If we send hundreds of jobs iteratively, this overhead quickly dominates the execution time of our algorithm.\n", + "Qiskit Runtime allows us to tackle these issues and significantly speed up (especially) iterative algorithms. With Qiskit Runtime, one job does not contain only a batch of circuits but the _entire_ algorithm. That means we only experience the API overhead and queue wait _once_ instead of in every iteration! You'll be able to either upload algorithm parameters and delegate all the complexity to the cloud, where your program is executed, or upload your personal algorithm directly.\n", + "\n", + "For the VQE, the integration of Qiskit Runtime in your existing code is a piece of cake. There is a (almost) drop-in replacement, called `VQEProgram` for the `VQE` class.\n", + "\n", + "Let's see how you can leverage the runtime on a simple chemistry example: Finding the ground state energy of the lithium hydrate (LiH) molecule at a given bond distance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Problem specification: LiH molecule\n", + "\n", + "First, we specify the molecule whose ground state energy we seek. Here, we look at LiH with a bond distance of 2.5 Å." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit_nature.drivers import PySCFDriver, UnitsType, Molecule\n", + "from qiskit_nature.problems.second_quantization.electronic import ElectronicStructureProblem\n", + "from qiskit_nature.converters.second_quantization import QubitConverter\n", + "from qiskit_nature.mappers.second_quantization import ParityMapper\n", + "from qiskit_nature.transformers import ActiveSpaceTransformer" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "bond_distance = 2.5 # in Angstrom\n", + "\n", + "# define molecule\n", + "molecule = Molecule(geometry=[['Li', [0., 0., 0.]],\n", + " ['H', [0., 0., bond_distance]]],\n", + " charge=0, \n", + " multiplicity=1)\n", + "\n", + "\n", + "# specify driver\n", + "driver = PySCFDriver(molecule=molecule, unit=UnitsType.ANGSTROM, basis='sto3g')\n", + "q_molecule = driver.run()\n", + " \n", + "# specify active space transformation\n", + "active_space_trafo = ActiveSpaceTransformer(num_electrons=(q_molecule.num_alpha, q_molecule.num_beta),\n", + " num_molecular_orbitals=3)\n", + " \n", + "# define electronic structure problem\n", + "problem = ElectronicStructureProblem(driver, q_molecule_transformers=[active_space_trafo])\n", + "\n", + "# construct qubit converter (parity mapping + 2-qubit reduction)\n", + "qubit_converter = QubitConverter(ParityMapper(), two_qubit_reduction=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classical reference solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a reference solution we can solve this system classically with the `NumPyEigensolver`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.algorithms import NumPyMinimumEigensolver\n", + "from qiskit_nature.algorithms.ground_state_solvers import GroundStateEigensolver\n", + "\n", + "np_solver = NumPyMinimumEigensolver()\n", + "np_groundstate_solver = GroundStateEigensolver(qubit_converter, np_solver)\n", + "\n", + "np_result = np_groundstate_solver.solve(problem)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Energy: -7.773617988868097\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "target_energy = np.real(np_result.eigenenergies + np_result.nuclear_repulsion_energy)[0]\n", + "print('Energy:', target_energy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## VQE\n", + "\n", + "To run the VQE we need to select a parameterized quantum circuit acting as ansatz and a classical optimizer. Here we'll choose a heuristic, hardware efficient ansatz and the SPSA optimizer." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.circuit.library import EfficientSU2\n", + "\n", + "ansatz = EfficientSU2(num_qubits=4, reps=1, entanglement='linear', insert_barriers=True)\n", + "ansatz.draw('mpl', style='iqx')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.algorithms.optimizers import SPSA\n", + "\n", + "optimizer = SPSA(maxiter=100)\n", + "\n", + "np.random.seed(5) # fix seed for reproducibility\n", + "initial_point = np.random.random(ansatz.num_parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before executing the VQE in the cloud using Qiskit Runtime, let's execute a local VQE first." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Measured Observable is not composed of only Paulis, converting to Pauli representation, which can be expensive.\n" + ] + } + ], + "source": [ + "from qiskit.providers.basicaer import QasmSimulatorPy # local simulator\n", + "from qiskit.algorithms import VQE\n", + "\n", + "local_vqe = VQE(ansatz=ansatz,\n", + " optimizer=optimizer,\n", + " initial_point=initial_point,\n", + " quantum_instance=QasmSimulatorPy())\n", + "\n", + "local_vqe_groundstate_solver = GroundStateEigensolver(qubit_converter, local_vqe)\n", + "\n", + "local_vqe_result = local_vqe_groundstate_solver.solve(problem)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Energy: -7.561492258661798\n" + ] + } + ], + "source": [ + "print('Energy:', np.real(local_vqe_result.eigenenergies + local_vqe_result.nuclear_repulsion_energy)[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Runtime VQE\n", + "\n", + "Let's exchange the eigensolver from a local VQE algorithm to a VQE executed using Qiskit Runtime -- simply by exchanging the `VQE` class by the `VQEProgram`.\n", + "\n", + "First, we'll have to load a provider to access Qiskit Runtime. **Note:** You have to replace the next cell with your provider." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import IBMQ\n", + "\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(project='qiskit-runtime') # replace by your runtime provider\n", + "\n", + "backend = provider.get_backend('ibmq_montreal') # select a backend that supports the runtime" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can set up the `VQEProgram`. In this first release, the optimizer must be provided as a dictionary, in future releasess you'll be able to pass the same optimizer object as in the traditional VQE." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit_nature.runtime import VQEProgram\n", + "\n", + "# currently the VQEProgram supports only 'SPSA' and 'QN-SPSA'\n", + "optimizer = {\n", + " 'name': 'QN-SPSA', # leverage the Quantum Natural SPSA\n", + " # 'name': 'SPSA', # set to ordinary SPSA\n", + " 'maxiter': 100,\n", + " 'resamplings': {1: 100}, # 100 samples of the QFI for the first step, then 1 sample per step\n", + "}\n", + "\n", + "runtime_vqe = VQEProgram(ansatz=ansatz,\n", + " optimizer=optimizer,\n", + " initial_point=initial_point,\n", + " provider=provider,\n", + " backend=backend,\n", + " shots=1024,\n", + " measurement_error_mitigation=True) # use a complete measurement fitter for error mitigation" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "runtime_vqe_groundstate_solver = GroundStateEigensolver(qubit_converter, runtime_vqe)\n", + "runtime_vqe_result = runtime_vqe_groundstate_solver.solve(problem)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Energy: -7.575601255595115\n" + ] + } + ], + "source": [ + "print('Energy:', np.real(runtime_vqe_result.eigenenergies + runtime_vqe_result.nuclear_repulsion_energy)[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we are interested in the development of the energy, the `VQEProgram` allows access to the history of the optimizer, which contains the loss per iteration (along with the parameters and a timestamp).\n", + "We can access this data via the `raw_result` attribute of the ground state solver." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "vqeprogram_result = runtime_vqe_result.raw_result\n", + "history = vqeprogram_result.optimizer_history\n", + "loss = history['loss']" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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JkyYQK9evbDWcs0119C3b1+++OILxo4dS9euXTn77LOZP38+u3bt4t57761xfEhICHFxcTWWiIiIQ7gjnqXJaNzIGMNtE/sRGRLAQ7M3kPvGCl6ePIqwQP2YRUREDteDX65nQ3Jus15zYHw7pp5z1GEfv2PHDubOnYu/v/8hH7to0SI6derE/Pnz2bNnD5dccgl9+/bl7rvvZsaMGWzZsoX+/fvz6KOPAs5Ed8+ePXWea+rUqTzzzDNERERwxRVXcOmllxIUFMTMmTPx9fXl4osv5oEHHuC5554DYNasWdx///0899xzjBw5knXr1nH99dfj7+9/QIlKpWuvvZYzzzyTbdu20bt3bwDS0tKYPXs2b7zxBgCrV69m/fr1vPvuuwcMiRcfH8+VV17J+++/z3//+99WM3yjerKbwLXjevDUxUP5eUcWV876mayCUk+HJCIiIk1s7ty5hIWFERwcTK9evdiwYQN33XXXIZ+nXbt2vPTSSwwYMICJEydy8cUX89133wEQERFBQEBAjV5eX1/fes/10EMPMX78eIYMGcKNN97IkiVLmDZtGmPGjGHUqFH88Y9/ZMGCBTXaP/HEE1x00UX06NGDc845h3/+85+88MIL9V5j4sSJdOnSpUZv9ltvvUVYWBgXXnghAFu2bAFgwIABdZ5j4MCBZGdnk56eXrVt5syZhIWF1VgaisPbqIu1iVw4sjPtgv35y3u/cPFLS/joxmNpHxrg6bBERERanCPpUW5Oxx9/PDNnzqSoqIhZs2axfft2br311kM+z8CBA2skzvHx8SxbtuywYhoyZEjV97GxsQAMHjy4xrZ9+/YBkJ6ezp49e/jTn/7En//856o25eXlDQ7q4OPjw9VXX80rr7zCQw89hK+vL6+99hpXXnklQUFBhxRvQMDvudKll17K1KlTa+yPiYk5pPN5knqym9CpA2N54+qj2Z5ewPsrdns6HBEREWlCISEh9O7dm8GDB/Pss89SWFjIQw89VLXfx8fngGS1rKzsgPPULjExxtRbE30w1c9VWYZRe1vluSu/vvTSS6xevbpqWbduHevXr2/wOpUPKX7zzTcsWbKETZs2cd1111Xt79u3LwAbNmyo8/gNGzYQExNDZGRk1baIiAh69+5dY2lJNdlKspvYsb2iObp7ez5elaSh/URERNqQqVOn8vjjj5OcnAw4e2FT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077Ig/Dz6NXrYYzpjbPHej6QDnQG/gmUALMbOLRFGd41kvkb09hfWEpkSICnwxERERE3Gzp0KEOHDq1av/fee/nyyy/56KOPuO+++6q2n3DCCdx5551V6/fffz8TJ07krrvuAqBv376sWLGiqhwF4JFHHuGOO+7g6quvBqBXr148/vjjTJo0iWnTptGhQwd8fX0JDw8nLi6uqV9qDffddx9hYWGce+65gLP2uaKigtjY2BrtYmNjq3qpU1NT8fX1JTo6+oA2qampNbY99NBDjB8/HoAbb7yRW265hVWrVjFixAgA/vjHP/LRRx/VOGbjxo2EhYW570UehFcm2TiT6QnAbUAkkAb8CIy11qbWf1jLMqxLJACr9+xnQr+Ong1GRETEi3V7+62q742/f411n+DgGuu+4eE11v3at6+5HhNTY92/U6ca6wFdurgt7oKCAh588EFmz55NSkoKZWVlFBcXM2TIkBrtRo0aVWN906ZNnHPOOTW2jRkzpkaSvWrVKpYvX87jjz9etc3hcFBUVERqaiqdOnVqdJw33ngj77zzTtV6UVERP//8MzfffHPVtg0bNtC1a9eDnmvGjBm8/PLLzJ8/n3bt2jU6hkNR/edXmbgPHjy4xrZ9+/bVOKZXr1587fq0o1J2djajR49ukhi9Msm21u7BOZpIqzakcwTGKMkWERFprW6//Xbmzp3Lk08+SZ8+fQgJCeGqq6464OHG0NDQQz63w+Fg6tSpXHzxxQfsO9RBIP79739z++23V61feeWVVaUtleLj4w96nmeeeYZ//etfzJkzp0byGh0dja+vL2lpaTXap6WlVfWyx8XFUVFRQUZGRo3409LSqnqtK/n7/z43YWWtee1tDkfNSf8CAgLo3bt3jW0ZGRkHfU2HyyuT7LYiPMifPh3DVJctIiLSSi1evJirrrqKCy90jttQXFzM9u3b6du3b4PH9e/fnxUrVtTYtnz58hrrI0aMYNOmTQckjtUFBAQ0amSOjh070rHj7x1+wcHBdOzYscFz1zZ9+nSmTp3KV199xbhx4w6IY+TIkcybN6/GHwXz5s2r+tmMHDkSf39/5s2bxxVXXAFAUlISGzdu5Nhjj210HN5CSbaHDesSybcb0rDWNulTvyIiItL8+vbty6effsof/vAH/P39efDBBykuLj7ocbfeeivjxo1j2rRpnHfeefz44498+umnNdrcf//9nH322XTr1o1LLrkEPz8/1q1bx/Lly3niiScA58glixYtYtKkSQQGBh5Q7+wu06ZN49577+Wdd96hb9++VTXUwcHBREREAPCPf/yDyZMnM3r0aI477jheeuklkpOTufHGGwGIiIjg2muv5c4776Rjx45ERUXxj3/8gyFDhnDKKac0SdxNyasno2kLhnVpz/7CMhIz6xtURURERFqq6dOn07FjR8aPH88ZZ5zBMcccc0DpQ13Gjh3LrFmzePbZZxkyZAifffYZd911F0FBQVVtTjvtNL766isWLFjA6NGjGT16NP/5z39q1E3/+9//Zs+ePfTq1euQS0gOxfPPP09ZWRmXXnopnTp1qlr++te/VrW59NJLeeaZZ3j44YcZNmwYixcv5uuvv6Zbt25VbZ555hnOP/98Lr30Uo477jjCwsL48ssv8fX1bbLYm4qx1no6BrcbNWqUXblypafDaJSNKbmcMWMRT186lPOHd/Z0OCIiIh63ceNGBgwY4OkwvM7f//535s+fz9q1az0dSpvT0HvSGLPKWjuq9nb1ZHtY39hwQgJ8Wb17v6dDERERES8ybdo0Vq9ezbZt23jppZd46aWXuOaaazwdljSSarI9zNfHMDghgl/18KOIiIhUs3LlSp588klycnLo0aMHjz32WI3yC/FuSrK9wLCukby2eCfFZRUE+be8miMRERFxvw8++MDTIcgRULmIFxjepT1lFZb1ybmeDkVERERE3EBJthcY3jUSQONli4iIiLQSSrK9QGy7IDpFBPHr7mxPhyIiIiIibqAk20sM6xKpnmwRERGRVkJJtpcY3jWSpOwi0vNKPB2KiIiIiBwhJdleYliX9oDqskVERERaAyXZXmJwQgS+PobVe1SXLSIiItLSKcn2EsEBvvSPC1dPtoiISAtjjGlwmTJlisdi6969O08++aTHrt+WaTIaLzKsSySfr06mwmHx9TGeDkdEREQaISUlper72bNnc/3119fYFhwcfEjnKy0tJSAgwG3xiWeoJ9uLDOsSSX5JOdvT8z0dioiIiDRSXFxc1RIZGVljW0FBAVdddRVxcXGEhoYyYsQIZs+eXeP47t2788ADD3DNNdcQGRnJlVdeCcBrr71G165dCQkJ4ZxzzuGFF17AmJqdcF9++SUjR44kKCiIHj16cO+991JaWgrAhAkT2LVrF3fccUdVr7o0H/Vke5GqSWl276dvbLhngxEREfEiuyZfdcC28DNOp8MVV+AoKmLPDX86YH/E+ecTecH5lGdns/fWvx6wv/3ll9HuzDMpS0kh+c67auzr9vZbbok7Pz+fM844g4cffpjg4GA++OADLrjgAtasWUP//v2r2k2fPp377ruPlStXYq1l6dKlXHfddTz22GOcf/75LFy4kHvuuafGub/55huuvPJKZsyYwfHHH8/u3bu58cYbKSkp4cknn+STTz5h6NChXHPNNfz5z392y+uRxlOS7UV6RocRHuTHr3v2c8nRXTwdjoiIiByhoUOHMnTo0Kr1e++9ly+//JKPPvqI++67r2r7CSecwJ133lm1fv/99zNx4kTuusuZ/Pft25cVK1Ywa9asqjaPPPIId9xxB1dffTUAvXr14vHHH2fSpElMmzaNDh064OvrS3h4OHFxcU39UqUWJdlexMfHaFIaERGROjTUs+wTHNzgfr/27Rvc79+pk9t6rmsrKCjgwQcfZPbs2aSkpFBWVkZxcTFDhgyp0W7UqFE11jdt2sQ555xTY9uYMWNqJNmrVq1i+fLlPP7441XbHA4HRUVFpKam0qlTpyZ4RdJYSrK9zLAukTy/YBsFJeWEBur2iIiItGS33347c+fO5cknn6RPnz6EhIRw1VVXVdVNVwoNDT3kczscDqZOncrFF198wL6YmJjDjlncQ1mclxnWJRKHhbV7czimZ5SnwxEREZEjsHjxYq666iouvPBCAIqLi9m+fTt9+/Zt8Lj+/fuzYsWKGtuWL19eY33EiBFs2rSJ3r1713uegIAAKioqDjN6ORIaXcTLDOsSCcDS7ZmeDURERESOWN++ffn000/55ZdfWLt2LZMmTaK4uPigx9166618++23TJs2ja1bt/Lqq6/y6aef1mhz//33895773H//fezbt06Nm3axEcffVSjtrt79+4sWrSIvXv3kpGR4fbXJ/VTku1losICGdszime/38rzC7ZhrfV0SCIiInKYpk+fTseOHRk/fjxnnHEGxxxzDOPHjz/ocWPHjmXWrFk8++yzDBkyhM8++4y77rqLoKCgqjannXYaX331FQsWLGD06NGMHj2a//znP3Tt2rWqzb///W/27NlDr169VELSzExrTOJGjRplV65c6ekwDltRaQV3fbyGL35L5qzBnZh2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N9+0u2/8c9V6xiuv2j0331K1nv7yTJv0979Xre97/nmbdPsdv6/PmGH3/vPuqvW0J5+yyff9q2o99T+P25QHH6xaT3nkEZvyyCO/rz/4oE39z+NV68n3/cumPflU1fref95t982YUbWedPsddt/zz/++/ve/2/SXZ1at77n5FpvxyqtV67tv/LPNfPPNqvVd111vM999t2o9ccoUm/XBB7+vT5qs956H33sOh8N+vynNbp7+XKt77+169U373++32lve+8UuPe8yu/7lN21FhcNaq/deXe+9kv05dtWuLPvuY6/YL0481/a97RPb7a7ZdsoVD9oPx51ln/p6nc3ML3HLey/xppvtaU8vtEMe+MZue/q/Nunvf7dFpeX2g+W77VOT7rT/PfkKO3jqXHvHh6vtorsftttvu7Pq+Mr3XmpOkf3nx7/Zh8/6k336rOvsf7/faqd+vs4+esb19uOr/1F1r2u/9+ZOucVOPfsmO2P+Fmut87234v7H7IlPLrDd7pptP7rgGrtl2jNV7et676XPesXe88ka2+2u2fa7CybbjDec771t+/Lsx6dcaG+6+G778Oz1tqSsos7/99L+70O7NS3X/rJ9n/3twsvsj8+/af9vxW77xncb7E9nX2T/9/ir9pl5W+yzn/9iF511kX37idftc99tsel7Ut363svfuMl+e+p59tQbXrAfrdxj53+xyP7v2DPtk89/0azvvbr+31ubtN++fN9/7eyTzrXnPr3Anvb0Qnv3DY/aT084x459dL49//nFdvWLrx/279ySsgq78tGn7bzLrrMv/rDNfr0m2a57bLrd+ffbqtof7P+9vY8+Zpfecqed9MrPtvs/Z9tHz7jePnrG9bbbXbNtt7tm28dPv8Y+dNafqtafmvhH+8A5N9lBU+fasY/Ot2+ce419+4Z77MyF2+1PW9Ptjr/9o97/94pKy+32G/9i0195pWp/Q79zN6fm2m9Pv9DOvPMpuyM9v+q95w3/7wErbR35qIbwE5FWxRjDif06krEwkNY2HUlYkF9VOcKub4NoFxmkocMa4OtjGNG1Pb2HdCJ7fQQL7jiBBYl5hP2YyiDac+EpfTH+/ux307VenjySc55bzCe/7mVYaS53PPYd+wvLuMVVQvPzPScTEuBHevJCylIKDjhHbLsgHrtgCJt+68yvW1O5+5vNAMyIb8eYHh3qvdeDO0eS5VfC3fO24O/rQ/S2DNaU5uEYZ3ltyij6vbqQgIOMWmOM4aE/DAJg188FpG9Mw29VEv/6fB3/Kncw+ZhuHHPWwHqPD/D1pXfHcGz7IHYH+9OtcyTjR3XBUVTEnteDGTQojnan9KEiL4+kD4MZMjSedif1oTw7mwN/EofP18fQu2MYQzpHcOfHa+iXl8JfAv24/viebrzK4RmUEEGXo7uwPzGCz/5ynPO990kmOYUbWXL3yQBk/99ecg/z/AF+PnSLCiWuUzinnNALgPRFgZRmNr5G2dfHh+7Robx97RiSsgtJe/RnfHwMp9w4Fl8fQ+B/l+ITFMjlt5xAeKAfxY8vJbBDe6bedhoAyXd/h3+nWGJcP++9DXySGeTvS4CfD4bG/R/WNzacwLhwRo3sTHsv+LSsMVQuIiIi4iYLNu3jmjdX4GMMEwfG8sdjuzOmgSEpG7J8Zxa7swq5cMTBx48vLXdw7ZsrWLQ1g5AAX245qQ/XjOt+yOVaDofl/i/WVY2qM6ZHB2ZcNvywR8nwlPyScia9sozdWYV8ecs4rygpkNZLNdkiIiLN4Nfd2cS2CyK+mRO7/JJy/m/FniMaOg6cZaTPfreNAD8fbji+Z6NHrfA2ZRUOCksr6n3QUMRdlGSLiIiIiLhZfUm2Z6bGERERERFpxZRki4iIiIi4mZJsERERERE3U5ItIiIiIuJmSrJFRERERNxMSbaIiIiIiJspyRYRERERcbNWOa166c6d7Jp8VY1t4WecTocrrnBO8XrDnw44JuL884m84HzKs7PZe+tfD9jf/vLLaHfmmZSlpJB8510H7O9w9dWEn3QiJTt2kjp16gH7o/98I6HHHkvxxo2kPfrYAftj/v53QkYMp/CXX0l/+ukD9sfeczdBAwZQsGQJGS++dMD+uAcfJLBnD/K+X0DW668fsD/+icfx79SJ3K+/Jvv9/x2wP+HZGfi1b8/+Tz4l59NPD9jfZebL+AQHk/Xee+TNmXvA/m5vvwVA5quvkf/DDzX2maAgus6aCUD6Cy9QuPTnGvt9IyPp/NyzAOx7ajpFq1fX2O8XF0fCtCcASH30UUo2bqqxP6B7dzo99G8AUv51P6WJiTX2Bw7oT9w99wCw9447KU9NrbE/eNgwOt72DwCSbrmViv37a+wPGXsMMTfdBMDu62/AFhfX2B82YQJR114DcMD7DvTe03tP7z299/Teq03vPb33oHW+96pTT7aIiIiIiJtpxkcRERERkcOkGR9FRERERJqJkmwRERERETdTki0iIiIi4matsibbGJMO7PLApaOBDA9cV5qf7nXboXvdduhetx26121Hc9zrbtbamNobW2WS7SnGmJV1Fb5L66N73XboXrcdutdth+512+HJe61yERERERERN1OSLSIiIiLiZkqy3WumpwOQZqN73XboXrcdutdth+512+Gxe62abBERERERN1NPtoiIiIiImynJFhERERFxMyXZbmKMuckYs9MYU2yMWWWMGe/pmOTIGGPuNsasMMbkGmPSjTFfGmMG1WpjjDEPGGOSjTFFxpgfjDFHeSpmOXKu+26NMf+ttk33uZUwxnQyxrzp+jddbIzZYIw5odp+3etWwBjja4x5qNrv5Z3GmIeNMX7V2uhet1DGmOONMV8YY/a6/r+eUmv/Qe+tMaa9MeZtY0yOa3nbGBPpzjiVZLuBMeZSYAbwKDAcWALMMcZ09WhgcqQmAC8AxwInAeXAfGNMh2pt7gRuA24Bjgb2AfOMMeHNG6q4gzHmGOAGYE2tXbrPrYDrF+hPgAHOAgbgvKf7qjXTvW4d7gL+AtwK9Af+6lq/u1ob3euWKwxYh/O+FtWxvzH39j1gBHC6axkBvO3WKK21Wo5wAZYBs2pt2wo85unYtLj1PocBFcA5rnUDpAD3VmsTDOQBf/J0vFoO+f5GANuBE4EfgP/qPreuBWdHyE8N7Ne9biULMBt4s9a2N4HZutetawHygSnV1g96b3H+gW2B46q1Gefa1s9dsakn+wgZYwKAkcC3tXZ9i7MHVFqPcJyf/mS71nsAcVS799baIuBHdO9bopnAR9baBbW26z63HucBy4wxHxhj9hljVhtjbjbGGNd+3evWYzFwojGmP4AxZiDOTyS/du3XvW69GnNvx+JMzpdUO+4noAA33n+/gzeRg4gGfIG0WtvTgFOaPxxpQjOA1cBS13qc62td9z6hmWISNzDGXA/0BibVsVv3ufXoCdwEPA38BxgGPOfa9190r1uTx3F2jGwwxlTgzHcesda+4Nqve916NebexgHp1tWFDWCttcaYfdWOP2JKskUawRgzHedHSeOstRWejkfcxxjTD2cZwThrbZmn45Em5QOstNZW1uX+aozpg7NW97/1HyYt0KXAVcAVwHqcf1DNMMbstNa+6snApO1QuciRy8BZpxtba3sskNr84Yi7GWOeBi4HTrLW7qi2q/L+6t63bGNxfiK13hhTbowpB04AbnJ9n+lqp/vc8qUAG2pt2whUPqSuf9OtxzTgSWvt/6y1a621bwPT+f3BR93r1qsx9zYViKlWKobr+4648f4ryT5C1tpSYBVwaq1dp1Kz1kdaIGPMDH5PsDfV2r0T5z/GU6u1DwLGo3vfknwGDMbZ01W5rAT+5/p+C7rPrcVPQL9a2/oCu1zf69906xGCswOsugp+z3t0r1uvxtzbpTgHMxhb7bixQChuvP8qF3GP6cDbxpjlOP8TvxGIB17yaFRyRIwxzwOTcT4slW2MqazTyrfW5rvqt54B7jHGbMKZjN2H82GK9zwQshwGa+1+YH/1bcaYAiDLWrvOtf4Mus+twdPAEmPMvcAHOIdcvRW4B6pqMp9B97o1+BL4pzFmJ85ykeHAP4C3QPe6pTPGhOF8jgacfzh1NcYMw/n/9u6D3Vtr7UZjzFzgZWPMDa7zvIxz9JnNbgvU00OvtJYF58M0iUAJzp7t4z0dk5Yjvqe2nuWBam0M8ADOj6GLgYXAIE/HruWI7/0PuIbw031uXQvO8bF/c93HLTiTbKN73boWnA89PoPzU4oiYAfOZy+CdK9b/oJzHou6fj+/0dh7C7QH3gFyXcs7QKQ74zSuC4mIiIiIiJuoJltERERExM2UZIuIiIiIuJmSbBERERERN1OSLSIiIiLiZkqyRURERETcTEm2iIiIiIibKckWEZFGMcY8YIxZ5+k4RERaAo2TLSLihYwxbwDR1tqzq3/fTNfujnNq4qOttSurbQ8DAq21mc0Rh4hIS6Zp1UVE2ghjjB9QYQ+zd8Vam49zamIRETkIlYuIiHgxY8wDwB+Bs4wx1rVMcO1LMMb8zxiT7Vq+Msb0qX6sMWadMWaKMWY7UAKEGmNON8Ysch2TZYz5xhgzoNpld7q+rnBd74fq56t2fh9jzL+MMXuMMSXGmLXGmD9U29/ddfyFxph5xphCY8wGY8ypTfPTEhHxHkqyRUS825PA/wHzgU6uZYkxJgRYABQDJwBjgRRgvmtfpR7AFcDFwFBX+1DgGWA0MAHIAb40xgS4jhnt+nq663oX1BPbX4E7gLuAwcCnwCfGmGG12j0CPOu6/grgf67SExGRVkvlIiIiXsxam2+MKQJKrLWplduNMZMAA1xdWf5hjPkTsA84G2diDhAATLbWplU77cfVr2GMuRrIxZlcLwbSXbsyq1+zDrcDT1pr33Ot32+MOd61fVK1dk9ba790Xese4CpgmOtaIiKtknqyRURappE4e6nzjDH5xph8nD3S7YFe1dol1UqwMcb0Msa8Z4zZbozJBdJw/j7o2tiLG2PaAfHAT7V2LQYG1tq2ptr3ya6vHRt7LRGRlkg92SIiLZMPsBq4rI59WdW+L6hj/2wgCfgTsBcoBzbg7PV2h9oPVpZV7bDWGmNAnTwi0sopyRYR8X6lgG+tbb8AlwMZ1tr9jT2RMSYK6A/cZK1d4No2gpq/D0pdX2tfs4q1NtcYkwwcB3xXbdc4nAm7iEibpp4EERHvlwgMMsb0M8ZEG2P8gXdxlnl8bow5wRjTwxhzvDHmqeojjNQhG8gArjfG9DbGnAC8hLM3u9I+oAg4zRgTa4yJqOdc04DbjTGXG2P6GmP+DYzH+bCmiEibpiRbRMT7zQI2AitxPpR4nLW2EDge2AF8CGwC3sRZk51d34mstQ7gUmAIsA54HvgXzuH9KtuUA7cC1+Gsof68ntM9izPRfsJ1rvOBC621vx3m6xQRaTU046OIiIiIiJupJ1tERERExM2UZIuIiIiIuJmSbBERERERN1OSLSIiIiLiZkqyRURERETcTEm2iIiIiIibKckWEREREXEzJdkiIiIiIm6mJFtERERExM3+H4w0Js182SqeAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "plt.rcParams['font.size'] = 14\n", + "\n", + "# plot loss and reference value\n", + "plt.figure(figsize=(12,6))\n", + "plt.plot(loss + runtime_vqe_result.nuclear_repulsion_energy, label='Runtime VQE')\n", + "plt.axhline(y=target_energy + 0.2, color='tab:red', ls=':', label='Target + 200mH')\n", + "plt.axhline(y=target_energy, color='tab:red', ls='--', label='Target')\n", + "\n", + "plt.legend(loc='best')\n", + "plt.xlabel('Iteration')\n", + "plt.ylabel('Energy [H]')\n", + "plt.title('VQE energy');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.7.10" + }, + "nbsphinx": { + "execute": "never" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/releasenotes/notes/runtime-vqe-program-4a860e71ba53a780.yaml b/releasenotes/notes/runtime-vqe-program-4a860e71ba53a780.yaml new file mode 100644 index 0000000000..75730204b9 --- /dev/null +++ b/releasenotes/notes/runtime-vqe-program-4a860e71ba53a780.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Introduce the :class:`~qiskit_nature.runtime.VQEProgram` to allow leveraging Qiskit + Runtime to speed up the VQE algorithm. The :class:`~qiskit_nature.runtime.VQEProgram` + implements the :class:`~qiskit.algorithms.MinimumEigensolver` interface and can thus + be used as a drop-in replacement for other minimum eigensolvers like + :class:`qiskit.algorithms.VQE`. See the tutorials under `docs/tutorials` for an + explicit example usage. \ No newline at end of file