{ "cells": [ { "cell_type": "markdown", "id": "9c2adb1c-235f-4552-bb7a-70773aedf685", "metadata": {}, "source": [ "# 06 - Max-Cut and Traveling Salesman Problem\n", "### Modified for use with Quantum Rings toolkit for Qiskit 2.x" ] }, { "cell_type": "code", "execution_count": 1, "id": "271d3551-4f7b-45bb-96d5-9cdd8da4b94a", "metadata": {}, "outputs": [], "source": [ "# This code is from the tutorial at:\n", "# https://qiskit-community.github.io/qiskit-optimization/tutorials/06_examples_max_cut_and_tsp.html\n", "\n", "# Modified for use with Quantum Rings toolkit for Qiskit" ] }, { "cell_type": "code", "execution_count": 2, "id": "3122191f-f0d2-40c9-b27e-fca18f872e58", "metadata": {}, "outputs": [], "source": [ "#\n", "# Setup your account\n", "# You can also save your account locally using the class method QrRuntimeService.save_account(...) and\n", "# invoke the QrRuntimeService class constructor without any arguments.\n", "#\n", "\n", "import os\n", "my_token = os.environ[\"QR_TOKEN\"]\n", "my_name = os.environ[\"QR_ACCOUNT\"]\n", "\n", "#\n", "# Set the backend of your choice, depending upon the task and your hardware configuration.\n", "# See SDK documentation for additional help.\n", "#\n", "\n", "my_backend = \"scarlet_quantum_rings\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "b6104ae0-94f5-44e4-832a-45f2a204de0b", "metadata": {}, "outputs": [], "source": [ "# Import from Quantum Rings Toolkit\n", "from quantumrings.toolkit.qiskit import QrRuntimeService\n", "\n", "# Acquire Quantum Rings backend\n", "qr_services = QrRuntimeService(name = my_name, token = my_token)\n", "qr_backend = qr_services.backend(name = my_backend, precision = \"single\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "2ad20ca7-aa64-4b09-9605-fe6605924391", "metadata": {}, "outputs": [], "source": [ "# useful additional packages\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import networkx as nx\n", "\n", "#from qiskit.circuit.library import TwoLocal\n", "from qiskit.circuit.library import n_local as TwoLocal\n", "from qiskit_optimization.applications import Maxcut, Tsp\n", "from qiskit_algorithms import SamplingVQE, NumPyMinimumEigensolver\n", "from qiskit_algorithms.optimizers import SPSA\n", "from qiskit_algorithms.utils import algorithm_globals\n", "\n", "# Switch to Quantum Rings's Sampler\n", "#from qiskit.primitives import Sampler\n", "from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler\n", "\n", "\n", "from qiskit_optimization.algorithms import MinimumEigenOptimizer\n" ] }, { "cell_type": "markdown", "id": "422f007f-5d7f-40e9-9658-a7747a2e113e", "metadata": {}, "source": [ "# Max-Cut problem" ] }, { "cell_type": "code", "execution_count": 5, "id": "ff384808-e876-4f3f-b528-6e480fa42322", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Generating a graph of 4 nodes\n", "\n", "n = 4 # Number of nodes in graph\n", "G = nx.Graph()\n", "G.add_nodes_from(np.arange(0, n, 1))\n", "elist = [(0, 1, 1.0), (0, 2, 1.0), (0, 3, 1.0), (1, 2, 1.0), (2, 3, 1.0)]\n", "# tuple is (i,j,weight) where (i,j) is the edge\n", "G.add_weighted_edges_from(elist)\n", "\n", "colors = [\"r\" for node in G.nodes()]\n", "pos = nx.spring_layout(G)\n", "\n", "\n", "def draw_graph(G, colors, pos):\n", " default_axes = plt.axes(frameon=True)\n", " nx.draw_networkx(G, node_color=colors, node_size=600, alpha=0.8, ax=default_axes, pos=pos)\n", " edge_labels = nx.get_edge_attributes(G, \"weight\")\n", " nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge_labels)\n", "\n", "\n", "draw_graph(G, colors, pos)" ] }, { "cell_type": "code", "execution_count": 6, "id": "a4af4e0f-0d34-41e9-af9f-af26abc26b0f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 1. 1. 1.]\n", " [1. 0. 1. 0.]\n", " [1. 1. 0. 1.]\n", " [1. 0. 1. 0.]]\n" ] } ], "source": [ "# Computing the weight matrix from the random graph\n", "w = np.zeros([n, n])\n", "for i in range(n):\n", " for j in range(n):\n", " temp = G.get_edge_data(i, j, default=0)\n", " if temp != 0:\n", " w[i, j] = temp[\"weight\"]\n", "print(w)" ] }, { "cell_type": "markdown", "id": "1793bf50-1d60-4be7-bdea-c1175b0205cd", "metadata": {}, "source": [ "# Brute force approach" ] }, { "cell_type": "code", "execution_count": 7, "id": "d5eb8c2c-217f-4e0e-b328-2b07de592178", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "case = [0, 0, 0, 0] cost = 0.0\n", "case = [1, 0, 0, 0] cost = 3.0\n", "case = [0, 1, 0, 0] cost = 2.0\n", "case = [1, 1, 0, 0] cost = 3.0\n", "case = [0, 0, 1, 0] cost = 3.0\n", "case = [1, 0, 1, 0] cost = 4.0\n", "case = [0, 1, 1, 0] cost = 3.0\n", "case = [1, 1, 1, 0] cost = 2.0\n", "case = [0, 0, 0, 1] cost = 2.0\n", "case = [1, 0, 0, 1] cost = 3.0\n", "case = [0, 1, 0, 1] cost = 4.0\n", "case = [1, 1, 0, 1] cost = 3.0\n", "case = [0, 0, 1, 1] cost = 3.0\n", "case = [1, 0, 1, 1] cost = 2.0\n", "case = [0, 1, 1, 1] cost = 3.0\n", "case = [1, 1, 1, 1] cost = 0.0\n", "\n", "Best solution = [1, 0, 1, 0] cost = 4.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "best_cost_brute = 0\n", "for b in range(2**n):\n", " x = [int(t) for t in reversed(list(bin(b)[2:].zfill(n)))]\n", " cost = 0\n", " for i in range(n):\n", " for j in range(n):\n", " cost = cost + w[i, j] * x[i] * (1 - x[j])\n", " if best_cost_brute < cost:\n", " best_cost_brute = cost\n", " xbest_brute = x\n", " print(\"case = \" + str(x) + \" cost = \" + str(cost))\n", "\n", "colors = [\"r\" if xbest_brute[i] == 0 else \"c\" for i in range(n)]\n", "draw_graph(G, colors, pos)\n", "print(\"\\nBest solution = \" + str(xbest_brute) + \" cost = \" + str(best_cost_brute))" ] }, { "cell_type": "markdown", "id": "76d000d7-204b-4b5c-b5d8-e90c45bc80f3", "metadata": {}, "source": [ "# Mapping to the Ising problem" ] }, { "cell_type": "code", "execution_count": 8, "id": "8869d923-87b2-4b90-93e3-e7bb3af46ef8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem name: Max-cut\n", "\n", "Maximize\n", " -2*x_0*x_1 - 2*x_0*x_2 - 2*x_0*x_3 - 2*x_1*x_2 - 2*x_2*x_3 + 3*x_0 + 2*x_1\n", " + 3*x_2 + 2*x_3\n", "\n", "Subject to\n", " No constraints\n", "\n", " Binary variables (4)\n", " x_0 x_1 x_2 x_3\n", "\n" ] } ], "source": [ "max_cut = Maxcut(w)\n", "qp = max_cut.to_quadratic_program()\n", "print(qp.prettyprint())" ] }, { "cell_type": "code", "execution_count": 9, "id": "3aa7a557-d233-4e69-aea1-430a8cfb04cf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Offset: -2.5\n", "Ising Hamiltonian:\n", "SparsePauliOp(['IIZZ', 'IZIZ', 'ZIIZ', 'IZZI', 'ZZII'],\n", " coeffs=[0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j])\n" ] } ], "source": [ "qubitOp, offset = qp.to_ising()\n", "print(\"Offset:\", offset)\n", "print(\"Ising Hamiltonian:\")\n", "print(str(qubitOp))" ] }, { "cell_type": "code", "execution_count": 10, "id": "d00ae02d-cbf9-4388-9dc0-a2b6cf8e7b30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "objective function value: 4.0\n", "variable values: x_0=1.0, x_1=0.0, x_2=1.0, x_3=0.0\n", "status: SUCCESS\n" ] } ], "source": [ "# solving Quadratic Program using exact classical eigensolver\n", "exact = MinimumEigenOptimizer(NumPyMinimumEigensolver())\n", "result = exact.solve(qp)\n", "print(result.prettyprint())" ] }, { "cell_type": "markdown", "id": "901a4813-d5d3-4923-8273-4aa88ca55e66", "metadata": {}, "source": [ "# Checking that the full Hamiltonian gives the right cost" ] }, { "cell_type": "code", "execution_count": 11, "id": "aead4c26-09c6-4ed5-906a-3c5706e817da", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -1.5\n", "max-cut objective: -4.0\n", "solution: [1. 0. 1. 0.]\n", "solution objective: 4.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Making the Hamiltonian in its full form and getting the lowest eigenvalue and eigenvector\n", "ee = NumPyMinimumEigensolver()\n", "result = ee.compute_minimum_eigenvalue(qubitOp)\n", "\n", "x = max_cut.sample_most_likely(result.eigenstate)\n", "print(\"energy:\", result.eigenvalue.real)\n", "print(\"max-cut objective:\", result.eigenvalue.real + offset)\n", "print(\"solution:\", x)\n", "print(\"solution objective:\", qp.objective.evaluate(x))\n", "\n", "colors = [\"r\" if x[i] == 0 else \"c\" for i in range(n)]\n", "draw_graph(G, colors, pos)" ] }, { "cell_type": "markdown", "id": "7058ab98-ead0-41cd-a078-cde054abc845", "metadata": {}, "source": [ "# Running it on quantum computer" ] }, { "cell_type": "code", "execution_count": 12, "id": "22d4ae96-6b35-437d-87ce-b7d36605a36a", "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 13, "id": "17357062-0425-48a4-827d-605ab46ee15b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -1.5\n", "time: 94.41707682609558\n", "max-cut objective: -4.0\n", "solution: [0 1 0 1]\n", "solution objective: 4.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# construct SamplingVQE\n", "optimizer = SPSA(maxiter=300)\n", "ry = TwoLocal(qubitOp.num_qubits, \"ry\", \"cz\", reps=5, entanglement=\"linear\")\n", "vqe = SamplingVQE(sampler=Sampler(backend = qr_backend), ansatz=ry, optimizer=optimizer)\n", "\n", "# run SamplingVQE\n", "result = vqe.compute_minimum_eigenvalue(qubitOp)\n", "\n", "# print results\n", "x = max_cut.sample_most_likely(result.eigenstate)\n", "print(\"energy:\", result.eigenvalue.real)\n", "print(\"time:\", result.optimizer_time)\n", "print(\"max-cut objective:\", result.eigenvalue.real + offset)\n", "print(\"solution:\", x)\n", "print(\"solution objective:\", qp.objective.evaluate(x))\n", "\n", "# plot results\n", "colors = [\"r\" if x[i] == 0 else \"c\" for i in range(n)]\n", "draw_graph(G, colors, pos)" ] }, { "cell_type": "code", "execution_count": 14, "id": "e0501475-4b6a-4bfe-81d7-f8b132bb8c30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "objective function value: 4.0\n", "variable values: x_0=1.0, x_1=0.0, x_2=1.0, x_3=0.0\n", "status: SUCCESS\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create minimum eigen optimizer based on SamplingVQE\n", "vqe_optimizer = MinimumEigenOptimizer(vqe)\n", "\n", "# solve quadratic program\n", "result = vqe_optimizer.solve(qp)\n", "print(result.prettyprint())\n", "\n", "colors = [\"r\" if result.x[i] == 0 else \"c\" for i in range(n)]\n", "draw_graph(G, colors, pos)" ] }, { "cell_type": "markdown", "id": "9384ad2c-6c93-4ef2-bb71-3165f0a29173", "metadata": {}, "source": [ "# Traveling Salesman Problem" ] }, { "cell_type": "code", "execution_count": 15, "id": "0a7a6831-88f9-496d-bb35-3b2bb08804e2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "distance\n", " [[ 0. 48. 91.]\n", " [48. 0. 63.]\n", " [91. 63. 0.]]\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Generating a graph of 3 nodes\n", "n = 3\n", "num_qubits = n**2\n", "tsp = Tsp.create_random_instance(n, seed=123)\n", "adj_matrix = nx.to_numpy_array(tsp.graph)\n", "print(\"distance\\n\", adj_matrix)\n", "\n", "colors = [\"r\" for node in tsp.graph.nodes]\n", "pos = [tsp.graph.nodes[node][\"pos\"] for node in tsp.graph.nodes]\n", "draw_graph(tsp.graph, colors, pos)" ] }, { "cell_type": "markdown", "id": "11143657-7d03-45b1-ae63-6eea9d44d6e9", "metadata": {}, "source": [ "# Brute force approach" ] }, { "cell_type": "code", "execution_count": 16, "id": "9db117eb-9244-4982-b62a-6dbfd9d090a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "order = (0, 1, 2) Distance = 202.0\n", "Best order from brute force = (0, 1, 2) with total distance = 202.0\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAAGFCAYAAABg2vAPAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOzlJREFUeJzt3Qm41nP+//FXaVedSiXJloQQk7H87IydMZgGyRJZyk72fclOjOymrMVgjDEYYzC2MfbBIBpClDbpnGhf/tfLu/vf4lT3fc59n+9939/n47ru63ROnXN/qnPu7/v7+byXevPnz58vAACQWvWTXgAAAEgWwQAAAClHMAAAQMoRDAAAkHIEAwAApBzBAAAAKUcwAABAyjXI5g/NmzdPY8eOVYsWLVSvXr3CrwoAANSaWwlNnTpVHTt2VP369WsXDDgQWG211Wq/KgAAUOe+/vprderUqXbBgHcEMl+sZcuW+VsdAAAomKqqqp9u5jPX8VoFA5mjAQcCBAMAAJSW5R3xk0AIAEDKEQwAAJByBAMAAKQcwQAAAClHMAAAQMoRDAAAkHIEAwAApBzBAAAAKUcwAABAyhEMAACQcgQDAACkXFazCUrCjBnSN99I06d7ZqPUpInkCU3NmiW9MgAAilrpBgOzZ0svvii99pr07rvSyJELAwE/PLe5cWOpSxdp002lLbaQdt45PgYAAP6/evPn+8q5/BGIFRUVqqysTH5q4aRJ0iOPSMOGSV9+Kc2dGxd+7wT4Qu9fezrTvHnSzJmxY+A/44+ttpp08MHS734ndeyY7N8DAIACy/b6XTrBgJf5xBPSZZdJY8ZIK6wgtW6d/Z3+rFnS99/HjsLKK0tnnSUddFAEDwAAlKFsr9+lcSX0bsAJJ8Tj22+lDh3ikcuWf6NGEQR4R+C776QzzpCOPFIaO7aQKwcAoOgVf86AdwGOOEL64AOpVSupefPafT3vBDiQmDZNeuYZadQoaejQyC0AACCFintnYPx46bDDIhDwXX1tA4FFucrAQYETD/0czj8AACCFijcY8Bl/v37SRx9FINCwYf6fo0EDaZVVYnfgqKOkH37I/3MAAFDkijcYuPNO6Y03pLZtCxMIZDgR0cHGhx9KN9xQuOcBAKBIFWcw8PHH0uDBkfTnksFCc7Cx4orS3XdLr79e+OcDAKCIFGcwcM01UmWltNJKdfecTk5006LLL48yRgAAUqL4qgn+9z/plVck10O6UVAWPp4+XU9WVurtadM0dtYsVaywgjZq2lTHtW+v1b27kA0/l/sWOFnx7belzTar3d8DAIASUXw7A+4u+OOPUosWWX/KPd99p+enTtVmzZrp9A4dtH/r1np32jT1/uILfe4uhNlq2jS6Fv7xjzVbOwAAJai4OhC6hbDvyN1kqF27rD/tg2nTtH7Tpmq4yE7C6FmzdNCoUfpVixa6bNVVs1/D5MnRzMi7A84jAACgRJVmB0LX+vtinOOkwe7Nmi0WCJiPBzo3bqwvXKKYCwcA3pn49NPcPg8AgBJVXMHAiBExWCgPFQTe8Jg8Z45auXQwF84x8PwCrwUAgBQormDAd+O+w8/1Al6Nv1VVacKcOdo112ONzA7DJ5/Ueg0AAJSC4goGpkzJy5f5cuZMXT1unLo3baq9Kypy/wJOo8jTWgAAKHbFFQzMmRNJhLXw3Zw5Ovnrr9W8fn1dveqqqp9leeJi/Dm5VCEAAFDCiqvPgGcF1OTivcAPc+fqxNGjNXXePP1hjTXUrqZtjL0zkMt4ZAAASlhxBQNu+lPDYGDWvHk69ZtvfiopvHX11X+qJKgxr6FNm5p/PgAAJaS4jgnWWy/uyufOzenT5s2fr7PHjPmp38DVnTr9VGpYY35+P7wWAABSoLh2BtZfP7oAurwwh4Y/N0yYoJd/+EHbNW+uyrlz9bTnGixiz1ySCJ0r4PJCrwUAgBQormBg9dVjZPG4cTkFA586eJB+Cgj8WFJOwUCmFXLXrtl/DgAAJay4goH69aXf/U4aNCiqCvx+Fu5cY438PL+PBzy5sFevnLsgAgBQqoorZ8B69oxdgalT6/65p02L7ocHHFD3zw0AQEKKLxhYay1pp50iGKhlz4GcdwW+/17adFNp443r7nkBAEhY8QUDdsYZUWbo6YV1ZL4DgebNpfPOq1WvAwAASk1xBgPrrCOddlp0JPQZfoHNnzVLU76drn90PlbT1+9R8OcDAKCYFGcwYEccIW2/vfTdd1KuY4hzMWeO6k2YoNkb9dCVU0/Q4YdLo0YV7ukAACg2xRsMuDXxLbfEGf6ECYUJCDyq2GWM662n9o/fpSHDm/50QnDoodJf/hJpBAAAlLviDQbMLYHvvlvacssICNxMKF9XaPcjGD9e2mgj6b77pI4df8pd9C/33FO67DLpwgujwAAAgHJW3MGAtW8fV+g+feJO/ttvI5egptzq2F/DV/nf/lYaPjyaHS3gkQbOIRw4UHrpJemQQ6SRI/PzVwEAoBgVfzBgLVtKV10lDRkSpYe+o89c0LPdKXCXQn+OjwVWWUW6+eZ4tGtX7R/ffXfpgQei7YDjkMce49gAAFCe6s2fv/xLXFVVlSoqKlRZWamWvjAnqaoqDvR9pR4xInYLzFdt39Znuha6R4HzDDLVCM5B6NIlbvX32y/rqYT+EjfcID3yiLTLLtL55+fUKRkAgMRke/0uvWAgwxf711+X/v1v6f33pQ8+WLxRkYMCX7WdE+AmQptvLm27rbTCCjV6uueeizwCtz+48krmGAEAil/5BwNLchDg4wMfB8yfr1n1m2iHA9rrnAsa6Ne/zs9TfPONdM450mefSaecEl2L6U8EAChW2V6/SyNnIBveCXAugHMKOnfWG1931LsfNNBZZ+VvzEGnTpG24PEJ116rvH5tAACSUj7BQDXb+vb115F7mC+NGkkDBkjXXSe99ZbUu7f00Uf5+/oAANS1sgwGnPT31FNx4faGwbBhC4ODfNlhh/i6zkM88sj4NdUGAIBSVJbBwJtvRvqA5w5lggNXAeR77lHHjtJdd0m9ekXFgXcMXOwAAEApKctg4NlnpZkzo3DAb53k9+mn0jXX5P+5GjaMZEIHA++9F4GBCxsAACgVZRkMuHOg2wq42aA5r3CffaQeBRxI6KrFBx+UOnSQjjoqmiZmqhwBAChm5VNauIhXX40KQx8THHecdOON0nbb1c1zu1PyHXfESIWttpIuuSR6EwAAUNfSV1q4iG22kXbeWdpiC6lZs6goqCvekTj+eGnw4GiQePDB0rvv1t3zAwCQq7IMBjKcK7DaanUbDGT83//FDCQ/f79+0Z+AYwMAQDEq62DAfDEePTqZ5/YMpNtuk/r2lW6/XTrhBGny5GTWAgBAaoMBdw10G+GkuKLh2GOlW26JNsauNnCzIgAAikXZBwOrrx5Ti91rIEmek+Rqg7XXjqRGJxlybAAAKAapOCbwRXfs2KRXIq20knTzzbFT4ByC/v2liROTXhUAIO1SEQxYEkmE1XF7ZPchcA6BcxlcbeBJzAAAJKXsg4G2baXGjYsnGMhwAyRXG6y3nnTiidKtty5skgQAQF0q+2DAd+JJlRcuj5sR/f730Zfgnnvi+GDChKRXBQBIm7IPBpIuL8wmWOnTJwYeOa/B1Qb/+lfSqwIApElqgoFi3BlY1MYbR7VB9+7SySdLN90UrY0BACi01AQDLi+cPVtFraJCGjRIOvVUadgw6eijpW+/TXpVAIByl5pgoFjKC7Npody7d5QeTpoUv/YURgAACiUVwYAbD1mxHxUsasMNY3fAVQcDBkjXX1/8OxsAgNKUimDA5YWNGhVvEuHSeNrktddKp58uPfJIzDgYMybpVQEAyk0qgoFMeWGSMwpqc2xw0EHS0KFSZWU0KXrhhaRXBQAoJ6kIBoq9vDAb3brFsYFHI595pnTNNcnPWwAAlIdUBQOllDNQnebNpSuvlM4+W3r8cemII0o7wAEAFIdUBQMu0yv1JDwfG/TsGR0Lp0+XDjlEevbZpFcFAChlqQoGXF5YLnX7XbtKDzwgbbeddO650hVXSDNnJr0qAEApSk0wUIrlhcvTrJl02WXS+edLTz4pHX649OWXSa8KAFBqUhMMtGtXmuWF2Rwb7LuvdN990b740EOlp59OelUAgFKSmmDA5YWdOpXXzsCiunSR7r9f+tWvpAsvlC69NHIKAABYntQEA+VSUbAsTZtKF18cDycV+thg1KikVwUAKHYEA2Vo773j2MBHCD42eOIJaf78pFcFAChWqQoGnEToYUVpGA3cubN0773SHnvEkcFFF0nTpiW9KgBAMUpVMOCcgVKZXpgPTZpEpcHAgdKLL0ZPgpEjk14VAKDYpCoYyJQXluKMgtrYfffoSeDgoE8f6bHHODYAAKQ0GGjfvjzLC7MNhNy1cJ99okHReedJP/6Y9KoAAMUgVcFAuZcXLo8DIc818HyDV1+VeveWPvkk6VUBAJKWqmDA0hwMZOyyizR8uNSiRQw7evhhjg0AIM1SFwykpbwwm6BoyBDpt7+NcchnnSVNnZr0qgAASUhdMJCm8sJsjg1OP1269lrprbfi2OCjj5JeFQCgrqVyZ2Du3PKZXpgPO+4oDRsmtW4t9e0bRwgcGwBAeqQyGDCOChbXsaP0hz9IBx0kDRokDRggVVUlvSoAQF1IXTCw8spSw4YEA9Xxv8spp0Qw8N57Uq9e0gcfJL0qAEChpS4YSHt5YTa220568MEInI46KuYcuHMjAKA8pS4YyBwVpLHxUC4cCNx5p3TYYdJNN8WOwfffJ70qAEAhpDIY8M5A2loS10SDBtIJJ0Qw8PHH0sEHS//5T9KrAgDkWyqDAZcXjhkTVQVYvq22igoD76gce6w0dCjHBgBQTlIZDFBeWLO5DrfdFh0L/fbEE6XJk5NeFQAgH1IbDBhJhLlZYQWpf3/plluk//0vqg3crAgAUNpSGQx06EB5YW1svnlUG3TuLB13XCQacmwAAKUrlcGAywtXXZVgoDZWWil2CJxD4GZFDgomTUp6VQCAmkhlMGCUF+YnqHIfAucQfPllHBu8/nrSqwIA5CrVwQA7A/mx6aZRbbDuupFYeOutVGoAQClJdTDg6YVctPKjTZvoR3D88dI990j9+kkTJiS9KgBANlIdDHiM8bhxSa+kvI4N+vSJhEL3cfCxwb/+lfSqAADLk9pgwI2HjKOC/Ntkkzg22Ggj6eSTY8fAgRcAoDjVT3PvfbfbJYmwMFq1iumHDgaGDZOOOYZdGAAoVvXT3EDH5YXMKCjsscGhh0bp4cSJMdvg5ZeTXhUAYEmpDQaM8sK64eMC7w706CGddlrsGMyenfSqAAAZqQ8GyBmoGy1bStdeK51+uvTww1LfvlHNAQBIXuqDAWe900q3btSrJx10UEw9rKyMY4MXXkh6VQCA1AcDlBfWvW7d4thgiy2kM8+UrrlGmjUr6VUBQHqlOhigvDA5zZtLV10lnX229PjjMRqZ/wcASEaqgwFPL3RVAUmEyR0b9OwZHQunT5d695aefTbpVQFA+qQ6GMiUF3JHmqyuXaUHHpC23VY691zpiiukmTOTXhUApEeqgwGjoqA4NGsmDRwonXee9OST0db4q6+SXhUApAPBAMFAUR0b7LefdN990YfgkEOkp59OelUAUP5SHww4iZDywuLSpUsEBDvtJF14oXTppdKMGUmvCgDKV+qDgU6d4i6U8sLiOza45BLpoosiqfCww6RRo5JeFQCUp9QHA5nyQmYUFKdf/zp2CcxzDp54Qpo/P+lVAUB5SX0wsMoqlBcWu86dIyDYffc4MvBuwbRpSa8KAMpH6oMBygtLQ5Mm0gUXSJddJv3zn7FL8L//Jb0qACgPqQ8GMnkDBAOlYY89opVx48bS4YdLjz3GsQEA1BbBAOWFJZnncffdkU/gBkXuTfDjj0mvCgBKF8HAgouLEwgpLywd3hk45xzpyiulV1+NngSffpr0qgCgNBEMLNgZcHnh+PFJrwS52mWXODZYccXoWvjwwxwbAECuCAYWBAPGUUHp/v8NHSrtv3+MQz7rLGnq1KRXBQClg2BgQXlh/foEA6WsUSPpjDMiGHjzzZiA+PHHSa8KAEoDwYCkBg0oLywXbmE8fLjUqpV05JHxa44NAGDZCAYWoKKgfHTsKA0ZIh14oDRokDRggFRVlfSqAKB4EQwsQK+B8tKwoXTqqREMvPeedPDB0gcfJL0qAChOBAMLUF5YnrbbLo4K2reXjj462hrzfwwAiyMYWOSYYNYsacKEpFeCfOvQQbrzzuhFcNNNsWMwZUrSqwKA4kEwsADlheWfJHriiREMfPRRHBv85z9JrwoAigPBwCJJZ5QXlr+ttopjA1ePHHts9Cfg2ABA2hEMLHLn6ICAYKD8OX/g9tulI46QbrstdgwmT056VQCQHIKBRVBemK7R1f37SzffHKOQe/WS3n476VUBQDIIBhax1lo0qEmbLbaIYwP/3x93XCQacmwAIG3qzZ+//MtfVVWVKioqVFlZqZYtW9bNyoA65ADAjYruukvq0UMaOFBq2zbpVQFA7WR7/WZnAPAPQv3oQ+Acgi+/jGqDN95IelUAUDcIBoBFbLppHBt07SqdcIJ0663S3LlJrwoACotgAFhCmzbRj8A5BPfcI/XrRzMqAOWNYABYyrGBSw+dUDhmTFQbvPZa0qsCgMIgGMiCUyzZKk6nTTaJY4MNN5ROOil2DObMSXpVAJBfBAPV+PTTyCw//HBp3XWl9daTDj00LgqUnaVPq1bSDTdIJ58sDRsmHXOMNG5c0qsCgPwhGFiEL/TXXCPtv7/0+99Lzz8fDWl23jkuCKefLl1/vTRtWtIrRRLHBg4IXXro/AFXG7z8ctKrAoD8IBhYxIsvSoMHRzDgXYD334/3R4yQLrhAevJJ6f77uQikWffu8b3h44PTTpMGDZJmz056VQBQOwQDi3jgAWnHHaXLLosz4pVWii3hhg2l++6LZjRrrCG98krSK0WS3LfDO0QDBkgPPyz17SuNHZv0qgCg5ggGFuGL/5JHAH6/WTOpXr1438OMPv88keWhiPj7wRUGnno4ZUocG7zwQtKrAoCaIRhYxO67S998E7kBHlrz0ksx5va996R99oks8q23lnbbLemVolh06xZJhZtvLp15ZuSczJqV9KoAIDfMJliEz34ffFC6+uo4GvBYW8+9P/98aa+9IsGwslJq2lRq0iTp1aKY+Kfo0Ucjh2DttaUrr4wpmACQpGyv3wQD1XAFgZMH27WLOz+/BbItSz37bOm77yKI3HXXpFcEIM2qCAYKY/ToCBa23FJaccWkV4Ni9OOP0uWXS88+G5UpTjRs3DjpVQFIoyqmFtbMqFHSX/8ad3aWCZUyb5017q1g5xQA1XGQ6GDgvPOiHLVPH+mrr5JeFQAsHcHAEtxU5o47FiaBOWv8rbekDz+M93/xi2hA4+RCYGn8fbPfftK998b30iGHSE8/nfSqAKB6BANL8IW+eXNplVUWfsw9BpwQZt7u3XjjyCkAlmeddaJRlftXXHihdOml0owZSa8KABZHMLAEz7H/7LP4daazXNu20kcfLX4mzOAiZMt9Ki65JIKBv/9dOuywOI4CgGJBMLCETTeVfvghjgFcXmgffBA9Btx/wPkCLiFzn3ogl2MD96rwLoH5++eJJxbmogBAkhok+uxFyFMK3VPA3eX23TcqB0aOjPNef2zqVKlnT2mPPZJeKUpR585x7OTmRD4ycCKqSxG9ewAASSEYWIJ3Ay66KHYCPKDIPQbch36DDWKHwI2I2rRJepUoZW5Y5SODX/4yclE+/jjeOr8AAJJAn4FlcBmhEwY9s8D8L5WZUQDkg0sOvTPgtz6GcgUC32MA8oU+A3ngoUSZQMB4kUa+eQrmPfdIe+8tXXFF9CZwgioA1CWCgWo40/uqq6RXX433PZMAKBTvPp17bgQD/p5zTwK3NQaAukIwUI1PPolgwDkCS+4I+KiA4ACF4DkGnoDoDobuWvjII1QbAKgbBAPV2HbbKPtyKdiSL8YODNyYyHihRr550uHQoZE74OmZzidwBQsAFBIJhFkaNy6SvDyzwB3kNtuMEbUorBdeiPJD/8h5p8oTNAEgFyQQ5ikAOOMMadVV47HddlLv3jGa1r0IvKXrEkSgEHbaSRo+XGrVSjryyPg1u1EACoE+A0tRVSWdeKL0+edS//5xdNCpk9SggTRhgjRkSGzjenfAQQJQqIoWf68NHhzdL995J/pgpHSDDkCBEAwshVsOu/ugM7z33PPn5WA+JnAXwueeIxhA4RthnXZaNCm6+GLp4IOjSdFGGyW9MgDlgmOCpXBXuLXW+nkgkOFBRa4qoCYcdcVBp4+m2reXjjoq2hpT2QIgHwgGlmKTTaT//lf68MOFH/MUw/Hjo598374x3dAlYEBd8WjtO++M3JWbboodgylTkl4VgFLHMcEyar7/+U9p663jjsx942fNinyB0aNjZ4CtWiTBeSsnnRQTNj3jwAHpQw/FzIOloZU2gGWhtHAZPJTowQelN96IHYGZM6UOHeLsdrfdCASQPAenHqjlBNdM/4vqeCy3A9iJE6UuXepyhQCSlO31m2AgC34h9d3Ysu68gGLlpkVuYvTtt1LTprHL5dyDZQUPAMoDfQbyqHlzAgGULg9BqqyUzjpLuvXWaJzlaphJk5JeGYBiQc4AUMb+9a/oTfD00wtLYO+9VzrwwOio2bZt0isEUAzYGQDKmHNcXIHgyYiLfsyls841MCfGAkg3goEsOPHKHQmBUuM7/5VWks45J0pj/b18443RXrtr16gy+OtfoyrBpbQA0olgIAtuS+wyQqBUuI22G2JVVEgvvRQzNDbcMCZxDhgQjYs6d45yQ/+5Tz+NioTrrkt65QCSQDCQBd9FubcAUArchMjttF95Jd73EcHLL0sDB8YugQcfnXnmwnyBww6LqYhue/zUU3TVBNKIYCALHkb09ddMjENp8MXe5bCeYfDYY5Eb4H4Ejz8uffCBdMIJ0i67xJ/NTN10N0OXz952m7TiiokuH0ACqCbIMhiYNk36/nupTZukVwMs32WXReKgOxX6qGDMmOgv4EDAcw3M+QMOAB5+OIIBN9hab72kVw4gCQQDWVh99Xjr3QGCAZSK446T9t03jrh80Xf74kxLYgcCK6wgjRol9esXQcMBByS9YgBJIRjIMmfA/KK68cZJrwbIXseO8Vi0G6GPARwI+IjA+QLdusVoZADpRc5AFtx90NnX3hkASpXHHTuHwEcF7kh43nmRT3D77XGUACC92BnIIW/gm2+SXgVQc55FsOOOUUnwpz/F0CLnCbjkMJtph25O9N57UW3gdsZu0w2gPLAzkEMwQHkhyiH/xRM4e/WK98eOjfyBpclU0DzxhNS7t7TlltLpp0ePgn/8o27WDKDwCAZyeBGlvBDlwl0I77orhhcNGfLzlsT+PndOgXcT3n5b6t9/YR+C556Lo4ZTTmG3DCgXBANZ6tQptkddXgiUg759Y1hR9+5So0bxsTfeiLc+GnAFgvMM9t9f2nzzaFm8xx5S69bSEUdE74KRIxP9KwDIE4KBHMsLuRNCOXEvAm/9my/2ffrEnX/GMcdIzZpJF1yweA8CBxGuSGjXru7XDCD/CAZqUF4IlKOddooEw402ivfdrfDNN+OIYIMNFi9PdMDgADmzowCgtFFNkKWmTeMuiPJClKsddpC22SaOB8xTDseNk7beevERyK++Kg0bJvXsKa27bmLLBZBH7AzUYEYBUK4ygUAmGHD5oIcbZbz4ojRoUHwsM8mTpFqg9LEzkGMwQMIU0mLttaMZ0bnnxthjj0L2sKMZM6SHHoo/4wRDVxwAKG38GOeA8kKkiY/Fnn5a+uKLGG7kEcjbbhuTDR0oEAgA5YOdgRx3Bjwa1vPiXV4FpKHa4PXXIyBw3kyHDgt/LxMIuB/BzJmMPgZKGXF9jsGAkTeAtFlrrcUDgSXbFXvn4KKLYtQ3gNJDMJBj4yEjGACCAwH3Gzj0UOmFF2IK4mefJb0qALkiGMiBt0nbtiUYAJa0557S/fdHNYIDgj//mdwaoJQQDNQwiRDA4tZcU7r3XmnvvaXLL5fOP59jA6BUEAzU4KiAYAConpsTuRTxiiukV16JSYeffpr0qgAsD8FADXYG3JKYLVBg6XbdVXrggZhr4KFGjzzCzwxQzAgGalheWFmZ9EqA4g+c775b2ndf6eqrpbPPjp8dAMWHYCBHlBcC2fMgozPPlK65JsYj+9jg44+TXhWAJREM5IjyQqBmExE93MjtjY88UnrwQY4NgGJCMJAjn4F6SAvBAJD7GPAhQ6QDDpCuv1464wypqirpVQEwgoEaoLwQqJmGDaXTTotg4J134tjgww+TXhUAgoEa5g24ogBAzWy/vTR8eDTx6ts3Kg88+AhAMggGahgMfPNN0qsASn8I0l13xe7AjTfGjgFVOkAyCAZqGAz4rJMXLqB23L74pJMiGPjvf6VevaT33kt6VUD6EAzUMGfAyBsA8mObbaLCoGNH6Zhjoj8BxwZA3SEYqAHKC4H8a99euuMOqU8f6dZbpZNPliZPTnpVQDoQDNSwvLBNG4IBIN88Dvm446TBg6VPPpEOPlh6992kVwWUP4KBGqK8ECicLbeMaoM11pD69YtEQ44NgMIhGKghyguBwmrXTrrtNumoo6Q775ROOEH67rukVwWUJ4KBWgQD7AwAhVW/fiQUOofg88+j2uDNN5NeFVB+CAZqWV5IO1Wg8DbbLKoNunSRjj9euv12ae7cpFcFlA+CgRqivBCoW07avflmqX9/aejQeDtxYtKrAsoDwUANUV4IJHNs4KmH3hnwz56PDV57LelVAaWPYKCGVlwx7lRIIgTqXo8eUW3QrVt0MPSOAccGQM0RDNQCMwqA5LRuHW2MHQzcd18kGo4fn/SqgNJEMFALlBcCyR8bHHaY9Ic/SOPGxbHBK68kvSqg9BAM1AKNh4Di0L17HBtssol06qnSDTdIs2cnvSqgdBAM1DKJ0JMLKS8EkldRIV1/fYxCfugh6eijpbFjk14VUBoIBvJQXkjeAFAc6tWLeQYuPfSQo969pRdfTHpVQPEjGKgFyguB4rTBBtKwYdGs6PTTpeuuk2bNSnpVQPEiGKiF5s0jo5kkQqD4tGghXX21dOaZ0p/+JPXtyy4esDQEA7XEjAKguI8NDjggjg2mTo1jg+eeS3pVQPEhGKglggGg+K2/fhwbbLWVdPbZ0lVXcWwALIpgoJYoLwRKp2voFVdI554rPfGE1KcPR3xABsFAHnYGpkyJLUgAxX9ssP/+0j33SDNmSIccIj3zTNKrApJHMFBLVBQApadrV+mBB6Ttt5fOP18aODCCAyCtCAbysDNgZCkDpaVZM+nSS6ULL5T+9jfp8MOlL75IelVAMggG8lC+1KoVZ49AqR4b7LNPDDqaN0869FDpySeTXhVQ9wgG8oAkQqC0rb12BAS77CJdfHE8pk9PelVA3SEYyFPeAMEAUNqaNpUuuki65JLoReBdgs8/T3pVQN0gGMgDdgaA8rHXXpFc2KBBBASPPy7Nn5/0qoDCIhjIUxLh999LP/yQ9EoA5MOaa0r33huBgSsNLrhAmjYt6VUBhUMwkMeKAnYHgPLRuLF03nnS5ZdLL78cPQlGjkx6VUBhEAzkAb0GgPK1225xbNCkSXQtfPRRjg1QfggG8qBlS6migmAAKOe8IHct/M1vYq6BWxpzLIhyQjCQJyQRAuWtUSPprLNiLPJrr8UExBEjkl4VkB8EA3nMG6DxEFD+fvUrafjw2A088kjpj3/k2AClj2Agj8EALYmBdFh1VekPf5B69pSuvVY680ypqirpVQE1RzCQx2Bg8mTpxx+TXgmAujo2GDBAuu466e23o9rgww+TXhVQMwQDeUJ5IZBOO+wQxwZt2kh9+0rDhnFsgNJDMJAnBANAeq2yShwbHHywdMMN0mmnSZWVSa8KyB7BQB7LC/0gGADSye2LTz5ZuvFG6YMPIjB4//2kVwVkh2AgjygvBLDNNtKDD0odOkhHHx39CTweGShmBAN5RHkhAGvfXrrzTunww6Wbb5ZOOSXmlwDFimAgz8EAOwMAbIUVpOOPlwYPjuZEPjZ4992kVwVUj2AgjygvBLCk//u/qDbwMWK/ftKQIRwboPgQDBSgooDmQwAW1a6ddNttUXp4++3SCSfEjQNQLAgG8siRv3FUAGBJ9etLxx4r3XKL9Nln0kEHSW++mfSqgEAwUIDyQpIIASzN5ptHtUGXLpFTcMcdHBsgeQQDecaMAgDLs9JKUWWQySHo31+aODHpVSHNCAbyjPJCANkeG2RyCPya4WqDf/876VUhrQgG8ozGQwBy0aNHVBusv7504omRUzB3btKrQtoQDORZp07Sd99J06YlvRIApaJ162hj7GDg3nsj0XDChKRXhTQhGMgzygsB1PTYwB0L77pLGjtW6tVLevXVpFeFtCAYyDPKCwHUxsYbR7VB9+7Rxvj3v5fmzEl6VSh3BAN55tLCFi1IIgRQcxUV0qBB0qmnRj6BBx59+23Sq0I5IxjIs3r1mFEAID+vJb17R+nhpElRbfDii0mvCuWKYKAACAYA5MuGG0rDhkmbbiqdfrp0/fXS7NlJrwrlhmCgACgvBJDv48drr5XOOEN69NHoTzBmTNKrQjkhGCjQzoC39SgvBJDPY4MDD5SGDpUqK+PY4Pnnk14VykWDpBdQjjp1nKeOM7/Sd49+qWbtZ0rz50tNmkhrrCGtuWbUEAFADbg5kY8NBg6UzjpL+t3vItGwUaOkV4ZSVm/+fF+plq2qqkoVFRWqrKxUS+9X4efcaegvf5Fefllz331f40dWql3LmWq4woIJJA4A/NPqNOGNNpK23Vbad1+pffukVw6gBPmV+7HHIofA9xhXXbWwtBnI9fpNMFBbI0ZI990nPf64NGVKfKxJE81t1ET1mzZWvcwugMeSzZwpzZgRD/+zt2ol7b231KdPZAkBQI5GjpTOPjuOJs87T9ptt6RXhGJCMFBos2bF7FGPHvMBXrNmcde/wgrZfb6bj/vznFjgxgQeW3bccXGcAAA58MvIFVdIzzwj7bdfVB00bpz0qlAMCAYK6X//i5+2t96KrX/PI3V2T034n3/y5Ngt+MUvpOuuk7p1y/eKAZQ5v5Q88YR09dVxXOBjAx8fIN2qsrx+k8mWqw8+iDTeN96IIKBt25oHAubPzXydd9+VDjlEevvtfK4YQAr4peQ3v5Huvz82Hv1S8tRTSa8KpYJgINf8gCOOiClEq6yS3304f62OHaPn6FFHRdABADlae+1IY9p5Z+mii6RLLpGmT096VSh2BAPZqqqS+vWLTh8OBLLNDciFkw39tcePjxmmPj4AgBw1bSpdfHE8/vGPmIY4alTSq0IxIxjIltt/ffqptPLKhe0T4K/t5/jii8gIWn5KBwBUy8VKPjbwEcKhh0ZOAS8pqA7BQDZefll64IHI+m/YsPDP16BB9B995JEI6wGghtZaS7r3XmmPPaRLL5UuvJDuqPg5goHlcRjtDH9n+9dlJYWfy+WL3pFwjwIAqCFXLJ9/fnQtfOmlSC50fwIgg2Bged55R3r//WgQlEPVwLR583THxIk6cfRo7TRypH45YoT+mmlKlK02beJo4rXXcl83ACxh991jk9PBgXuduYMhxwYwgoHl+eMfo3OgmwrlYMqcObpr0iR9MWuW1qlp1YF/Yr078NBDNft8AFiCexDcc4+0zz6RlnTuudKPPya9KiSNYGBZHAQ8/XSk5ubYS6Btgwb6+zrr6MkuXXRyTecP+DlXXDHyBqZOrdnXAIAluFeaWxhfeWVsPPbuLX3ySdKrQpIIBpbXafCHH3LeFbBG9etrJScC1paf20XCPi4AgDzaZZeYgOjcaLdQefhhjg3SimBgeU2GvDuQZJNvh/CzZ8daACDPOnWShgyRfvtb6ZprYiwyG5HpQzCwvJ0B1/0Xsq/A8mSOJ0j9BVDAew6PW3HhlEeu+Njgo4+SXhXqEsHAsjg8LoayPq+BUB1Age2wQxwbuJCpb19p+HCODdKCYGBZ5sxRUfDugI8KFuEfUG8W3HKLNGhQYisDUGY8IuWuu6SDDorXlgEDohs7yhvBwPL2zmozkTCfmjT5KQDwycWtt0p77SXttlt0E3PSDwDkixutnnKKdMMN0nvvSb16MTut3BEMLEu7dsURDNSvr0lqqy5dpM03l845JyYoe2n+ofXHASDftt1WevBBqUOHGKbqaYjFcHKK/MtD7VsZW2+9eOvh4IWYUpgN/+TNn68VNlxfTZ6JrsjeIfCpgX/tnkSvvhrdxFZbLR7ODs78uqKiOOIZAKXJc9PuuEO6/Xbpppukt9+OscitWye9MuQTwcCydOsWXQBd59+8ec6f/vDkyZo6b54mLsg9eOWHHzRhwa8PbN1azbMJMHzFb9xYrbfupvcOiR9K/0BWVsaF/rvvpO23j2Ek33wTmcCTJi38dC+7uiDBDycJESgAWB63TDnhBKlHjziaPPhg6fLL432Uh3rz5y8/V7SqqkoVFRWqrKxUy7oc1pM035Vvs4309dcRHufo1599pm+XSPzLeGLttdXROQnLM2FCHFf4XGBBEyOf3Z15ZoxMsLvvjp7jGZ5INmZMLHvJh79chhsrVhck+NG2bbIVlQCKk19DPPTIuQT9+sWuJK8VxSvb6zc7A8vi73Cn1LpnpwODHL/j/1rbw3zHaT4HOPDA/x8IWPfuMWDkxhtjdMK66/68aeE668RjSe6hVF2g4I7H48YtPA90nFJdkOCP+fyQH34gndxd/bbbouLAbz3L7bLLYqcRpYudgeUZOzaKb32V9OTCuuR6Hucr+ErdufNSTxF8kpEPjju+/XbxIMFHD37rACITKDguWXXVnwcJfrvKKovFLQDK2Jtvxi6Bjxs9HnmzzZJeEWp6/SYYyMbJJ8ctuAtw6+qW2FdeByIeLXbnnUqaUx28c7BkkJAJFDKnIf7n8T9TdXkK/ng2JyMASofzlhwQOLHw6KOj6oCdw+JBMJBPvtrtvbc0cWLskdeF8eNjJ+KJJyI7sIg5bvFylwwSMu/7aMJ89+B/vuryFLzTkK8dDgB1/xowdGjct/ziF5Fc6LwjJI9gIN/c2ee002K8l8cKF5IzAF0u4FyFww5Tqb9IuLphySAhEyj4r7roWeTS8hRqMDgSQB17913p3HPjdNN5BFtumfSKUEUwUICr2vHHS3/+c4S8hbqN9W20dyD22CNGiZXxfpu/877/vvogYfTomB6d4eSk6oIEv3V8BqA4TJ4sXXSR9PrrMRb52GOTa9MCEQwUhG9jfSj2/PNxdcr37aqzAX0b7XJG77ml+N/a35XOn6wumdGPKVMW/ln3W6guSKDpEpDcvZO7Fbp1+sYbx7GBd/5Q9wgGCsW3qyeeKP3975ENt9JKtb/aZG6R3dxop52iXift/87L4SGOmeBgySMIJzRl0HQJSI57EfjYwBuel14qbb110itKnyqCgQJyDZ57c958c9y+1ubYIHMs4KuWO3i4zReZdLXewHGAUF2eAk2XgLrl9CcfG7htulOgjjuO8uO6RDBQF/773wh7//OfyJjxBd0H2Mu7ivif3Le2fvgwbcMNpSuuoLdnHVha0yUHDjRdAgrDP1fDh0uDB0sbbBAvd3VVmJV2VQQDdViA//LL8Z3+4ovSjz/Gx32Rb9x44VXDPw2+EjloMOcbbLddzAbdcccYP4hE0XQJqJv7J79MXnxxvASisAgGkvDFF5FCO2JEHJZ99tnCi7+DA/cL8N3/+utLW2whrb120itGlmi6BOSHT1adP+B7Jw88cgoW90KFQzBQDPxP66uI3/q7nWy1srSspkt+eMfBaLoEBL8kuqmr56t07SpddVUEy8g/ggGgCJRL0yXvfPgIxQM0nXgJ5MPHH0vnnBNJhh6N7GIq5BfBAFDkSqHpkk+5fMLlCXUe0eGTrj/9SVpvvfj9zz+XPv00AhlPz6QBFHLl73N3K3T7lgMOkE45heO0fGKEMVDkfGzgi7wfbsySTdOlr76KEq26aLrkEy4nQ7pxjNtqeDvX6S6ZnQGP0b7lltj5cG8H74KccUacAZNEiWy5CMvHBA4yBw2S3n8/3vf3L+oOP7JAEfIF3BdyP1x5mm3TJY+UzVfTJV/QfcF3OZjnZZ15ZgQCmbn13t7dZJPomr3GGtKjj0qHHx6lY7vu+vOv5wDHz+d1PvlkBA/Oo/VgG9rVppu/L3r2lLp3l84+W+rdOyYhVvd9hMIgGABKkLfjfZfuR7ZNl1zgsmjTJX8Nb80urWfCP/8Zs7l8sXfhi3cAunRZeBTg7V3vaKy5Zrz/u9/FroCPDap7EfcL/kcfReMZBxXOQ7j66mhVe8gh5Ncidp8eeCC+J1yC6LHIAwZElTYKi2AAKDNONvSLqh/Larrko4ZlBQIDB0rDhkULWec2+HMz/eV9l+8GnD4m8K6Ady/8Of6aO+9c/df05/iuz4GAX/AdRNx0k3TUUdKvfkU2ORZ+//p7b7PNpGuuid4EPjbw9xkKh2AASBHfYXXuHI9l5Qo8+GBc3H3RduuMzI5DZka9gwMnOTqHwccF3nFwAqHv5KrbrbCRI6XnnpMef3zhboI7cHt3wDkJnnAHmHeJ9t03gkwHkN458vfZnnsmvbLyRTAAYDHeLfDYWQcM3tb/y1+kDz+MrnF9+8bOgncIXGFw7bXSb34TVQW+sLvNrJtxVseJj61bR45Ahhs5bbSR9Mkni+cVAOZjKU8/dMDo0kMHm85doSdH/hEMAPhZMLDppvHI8BnuU09Jxx8fteCHHhrHAb5789m/X7T9MVcevPNOfK4TBDMXdr91Tbm3elu1Wvh1vdvgz89UHxAMoLpjg0sukX75ywgKHJj62GBZu1vIHeNWACxVZh7DqFFR2eD8Ac9f8AXcL8pOKsy0knUegn+d6VzioMIX9sz7TmhceeWF75s7N7oyInNssKQvv1y8MRPS69e/jl0Cc+DpCpfld8lBttgZALBUmQTDlVaKrVm/tfPOi7Pc00+PnQLnEHj3wJnfmZyB116LwMFljP46zldwEyPnJGSywz3w0wFDpnxy0YRGByLuXe92zn7e6nop+C2NjtLDuwEOCHw85fkGPjbw92HSHTrLAR0IAdTIs89GouG770orrhg9Bpzo5V+bL9Z77RX95x1I+E7Of+aRR+KIwTkIzhjfZpvIGl/0+CATDDhnobqZD25fm+HPW1ovBb9ccexQnv72t8hRcf6Kjw3WWSfpFRUn2hEDSIwv5N496NYttnTNRwv9+0eHOScROunQxwDudbC0Y4KlcXfG6nop+DF58sI/512D6oIEP5zMSKBQ2lzR4p0Bfx95l2q//fg/XRLBAICi4xJET6t7443oK+A+9PnuL5BpulTdzIdFmy55a3lpg6FcQrm0HgwoLj5Guv76aGfsZlcOQjO7UxDBAAAsacaMhU2XFg0S/NZljplXQ+c0LBkoZN53EiSBQvH5xz9i4JHzS3xs4L4XEMEAAOR6hzl27M+DBD/88UxlhSsmVl21+jwFJ0wyZyE5/j/zsYGPoE49NVpkp/3YoIpgAADywxUQ335bfTKjdxr8++ZAwMce1eUpOFBgNG/dBHW//30cR7nS5YILFp+n4UBhySmhy+QSGH+SO2ONGBF1tj6LcpThSWAuccgMCnHyS5FtGxEMAEAd8I6BjxiWlqfgi5P5GtGhQ/V5Ct5pYBhPfr3wQpQf+pLlY4P11ovOmu6E6amZHr61TBMmSH/+cwzocKaih3M4APB/eOaCn/m1L6MumXH3LY9c3GefheM9E0YwAAAJ87XCjZmqCxL8dvr0hX/WJXLVJTP6QR19zfh4xzMNPEnTvSxcjujgzCWu1123lE+aMkUaNEh6+OGoYfV2j697vtgv7a7fuwdOSHGZi//THQi4jOakkxL/zyMYAIAi5ldel0FWFyT4RtR9GDKW1nTJD+9UY+lc0nrWWdEq28c0/rf09d2Bwc96E/zzn3Gu8NlncRF3281ck0AcGDigcHCwwQbRDGHzzZUUggEAKFF+VfZNaXXJjDRdyo0DLvcfcPts7wr45t6zMPr0iZLEn8ybF20Nb7st/pC3aTIDM2rKX2fixAgqzjgjzigS+M8gGACAMkXTpez5xnzw4IVtsD0Lw8cz/vu/9JK0Xtd50kUXSUOHxlGAo6t8/cP48vrdd7Fb4PIGP+r4Hz3b6zezCQCgxPg13d0d/ci26dJ776Wz6VLPnvF3dTGAdwec7Onrs+dpuOnVMzteG4GAOxXl+2bXF37/Y/rJbrghvv5RR6kYsTMAAClB06W4LjslwLM1Np/+knYZ1if+Qt4qKCQfGThp4dFHc6xtrB2OCQAAWUtd0yWftey9d0QGq6xS+O17X2r9D9mjR/RO9pFEHeCYAACQNd+0umdOdUOjltZ06V//yr7pkj/uQKJoeNt+5MjY6qhXB+f4mSMDj/m86y7pxBNVTNgZAACkq+mSmz9su200Eqrr5kATJkS1wssv10kPAnYGAAAF54u87/r9WLKcfmlNl/77X+nppxNsuvT449ELwNFJDmbNm6fbJ03S05WVqpo7V+s0bqzj2rfXFrmMSXRugo8LnnlG2n9/FQuCAQBAwQIFX+T92HTT7JouuVugJxAWrOmSIxS3GPbickxwuPjbb/V8VZUObtNGqzVqpCcrK3XS6NG6Y401tEm2EYvPSvyXHz6cYAAAkG4+QvdF3o9NNsmu6dIXX8Tueq2aLn31VTxyPPL+aPp0PVtVpZPbt9ehXrSkvSsqdMCoUbppwgQNrS7ZYmkcwbz/fvxF3OWwCBAMAACKii/gvsj7sdFG2Tddev315Tdd6vblCK05bbrq53gRfn7qVLmicn8vaoFG9evrN61a6ZaJEzV+9mytnG2GZNOmUePoKYhbbqliQDAAAEhN06Xe4z9R3x/qqWWORwSfzJihNRo10opLfN4GvrBL+nTGjOyDAf85l2AQDAAAkH8+uu/aNR7VNV2a0X+0mj81N+evO2nOHLWtZl5B5mP+/Zy2PvxwlFIkCAYAAKngPj9NGk2XVsi9heLMefPUsJpgoPGCpIQZy6/SX5z/vEsbi0QJN5UEAKBuNK5fX7OrueDPXPCxJjVpXFREk6IIBgAA6TpHyPUuXnEcUN1RQOZj1R0hLDcQqKOWxNkgGAAApEfnzjWatLRu48b6atYs/ehxxIv4cEHnpHVzubA7GPFjrbVULAgGAADpsf768TaXhD9Jv2rZUp7V9Jg7Fy7SkfCvlZXasGnT7CsJzLkC/vOZtRQBEggBAOnhekSXA/qO3o0IsrRh06bauUUL3Txhgr6fO1edGjb8qQPh2FmzdMEaa+S2Bpc1eA3rrqtiwc4AACA9PK7YAcHUqTl/6qUdO/7UivipykpdN3685syfrxtXW009ch2e4F7LW20l5TLToMDYGQAApIcT9w45RHrnHWn27JzmKjeqX18nr7zyT48a8xGBGxf16qViws4AACBd9torpictcv5fZ9wv2XMMdtxRxYRgAACQLh4U1Ldv7AzUZeOfadPibf/+Oe1I1AWCAQBA+hxzjNSjhzRxYo36DuTMo5O9K+AdgSI7IjCCAQBA+jRuLF1xRYwQnjixsM/lYGP8eKldO2ngwBr1OSi04lsRAAB1oXt36cILI6lw0qTCBQIel+imRFddFfkCRYhgAACQXr17S+efH7/23Xs+jwx8NDBunNSokXT11ZG4WKQIBgAA6Xb00dKVV0Zi4Zgx0RQoH8mCY8dKbdpIgwdLPXuqmBEMAADQq5f0+OPS1ltHop/v6GtSaeBAwkFAVZW0667Sk09Ke+6pYkfTIQAAzO2BH3pIuv9+acgQ6csvY6vfnQJ95u+kwyXHDvv3HTQ4CPBugKcXdu0qHXusdOCBRZksWJ168+cv/4CkqqpKFRUVqqysVMuWLetmZQAAJGXWLOn556Xhw6W33ooLvfsSOBjwZTMTFDgYcJDglsTbbBM7DNtvH10Gi0C21292BgAAWJKT/vbYIx4OBEaOlEaMkEaPXnh84N0CVwd4+qB3AxwUlCiCAQAAlsV3/ZtsEo8yVRqHGQAAoGAIBgAASDmCAQAAUo5gAACAlCMYAAAg5QgGAABIOYIBAABSjmAAAICUIxgAACDlCAYAAEg5ggEAAFKOYAAAgJTLalBRZsqxRyECAIDSkLluZ67jtQoGpk6d+tPb1VZbLR9rAwAAdcjX8YqKiqX+fr35ywsXJM2bN09jx45VixYtVK9evXyvEQAAFIAv8Q4EOnbsqPr169cuGAAAAOWLBEIAAFKOYAAAgJQjGAAAIOUIBgAASDmCAQAAUo5gAACAlCMYAABA6fb/APQbOIyKfmcuAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from itertools import permutations\n", "\n", "\n", "def brute_force_tsp(w, N):\n", " a = list(permutations(range(1, N)))\n", " last_best_distance = 1e10\n", " for i in a:\n", " distance = 0\n", " pre_j = 0\n", " for j in i:\n", " distance = distance + w[j, pre_j]\n", " pre_j = j\n", " distance = distance + w[pre_j, 0]\n", " order = (0,) + i\n", " if distance < last_best_distance:\n", " best_order = order\n", " last_best_distance = distance\n", " print(\"order = \" + str(order) + \" Distance = \" + str(distance))\n", " return last_best_distance, best_order\n", "\n", "\n", "best_distance, best_order = brute_force_tsp(adj_matrix, n)\n", "print(\n", " \"Best order from brute force = \"\n", " + str(best_order)\n", " + \" with total distance = \"\n", " + str(best_distance)\n", ")\n", "\n", "\n", "def draw_tsp_solution(G, order, colors, pos):\n", " G2 = nx.DiGraph()\n", " G2.add_nodes_from(G)\n", " n = len(order)\n", " for i in range(n):\n", " j = (i + 1) % n\n", " G2.add_edge(order[i], order[j], weight=G[order[i]][order[j]][\"weight\"])\n", " default_axes = plt.axes(frameon=True)\n", " nx.draw_networkx(\n", " G2, node_color=colors, edge_color=\"b\", node_size=600, alpha=0.8, ax=default_axes, pos=pos\n", " )\n", " edge_labels = nx.get_edge_attributes(G2, \"weight\")\n", " nx.draw_networkx_edge_labels(G2, pos, font_color=\"b\", edge_labels=edge_labels)\n", "\n", "\n", "draw_tsp_solution(tsp.graph, best_order, colors, pos)" ] }, { "cell_type": "markdown", "id": "4d616ab9-64cf-4be9-b093-9589ab113f22", "metadata": {}, "source": [ "# Mapping to the Ising problem" ] }, { "cell_type": "code", "execution_count": 17, "id": "4b14c63f-dd00-497e-8554-2841e4b7bc32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem name: TSP\n", "\n", "Minimize\n", " 48*x_0_0*x_1_1 + 48*x_0_0*x_1_2 + 91*x_0_0*x_2_1 + 91*x_0_0*x_2_2\n", " + 48*x_0_1*x_1_0 + 48*x_0_1*x_1_2 + 91*x_0_1*x_2_0 + 91*x_0_1*x_2_2\n", " + 48*x_0_2*x_1_0 + 48*x_0_2*x_1_1 + 91*x_0_2*x_2_0 + 91*x_0_2*x_2_1\n", " + 63*x_1_0*x_2_1 + 63*x_1_0*x_2_2 + 63*x_1_1*x_2_0 + 63*x_1_1*x_2_2\n", " + 63*x_1_2*x_2_0 + 63*x_1_2*x_2_1\n", "\n", "Subject to\n", " Linear constraints (6)\n", " x_0_0 + x_0_1 + x_0_2 == 1 'c0'\n", " x_1_0 + x_1_1 + x_1_2 == 1 'c1'\n", " x_2_0 + x_2_1 + x_2_2 == 1 'c2'\n", " x_0_0 + x_1_0 + x_2_0 == 1 'c3'\n", " x_0_1 + x_1_1 + x_2_1 == 1 'c4'\n", " x_0_2 + x_1_2 + x_2_2 == 1 'c5'\n", "\n", " Binary variables (9)\n", " x_0_0 x_0_1 x_0_2 x_1_0 x_1_1 x_1_2 x_2_0 x_2_1 x_2_2\n", "\n" ] } ], "source": [ "qp = tsp.to_quadratic_program()\n", "print(qp.prettyprint())" ] }, { "cell_type": "code", "execution_count": 18, "id": "c2baead7-e00f-4ae8-bbee-38e2e66f1a53", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Offset: 7581.0\n", "Ising Hamiltonian:\n", "SparsePauliOp(['IIIIIIIIZ', 'IIIIIIIZI', 'IIIIIIZII', 'IIIIIZIII', 'IIIIZIIII', 'IIIZIIIII', 'IIZIIIIII', 'IZIIIIIII', 'ZIIIIIIII', 'IIIIIIIZZ', 'IIIIIIZIZ', 'IIIIIZIIZ', 'IIIIZIIIZ', 'IIIZIIIIZ', 'IIZIIIIIZ', 'IZIIIIIIZ', 'ZIIIIIIIZ', 'IIIIIIZZI', 'IIIIIZIZI', 'IIIIZIIZI', 'IIIZIIIZI', 'IIZIIIIZI', 'IZIIIIIZI', 'ZIIIIIIZI', 'IIIIIZZII', 'IIIIZIZII', 'IIIZIIZII', 'IIZIIIZII', 'IZIIIIZII', 'ZIIIIIZII', 'IIIIZZIII', 'IIIZIZIII', 'IIZIIZIII', 'IZIIIZIII', 'ZIIIIZIII', 'IIIZZIIII', 'IIZIZIIII', 'IZIIZIIII', 'ZIIIZIIII', 'IIZZIIIII', 'IZIZIIIII', 'ZIIZIIIII', 'IZZIIIIII', 'ZIZIIIIII', 'ZZIIIIIII'],\n", " coeffs=[-1282.5 +0.j, -1282.5 +0.j, -1282.5 +0.j, -1268.5 +0.j, -1268.5 +0.j,\n", " -1268.5 +0.j, -1290. +0.j, -1290. +0.j, -1290. +0.j, 606.5 +0.j,\n", " 606.5 +0.j, 606.5 +0.j, 12. +0.j, 12. +0.j, 606.5 +0.j,\n", " 22.75+0.j, 22.75+0.j, 606.5 +0.j, 12. +0.j, 606.5 +0.j,\n", " 12. +0.j, 22.75+0.j, 606.5 +0.j, 22.75+0.j, 12. +0.j,\n", " 12. +0.j, 606.5 +0.j, 22.75+0.j, 22.75+0.j, 606.5 +0.j,\n", " 606.5 +0.j, 606.5 +0.j, 606.5 +0.j, 15.75+0.j, 15.75+0.j,\n", " 606.5 +0.j, 15.75+0.j, 606.5 +0.j, 15.75+0.j, 15.75+0.j,\n", " 15.75+0.j, 606.5 +0.j, 606.5 +0.j, 606.5 +0.j, 606.5 +0.j])\n" ] } ], "source": [ "from qiskit_optimization.converters import QuadraticProgramToQubo\n", "\n", "qp2qubo = QuadraticProgramToQubo()\n", "qubo = qp2qubo.convert(qp)\n", "qubitOp, offset = qubo.to_ising()\n", "print(\"Offset:\", offset)\n", "print(\"Ising Hamiltonian:\")\n", "print(str(qubitOp))" ] }, { "cell_type": "code", "execution_count": 19, "id": "ab21af8d-a365-46d7-a19f-7c82a0864741", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "objective function value: 202.0\n", "variable values: x_0_0=1.0, x_0_1=0.0, x_0_2=0.0, x_1_0=0.0, x_1_1=1.0, x_1_2=0.0, x_2_0=0.0, x_2_1=0.0, x_2_2=1.0\n", "status: SUCCESS\n" ] } ], "source": [ "result = exact.solve(qubo)\n", "print(result.prettyprint())" ] }, { "cell_type": "code", "execution_count": 20, "id": "c8aa754a-07a2-4fbb-95d4-c53942ddcd56", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -7379.0\n", "tsp objective: 202.0\n", "feasible: True\n", "solution: [0, 1, 2]\n", "solution objective: 202.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Making the Hamiltonian in its full form and getting the lowest eigenvalue and eigenvector\n", "ee = NumPyMinimumEigensolver()\n", "result = ee.compute_minimum_eigenvalue(qubitOp)\n", "\n", "print(\"energy:\", result.eigenvalue.real)\n", "print(\"tsp objective:\", result.eigenvalue.real + offset)\n", "x = tsp.sample_most_likely(result.eigenstate)\n", "print(\"feasible:\", qubo.is_feasible(x))\n", "z = tsp.interpret(x)\n", "print(\"solution:\", z)\n", "print(\"solution objective:\", tsp.tsp_value(z, adj_matrix))\n", "draw_tsp_solution(tsp.graph, z, colors, pos)" ] }, { "cell_type": "markdown", "id": "e8876177-f41a-4528-82f8-9d0252e34c6e", "metadata": {}, "source": [ "# Running it on quantum computer" ] }, { "cell_type": "code", "execution_count": 21, "id": "1557fe0d-73ca-4c5f-9c87-57b6f049c402", "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 22, "id": "2ff44b09-2e89-4323-a73d-0b3c70b9b086", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -7337.3740234375\n", "time: 131.1148111820221\n", "feasible: True\n", "solution: [0, 2, 1]\n", "solution objective: 202.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "optimizer = SPSA(maxiter=300)\n", "ry = TwoLocal(qubitOp.num_qubits, \"ry\", \"cz\", reps=5, entanglement=\"linear\")\n", "vqe = SamplingVQE(sampler=Sampler(backend = qr_backend), ansatz=ry, optimizer=optimizer)\n", "\n", "result = vqe.compute_minimum_eigenvalue(qubitOp)\n", "\n", "print(\"energy:\", result.eigenvalue.real)\n", "print(\"time:\", result.optimizer_time)\n", "x = tsp.sample_most_likely(result.eigenstate)\n", "print(\"feasible:\", qubo.is_feasible(x))\n", "z = tsp.interpret(x)\n", "print(\"solution:\", z)\n", "print(\"solution objective:\", tsp.tsp_value(z, adj_matrix))\n", "draw_tsp_solution(tsp.graph, z, colors, pos)" ] }, { "cell_type": "code", "execution_count": 23, "id": "eca980e7-2aa4-44d4-8007-fff607467548", "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 24, "id": "fa87c098-cffb-4da9-9868-31a92752ac43", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "objective function value: 202.0\n", "variable values: x_0_0=0.0, x_0_1=0.0, x_0_2=1.0, x_1_0=1.0, x_1_1=0.0, x_1_2=0.0, x_2_0=0.0, x_2_1=1.0, x_2_2=0.0\n", "status: SUCCESS\n", "solution: [0, 2, 1]\n", "solution objective: 202.0\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create minimum eigen optimizer based on SamplingVQE\n", "vqe_optimizer = MinimumEigenOptimizer(vqe)\n", "\n", "# solve quadratic program\n", "result = vqe_optimizer.solve(qp)\n", "print(result.prettyprint())\n", "\n", "z = tsp.interpret(x)\n", "print(\"solution:\", z)\n", "print(\"solution objective:\", tsp.tsp_value(z, adj_matrix))\n", "draw_tsp_solution(tsp.graph, z, colors, pos)" ] }, { "cell_type": "code", "execution_count": 25, "id": "4d834a9c-0f0e-4e94-b6b2-c4af0f1e798f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit2.2.1
qiskit_algorithms0.4.0
qiskit_ibm_runtime0.40.1
qiskit_optimization0.7.0
qiskit_aer0.17.1
System information
Python version3.12.9
OSWindows
Tue Oct 21 15:36:05 2025 Mountain Daylight Time
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Quantum Rings Version Information

SoftwareVersion
QuantumRingsLib0.11.0
quantumrings-toolkit-qiskit0.2.0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of a Qiskit project

© Copyright IBM 2017, 2025.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

Modifications (c) Copyright Quantum Rings Inc, 2025
Modified from the originals
Added support for Quantum Rings toolkit for Qiskit.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%quantumrings_version_table\n", "%qiskit_copyright" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }