{ "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": 1, "metadata": {}, "outputs": [], "source": [ "import cudaq\n", "from typing import List\n", "\n", "cudaq.set_target(\"nvidia\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " ╭───────╮╭───────╮\n", "q0 : ┤ rx(0) ├┤ ry(0) ├\n", " ╰───────╯╰───────╯\n", "\n" ] } ], "source": [ "# Initialize a kernel/ ansatz and variational parameters.\n", "@cudaq.kernel\n", "def kernel(angles: List[float]):\n", " # Allocate a qubit that is initialized to the |0> state.\n", " qubit = cudaq.qubit()\n", " # Define gates and the qubits they act upon.\n", " rx(angles[0], qubit)\n", " ry(angles[1], qubit)\n", "\n", "\n", "# Our Hamiltonian will be the Z expectation value of our qubit.\n", "hamiltonian = cudaq.spin.z(0)\n", "\n", "# Initial gate parameters which intialize the qubit in the zero state\n", "initial_parameters = [0, 0]\n", "\n", "print(cudaq.draw(kernel, initial_parameters))" ] }, { "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": 3, "metadata": {}, "outputs": [], "source": [ "cost_values = []\n", "\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": 4, "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": 5, "metadata": {}, "outputs": [], "source": [ "# Define a CUDA-Q 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": 7, "metadata": { "tags": [ "nbsphinx-thumbnail" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Cost Value')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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d96JN99802pbQECA9HNUVJTVvqioKBw6dAgAkJmZif79+8PLy0vaP2zYMJjNZpw4cQKCICA7OxvR0dE2a+jXr5/0s5eXF3x8fJCXlwcAmD59OsaMGYODBw8iNjYWCQkJGDp0aIveKxG1LYYlImoXvLy86lwWsxcPD48mHefq6mr1uyAIMJvNAICRI0fi999/x5dffont27cjOjoaM2bMwCuvvGL3eonIvjhmiYicwr59++r83qdPHwBAnz59cPjwYZSWlkr79+7dC5VKhV69esHb2xthYWFIS0u7rhqCgoIwYcIEvPfee1ixYgVWr159XecjorbBzhIRtQsVFRUwGAxW21xcXKRB1Fu2bMHgwYMxfPhwbNy4EQcOHMDatWsBAOPGjUNKSgomTJiAZ555BhcvXsSsWbPwyCOPQKfTAQCeeeYZTJs2DVqtFiNHjkRxcTH27t2LWbNmNam+RYsWYdCgQbjxxhtRUVGBzz//XAprRKRsDEtE1C6kpqYiODjYaluvXr1w/PhxADV3qm3evBmPPfYYgoOD8f777yMiIgIA4Onpif/97394/PHHccstt8DT0xNjxozB8uXLpXNNmDAB5eXlePXVV/Hkk08iMDAQf/7zn5tcn5ubG5KTk3H27Fl4eHjgtttuw+bNm+3wzomotQmiKIpyF0FE1JoEQcC2bduQkJAgdylE5IA4ZomIiIjIBoYlIiIiIhs4ZomI2j2ONiCi68HOEhEREZENDEtERERENjAsEREREdnAsERERERkA8MSERERkQ0MS0REREQ2MCwRERER2cCwRERERGTD/wNOOWlAeHvZ8QAAAABJRU5ErkJggg==", "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 }