{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Cost Minimization\n", "\n", "Below we start with a basic example of a hybrid variational algorithm which involves flipping the bloch vector of a qubit from the $\\ket{0}$ to the $\\ket{1}$ state. First we import the relevant packages and set our backend to simulate our workflow on NVIDIA GPUs. \n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import cudaq\n", "from cudaq import spin\n", "\n", "cudaq.set_target(\"nvidia\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "qubit_count = 1\n", "\n", "# Initialize a kernel/ ansatz and variational parameters.\n", "kernel, parameters = cudaq.make_kernel(list)\n", "\n", "# Allocate qubits that are initialised to the |0> state.\n", "qubits = kernel.qalloc(qubit_count)\n", "\n", "# Define gates and the qubits they act upon.\n", "kernel.rx(parameters[0], qubits[0])\n", "kernel.ry(parameters[1], qubits[0])\n", "\n", "# Our hamiltonian will be the Z expectation value of our qubit.\n", "hamiltonian = spin.z(0)\n", "\n", "# Initial gate parameters which intialize the qubit in the zero state\n", "initial_parameters = [0, 0]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We build our cost function such that its minimal value corresponds to the qubit being in the $\\ket{1}$ state. The observe call below allows us to simulate our statevector $\\ket{\\psi}$, and calculate $\\bra{\\psi}Z\\ket{\\psi}$.\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "cost_values = []\n", "\n", "def cost(parameters):\n", " \"\"\"Returns the expectation value as our cost.\"\"\"\n", " expectation_value = cudaq.observe(kernel, hamiltonian,\n", " parameters).expectation()\n", " cost_values.append(expectation_value)\n", " return expectation_value" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.0\n" ] } ], "source": [ "# We see that the initial value of our cost function is one, demonstrating that our qubit is in the zero state\n", "initial_cost_value = cost(initial_parameters)\n", "print(initial_cost_value)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Below we use our built-in optimization suite to minimize the cost function. We will be using the gradient free COBYLA alogrithm. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Define a CUDA Quantum optimizer.\n", "optimizer = cudaq.optimizers.COBYLA()\n", "optimizer.initial_parameters = initial_parameters\n", "\n", "result = optimizer.optimize(dimensions=2, function=cost)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%pip install matplotlib" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [ "nbsphinx-thumbnail" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Cost Value')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAGwCAYAAAC5ACFFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJj0lEQVR4nO3deXxU9b3/8ffMJJkQsgJZIUhYyqIsyhLjrqQEsP2JpbfQi2VRoSJQNbQKrYCKFbdLrcqFqiB6q0XxinVFMSy2GAgGwqKAoigImQSIyZBAtpnz+yNkcC4QssxkFl7Px+M8mDnne04+54DNu9/zPd9jMgzDEAAAAM7K7OsCAAAA/BlhCQAAoAGEJQAAgAYQlgAAABpAWAIAAGgAYQkAAKABhCUAAIAGhPi6gGDgdDp1+PBhRUVFyWQy+bocAADQCIZh6Pjx40pJSZHZfO7+I8KSBxw+fFipqam+LgMAADTDwYMH1alTp3NuJyx5QFRUlKS6ix0dHe3jagAAQGPY7Xalpqa6fo+fC2HJA+pvvUVHRxOWAAAIMOcbQsMAbwAAgAYQlgAAABpAWAIAAGgAYQkAAKABhCUAAIAGEJYAAAAaQFgCAABoAGEJAACgAYQlAACABhCWAAAAGhBQYemTTz7Rz3/+c6WkpMhkMumtt9467z7r16/XZZddJqvVqu7du2v58uVntFm0aJG6dOmi8PBwpaenKy8vz/PFAwCAgBRQYamiokL9+/fXokWLGtV+//79uvHGG3X99deroKBAd999t26//XZ9+OGHrjavvfaasrOzNW/ePG3dulX9+/dXVlaWiouLvXUaAAAggJgMwzB8XURzmEwmrVq1SqNGjTpnm/vuu0/vvfeedu3a5Vo3duxYlZaWavXq1ZKk9PR0DR48WM8++6wkyel0KjU1VTNmzNCsWbMaVYvdbldMTIzKyso8+iJdW1mlap3O87aLtIYoNiLMYz8XAIALQWN/f4e0Yk2tLjc3V5mZmW7rsrKydPfdd0uSqqurlZ+fr9mzZ7u2m81mZWZmKjc395zHraqqUlVVleu73W73bOGn/OcLm/TNkYrztrOYTXr51iG6snsHr9QBAMCFLKBuwzWVzWZTYmKi27rExETZ7XadPHlSR48elcPhOGsbm812zuMuWLBAMTExriU1NdUr9YdZzLKGNLyYTZLDaajgYKlXagAA4EIX1D1L3jJ79mxlZ2e7vtvtdq8EptV3X3PeNg+984WWbdyv8qpaj/98AAAQ5GEpKSlJRUVFbuuKiooUHR2tNm3ayGKxyGKxnLVNUlLSOY9rtVpltVq9UnNTRYbX/RWWVxKWAADwhqC+DZeRkaGcnBy3dWvWrFFGRoYkKSwsTAMHDnRr43Q6lZOT42rj76Ksp8ISPUsAAHhFQIWl8vJyFRQUqKCgQFLd1AAFBQU6cOCApLrbY+PHj3e1v+OOO/TNN9/o3nvv1Z49e/Tf//3fev3113XPPfe42mRnZ+v555/XSy+9pN27d2vq1KmqqKjQpEmTWvXcmqu+Z+k4PUsAAHhFQN2G++yzz3T99de7vtePG5owYYKWL1+uwsJCV3CSpLS0NL333nu655579Ne//lWdOnXSCy+8oKysLFebMWPG6MiRI5o7d65sNpsGDBig1atXnzHo219FWuvDUo2PKwEAIDgF7DxL/sRb8yw1xrq9xZr04hZdnBKt9353dav+bAAAAlljf38H1G04nIkxSwAAeBdhKcDxNBwAAN5FWApwrjFL9CwBAOAVhKUAF2UNlSRV1zpVVevwcTUAAAQfwlKAa2u1uD5XVBGWAADwNMJSgAuxmNUmtC4wMW4JAADPIywFAdfElFXMtQQAgKcRloKAa/oAepYAAPA4wlIQcE0fwBNxAAB4HGEpCEQyMSUAAF5DWAoCp98PR1gCAMDTCEtBgNtwAAB4D2EpCDDAGwAA7yEsBQF6lgAA8B7CUhCIPPXKE8YsAQDgeYSlIHC6Z4lJKQEA8DTCUhCIYuoAAAC8hrAUBKLCGeANAIC3EJaCgGueJXqWAADwOMJSEIikZwkAAK8hLAWBqFNPwzFmCQAAzyMsBYH6nqUT1Q45nIaPqwEAILgQloJAW6vF9ZneJQAAPIuwFASsIRaFhdT9VRKWAADwLMJSkOD9cAAAeAdhKUgwizcAAN5BWAoSrrmW6FkCAMCjCEtBIpJXngAA4BWEpSDBK08AAPAOwlKQoGcJAADvICwFifoB3oxZAgDAswIuLC1atEhdunRReHi40tPTlZeXd8621113nUwm0xnLjTfe6GozceLEM7YPHz68NU7FoyJ55QkAAF4R4usCmuK1115Tdna2lixZovT0dD311FPKysrS3r17lZCQcEb7N998U9XV1a7vx44dU//+/fUf//Efbu2GDx+uF1980fXdarV67yS8hDFLAAB4R0D1LC1cuFCTJ0/WpEmT1KdPHy1ZskQRERFatmzZWdu3a9dOSUlJrmXNmjWKiIg4IyxZrVa3dnFxca1xOh7FmCUAALwjYMJSdXW18vPzlZmZ6VpnNpuVmZmp3NzcRh1j6dKlGjt2rNq2beu2fv369UpISFDPnj01depUHTt2rMHjVFVVyW63uy2+5ppnibAEAIBHBUxYOnr0qBwOhxITE93WJyYmymaznXf/vLw87dq1S7fffrvb+uHDh+vll19WTk6OHnvsMW3YsEEjRoyQw+E457EWLFigmJgY15Kamtq8k/Ig1wzelczgDQCAJwXUmKWWWLp0qfr27ashQ4a4rR87dqzrc9++fdWvXz9169ZN69ev19ChQ896rNmzZys7O9v13W63+zwwRXEbDgAArwiYnqUOHTrIYrGoqKjIbX1RUZGSkpIa3LeiokIrVqzQbbfddt6f07VrV3Xo0EH79u07Zxur1aro6Gi3xdciGeANAIBXBExYCgsL08CBA5WTk+Na53Q6lZOTo4yMjAb3XblypaqqqnTLLbec9+d8//33OnbsmJKTk1tcc2tizBIAAN4RMGFJkrKzs/X888/rpZde0u7duzV16lRVVFRo0qRJkqTx48dr9uzZZ+y3dOlSjRo1Su3bt3dbX15erj/84Q/atGmTvv32W+Xk5Oimm25S9+7dlZWV1Srn5CmunqWqWhmG4eNqAAAIHgE1ZmnMmDE6cuSI5s6dK5vNpgEDBmj16tWuQd8HDhyQ2eye//bu3at///vf+uijj844nsVi0Y4dO/TSSy+ptLRUKSkpGjZsmObPnx9wcy1FnZqU0jCkE9UOtbUG1F8tAAB+y2TQDdFidrtdMTExKisr89n4JcMw1P1PH8jhNLT5j0OVGB3ukzoAAAgUjf39HVC34XBuJpPp9Lglpg8AAMBjCEtB5HRYYpA3AACeQlgKIlHhzLUEAICnEZaCiOv9cPQsAQDgMYSlIFI/fQBzLQEA4DmEpSBCzxIAAJ5HWAoijFkCAMDzCEtBJJKX6QIA4HGEpSASeWoWb6YOAADAcwhLQSSS23AAAHgcYSmIRLkGeDODNwAAnkJYCiL0LAEA4HmEpSDC604AAPA8wlIQoWcJAADPIywFkSimDgAAwOMIS0HE1bNUWSvDMHxcDQAAwYGwFETqxyzVOg1V1Tp9XA0AAMGBsBRE2oaFuD4zyBsAAM8gLAURs9nEK08AAPAwwlKQifrRuCUAANByhKUg45prqYpZvAEA8ATCUpCJpGcJAACPIiwFGcYsAQDgWYSlIBPFLN4AAHgUYSnI8H44AAA8i7AUZCKtoZLoWQIAwFMIS0GGAd4AAHgWYSnI8DJdAAA8i7AUZOp7lhizBACAZxCWgszpqQOYlBIAAE8gLAWZSKYOAADAowIuLC1atEhdunRReHi40tPTlZeXd862y5cvl8lkclvCw8Pd2hiGoblz5yo5OVlt2rRRZmamvvrqK2+fhte4xixxGw4AAI8IqLD02muvKTs7W/PmzdPWrVvVv39/ZWVlqbi4+Jz7REdHq7Cw0LV89913btsff/xxPf3001qyZIk2b96stm3bKisrS5WVld4+Ha+gZwkAAM8KqLC0cOFCTZ48WZMmTVKfPn20ZMkSRUREaNmyZefcx2QyKSkpybUkJia6thmGoaeeekr333+/brrpJvXr108vv/yyDh8+rLfeeqsVzsjzmJQSAADPCpiwVF1drfz8fGVmZrrWmc1mZWZmKjc395z7lZeX66KLLlJqaqpuuukmff75565t+/fvl81mcztmTEyM0tPTGzxmVVWV7Ha72+Ivok5NSllV61R1rdPH1QAAEPgCJiwdPXpUDofDrWdIkhITE2Wz2c66T8+ePbVs2TL985//1N///nc5nU5dccUV+v777yXJtV9TjilJCxYsUExMjGtJTU1tyal5VFurxfW5gltxAAC0WMCEpebIyMjQ+PHjNWDAAF177bV68803FR8fr7/97W8tOu7s2bNVVlbmWg4ePOihilsuxGJWm9C6wMS4JQAAWi5gwlKHDh1ksVhUVFTktr6oqEhJSUmNOkZoaKguvfRS7du3T5Jc+zX1mFarVdHR0W6LP2FiSgAAPCdgwlJYWJgGDhyonJwc1zqn06mcnBxlZGQ06hgOh0M7d+5UcnKyJCktLU1JSUlux7Tb7dq8eXOjj+mPeOUJAACeE+LrApoiOztbEyZM0KBBgzRkyBA99dRTqqio0KRJkyRJ48ePV8eOHbVgwQJJ0kMPPaTLL79c3bt3V2lpqZ544gl99913uv322yXVPSl399136+GHH1aPHj2UlpamOXPmKCUlRaNGjfLVabbY6ekDmMUbAICWCqiwNGbMGB05ckRz586VzWbTgAEDtHr1atcA7QMHDshsPt1Z9sMPP2jy5Mmy2WyKi4vTwIED9emnn6pPnz6uNvfee68qKio0ZcoUlZaW6qqrrtLq1avPmLwykDB9AAAAnmMyDMPwdRGBzm63KyYmRmVlZX4xfmnKy5/poy+K9OebL9G49It8XQ4AAH6psb+/A2bMEhrPdRuOniUAAFqMsBSEGOANAIDnEJaCEFMHAADgOYSlIBR56pUnhCUAAFqOsBSEmDoAAADPISwFIcYsAQDgOYSlIFQ/zxJPwwEA0HKEpSDkGuBNzxIAAC1GWApC9CwBAOA5hKUgFBXOmCUAADyFsBSE6nuWTlQ75HDyNhsAAFqCsBSE6scsSfQuAQDQUoSlIGQNsSjMUvdXS1gCAKBlCEtBipfpAgDgGYSlIOV6Io5ZvAEAaBHCUpCqD0u8Hw4AgJYhLAWpSKYPAADAIwhLQSqKiSkBAPAIwlKQomcJAADPICwFKcYsAQDgGYSlIEXPEgAAnkFYClLR4aGSGLMEAEBLEZaC1Ol5lghLAAC0BGEpSLnGLBGWAABoEcJSkDr9uhNm8AYAoCUIS0EqittwAAB4BGEpSPEiXQAAPIOwFKQYswQAgGcQloLUj+dZMgzDx9UAABC4CEtBKspaN8+SYUgnqh0+rgYAgMBFWApS4aFmWcwmSQzyBgCgJQIuLC1atEhdunRReHi40tPTlZeXd862zz//vK6++mrFxcUpLi5OmZmZZ7SfOHGiTCaT2zJ8+HBvn4bXmUwm3g8HAIAHBFRYeu2115Sdna158+Zp69at6t+/v7KyslRcXHzW9uvXr9evf/1rrVu3Trm5uUpNTdWwYcN06NAht3bDhw9XYWGha/nHP/7RGqfjdcziDQBAywVUWFq4cKEmT56sSZMmqU+fPlqyZIkiIiK0bNmys7Z/5ZVXdOedd2rAgAHq1auXXnjhBTmdTuXk5Li1s1qtSkpKci1xcXGtcTpeF8X0AQAAtFjAhKXq6mrl5+crMzPTtc5sNiszM1O5ubmNOsaJEydUU1Ojdu3aua1fv369EhIS1LNnT02dOlXHjh1r8DhVVVWy2+1uiz863bPELN4AADRXwISlo0ePyuFwKDEx0W19YmKibDZbo45x3333KSUlxS1wDR8+XC+//LJycnL02GOPacOGDRoxYoQcjnM/QbZgwQLFxMS4ltTU1OadlJfVTx/AmCUAAJovxNcFtJZHH31UK1as0Pr16xUeHu5aP3bsWNfnvn37ql+/furWrZvWr1+voUOHnvVYs2fPVnZ2tuu73W73y8DEmCUAAFouYHqWOnToIIvFoqKiIrf1RUVFSkpKanDfJ598Uo8++qg++ugj9evXr8G2Xbt2VYcOHbRv375ztrFarYqOjnZb/BFjlgAAaLmACUthYWEaOHCg2+Ds+sHaGRkZ59zv8ccf1/z587V69WoNGjTovD/n+++/17Fjx5ScnOyRun2JniUAAFouYMKSJGVnZ+v555/XSy+9pN27d2vq1KmqqKjQpEmTJEnjx4/X7NmzXe0fe+wxzZkzR8uWLVOXLl1ks9lks9lUXl4uSSovL9cf/vAHbdq0Sd9++61ycnJ00003qXv37srKyvLJOXpS5KlZvHk/HAAAzRdQY5bGjBmjI0eOaO7cubLZbBowYIBWr17tGvR94MABmc2n89/ixYtVXV2tX/7yl27HmTdvnh544AFZLBbt2LFDL730kkpLS5WSkqJhw4Zp/vz5slqtrXpu3hDJbTgAAFrMZPCW1Raz2+2KiYlRWVmZX41fen3LQd37vzt0Q68ELZs42NflAADgVxr7+7tZt+G+/vpr3X///fr1r3/tmj37gw8+0Oeff968auEV9CwBANByTQ5LGzZsUN++fbV582a9+eabrvE/27dv17x58zxeIJrP9W44xiwBANBsTQ5Ls2bN0sMPP6w1a9YoLCzMtf6GG27Qpk2bPFocWsbVs8QM3gAANFuTw9LOnTt18803n7E+ISFBR48e9UhR8IwoKzN4AwDQUk0OS7GxsSosLDxj/bZt29SxY0ePFAXP+PGYJcbxAwDQPE0OS2PHjtV9990nm80mk8kkp9OpjRs36ve//73Gjx/vjRrRTPVjlmqdhqpqnT6uBgCAwNTksPTII4+oV69eSk1NVXl5ufr06aNrrrlGV1xxhe6//35v1Ihmaht2ehotbsUBANA8TZ6UMiwsTM8//7zmzJmjXbt2qby8XJdeeql69OjhjfrQAmazSZHWEJVX1aq8qlbxUYE/0SYAAK2t2TN4d+7cWZ07d/ZkLfACV1iiZwkAgGZpcli69dZbG9y+bNmyZhcDz4sMD5Hs0nGmDwAAoFmaHJZ++OEHt+81NTXatWuXSktLdcMNN3isMHhG/SBvepYAAGieJoelVatWnbHO6XRq6tSp6tatm0eKgudEuSamJCwBANAczXo33BkHMZuVnZ2tv/zlL544HDzI1bNEWAIAoFk8Epakupfr1tbyC9nfRDKLNwAALdLk23DZ2dlu3w3DUGFhod577z1NmDDBY4XBMyK5DQcAQIs0OSxt27bN7bvZbFZ8fLz+67/+67xPyqH1RTHAGwCAFmlyWFq3bp036oCX0LMEAEDLeGzMEvxTpDVUEmOWAABorkb1LF166aUymUyNOuDWrVtbVBA863TPEpNSAgDQHI0KS6NGjfJyGfCWKKYOAACgRRoVlubNm+ftOuAlrp4lbsMBANAsjFkKckxKCQBAyzT5aTiHw6G//OUvev3113XgwAFVV1e7bS8pKfFYcWg5JqUEAKBlmtyz9OCDD2rhwoUaM2aMysrKlJ2drV/84hcym8164IEHvFAiWiI6vO5puKpap6prnT6uBgCAwNPksPTKK6/o+eef18yZMxUSEqJf//rXeuGFFzR37lxt2rTJGzWiBdpaLa7PFdyKAwCgyZoclmw2m/r27StJioyMVFlZmSTpZz/7md577z3PVocWC7GY1Sa0LjAxbgkAgKZrcljq1KmTCgsLJUndunXTRx99JEnasmWLrFarZ6uDR9Q/Ece4JQAAmq7JYenmm29WTk6OJGnGjBmaM2eOevToofHjx/NuOD/FXEsAADRfo5+Ge/bZZ3XLLbfo0Ucfda0bM2aMOnfurNzcXPXo0UM///nPvVIkWoZZvAEAaL5G9yz96U9/UkpKisaNG6e1a9e61mdkZCg7O5ug5MeYPgAAgOZrdFiy2WxasmSJDh8+rJ/+9KdKS0vT/PnzdfDgQW/WBw9gYkoAAJqv0WGpTZs2Gj9+vNatW6evvvpKv/nNb7R06VKlpaVp+PDhWrlypWpqvH+bZ9GiRerSpYvCw8OVnp6uvLy8BtuvXLlSvXr1Unh4uPr27av333/fbbthGJo7d66Sk5PVpk0bZWZm6quvvvLmKbQ6XnkCAEDzNet1J127dtVDDz2k/fv364MPPlD79u01ceJEdezY0dP1uXnttdeUnZ2tefPmaevWrerfv7+ysrJUXFx81vaffvqpfv3rX+u2227Ttm3bNGrUKI0aNUq7du1ytXn88cf19NNPa8mSJdq8ebPatm2rrKwsVVZWevVcWhMDvAEAaD6TYRhGSw6wbt06LV26VG+++aasVqt++OEHT9V2hvT0dA0ePFjPPvusJMnpdCo1NVUzZszQrFmzzmg/ZswYVVRU6N1333Wtu/zyyzVgwAAtWbJEhmEoJSVFM2fO1O9//3tJUllZmRITE7V8+XKNHTu2UXXZ7XbFxMSorKxM0dHRHjhTz3riwz1atO5r/XJgJ92d2aPFx0uICldYCK8VBAAEtsb+/m7yu+Ek6eDBg3rxxRe1fPlyHThwQNdcc42ef/55jR49utkFn091dbXy8/M1e/Zs1zqz2azMzEzl5uaedZ/c3FxlZ2e7rcvKytJbb70lSdq/f79sNpsyMzNd22NiYpSenq7c3NxzhqWqqipVVVW5vtvt9uaeVquItNa98uSN/O/1Rv73LT5el/YRWpN9rUItBCYAQPBrdFiqrq7Wm2++qWXLlmnt2rVKTk7WhAkTdOutt6pr167erFGSdPToUTkcDiUmJrqtT0xM1J49e866j81mO2t7m83m2l6/7lxtzmbBggV68MEHm3wOvnLNTzpo+adWlZ5o+Ziyqlqnvj12Qju+L9PAi+I8UB0AAP6t0WEpKSlJJ06c0M9+9jO98847ysrKktl8YfYszJ49263Hym63KzU11YcVNezilBht/mPm+Rs2wm//5zN9+HmRNu8/RlgCAFwQGp127r//fh08eFBvvPGGRowY0epBqUOHDrJYLCoqKnJbX1RUpKSkpLPuk5SU1GD7+j+bckxJslqtio6OdlsuFOlp7SVJm78p8XElAAC0jkYnnuzsbMXHx3uzlgaFhYVp4MCBrletSHUDvHNycpSRkXHWfTIyMtzaS9KaNWtc7dPS0pSUlOTWxm63a/Pmzec85oUuvWs7SdJn35ao1uH0cTUAAHhfswZ4+0p2drYmTJigQYMGaciQIXrqqadUUVGhSZMmSZLGjx+vjh07asGCBZKku+66S9dee63+67/+SzfeeKNWrFihzz77TM8995wkyWQy6e6779bDDz+sHj16KC0tTXPmzFFKSopGjRrlq9P0a72SohUdHiJ7Za12HbZrQGqsr0sCAMCrAiosjRkzRkeOHNHcuXNls9k0YMAArV692jVA+8CBA263B6+44gq9+uqruv/++/XHP/5RPXr00FtvvaVLLrnE1ebee+9VRUWFpkyZotLSUl111VVavXq1wsPDW/38AoHF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting how the value of the cost function decreases during the minimization procedure.\n", "import matplotlib.pyplot as plt\n", "\n", "x_values = list(range(len(cost_values)))\n", "y_values = cost_values\n", "\n", "plt.plot(x_values, y_values)\n", "\n", "plt.xlabel(\"Epochs\")\n", "plt.ylabel(\"Cost Value\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We see that the final value or our cost function, $\\bra{\\psi}Z\\ket{\\psi} = -1$ demonstrating that the qubit is in the $\\ket{1}$ state." ] } ], "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.10.12" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } } }, "nbformat": 4, "nbformat_minor": 2 }