├── Adiabatic - Quantum annealing.ipynb ├── Assouel, Jacquier, Kondratyev - qGAN_SVI.ipynb ├── BitErrorCorrection.ipynb ├── GeneratingUniform.ipynb ├── IntroToQC.ipynb ├── QuantumClassifier.ipynb ├── README.md ├── SimulatedAnnealing.ipynb ├── SimulatedAnnealing_1.ipynb └── VQE.ipynb /BitErrorCorrection.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "a6aa2761-9985-4c65-afdb-130df98fd0e2", 6 | "metadata": {}, 7 | "source": [ 8 | "# **Bit-flip Error correction**\n", 9 | "---\n", 10 | "\n", 11 | "



\n", 12 | " \n", 13 | "- Copyright (c) Jack Jacquier, 2024. All rights reserved\n", 14 | "\n", 15 | "- Author: Jack Jacquier \n", 16 | "\n", 17 | "- Platform: Tested on Windows 10 with Python 3.9\n", 18 | "---" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 9, 24 | "id": "9888f5f3-3d9a-465d-b8ae-04eae731711f", 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "import numpy as np\n", 29 | "import matplotlib.pylab as plt\n", 30 | "from math import comb" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 10, 36 | "id": "3105806e-e1f6-4327-b2e2-41c780e7abc3", 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "def probaError(p, m):\n", 41 | " \"\"\"\n", 42 | " p: probability of a bit being flipped\n", 43 | " m: positive integer\n", 44 | " 2m+1: number of bits sent\n", 45 | "\n", 46 | " returns the probability that more than m+1 bits are flipped\n", 47 | " \"\"\"\n", 48 | " output = 0\n", 49 | " for i in range(m+1, 2*m+2):\n", 50 | " output += comb(2*m+1, i)*p**(i) * (1-p)**(2*m+1-i)\n", 51 | " return output" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "id": "3c9f0d81-220e-4d50-afe2-6734182aa262", 57 | "metadata": {}, 58 | "source": [ 59 | "### Numerical results" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 14, 65 | "id": "3f3c807a-c84a-4511-96d3-46b2f9c534f9", 66 | "metadata": {}, 67 | "outputs": [ 68 | { 69 | "data": { 70 | "image/png": "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kJAQnUdWZGpqSoECBXQeOXPm1L6u0WhYtmwZbdq0wdLSkh9//FH7V/zq1aspXrw4ZmZmAAQGBvLVV19hZWWFjY0NLi4uBAUFaa+V2Hnve9uEsXPnTkqXLo2ZmRnOzs48fPjwo9f6WAxvrVixAjs7OywsLHBxcSE4OFj72vnz5/nyyy/JkycPtra2NGrUiEuXLsW7xuPHj2nevDnm5uaUKFGC7du3a197v5kmsff49vnkyZO5fPmytnbK29ubHj160KpVK53zoqOjyZcvH2vWrEnwukIIoU8vXsDZs7B9O8yfDyNGgKsrNG4MVapA0aJgbQ1GRmBpCTlzQr58VyhTphbdurVg+/YAvcWe5vOMPHnyhPz58+vsy58/PyEhIURERCT4F+r06dOZPHlyispTFAgPT9Gpn8zCAlJ7QMWkSZOYMWMGCxYswMjIiLVr13L79m1+/vlnduzYgaGhIXFxcdok4PfffycmJoaBAwfi6urKsWPHtNd6/7zEhIeH8+OPP7J+/XpMTEwYMGAAHTt25OTJk4leKzkxbN26lT179hASEkLPnj0ZMGAAmzZtAuD169e4u7uzePFiFEVh7ty5tGjRglu3bmFtba29zvjx45kxYwYLFy5kw4YNdOzYkb/++oty5col6/66urryv//9j4MHD3L48GEAbG1tKVOmDA0bNuTx48faScz27t1LeHg4rq6uySpDCCFS08uX4O8Ply7B1atw44b6ePEiOVdRgLXAYCACjaYgoaFhaRJv0sL5BIDyyy+/fPCY0qVLKz/99JPOvn379imAEh4enuA5b968UYKDg7WPhw8fKoASHBwc79iIiAjl6tWrSkREhKIoihIaqihqSpL+j9DQpN87d3d3xdDQULG0tNR5/Pjjjzr3d+jQoTrnTZw4UTE2NlaePn2q3ffrr78qhoaGSmBgoHbflStXFEA5d+5couclxMvLSwGUM2fOaPddu3ZNAZSzZ89+cgyGhobK33//rT3mwIEDioGBgfL48eME44mNjVWsra2VPXv26NyXfv366Rzn6Oio9O/fX1EURbl3754CKP7+/oqiKMpvv/2mAMrLly+179HW1lZ77sSJE5UqVarEK7t8+fLKzJkztdutW7dWPDw8EoxTUeL/LAohxKeKjFSU06cVZfZsRWnXTlHs7T/8PVS4sKLUrasorq6KMmKEosyfryg+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", 71 | "text/plain": [ 72 | "
" 73 | ] 74 | }, 75 | "metadata": {}, 76 | "output_type": "display_data" 77 | } 78 | ], 79 | "source": [ 80 | "pp = np.linspace(0., 1., 100)\n", 81 | "plt.plot(pp, [probaError(p, 1) for p in pp], 'b', label=\"Error probability\")\n", 82 | "plt.plot(pp, [p for p in pp], 'k', label=\"Flip probability\")\n", 83 | "plt.xlabel(\"Initial flip probability\")\n", 84 | "plt.legend(loc=\"best\")\n", 85 | "plt.title(\"Final error probability with 3 bits\")\n", 86 | "plt.show()" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": 15, 92 | "id": "84d9cb6d-8f39-4441-a018-2ba89f61f2c3", 93 | "metadata": {}, 94 | "outputs": [ 95 | { 96 | "data": { 97 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAHHCAYAAACcHAM1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABdyklEQVR4nO3dfXxP9f/H8cdnYxtmG8ZmWeYi5HK1mJVQxkiuSuhqrAt9XYWhrG+hVChKSXzTNyQhikqlNKav6+t0gZBrNhcxzMXYzu+P89uHjw37zLbz2fa8327n5vM553zO53WOz2d77pz3+31shmEYiIiIiLgwN6sLEBEREbkRBRYRERFxeQosIiIi4vIUWERERMTlKbCIiIiIy1NgEREREZenwCIiIiIuT4FFREREXJ4Ci4iIiLg8BRbJxGaz0bdv31zb3rRp07DZbKxfv/6G6zZv3pzmzZvbn+/Zswebzca0adPs80aMGIHNZsu1+nJDUlISnTt3ply5cthsNsaPH291SS7FFf/PrnbmzBmeeeYZAgMDsdlsDBgwoMB8/rIrY3/Gjh2ba9vMOB7Hjh274bohISH06NHD/jwhIQGbzUZCQoJ9Xo8ePQgJCcm1+qTwUGApIDJ+6WdMXl5e1KhRg759+5KUlGR1eZZ78803WbBggWXvP3DgQH788Ufi4uKYMWMGrVu3tqwWyZk333yTadOm0atXL2bMmMGTTz5pdUkCnD17lhEjRjiEmvy0detWWrdujbe3N2XLluXJJ5/k6NGjTm9n165deHl5XfOPt5MnT9KzZ0/Kly9PqVKluO+++9i4cWNu7EKhUczqAsQ5r732GlWqVOH8+fMsX76cSZMm8f333/P7779TsmRJq8u7aT/99NMN13n55ZcZOnSow7w333yTzp0707Fjxzyq7PqWLFlChw4dGDx4sCXv7+qy+j9zNUuWLKFx48YMHz7cPm/Pnj2Z1isI++Kqtm/fjpvb9f9OnjJlCunp6fbnZ8+e5dVXXwVwOPuaHw4cOEDTpk3x9fXlzTff5MyZM4wdO5bffvuNtWvX4uHhke1tDRw4kGLFinHhwoVMy9LT02nbti2//vorQ4YMwd/fnw8//JDmzZuzYcMGbrvtttzcrQJLgaWAadOmDXfddRcAzzzzDOXKleOdd97h66+/5tFHH83yNSkpKZQqVSo/y8yx7PwAKFasGMWKudZH98iRI/j5+eXpexiGwfnz5ylRokSmZefPn8fDw+OGvwyuJy8/J674f3a1I0eOULt27Ruu52r7cvbs2QLzx4qnp+cN1ylevHg+VJI9b775JikpKWzYsIFbb70VgEaNGtGyZUumTZtGz549s7WdH3/8kR9//JEXXniB119/PdPyefPmsXLlSubOnUvnzp0B6NKlCzVq1GD48OF8/vnnubdTBZguCRVw999/PwC7d+8GzOu/3t7e7Nq1iwceeIDSpUvz+OOPA+YvpEGDBhEcHIynpyc1a9Zk7NixXOuG3TNnzqRmzZp4eXkRFhbGL7/84rB879699O7dm5o1a1KiRAnKlSvHI488kuVfpWD+YH3uuecoV64cPj4+REdHc+LECYd1rm7DkpWr2xDYbDZSUlKYPn26/ZJZjx49WLp0KTabjfnz52faxueff47NZmPVqlXXfa+///6bRx55hLJly1KyZEkaN27Md999Z1+ecanOMAwmTpxof//rSU9PZ/z48dSpUwcvLy8CAgJ47rnnMh2LkJAQHnzwQX788UfuuusuSpQowX/+8x/7df/Zs2fz8ssvc8stt1CyZElOnToFwNy5cwkLC6NEiRL4+/vzxBNPcPDgQYdtX+9z4ozjx4/z5JNP4uPjg5+fH927d+fXX3+9YbuPunXrct9992V5bG655Rb7D+2cHK/ly5fTqFEjvLy8qFq1Kp9++ul19yHjeO7evZvvvvvO/n94rc9xVm1YMtp93eg7c733nzNnDi+99BKBgYGUKlWK9u3bs3//fod1mzdvTt26ddmwYQNNmzalZMmSvPTSS4AZuJ5++mkCAgLw8vKiQYMGTJ8+/Zrv++6771K5cmVKlChBs2bN+P333x2Wb9myhR49elC1alW8vLwIDAzkqaee4vjx41lu79ixY3Tp0gUfHx/KlStH//79OX/+vMM6V7dhycqVbVj27NlD+fLlAXj11Vft/zcjRoxg6tSp2Gw2Nm3alGkbb775Ju7u7pk+98768ssvefDBB+1hBSAyMpIaNWrwxRdfZGsbFy9epH///vTv359q1apluc68efMICAjgoYcess8rX748Xbp04euvv87yrExR5Dp/JkiO7Nq1C4By5crZ5126dImoqCiaNGnC2LFjKVmyJIZh0L59e5YuXcrTTz9NaGgoP/74I0OGDOHgwYO8++67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t4bUVBgwwOpqRERE8ocCSwFjs8H48VC8OHz3nTmJiIgUdgosBVDNmpfPrgwYABcuWFmNiIhI3lNgKaBeeQUCA812LBntWkRERAorBZYCqnRpeOst8/Hrr5s9h0RERAorBZYC7Ikn4O67ISUFXnjB6mpERETyjgJLAWazmfcZstng88/NUXBFREQKIwWWAu7OO6FnT/Nxv36QlmZtPSIiInlBgaUQeP11KFPGvJPzRx9ZXY2IiEjuU2ApBPz9YeRI8/HLL8Px49bWIyIiktsUWAqJ556D+vXhn3/MLs8iIiKFiQJLIVGsmNkAF+A//4HNmy0tR0REJFcpsBQiTZtCt26Qnm42wDUMqysSERHJHQoshczbb0PJkrB8udnVWUREpDBQYClkKlUyG94CDBkCp09bW4+IiEhuUGAphGJjoVo1OHwYXnvN6mpERERungJLIeTpCe+/bz5+5x1YudLaekRERG6WAksh9cAD0L272QC3e3fzfkMiIiIFlQJLITZ+vNmmZedOGDrU6mpERERyToGlEPPzg08+MR9/8AHEx1tajoiISI4psBRyLVtC797m45gYSE62th4REZGcUGApAsaMMXsN7d8PAwdaXY2IiIjzFFiKAG9vmDYNbDaYOhW+/dbqikRERJyjwFJENGkCgwebj599Fo4ds7YeERERZyiwFCGvvQZ16kBSEvTpY3U1IiIi2afAUoR4ecH06eadnb/4AmbPtroiERGR7FFgKWLCwi7fa6h3b3P4fhEREVenwFIEvfSSGVxOnIBnngHDsLoiERGR61NgKYKKFzcvDXl6wvffXx5cTkRExFUpsBRRderA66+bjwcMgD17rKxGRETk+hRYirCBA83uzmfOmKPgpqdbXZGIiEjWchRYJk6cSEhICF5eXoSHh7N27dprrjtlyhTuvfdeypQpQ5kyZYiMjMy0fo8ePbDZbA5T69atc1KaOMHd3RxQrmRJSEiACROsrkhERCRrTgeWOXPmEBsby/Dhw9m4cSMNGjQgKiqKI0eOZLl+QkICjz76KEuXLmXVqlUEBwfTqlUrDh486LBe69atOXz4sH2aNWtWzvZInFKtGowdaz4eOhS2b7e2HhERkazYDMO5PiLh4eE0bNiQDz74AID09HSCg4Pp168fQ4cOveHr09LSKFOmDB988AHR0dGAeYbl5MmTLFiwwPk9AE6d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9u3bHe6L4qx169Y53PHXZrOxYMGCXKhQRLKiwCJSyHl5eTFmzBhOnDhhdSm5JjU1Ncev3bVrF02aNKFy5cqUK1cux9spX748JUuWzPHrRcQ5CiwihVxkZCSBgYGMGjXqmuuMGDEi0+WR8ePHExISYn/eo0cPOnbsyJtvvklAQAB+fn689tprXLp0iSFDhlC2bFkqVarE1KlTM21/27Zt3H333Xh5eVG3bl2WLVvmsPz333+nTZs2eHt7ExAQwJNPPsmxY8fsy5s3b07fvn0ZMGAA/v7+REVFZbkf6enpvPbaa1SqVAlPT09CQ0NZtGiRfbnNZmPDhg289tpr2Gw2RowYcc1jcunSJfr27Yuvry/+/v688sorXHknkysvCWUcp06dOmGz2ezPf/31V+677z5Kly6Nj48PYWFhrF+//prvKSLXpsAiUsi5u7vz5ptvMmHCBA4cOHBT21qyZAmHDh3il19+4Z133mH48OE8+OCDlClThjVr1vCvf/2L5557LtP7DBkyhEGDBrFp0yYiIiJo164dx48fB+DkyZPcf//93HHHHaxfv55FixaRlJREly5dHLYxffp0PDw8WLFiBZMnT86yvvfee49x48YxduxYtmzZQlRUFO3bt2fHjh0AHD58mDp16jBo0CAOHz7M4MGDr7mv06dPp1ixYqxdu5b33nuPd955h48//jjLddetWwfA1KlTOXz4sP35448/TqVKlVi3bh0bNmxg6NChFC9ePBtHWkQyybfbLIpIvuvevbvRoUMHwzAMo3HjxsZTTz1lGIZhzJ8/37jy6z98+HCjQYMGDq999913jcqVKztsq3LlykZaWpp9Xs2aNY17773X/vzSpUtGqVKljFmzZhmGYRi7d+82AGP06NH2dS5evGhUqlTJGDNmjGEYhjFy5EijVatWDu+9f/9+A7Df4bpZs2bGHXfcccP9DQoKMt544w2HeQ0bNjR69+5tf96gQQNj+PDh191Os2bNjNtvv91IT0+3z3vxxReN22+/3f68cuXKxrvvvmt/Dhjz58932E7p0qWNadOm3bBuEbkxnWERKSLGjBnD9OnT2bp1a463UadOHdzcLv/YCAgIoF69evbn7u7ulCtXjiNHjji8LiIiwv64WLFi3HXXXfY6fv31V5YuXYq3t7d9qlWrFmC2N8kQFhZ23dpOnTrFoUOHuOeeexzm33PPPTna58aNGzs0TI6IiGDHjh2kpaVlexuxsbE888wzREZGMnr0aIf9ERHnKLCIFBFNmzYlKiqKuLi4TMvc3Nwc2mcAXLx4MdN6V1/OsNlsWc5LT0/Pdl1nzpyhXbt2bN682WHasWMHTZs2ta9XqlSpbG/TVYwYMYI//viDtm3bsmTJEmrXrs38+fOtLkukQFJgESlCRo8ezbfffsuqVasc5pcvX57ExESH0JKbY6esXr3a/vjSpUts2LCB22+/HYA777yTP/74g5CQEKpXr+4wORNSfHx8CAoKYsWKFQ7zV6xYQe3atZ2uec2aNZn24bbbbsPd3T3L9YsXL57l2ZcaNWowcOBAfvrpJx566KEsGyWLyI0psIgUIfXq1ePxxx/n/fffd5jfvHlzjh49yltvvcWuXbuYOHEiP/zwQ66978SJE5k/fz7btm2jT58+nDhxgqeeegqAPn368M8///Doo4+ybt06du3axY8//khMTIxTl1/AbNw7ZswY5syZw/bt2xk6dCibN2+mf//+Tte8b98+YmNj2b59O7NmzWLChAnX3U5ISAjx8fEkJiZy4sQJzp07R9++fUlISGDv3r2sWLGCdevW2YOaiDhHgUWkiHnttdcyXbK5/fbb+fDDD5k4cSINGjRg7dq11+1B46zRo0czevRoGjRowPLly/nmm2/w9/cHsJ8VSUtLo1WrVtSrV48BAwbg5+fn0F4mO55//nliY2MZNGgQ9erVY9GiRXzzzTfcdtttTtccHR3NuXPnaNSoEX369KF///4OA8Vdbdy4cSxevJjg4GDuuOMO3N3dOX78ONHR0dSoUYMuXbrQpk0bXn31VadrERGwGVdfuBYRERFxMTrDIiIiIi5PgUVERERcngKLiIiIuDwFFhEREXF5CiwiIiLi8hRYRERExOUpsIiIiIjLU2ARERERl6fAIiIiIi5PgUVERERcngKLiIiIuDwFFhEREXF5/wfP0yIBAydLfQAAAABJRU5ErkJggg==", 98 | "text/plain": [ 99 | "
" 100 | ] 101 | }, 102 | "metadata": {}, 103 | "output_type": "display_data" 104 | } 105 | ], 106 | "source": [ 107 | "p = 0.4\n", 108 | "mm = np.arange(1, 31)\n", 109 | "plt.plot(mm, [probaError(p, m) for m in mm], 'b')\n", 110 | "plt.xlabel(\"Number of bits\")\n", 111 | "plt.title(\"Probability of error, given flip probability=%.2f\" %p)\n", 112 | "plt.show()" 113 | ] 114 | } 115 | ], 116 | "metadata": { 117 | "kernelspec": { 118 | "display_name": "Python 3 (ipykernel)", 119 | "language": "python", 120 | "name": "python3" 121 | }, 122 | "language_info": { 123 | "codemirror_mode": { 124 | "name": "ipython", 125 | "version": 3 126 | }, 127 | "file_extension": ".py", 128 | "mimetype": "text/x-python", 129 | "name": "python", 130 | "nbconvert_exporter": "python", 131 | "pygments_lexer": "ipython3", 132 | "version": "3.10.11" 133 | } 134 | }, 135 | "nbformat": 4, 136 | "nbformat_minor": 5 137 | } 138 | -------------------------------------------------------------------------------- /QuantumClassifier.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "96177192-3534-41a6-887b-694e4d10da95", 6 | "metadata": {}, 7 | "source": [ 8 | "# **Quantum neural network for classification**\n", 9 | "---\n", 10 | "\n", 11 | "



\n", 12 | " \n", 13 | "- Copyright (c) Antoine Jacquier, 2024. All rights reserved\n", 14 | "\n", 15 | "- Author: Jack Jacquier \n", 16 | "\n", 17 | "- Platform: Tested on Windows 10 with Python 3.9" 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "id": "8e54a5f7-b7e5-445c-970e-7e749a91f8ee", 23 | "metadata": {}, 24 | "source": [ 25 | "We work here on a $\\{0,1\\}$ binary classification problem. We therefore only use 1 qubit." 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": null, 31 | "id": "7b030c9f-3de4-45ef-887b-b568f7db71e2", 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister\n", 36 | "from qiskit import *\n", 37 | "from qiskit.quantum_info import state_fidelity\n", 38 | "from sklearn.metrics import log_loss\n", 39 | "import numpy as np\n", 40 | "from sklearn.model_selection import train_test_split\n", 41 | "from sklearn.preprocessing import MinMaxScaler\n", 42 | "from sklearn.datasets import make_moons\n", 43 | "import matplotlib.pylab as plt" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "id": "085740f2-667b-4a28-b482-b31f15180f5e", 49 | "metadata": {}, 50 | "source": [ 51 | "# Generating (noisy) data" 52 | ] 53 | }, 54 | { 55 | "cell_type": "code", 56 | "execution_count": null, 57 | "id": "994a1baf-f75b-4ef1-a65d-18161a87f71a", 58 | "metadata": {}, 59 | "outputs": [], 60 | "source": [ 61 | "def generate_data(n_samples, noise, threshold):\n", 62 | " samplePoints = np.random.rand(n_samples, 2)\n", 63 | " labels = list(map(lambda xx: 1*(xx[0]**2 + xx[1]**3 >= threshold), samplePoints))\n", 64 | " ## {0,1} labels depending on whether a point in samplePoints is below or above the diagonal\n", 65 | " \n", 66 | " ################################################################\n", 67 | " ####### create some noise by swapping some of the labels #######\n", 68 | " ################################################################\n", 69 | " \n", 70 | " if noise[0] == 1: ## Swaps some labels randomly (in proportion \"noise[1]\")\n", 71 | " n = int(np.floor(noise[1]*n_samples))\n", 72 | " noise_sample = np.random.randint(0,n_samples, n)\n", 73 | "\n", 74 | " for i in noise_sample:\n", 75 | " labels[i] = int((1-labels[i])**2)\n", 76 | " \n", 77 | " else: ## Swaps some labels in the corners\n", 78 | " for (i,s) in enumerate(samplePoints):\n", 79 | " if ((s[0] < noise[1]) and (s[1] > 1.- noise[1])):\n", 80 | " labels[i] = 1\n", 81 | " if ((s[0] > 1.-noise[1]) and (s[1] < noise[1])):\n", 82 | " labels[i] = 0\n", 83 | " \n", 84 | " labels = np.reshape(labels, (len(labels), ))\n", 85 | " \n", 86 | " return samplePoints, labels" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "id": "f8e69811-20de-4658-a05c-4bdea074bb85", 93 | "metadata": {}, 94 | "outputs": [], 95 | "source": [ 96 | "def createData_test_train(generated_data, labels):\n", 97 | " \"\"\"\n", 98 | " Creates test and training data sets with their labels\n", 99 | " \"\"\"\n", 100 | " \n", 101 | " x_train, x_test, y_train, y_test = train_test_split(generated_data, labels, stratify=labels, test_size=None, random_state=None)\n", 102 | " \n", 103 | " scale = MinMaxScaler(feature_range=(-1,1)).fit(x_train)\n", 104 | " x_train = scale.transform(x_train)\n", 105 | " x_test = scale.transform(x_test)\n", 106 | " \n", 107 | " return x_train, y_train, x_test, y_test" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "id": "919d2908-fe20-47c5-94c6-0b0b9ba87af3", 113 | "metadata": {}, 114 | "source": [ 115 | "## Examples\n", 116 | "\n", 117 | "Run only one of the examples below" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "id": "bf09959a-644e-4a31-bdbf-378c06ac38c2", 124 | "metadata": {}, 125 | "outputs": [], 126 | "source": [ 127 | "n_samples = 200" 128 | ] 129 | }, 130 | { 131 | "cell_type": "markdown", 132 | "id": "bed8167d-f212-43a1-a818-87ebbf3eef53", 133 | "metadata": {}, 134 | "source": [ 135 | "#### Example 1\n", 136 | "\n", 137 | "Generate random numbers in the unit square and assign them {0,1} labels if they are above or below the diagonal.\n", 138 | "The noise swaps some labels randomly." 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": null, 144 | "id": "d3043978-eeed-4dfb-976a-3e7d3c065741", 145 | "metadata": {}, 146 | "outputs": [], 147 | "source": [ 148 | "threshold = 0.7\n", 149 | "noise = [1, 0.0] \n", 150 | "\n", 151 | "generated_data, labels = generate_data(n_samples, noise, threshold)" 152 | ] 153 | }, 154 | { 155 | "cell_type": "markdown", 156 | "id": "a0a94f81-d52e-4c26-9350-f9fa4f81ce7f", 157 | "metadata": {}, 158 | "source": [ 159 | "#### Example 2\n", 160 | "\n", 161 | "Generate random numbers in the unit square and assign them {0,1} labels if they are above or below the diagonal.\n", 162 | "The noise swaps labels in the corners." 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "id": "7187d669-b63f-4393-957c-a3506cf088de", 169 | "metadata": {}, 170 | "outputs": [], 171 | "source": [ 172 | "threshold = 0.7\n", 173 | "noise = [0, 0.2] ## Noise to swap some label in the corners\n", 174 | "generated_data, labels = generate_data(n_samples, noise, threshold)" 175 | ] 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "id": "8615a0e9-e6b5-4af1-a2de-32f459885aef", 180 | "metadata": {}, 181 | "source": [ 182 | "## Visualise data\n", 183 | "\n", 184 | "Create the training and test sets and plot the train set" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": null, 190 | "id": "aac52b04-1086-40aa-88ef-c35a2181ce65", 191 | "metadata": {}, 192 | "outputs": [], 193 | "source": [ 194 | "### Split training and test sets\n", 195 | "x_train, y_train, x_test, y_test = createData_test_train(generated_data, labels)" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "id": "b070cbbb-199a-4902-86c1-2e019dd1ee1a", 202 | "metadata": {}, 203 | "outputs": [], 204 | "source": [ 205 | "plt.scatter(x_train[:,0][y_train==0], x_train[:,1][y_train==0], s=20, facecolors='none', edgecolors='r')\n", 206 | "plt.scatter(x_train[:,0][y_train==1], x_train[:,1][y_train==1], marker='+', color='blue')\n", 207 | "plt.title(\"Original labelled data (with some noise)\")\n", 208 | "plt.show()" 209 | ] 210 | }, 211 | { 212 | "cell_type": "markdown", 213 | "id": "b85f0b53-9c35-4b8d-8799-0e03fc25f38c", 214 | "metadata": {}, 215 | "source": [ 216 | "# Quantum circuit for classification" 217 | ] 218 | }, 219 | { 220 | "cell_type": "markdown", 221 | "id": "fd3cb8a6-8c00-4b20-9c7b-32aaab4fc230", 222 | "metadata": {}, 223 | "source": [ 224 | "We construct a simple one-qubit classifier with the generic U3 quantum gate, detailed at https://qiskit.org/documentation/stubs/qiskit.circuit.library.U3Gate.html\n", 225 | "Note that it is now called `circuit.u`" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": null, 231 | "id": "14f44fb7-63e1-4d5e-a7d9-ad8ce40382c7", 232 | "metadata": {}, 233 | "outputs": [], 234 | "source": [ 235 | "class QNN():\n", 236 | " def __init__(self, n_layers, x_train, y_train, x_test, y_test, learning_rate):\n", 237 | " self.n_layers = n_layers\n", 238 | " self.x_train = x_train\n", 239 | " self.y_train = y_train\n", 240 | " self.x_test = x_test\n", 241 | " self.y_test = y_test\n", 242 | " self.state_labels = np.zeros((2,2),dtype=np.complex128)\n", 243 | " self.state_labels[0,0] = 1.\n", 244 | " self.state_labels[-1,-1] = 1.\n", 245 | " self.gradient_shift = .5*np.pi\n", 246 | " self.learning_rate = learning_rate\n", 247 | " self.backend_sim = Aer.get_backend('statevector_simulator')\n", 248 | " \n", 249 | " self.weights = 2.*np.pi*np.random.rand(self.n_layers, 3) ## random initialisation of the weights\n", 250 | " \n", 251 | " \n", 252 | " def circuit_for_plotting(self, x):\n", 253 | " \"\"\"\n", 254 | " Builds the circuit -- simply for plotting purposes\n", 255 | " x: sample\n", 256 | " \"\"\"\n", 257 | "\n", 258 | " self.qc = QuantumCircuit(1)\n", 259 | " self.qc.u(x[0], x[1], 0.,0)\n", 260 | "\n", 261 | " ### Details of the U gate available here:\n", 262 | " ### https://docs.quantum.ibm.com/api/qiskit/0.24/qiskit.circuit.library.UGate\n", 263 | "\n", 264 | " for l in range(self.n_layers):\n", 265 | " self.qc.u(self.weights[l][0], self.weights[l][1], self.weights[l][2],0)\n", 266 | " \n", 267 | " def circuit(self, x):\n", 268 | "\n", 269 | " self.qc = QuantumCircuit(1)\n", 270 | " \n", 271 | " self.qc.u(x[0], x[1], 0., 0) ## Encoding the data\n", 272 | " \n", 273 | " for l in range(self.n_layers):\n", 274 | " self.qc.u(self.weights[l][0], self.weights[l][1], self.weights[l][2],0)\n", 275 | "\n", 276 | "\n", 277 | " job_sim = execute(self.qc, self.backend_sim)\n", 278 | "\n", 279 | " result_sim = job_sim.result()\n", 280 | "\n", 281 | " state_vector = result_sim.get_statevector(self.qc)\n", 282 | "\n", 283 | " self.fidelity_1 = state_fidelity(state_vector,self.state_labels[0])\n", 284 | " self.fidelity_2 = state_fidelity(state_vector,self.state_labels[1])\n", 285 | " \n", 286 | "\n", 287 | " def cost(self, x, y):\n", 288 | " \"\"\"\n", 289 | " Cross entropy cost from the computed fidelities and the corresponding labels\n", 290 | " \"\"\"\n", 291 | " \n", 292 | " value = []\n", 293 | " for xTemp in x:\n", 294 | " self.circuit(xTemp)\n", 295 | " value.append([self.fidelity_1, self.fidelity_2])\n", 296 | "\n", 297 | " return log_loss(y, value)\n", 298 | " \n", 299 | "\n", 300 | " def gradient(self, x, y):\n", 301 | " \"\"\"\n", 302 | " Computes the gradients\n", 303 | " x: sample\n", 304 | " y: corresponding label\n", 305 | " \"\"\"\n", 306 | "\n", 307 | " ##### We follow https://arxiv.org/pdf/1811.11184.pdf for the computation of the gradient ##### \n", 308 | "\n", 309 | " g = np.zeros(self.weights.shape)\n", 310 | "\n", 311 | " for l in range(self.n_layers):\n", 312 | " for i in range(len(self.weights[l])):\n", 313 | "\n", 314 | " original_value = self.weights[l][i]\n", 315 | "\n", 316 | " self.weights[l][i] = original_value + self.gradient_shift\n", 317 | " F_plus = self.cost(x, y)\n", 318 | "\n", 319 | " self.weights[l][i] = original_value - self.gradient_shift\n", 320 | " F_minus = self.cost(x, y)\n", 321 | "\n", 322 | " self.weights[l][i] = original_value\n", 323 | "\n", 324 | " g[l][i] = .5 * (F_plus - F_minus)\n", 325 | " return g\n", 326 | " \n", 327 | " \n", 328 | " def optimize(self, x, y):\n", 329 | " \"\"\"\n", 330 | " Stochastic gradient algorithm\n", 331 | " \"\"\"\n", 332 | " self.weights = self.weights - self.learning_rate * self.gradient(x, y)\n", 333 | " \n", 334 | " \n", 335 | " def predict(self, x):\n", 336 | " \"\"\"\n", 337 | " Prediction function, returns in [0,1]\n", 338 | " \"\"\"\n", 339 | "\n", 340 | " self.circuit(x)\n", 341 | "\n", 342 | " if self.fidelity_1 > self.fidelity_2:\n", 343 | " return abs(1.-self.fidelity_1)\n", 344 | " else:\n", 345 | " return self.fidelity_2" 346 | ] 347 | }, 348 | { 349 | "cell_type": "markdown", 350 | "id": "3b574102-54a4-4ac3-a239-599398fe97de", 351 | "metadata": {}, 352 | "source": [ 353 | "## Creating and viewing the circuits" 354 | ] 355 | }, 356 | { 357 | "cell_type": "markdown", 358 | "id": "b002da21-2ada-46a5-84bf-5bb5189139ef", 359 | "metadata": {}, 360 | "source": [ 361 | "`n_layers` is the number of unitary gates, representing the complexity of the quantum neural network. \n", 362 | "\n", 363 | "There are three parameters (to optimise) per gate, so the larger the number of layers, the harder it is to train.\n", 364 | "\n", 365 | "The parameter `learning_rate` is needed for the stochastic gradient algorithm." 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": null, 371 | "id": "cd0b16ce-e2eb-4534-bb36-60b1113deba0", 372 | "metadata": {}, 373 | "outputs": [], 374 | "source": [ 375 | "n_layers = 5\n", 376 | "learning_rate = 0.01" 377 | ] 378 | }, 379 | { 380 | "cell_type": "markdown", 381 | "id": "422b07e2-9aed-415c-89a8-9cf1091a769f", 382 | "metadata": {}, 383 | "source": [ 384 | "#### Creates an instance of the circuit" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": null, 390 | "id": "b9058440-3f3e-4129-b406-2e546ed73837", 391 | "metadata": {}, 392 | "outputs": [], 393 | "source": [ 394 | "qnn = QNN(n_layers, x_train, y_train, x_test, y_test, learning_rate)" 395 | ] 396 | }, 397 | { 398 | "cell_type": "markdown", 399 | "id": "a4c8488e-9e73-4c6c-8535-2ea9e8054083", 400 | "metadata": {}, 401 | "source": [ 402 | "Visualisation of the quantum circuit" 403 | ] 404 | }, 405 | { 406 | "cell_type": "code", 407 | "execution_count": null, 408 | "id": "f8589528-d33b-492d-bf73-bb077afd6eaf", 409 | "metadata": {}, 410 | "outputs": [], 411 | "source": [ 412 | "qnn.circuit_for_plotting(x_test[0])\n", 413 | "print(x_test[0])\n", 414 | "qnn.qc.draw(output='mpl')" 415 | ] 416 | }, 417 | { 418 | "cell_type": "markdown", 419 | "id": "7d4b57b2-93c3-4dfc-bfdd-0a77eaa1c951", 420 | "metadata": {}, 421 | "source": [ 422 | "Note: the first gate encodes the data (x[0],x[1]]), for each point x in the data set (recall that x represents the coordinates) in a quantum unitary gate.\n", 423 | "\n", 424 | "We could alternatively encode the two-dimensional vector x in a one-qubit quantum state after normalisation (probabilities summing up to one)." 425 | ] 426 | }, 427 | { 428 | "cell_type": "markdown", 429 | "id": "cd81ce97-70dc-48b0-8489-59ec986e13cf", 430 | "metadata": {}, 431 | "source": [ 432 | "## Running the learning algorithm\n", 433 | "\n", 434 | "We optimise the system using classical stochastic gradient algorithm with mini-batches" 435 | ] 436 | }, 437 | { 438 | "cell_type": "code", 439 | "execution_count": null, 440 | "id": "b2ff7f5a-1a1e-4287-a855-ef68ffb393bd", 441 | "metadata": {}, 442 | "outputs": [], 443 | "source": [ 444 | "nb_epochs = 500\n", 445 | "batch_size = 50" 446 | ] 447 | }, 448 | { 449 | "cell_type": "code", 450 | "execution_count": null, 451 | "id": "792eccab-a5f0-493e-a2e6-3adbb50cafa1", 452 | "metadata": {}, 453 | "outputs": [], 454 | "source": [ 455 | "current_loss = np.inf\n", 456 | "total_losses = []\n", 457 | "for epoch in range(nb_epochs):\n", 458 | " \n", 459 | " # mini-batches\n", 460 | " batch_indices = np.random.randint(0,len(x_train), batch_size)\n", 461 | " x_batch, y_batch = x_train[batch_indices], y_train[batch_indices]\n", 462 | " \n", 463 | " qnn.optimize(x_batch, y_batch)\n", 464 | " \n", 465 | " res = qnn.cost(x_test, y_test)\n", 466 | " \n", 467 | " total_losses.append(res)\n", 468 | "\n", 469 | " if res < current_loss:\n", 470 | " current_loss = res\n", 471 | " var = qnn.weights\n", 472 | " \n", 473 | " print(\"Epoch: {:2d} | Testing loss: {:4f}\".format(epoch+1, res))" 474 | ] 475 | }, 476 | { 477 | "cell_type": "markdown", 478 | "id": "d53379c2-4d3b-4e9f-bdf6-45d82877d869", 479 | "metadata": {}, 480 | "source": [ 481 | "### Plot the evolution of the loss function" 482 | ] 483 | }, 484 | { 485 | "cell_type": "code", 486 | "execution_count": null, 487 | "id": "292ca694-ad5f-440b-88cb-8f7b21ad2a07", 488 | "metadata": {}, 489 | "outputs": [], 490 | "source": [ 491 | "plt.xlabel('Number of epochs')\n", 492 | "plt.ylabel('Loss')\n", 493 | "plt.plot(range(len(total_losses)),total_losses)\n", 494 | "plt.title(\"Loss function\")\n", 495 | "plt.show()" 496 | ] 497 | }, 498 | { 499 | "cell_type": "markdown", 500 | "id": "7a23e119-11e8-4ce6-9730-ae47ce34b6f4", 501 | "metadata": {}, 502 | "source": [ 503 | "## Visualising the power of the quantum classifier\n", 504 | "\n", 505 | "We generate many points $n_{points}^2$ on the square and colour-highlight their predicted labels given the optimised quantum cicuit" 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "execution_count": null, 511 | "id": "988d31d1-986e-491d-a311-39542f846cf2", 512 | "metadata": {}, 513 | "outputs": [], 514 | "source": [ 515 | "axMin, axMax = -1.1, 1.1\n", 516 | "n_points = 20\n", 517 | "xx, yy = np.meshgrid(np.linspace(axMin, axMax, n_points), np.linspace(axMin, axMax, n_points))\n", 518 | "\n", 519 | "xx_grid = [np.array([x, y]) for x, y in zip(xx.flatten(), yy.flatten())]\n", 520 | "\n", 521 | "predictions_grid = [qnn.predict(x) for x in xx_grid]" 522 | ] 523 | }, 524 | { 525 | "cell_type": "code", 526 | "execution_count": null, 527 | "id": "37748700-2475-4352-8b15-e1b21ac45c2e", 528 | "metadata": {}, 529 | "outputs": [], 530 | "source": [ 531 | "Z = np.reshape(np.array(predictions_grid).round(), xx.shape)\n", 532 | "\n", 533 | "cm = plt.cm.RdBu\n", 534 | "cnt = plt.contourf(xx, yy, Z, levels=np.arange(0., 1.1, 0.1), cmap=cm, alpha=.2)\n", 535 | "\n", 536 | "plt.scatter(x_train[:, 0][y_train==0], x_train[:, 1][y_train==0], c='r', marker='+')\n", 537 | "plt.scatter(x_train[:, 0][y_train==1], x_train[:, 1][y_train==1], c='b', marker='+')\n", 538 | "\n", 539 | "plt.scatter(np.array(x_test[:, 0][y_test==0]), np.array(x_test[:, 1][y_test==0]), s=20, facecolors='none', edgecolors='r')\n", 540 | "plt.scatter(x_test[:, 0][y_test==1], x_test[:, 1][y_test==1], s=80, facecolors='none', edgecolors='b')\n", 541 | "\n", 542 | "plt.show()" 543 | ] 544 | }, 545 | { 546 | "cell_type": "markdown", 547 | "id": "56f6686f-1a17-45e7-be8c-d3260b72e0aa", 548 | "metadata": {}, 549 | "source": [ 550 | "The crosses correspond to the training set (over which the quantum network is optimised), while the circles correspond to the test set. \n", 551 | "\n", 552 | "The shaded regions are the predicted labels for a large number of points in the square." 553 | ] 554 | }, 555 | { 556 | "cell_type": "code", 557 | "execution_count": null, 558 | "id": "fd8f68c5-dd95-4360-8e34-1fd86a9839d5", 559 | "metadata": {}, 560 | "outputs": [], 561 | "source": [] 562 | } 563 | ], 564 | "metadata": { 565 | "kernelspec": { 566 | "display_name": "Python 3 (ipykernel)", 567 | "language": "python", 568 | "name": "python3" 569 | }, 570 | "language_info": { 571 | "codemirror_mode": { 572 | "name": "ipython", 573 | "version": 3 574 | }, 575 | "file_extension": ".py", 576 | "mimetype": "text/x-python", 577 | "name": "python", 578 | "nbconvert_exporter": "python", 579 | "pygments_lexer": "ipython3", 580 | "version": "3.10.11" 581 | } 582 | }, 583 | "nbformat": 4, 584 | "nbformat_minor": 5 585 | } 586 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Quantum Computing for Finance 2 | -------------------------------------------------------------------------------- /VQE.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "8c6e87b1-3c68-4b23-863e-1fb0f8582e50", 6 | "metadata": {}, 7 | "source": [ 8 | "# **Variational Quantum Eigensolver**\n", 9 | "---\n", 10 | "\n", 11 | "



\n", 12 | " \n", 13 | "- Copyright (c) Antoine Jacquier, 2024. All rights reserved\n", 14 | "\n", 15 | "- Author: Jack Jacquier \n", 16 | "\n", 17 | "- Platform: Tested on Windows 10 with Python 3.9" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 1, 23 | "id": "371f7343-ce21-4fe9-96de-13bc1224ee2e", 24 | "metadata": {}, 25 | "outputs": [], 26 | "source": [ 27 | "import numpy as np\n", 28 | "from random import random\n", 29 | "from scipy.optimize import minimize\n", 30 | "\n", 31 | "from qiskit import *\n", 32 | "from numpy import linalg as LA" 33 | ] 34 | }, 35 | { 36 | "cell_type": "markdown", 37 | "id": "c1303bb5-53d5-4592-b40b-70b184109b81", 38 | "metadata": {}, 39 | "source": [ 40 | "## Generating a Hamiltonian from Pauli operators" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "id": "48b1ba90-9eb6-4f1e-9f22-6b7222fde34f", 47 | "metadata": {}, 48 | "outputs": [], 49 | "source": [ 50 | "def matprint(mat, fmt=\"g\"):\n", 51 | " ## Just to print a matrix nicely\n", 52 | " col_maxes = [max([len((\"{:\"+fmt+\"}\").format(x)) for x in col]) for col in mat.T]\n", 53 | " for x in mat:\n", 54 | " for i, y in enumerate(x):\n", 55 | " print((\"{:\"+str(col_maxes[i])+fmt+\"}\").format(y), end=\" \")\n", 56 | " print(\"\")" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 3, 62 | "id": "5ace30ef-09d9-45d7-a9c0-a6107b757b44", 63 | "metadata": {}, 64 | "outputs": [], 65 | "source": [ 66 | "GATE_NAMES = [\"I\", \"Z\", \"X\", \"Y\"]" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 4, 72 | "id": "fec1b2b2-0734-4985-8aa2-66081b62c696", 73 | "metadata": {}, 74 | "outputs": [], 75 | "source": [ 76 | "coefficients = 3.*np.random.rand(len(GATE_NAMES))" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 5, 82 | "id": "6eef7f17-f559-4c2b-8e87-6ca8c0ebd574", 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "hamiltonian = {}\n", 87 | "for (i,g) in enumerate(GATE_NAMES):\n", 88 | " hamiltonian[g] = coefficients[i]" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 6, 94 | "id": "d9354186-6227-40fe-b86b-783fb18912ba", 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "Pauli decomposition of the matrix: \n", 102 | "I : 1.3721317026796056\n", 103 | "Z : 0.45387378089030195\n", 104 | "X : 1.8607947059115135\n", 105 | "Y : 2.9925492675576097\n" 106 | ] 107 | } 108 | ], 109 | "source": [ 110 | "print(\"Pauli decomposition of the matrix: \")\n", 111 | "for gate_name in hamiltonian:\n", 112 | " print(gate_name, \": \", hamiltonian[gate_name])" 113 | ] 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "id": "2dd930b2-5043-44a6-a16d-7581c9fe19b0", 118 | "metadata": {}, 119 | "source": [ 120 | "### Matrix representation" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 6, 126 | "id": "874e63f5-842d-4092-a9e0-52b89ac076df", 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "name": "stdout", 131 | "output_type": "stream", 132 | "text": [ 133 | "The 2*2 matrix representation of the Hamiltonian is\n", 134 | " 0.409031+0j 0.351169-2.41308j \n", 135 | "0.351169+2.41308j 0.356355+0j \n" 136 | ] 137 | } 138 | ], 139 | "source": [ 140 | "pauli_matrices = {\"I\": np.array([[1., 0.],[0., 1.]]),\n", 141 | " \"Z\": np.array([[1., 0.],[0., -1.]]),\n", 142 | " \"X\": np.array([[0., 1.],[1., 0.]]),\n", 143 | " \"Y\": np.array([[0., -1j],[1j, 0.]])\n", 144 | " }\n", 145 | "\n", 146 | "H_matrix = np.zeros((2,2))\n", 147 | "\n", 148 | "for g in GATE_NAMES:\n", 149 | " H_matrix = H_matrix + hamiltonian[g]*pauli_matrices[g]\n", 150 | "\n", 151 | "print(\"The 2*2 matrix representation of the Hamiltonian is\")\n", 152 | "matprint(H_matrix)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 7, 158 | "id": "3be7f253-481c-4f2b-bcb3-bd6a08b1856b", 159 | "metadata": {}, 160 | "outputs": [ 161 | { 162 | "name": "stdout", 163 | "output_type": "stream", 164 | "text": [ 165 | "Eigenpair: (2.8213-0j) [ 0.7109+0.j -0.1013+0.6959j]\n", 166 | "Eigenpair: (-2.0559+0j) [0.1013+0.6959j 0.7109+0.j ]\n" 167 | ] 168 | } 169 | ], 170 | "source": [ 171 | "eigenpairs = LA.eig(H_matrix)\n", 172 | "for i in range(len(eigenpairs)):\n", 173 | " print(\"Eigenpair: \", np.round(eigenpairs[0][i], 4), np.round(eigenpairs[1][i], 4))" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 8, 179 | "id": "65fe5316-c38a-4af1-8460-f6ef56d91d9c", 180 | "metadata": {}, 181 | "outputs": [ 182 | { 183 | "name": "stdout", 184 | "output_type": "stream", 185 | "text": [ 186 | "Minimum eigenvalue: -2.0559436749490736\n" 187 | ] 188 | } 189 | ], 190 | "source": [ 191 | "classical_min_eigenvalue = np.min(eigenpairs[0].real)\n", 192 | "print(\"Minimum eigenvalue: \", classical_min_eigenvalue)" 193 | ] 194 | }, 195 | { 196 | "cell_type": "markdown", 197 | "id": "3ae2a7b9-36c1-4deb-8f29-f71cef41e19d", 198 | "metadata": {}, 199 | "source": [ 200 | "# TEST VQE" 201 | ] 202 | }, 203 | { 204 | "cell_type": "markdown", 205 | "id": "587ff3c3-6108-4b67-9ef0-522976054467", 206 | "metadata": {}, 207 | "source": [ 208 | "Recall that any vector in $\\mathbb{C}^2$, viewed as a one-qubit quantum state, can be written as\n", 209 | "$$\n", 210 | "|\\psi\\rangle = \\begin{pmatrix}\n", 211 | "\\cos\\left(\\frac{\\theta}{2}\\right)\\\\\n", 212 | "\\mathrm{e}^{\\mathrm{i}\\varphi}\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 213 | "\\end{pmatrix},\n", 214 | "$$\n", 215 | "for some $\\varphi, \\theta \\in \\mathbb{R}$.\n", 216 | "Now, with the rotation matrices\n", 217 | "$$\n", 218 | "R_{X}(\\theta) := \n", 219 | "\\begin{pmatrix}\n", 220 | "\\cos\\left(\\frac{\\theta}{2}\\right) & -\\mathrm{i}\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 221 | "-\\mathrm{i}\\sin\\left(\\frac{\\theta}{2}\\right) & \\cos\\left(\\frac{\\theta}{2}\\right)\n", 222 | "\\end{pmatrix}\n", 223 | "\\qquad\\text{and}\\qquad\n", 224 | "R_{Y}(\\theta) := \n", 225 | "\\begin{pmatrix}\n", 226 | "\\cos\\left(\\frac{\\theta}{2}\\right) & -\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 227 | "\\sin\\left(\\frac{\\theta}{2}\\right) & \\cos\\left(\\frac{\\theta}{2}\\right)\n", 228 | "\\end{pmatrix},\n", 229 | "$$\n", 230 | "we know that we can find $\\theta_0, \\theta_1$ such that\n", 231 | "$$\n", 232 | "|\\psi\\rangle = R_{Y}(\\theta_1)R_{X}(\\theta_0)|0\\rangle.\n", 233 | "$$" 234 | ] 235 | }, 236 | { 237 | "cell_type": "markdown", 238 | "id": "d9e65707-6d6d-413a-b50a-2e8525fd895d", 239 | "metadata": {}, 240 | "source": [ 241 | "Note that the general `qiskit` U gate is defined as\n", 242 | "$$\n", 243 | "U(\\theta, \\phi, \\lambda) := \n", 244 | "\\begin{pmatrix}\n", 245 | "\\cos\\left(\\frac{\\theta}{2}\\right) & -\\mathrm{e}^{\\mathrm{i}\\lambda}\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 246 | "\\mathrm{e}^{\\mathrm{i}\\phi}\\sin\\left(\\frac{\\theta}{2}\\right) & \\mathrm{e}^{\\mathrm{i}(\\phi+\\lambda)}\\cos\\left(\\frac{\\theta}{2}\\right)\n", 247 | "\\end{pmatrix}.\n", 248 | "$$\n", 249 | "In particular, \n", 250 | "$$\n", 251 | "U\\left(\\frac{\\pi}{2}, 0, \\pi\\right) = \\mathrm{H} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}1&1\\\\1&-1\\end{pmatrix}\n", 252 | "\\qquad\\text{and}\\qquad\n", 253 | "U\\left(\\frac{\\pi}{2}, 0, \\frac{\\pi}{2}\\right) = \\mathrm{G} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}1&-\\mathrm{i}\\\\1&\\mathrm{i}\\end{pmatrix}.\n", 254 | "$$" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": 9, 260 | "id": "316e21db-bc26-4b8f-9966-bea9a6335455", 261 | "metadata": {}, 262 | "outputs": [], 263 | "source": [ 264 | "def param_qc(thetas, gate_name):\n", 265 | " \"\"\"\n", 266 | " Ansatz circuit for the optimization\n", 267 | " :params: parameters for the rotation gates\n", 268 | " :measure: Pauli measurement reference\n", 269 | " :returns a quantum circuit.\n", 270 | " \"\"\"\n", 271 | "\n", 272 | " qc = QuantumCircuit(1)\n", 273 | "\n", 274 | " ## create a general one-qubit quantum state (using the two rotations matrices above)\n", 275 | " qc.rx(thetas[0], 0)\n", 276 | " qc.ry(thetas[1], 0)\n", 277 | "\n", 278 | " ## Add an extra gate\n", 279 | " if gate_name == 'X':\n", 280 | " qc.h(0)\n", 281 | " \n", 282 | " elif gate_name == 'Y':\n", 283 | " qc.u(.5*np.pi, 0, .5*np.pi, 0) ## Corresponds to the G gate\n", 284 | "\n", 285 | " qc.measure_all()\n", 286 | " return qc" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": 10, 292 | "id": "8d75e093-58d2-4cb6-85ff-6e656fd1ce8d", 293 | "metadata": {}, 294 | "outputs": [], 295 | "source": [ 296 | "def quantum_expectation(thetas, gate_name, nbShots):\n", 297 | " # measure\n", 298 | " if gate_name == 'I':\n", 299 | " return 1\n", 300 | " else:\n", 301 | " qc = param_qc(thetas, gate_name)\n", 302 | " \n", 303 | " shots = nbShots\n", 304 | " backend = BasicAer.get_backend('qasm_simulator')\n", 305 | " job = execute(qc, backend, shots=shots)\n", 306 | " result = job.result()\n", 307 | " counts = result.get_counts()\n", 308 | " \n", 309 | " expectation = 0\n", 310 | " for c in counts:\n", 311 | " sign = +1\n", 312 | " \n", 313 | " if c == '1':\n", 314 | " sign = -1\n", 315 | " expectation += sign * counts[c] / shots\n", 316 | " \n", 317 | " return expectation" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": 11, 323 | "id": "a2480213-1b00-4303-8136-fe3b67f122f8", 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [ 327 | "def vqe(thetas, args):\n", 328 | " args = hamiltonian, GATE_NAMES, nbShots\n", 329 | " total_expectation = 0.\n", 330 | " \n", 331 | " for gatename in GATE_NAMES:\n", 332 | " weight_gate = 0.\n", 333 | " for k in hamiltonian.keys():\n", 334 | " if k == gatename:\n", 335 | " weight_gate = hamiltonian[k]\n", 336 | " total_expectation += weight_gate * quantum_expectation(thetas, gatename, nbShots)\n", 337 | "\n", 338 | " return total_expectation" 339 | ] 340 | }, 341 | { 342 | "cell_type": "code", 343 | "execution_count": 12, 344 | "id": "ba6cb532-2136-4bcf-84d8-9ee0d39a8c28", 345 | "metadata": {}, 346 | "outputs": [ 347 | { 348 | "name": "stdout", 349 | "output_type": "stream", 350 | "text": [ 351 | "Starting parameter points: [0.76188199 0.78851335]\n" 352 | ] 353 | } 354 | ], 355 | "source": [ 356 | "### Define a starting point for the vector of parameters [theta[0], theta[1]]\n", 357 | "thetas = np.random.rand(2)*np.pi\n", 358 | "##np.array([.3*np.pi, .3*np.pi])\n", 359 | "print(\"Starting parameter points: \", thetas)\n", 360 | "nbShots = 5000\n", 361 | "\n", 362 | "vqe_result = minimize(vqe, thetas, args=[hamiltonian, GATE_NAMES, nbShots], method=\"Nelder-Mead\", tol=1e-20)" 363 | ] 364 | }, 365 | { 366 | "cell_type": "code", 367 | "execution_count": 13, 368 | "id": "65468217-a55a-49d3-9be9-f81b17a0ce46", 369 | "metadata": {}, 370 | "outputs": [ 371 | { 372 | "name": "stdout", 373 | "output_type": "stream", 374 | "text": [ 375 | "Optimal parameters theta: [ 1.55646105 -0.19239484]\n", 376 | "VQE ground state energy -2.0428\n", 377 | "Classical ground state energy -2.0559\n" 378 | ] 379 | } 380 | ], 381 | "source": [ 382 | "print('Optimal parameters theta:', vqe_result.x)\n", 383 | "print('VQE ground state energy %.4f' %vqe_result.fun)\n", 384 | "print('Classical ground state energy %.4f' %classical_min_eigenvalue)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 16, 390 | "id": "726365db-3b7c-47de-8aef-5c28381ae4fe", 391 | "metadata": {}, 392 | "outputs": [ 393 | { 394 | "data": { 395 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAHMCAYAAADoEsNFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACtEElEQVR4nOzdd3hc5Zn4/e+ZqpmRNOq9S5bkblwwNmAMdkyAdYDQnLAbBxICAZKwZMnC7gbYH6ElvE52A2tIhRBICIQS07GDAcfG2HIvsnrvbUaaXs77x9iDZdlGLtKo3J/r0gVz5pT7nBnP3POc57kfRVVVFSGEEEKICNBEOgAhhBBCTF6SiAghhBAiYiQREUIIIUTESCIihBBCiIiRREQIIYQQESOJiBBCCCEiRhIRIYQQQkSMJCJCCCGEiBhJRIQQQggRMZKICCGEECJiJBERQgghRMRIIiLOmmeffRZFUairqzvpskjHJMYOeX1ObNu2bSxevBiLxYKiKOzatSvSIQ0xXl6/U72Wfr+fhx9+mPz8fMxmMxdddBEVFRWjE+wkJInIOHTkH//27duP+/zSpUuZMWPGKEc1fJs3b+bBBx+kr68v0qGIL3A2Xit5vU+dz+fjuuuuo6enh5///Oc8//zz5ObmRiye8fwanuq1DAQCfPWrX+XnP/853/72t3n44Yc5cOAAK1euxO/3j2Lkk4gqxp3f//73KqBu27btuM9fdNFF6vTp00c5KlX1+/2qy+VSg8FgeNmRWGtra8PLfvaznw1ZNpoxieE7G6/VyfYhr8/xHTx4UAXUX//615EORVXVE7+G4+H1O9Vr+dhjj6lms1ndt29feNkLL7ygAuoHH3wwUmFOatIiIs4arVZLVFQUiqJEOpSwsRiT+Jy8PsfX0dEBQFxcXGQD+QLj4fU7lWtps9l45JFHuOuuu5g+fXp4+eLFiwHYvXv3iMQ46UU6ExKn7lRbROrq6tTvfve7anFxsRoVFaUmJCSo11577ZBfNw888IAKqIcOHVJvvPFGNTY2Vk1KSlL/67/+Sw0Gg2pDQ4P6la98RY2JiVFTU1PVJ5544rhxHb3fY5cdOcaxf0ee37Fjh/rlL39ZjYmJUS0Wi3rJJZeoW7ZsOW6clZWV6urVq1Wr1arGxsaq3/zmN1WHw3HSmIZ7LU71OMfT1NSk3nTTTWpKSopqMBjUadOmqb/97W8HreN0OtWSkhK1pKREdTqd4eXd3d1qWlqaumjRItXv9w+K5+DBg+p1112nxsTEqAkJCer3v/991eVynfKxj6x38803q+np6arBYFDz8vLU2267TfV4PF/4Wg3nWn7RPo73njnb74HjGe77wG63qz/4wQ/U3Nxc1WAwqMnJyery5cvVsrKys7L/41m9evWQ63XRRReFn8vNzR2yzZHrcezj4V6f030fHO/1U9XReQ2Hc5yTXcvjeeqpp1RFUdS6uroh1wdQH3jggWHFJU6NboTyGzEKbDYbXV1dQ5b7fL5Bj7dt28bmzZtZtWoVWVlZ1NXVsXbtWpYuXcqBAwcwm82D1r/hhhuYOnUqjz32GG+99RY/+clPSEhI4JlnnuGSSy7h8ccf54UXXuDf/u3fWLBgAUuWLBl2zF/96lepqKjgT3/6Ez//+c9JSkoCIDk5mf3793PhhRcSGxvLj370I/R6Pc888wxLly7lo48+YuHChYP2df3115Ofn8+jjz7Kjh07+M1vfkNKSgqPP/74CY9/qtfidI/T3t7Oeeedh6Io3HnnnSQnJ/POO+/wrW99C7vdzl133QWAyWTiueee4/zzz+c///M/WbNmDQB33HEHNpuNZ599Fq1WOySevLw8Hn30UT799FP+93//l97eXv7whz+c0rFbWlo499xz6evr4zvf+Q6lpaU0Nzfzyiuv4HQ6T/paDfdaftE+jjUa74Hhxg5w22238corr3DnnXcybdo0uru72bRpEwcPHmTu3LlnvP/jufXWW8nMzOSRRx7h+9//PgsWLCA1NfWk53Miw7k+Z/o+ONZovYbDOc6pXstXX32VadOmYbFYBn22NjY2AmCxWE5+wcXpiXQmJE7dkV8hJ/s7ukXk6F/aR2zZskUF1D/84Q/hZUd+oXznO98JL/P7/WpWVpaqKIr62GOPhZf39vaqJpNJXb169ZC4TtYioqonvt981VVXqQaDQa2urg4va2lpUWNiYtQlS5YMifPmm28etP3VV1+tJiYmHvdaHTnWcK/FqR7nWN/61rfU9PR0taura9DyVatWqVardUgc9913n6rRaNSPP/5Yffnll1VA/cUvfnHceL7yla8MWn777bergLp79+5TOvY3vvENVaPRHLdl7cg9/5P17xjutTzZPo59fUbiPXA8w43darWqd9xxxxfu73T3fyIffvihCqgvv/zyoOWn2iIynOtzJu+D4/37Hq3XcLjHOdG1PJbf71ctFstJP1e/aB/i9EgfkXHsqaee4oMPPhjyN2vWrEHrmUym8P/7fD66u7spKioiLi6OHTt2DNnvt7/97fD/a7Va5s+fj6qqfOtb3wovj4uLo6SkhJqamrNyLoFAgPfff5+rrrqKgoKC8PL09HS+/vWvs2nTJux2+6BtbrvttkGPL7zwQrq7u4esd7RTvRancxxVVfnrX//KypUrUVWVrq6u8N+ll16KzWYbcqwHH3yQ6dOns3r1am6//XYuuugivv/97x93/3fcccegx9/73vcAePvtt4d97GAwyOuvv87KlSuZP3/+kGMM557/6VzLkxmt98CpxB4XF8fWrVtpaWk5pXM529fmdH3R9Tkb74OjjdZreDrH+SLV1dU4HA5+9KMfDflM/drXvgYw5LNVnB2SiIxj5557LsuXLx/yFx8fP2g9l8vF/fffT3Z2NkajkaSkJJKTk+nr68Nmsw3Zb05OzqDHVquVqKiocJPs0ct7e3vPyrl0dnbidDopKSkZ8tzUqVMJBoPh5tETxXnkvE8W06lei9M5TmdnJ319ffzqV78iOTl50N9NN90EfN6B7giDwcDvfvc7amtr6e/v5/e///0JvwSmTJky6HFhYSEajYa6urphH7uzsxO73X5Gw7xP51qezGi9B04l9p/+9Kfs27eP7Oxszj33XB588MFhJd9n+9qcri+6PmfjfXC00XoNT+c4X+RILZSlS5cO+Uzt6OggNTWV4uLiQTFcccUVWCwWSkpK2LBhwykdT3xO+ohMAt/73vf4/e9/z1133cWiRYuwWq0oisKqVasIBoND1j+2T8KJlkHo13+knE5Mp3otTuc4R/bzz//8z6xevfq46xzvl9V7770HgNvtprKykvz8/BOex9GOTliGe+yz8bqdzrU82073fTnc2K+//nouvPBCXnvtNd5//31+9rOf8fjjj/Pqq69y2WWXnfH+T9WJktNAIHDc5WPx3+2xxkqMDocDGNoPxGaz8cknn3DzzTcPWn7HHXeQlpZGZ2cn69ev5/rrr6eyspKEhIRRi3mikERkEnjllVdYvXo1/9//9/+Fl7nd7ogVJzreh2lycjJms5lDhw4Nea68vByNRkN2dvYZH3s0rkVycjIxMTEEAgGWL18+rG327NnD//t/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", 396 | "text/plain": [ 397 | "
" 398 | ] 399 | }, 400 | "metadata": {}, 401 | "output_type": "display_data" 402 | } 403 | ], 404 | "source": [ 405 | "import matplotlib.pylab as plt\n", 406 | "nbShots = 5000\n", 407 | "M = 20\n", 408 | "tt = np.linspace(-0.1, 1.5*np.pi, M)\n", 409 | "N = 4\n", 410 | "theta1 = np.random.rand(N)*np.pi\n", 411 | "theta1[0] = vqe_result.x[1]\n", 412 | "currentVal = np.zeros((N, M))\n", 413 | "mycolors = np.random.rand(N,3)\n", 414 | "arguments = hamiltonian, GATE_NAMES, nbShots\n", 415 | "\n", 416 | "for k in range(M):\n", 417 | " for i in range(N):\n", 418 | " currentVal[i,k] = vqe(np.array([tt[k], theta1[i]]), arguments)\n", 419 | "\n", 420 | "for i in range(N):\n", 421 | " plt.plot(tt, currentVal[i,:], c=mycolors[i], marker='.', label=r'$\\theta_1=$%.2f' %theta1[i])\n", 422 | "\n", 423 | "plt.title(r'Hamiltonian expectation as a function of $\\theta_0$')\n", 424 | "plt.xlabel(r'$\\theta_{0}$')\n", 425 | "plt.legend(loc=\"best\")\n", 426 | "plt.show()" 427 | ] 428 | }, 429 | { 430 | "cell_type": "markdown", 431 | "id": "24f0449a-b128-4d11-97d9-1339843d82b8", 432 | "metadata": {}, 433 | "source": [ 434 | "### Checking the output" 435 | ] 436 | }, 437 | { 438 | "cell_type": "markdown", 439 | "id": "923ff9a6-bbfb-4786-ad2b-65adcd00f5d2", 440 | "metadata": {}, 441 | "source": [ 442 | "$$\n", 443 | "R_{X}(\\theta) := \n", 444 | "\\begin{pmatrix}\n", 445 | "\\cos\\left(\\frac{\\theta}{2}\\right) & -\\mathrm{i}\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 446 | "-\\mathrm{i}\\sin\\left(\\frac{\\theta}{2}\\right) & \\cos\\left(\\frac{\\theta}{2}\\right)\n", 447 | "\\end{pmatrix}\n", 448 | "\\qquad\\text{and}\\qquad\n", 449 | "R_{Y}(\\theta) := \n", 450 | "\\begin{pmatrix}\n", 451 | "\\cos\\left(\\frac{\\theta}{2}\\right) & -\\sin\\left(\\frac{\\theta}{2}\\right)\\\\\n", 452 | "\\sin\\left(\\frac{\\theta}{2}\\right) & \\cos\\left(\\frac{\\theta}{2}\\right)\n", 453 | "\\end{pmatrix},\n", 454 | "$$" 455 | ] 456 | }, 457 | { 458 | "cell_type": "markdown", 459 | "id": "68dfb2fd-8ccd-400c-84e0-fc1fd78ae06f", 460 | "metadata": {}, 461 | "source": [ 462 | "$$\n", 463 | "U\\left(\\frac{\\pi}{2}, 0, \\pi\\right) = \\mathrm{H} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}1&1\\\\1&-1\\end{pmatrix}\n", 464 | "\\qquad\\text{and}\\qquad\n", 465 | "U\\left(\\frac{\\pi}{2}, 0, \\frac{\\pi}{2}\\right) = \\mathrm{G} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix}1&-\\mathrm{i}\\\\1&\\mathrm{i}\\end{pmatrix}.\n", 466 | "$$" 467 | ] 468 | }, 469 | { 470 | "cell_type": "markdown", 471 | "id": "0fb91e95-08e7-4b1b-a591-a319e5f78809", 472 | "metadata": {}, 473 | "source": [ 474 | "#### Vector of parameters $(\\theta_0, \\theta_1)$:" 475 | ] 476 | }, 477 | { 478 | "cell_type": "code", 479 | "execution_count": 16, 480 | "id": "f7966381-55cc-4477-b82b-3227ca344c69", 481 | "metadata": {}, 482 | "outputs": [ 483 | { 484 | "name": "stdout", 485 | "output_type": "stream", 486 | "text": [ 487 | "Optimal vector of parameters: [2.09674299 1.89970459]\n" 488 | ] 489 | } 490 | ], 491 | "source": [ 492 | "print(\"Optimal vector of parameters: \", vqe_result.x)" 493 | ] 494 | }, 495 | { 496 | "cell_type": "markdown", 497 | "id": "dac6b0f5-3537-4077-9eb2-50e0c43fc729", 498 | "metadata": {}, 499 | "source": [ 500 | "#### Original Hamiltonian decomposition:" 501 | ] 502 | }, 503 | { 504 | "cell_type": "code", 505 | "execution_count": 17, 506 | "id": "b1ee31a8-72e3-4446-9847-739d7807a34a", 507 | "metadata": {}, 508 | "outputs": [ 509 | { 510 | "data": { 511 | "text/plain": [ 512 | "{'I': 1.3721317026796056,\n", 513 | " 'Z': 0.45387378089030195,\n", 514 | " 'X': 1.8607947059115135,\n", 515 | " 'Y': 2.9925492675576097}" 516 | ] 517 | }, 518 | "execution_count": 17, 519 | "metadata": {}, 520 | "output_type": "execute_result" 521 | } 522 | ], 523 | "source": [ 524 | "hamiltonian" 525 | ] 526 | }, 527 | { 528 | "cell_type": "code", 529 | "execution_count": 18, 530 | "id": "b489b4d4-2771-442f-b1ae-9174fb9647c8", 531 | "metadata": {}, 532 | "outputs": [], 533 | "source": [ 534 | "def check_eigenstate(vqe_result, hamiltonian, pauli_matrices):\n", 535 | " theta = vqe_result.x\n", 536 | " Rx = np.matrix([[np.cos(theta[0]/2.), -1j*np.sin(theta[0]/2.)], [-1j*np.sin(theta[0]/2.), np.cos(theta[0]/2.)]])\n", 537 | " Ry = np.matrix([[np.cos(theta[1]/2.), -np.sin(theta[1]/2.)], [np.sin(theta[1]/2.), np.cos(theta[1]/2.)]])\n", 538 | " \n", 539 | " H = np.matrix([[1, 1], [1, -1]]) / np.sqrt(2.)\n", 540 | " G = np.matrix([[1, -1j], [1, 1j]]) / np.sqrt(2.)\n", 541 | " \n", 542 | " initialstate = np.matrix([[1], [0]])\n", 543 | " \n", 544 | " hamiltonian_matrix = np.zeros((2,2))\n", 545 | "\n", 546 | " for g in GATE_NAMES:\n", 547 | " hamiltonian_matrix = hamiltonian_matrix + hamiltonian[g]*pauli_matrices[g]\n", 548 | "\n", 549 | " psi_param = np.matmul(Ry, np.matmul(Rx, initialstate))\n", 550 | "\n", 551 | " return vqe_result.fun*psi_param, hamiltonian_matrix*psi_param" 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 19, 557 | "id": "6c83183f-0315-421b-ac6b-2b8a469e6c4c", 558 | "metadata": {}, 559 | "outputs": [ 560 | { 561 | "data": { 562 | "text/plain": [ 563 | "(matrix([[-0.61556263-1.49451933j],\n", 564 | " [-0.86052341+1.0690822j ]]),\n", 565 | " matrix([[-0.22354795-0.86565366j],\n", 566 | " [-1.19640064+1.71734773j]]))" 567 | ] 568 | }, 569 | "execution_count": 19, 570 | "metadata": {}, 571 | "output_type": "execute_result" 572 | } 573 | ], 574 | "source": [ 575 | "check_eigenstate(vqe_result, hamiltonian, pauli_matrices)" 576 | ] 577 | }, 578 | { 579 | "cell_type": "code", 580 | "execution_count": null, 581 | "id": "b74a6f5a-235f-454e-955f-74ecf78c14c3", 582 | "metadata": {}, 583 | "outputs": [], 584 | "source": [] 585 | } 586 | ], 587 | "metadata": { 588 | "kernelspec": { 589 | "display_name": "Python 3 (ipykernel)", 590 | "language": "python", 591 | "name": "python3" 592 | }, 593 | "language_info": { 594 | "codemirror_mode": { 595 | "name": "ipython", 596 | "version": 3 597 | }, 598 | "file_extension": ".py", 599 | "mimetype": "text/x-python", 600 | "name": "python", 601 | "nbconvert_exporter": "python", 602 | "pygments_lexer": "ipython3", 603 | "version": "3.10.11" 604 | } 605 | }, 606 | "nbformat": 4, 607 | "nbformat_minor": 5 608 | } 609 | --------------------------------------------------------------------------------