{ "cells": [ { "cell_type": "markdown", "id": "8b423ad7", "metadata": {}, "source": [ "# QUANTUM APPROXIMATE OPTIMIZATION ALGORITHM (QAOA)" ] }, { "cell_type": "markdown", "id": "12e108d5", "metadata": {}, "source": [ "In this noteook, we show how to (approximately) solve binary combinatorial optimization problems, using the __Quantum Approximate Optimization Algorithm (QAOA)__.\n", "\n", "The QAOA is a variational quantum algorithm that uses alternating layers of parameterized quantum gates to solve an optimization problem [1]. The parameters of each gate are tuned to minimize a cost function, similar to how machine learning parameters are tuned in stochastic gradient descent. \n", "\n", "## References \n", "[1] Edward Farhi, Jeffrey Goldstone, and Sam Gutmann, \"A Quantum Approximate Optimization Algorithm Applied to a Bounded Occurrence Constraint Problem,\" (2014), [arXiv:1412.6062](https://arxiv.org/abs/1411.4028)" ] }, { "cell_type": "code", "execution_count": 1, "id": "bd0a975d", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from braket.devices import LocalSimulator\n", "from scipy.optimize import minimize\n", "\n", "from braket.experimental.algorithms.quantum_approximate_optimization import cost_function, qaoa\n", "from braket.tracking import Tracker\n", "\n", "tracker = Tracker().start() # to track Braket costs" ] }, { "cell_type": "code", "execution_count": 2, "id": "50e4d13a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 0.90684048]\n", " [0.60765184 0. ]]\n" ] } ], "source": [ "n_qubits = 2\n", "n_layers = 1\n", "\n", "coupling_matrix = np.random.rand(n_qubits, n_qubits)\n", "np.fill_diagonal(coupling_matrix, 0)\n", "\n", "print(coupling_matrix)" ] }, { "cell_type": "code", "execution_count": 3, "id": "6e26acc1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T : |0|1| 2 |3|4| 5 |6| 7 | Result Types |\n", " \n", "q0 : -H-C------------------------------C-X-Rz(0.607651837245007*gamma_0)-X-Rx(2*beta_0)-Expectation(Z@Z)-Expectation(Z@Z)-\n", " | | | | | | \n", "q1 : -H-X-Rz(0.90684048034446*gamma_0)-X-C-------------------------------C-Rx(2*beta_0)-Expectation(Z@Z)-Expectation(Z@Z)-\n", "\n", "T : |0|1| 2 |3|4| 5 |6| 7 | Result Types |\n", "\n", "Unassigned parameters: [beta_0, gamma_0].\n" ] } ], "source": [ "circ = qaoa(n_qubits, n_layers, coupling_matrix)\n", "print(circ)" ] }, { "cell_type": "code", "execution_count": 4, "id": "223d34d0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.9068404803444595, 0.6076518372450074]\n" ] } ], "source": [ "idx = coupling_matrix.nonzero()\n", "coeffs = [coupling_matrix[qubit_pair] for qubit_pair in zip(idx[0], idx[1])]\n", "print(coeffs)" ] }, { "cell_type": "markdown", "id": "8cc043c3", "metadata": {}, "source": [ "## Run on a local simulator\n", "\n", "Now we run the QAOA on a local simulator by the Nelder-Mead method from scipy.optimize." ] }, { "cell_type": "code", "execution_count": 5, "id": "c700195c", "metadata": {}, "outputs": [], "source": [ "device = LocalSimulator()\n", "\n", "init_values = np.random.rand(2 * n_layers)\n", "\n", "# set bounds for search space\n", "bounds = [(0, 2 * np.pi) for _ in range(2 * n_layers)]\n", "\n", "losses = []" ] }, { "cell_type": "code", "execution_count": 6, "id": "bc524eef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: -1.514492\n", " Iterations: 44\n", " Function evaluations: 85\n" ] } ], "source": [ "losses = []\n", "result = minimize(\n", " cost_function,\n", " init_values,\n", " args=(device, circ, coeffs, losses, 0), # shots=0\n", " options={\"disp\": True, \"maxfev\": 150},\n", " method=\"Nelder-Mead\",\n", " # bounds=bounds, # optional, some optimizers can use bounds\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "id": "16df2abe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'QAOA convergence of cost function')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "\n", "plt.plot(losses, \"-o\")\n", "plt.ylabel(\"Cost\")\n", "plt.xlabel(\"Iteration\")\n", "plt.title(\"QAOA convergence of cost function\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "96992efa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Task Summary\n", "{} \n", "\n", "Estimated cost to run this example: 0.00 USD\n" ] } ], "source": [ "print(\"Task Summary\")\n", "print(f\"{tracker.quantum_tasks_statistics()} \\n\")\n", "print(f\"Estimated cost to run this example: {tracker.qpu_tasks_cost() + tracker.simulator_tasks_cost():.2f} USD\")" ] }, { "cell_type": "markdown", "id": "64478182", "metadata": {}, "source": [ "Note: Charges shown are estimates based on your Amazon Braket simulator and quantum processing unit (QPU) task usage. Estimated charges shown may differ from your actual charges. Estimated charges do not factor in any discounts or credits, and you may experience additional charges based on your use of other services such as Amazon Elastic Compute Cloud (Amazon EC2)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.5 64-bit ('braket')", "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.9.5" }, "vscode": { "interpreter": { "hash": "5904cb9a2089448a2e1aeb5d493d227c9de33e591d7c07e4016fb81e71061a5d" } } }, "nbformat": 4, "nbformat_minor": 5 }