{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Max-Cut and Traveling Salesman Problem" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "Many problems in quantitative fields such as finance and engineering are optimization problems. Optimization problems lie at the core of complex decision-making and definition of strategies. \n", "\n", "Optimization (or combinatorial optimization) means searching for an optimal solution in a finite or countably infinite set of potential solutions. Optimality is defined with respect to some criterion function, which is to be minimized or maximized. This is typically called cost function or objective function. \n", "\n", "**Typical optimization problems**\n", "\n", "Minimization: cost, distance, length of a traversal, weight, processing time, material, energy consumption, number of objects\n", "\n", "Maximization: profit, value, output, return, yield, utility, efficiency, capacity, number of objects \n", "\n", "We consider here max-cut problems of practical interest in many fields, and show how they can be mapped on quantum computers manually and how Qiskit optimization module supports this.\n", "\n", "\n", "### Weighted Max-Cut\n", "\n", "Max-Cut is an NP-complete problem, with applications in clustering, network science, and statistical physics. To grasp how practical applications are mapped into given Max-Cut instances, consider a system of many people that can interact and influence each other. Individuals can be represented by vertices of a graph, and their interactions seen as pairwise connections between vertices of the graph, or edges. With this representation in mind, it is easy to model typical marketing problems. For example, suppose that it is assumed that individuals will influence each other's buying decisions, and knowledge is given about how strong they will influence each other. The influence can be modeled by weights assigned on each edge of the graph. It is possible then to predict the outcome of a marketing strategy in which products are offered for free to some individuals, and then ask which is the optimal subset of individuals that should get the free products, in order to maximize revenues.\n", "\n", "The formal definition of this problem is the following:\n", "\n", "Consider an $n$-node undirected graph *G = (V, E)* where *|V| = n* with edge weights $w_{ij}>0$, $w_{ij}=w_{ji}$, for $(i, j)\\in E$. A cut is defined as a partition of the original set V into two subsets. The cost function to be optimized is in this case the sum of weights of edges connecting points in the two different subsets, *crossing* the cut. By assigning $x_i=0$ or $x_i=1$ to each node $i$, one tries to maximize the global profit function (here and in the following summations run over indices 0,1,...n-1)\n", "\n", "$$\\tilde{C}(\\textbf{x}) = \\sum_{i,j} w_{ij} x_i (1-x_j).$$\n", "\n", "In our simple marketing model, $w_{ij}$ represents the probability that the person $j$ will buy a product after $i$ gets a free one. Note that the weights $w_{ij}$ can in principle be greater than $1$ (or even negative), corresponding to the case where the individual $j$ will buy more than one product. Maximizing the total buying probability corresponds to maximizing the total future revenues. In the case where the profit probability will be greater than the cost of the initial free samples, the strategy is a convenient one. An extension to this model has the nodes themselves carry weights, which can be regarded, in our marketing model, as the likelihood that a person granted with a free sample of the product will buy it again in the future. With this additional information in our model, the objective function to maximize becomes \n", "\n", "$$C(\\textbf{x}) = \\sum_{i,j} w_{ij} x_i (1-x_j)+\\sum_i w_i x_i. $$\n", " \n", "In order to find a solution to this problem on a quantum computer, one needs first to map it to an Ising Hamiltonian. This can be done with the assignment $x_i\\rightarrow (1-Z_i)/2$, where $Z_i$ is the Pauli Z operator that has eigenvalues $\\pm 1$. Doing this we find that \n", "\n", "$$C(\\textbf{Z}) = \\sum_{i,j} \\frac{w_{ij}}{4} (1-Z_i)(1+Z_j) + \\sum_i \\frac{w_i}{2} (1-Z_i) = -\\frac{1}{2}\\left( \\sum_{i" ] }, "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": 3, "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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Brute force approach\n", "\n", "Try all possible $2^n$ combinations. For $n = 4$, as in this example, one deals with only 16 combinations, but for n = 1000, one has 1.071509e+30 combinations, which is impractical to deal with by using a brute force approach. " ] }, { "cell_type": "code", "execution_count": 4, "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))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Mapping to the Ising problem" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Qiskit optimization provides functionality to generate `QuadraticProgram` from the problem specification as well as create the corresponding Ising Hamiltonian.\n" ] }, { "cell_type": "code", "execution_count": 5, "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": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Offset: -2.5\n", "Ising Hamiltonian:\n", "SparsePauliOp(['IIZZ', 'IZIZ', 'IZZI', 'ZIIZ', '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": 7, "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())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Since the problem was cast to a minimization problem, the solution of $-4$ corresponds to the optimum." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Checking that the full Hamiltonian gives the right cost " ] }, { "cell_type": "code", "execution_count": 8, "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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Running it on quantum computer\n", "We run the optimization routine using a feedback loop with a quantum computer that uses trial functions built with Y single-qubit rotations, $U_\\mathrm{single}(\\theta) = \\prod_{i=1}^n Y(\\theta_{i})$, and entangler steps $U_\\mathrm{entangler}$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -1.4996861455587311\n", "time: 8.708028078079224\n", "max-cut objective: -3.999686145558731\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(), 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": 11, "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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Traveling Salesman Problem\n", "\n", "In addition to being a notorious NP-complete problem that has drawn the attention of computer scientists and mathematicians for over two centuries, the Traveling Salesman Problem (TSP) has important bearings on finance and marketing, as its name suggests. Colloquially speaking, the traveling salesman is a person that goes from city to city to sell merchandise. The objective in this case is to find the shortest path that would enable the salesman to visit all the cities and return to its hometown, i.e. the city where he started traveling. By doing this, the salesman gets to maximize potential sales in the least amount of time. \n", "\n", "The problem derives its importance from its \"hardness\" and ubiquitous equivalence to other relevant combinatorial optimization problems that arise in practice.\n", " \n", "The mathematical formulation with some early analysis was proposed by W.R. Hamilton in the early 19th century. Mathematically the problem is, as in the case of Max-Cut, best abstracted in terms of graphs. The TSP on the nodes of a graph asks for the shortest *Hamiltonian cycle* that can be taken through each of the nodes. A Hamilton cycle is a closed path that uses every vertex of a graph once. The general solution is unknown and an algorithm that finds it efficiently (e.g., in polynomial time) is not expected to exist.\n", "\n", "Find the shortest Hamiltonian cycle in a graph $G=(V,E)$ with $n=|V|$ nodes and distances, $w_{ij}$ (distance from vertex $i$ to vertex $j$). A Hamiltonian cycle is described by $N^2$ variables $x_{i,p}$, where $i$ represents the node and $p$ represents its order in a prospective cycle. The decision variable takes the value 1 if the solution occurs at node $i$ at time order $p$. We require that every node can only appear once in the cycle, and for each time a node has to occur. This amounts to the two constraints (here and in the following, whenever not specified, the summands run over 0,1,...N-1)\n", "\n", "$$\\sum_{i} x_{i,p} = 1 ~~\\forall p$$\n", "$$\\sum_{p} x_{i,p} = 1 ~~\\forall i.$$\n", "\n", "For nodes in our prospective ordering, if $x_{i,p}$ and $x_{j,p+1}$ are both 1, then there should be an energy penalty if $(i,j) \\notin E$ (not connected in the graph). The form of this penalty is \n", "\n", "$$\\sum_{i,j\\notin E}\\sum_{p} x_{i,p}x_{j,p+1}>0,$$ \n", "\n", "where it is assumed the boundary condition of the Hamiltonian cycles $(p=N)\\equiv (p=0)$. However, here it will be assumed a fully connected graph and not include this term. The distance that needs to be minimized is \n", "\n", "$$C(\\textbf{x})=\\sum_{i,j}w_{ij}\\sum_{p} x_{i,p}x_{j,p+1}.$$\n", "\n", "Putting this all together in a single objective function to be minimized, we get the following:\n", "\n", "$$C(\\textbf{x})=\\sum_{i,j}w_{ij}\\sum_{p} x_{i,p}x_{j,p+1}+ A\\sum_p\\left(1- \\sum_i x_{i,p}\\right)^2+A\\sum_i\\left(1- \\sum_p x_{i,p}\\right)^2,$$\n", "\n", "where $A$ is a free parameter. One needs to ensure that $A$ is large enough so that these constraints are respected. One way to do this is to choose $A$ such that $A > \\mathrm{max}(w_{ij})$.\n", "\n", "Once again, it is easy to map the problem in this form to a quantum computer, and the solution will be found by minimizing a Ising Hamiltonian. " ] }, { "cell_type": "code", "execution_count": 12, "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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fv36sXr1aqxntzmKiIg4s3odBiwWC0CdhAGA8PBwli5dSs+ePVm4cCFDhw7lxIkTdXJtERGR6qrXYSA0NBRfX1+Hbi+8HE9PTwYPHsyCBQvYuXMncXFxfP/993V2fRERkaqq12GgtrYXVsZNN91EcnIyFouFgQMHsmLFCk0biIiIU6rXYQDsUwV1OTJwvrCwMBYvXkyfPn1YsmQJgwcPJicnx5BaRERELkZhoJZ5eHgwaNAgXn31Vfbt28df//pXvv32W8PqERER+bV6HwZiYmI4evRorW4vrIzrr7+edevWccUVV/DUU0/x+uuva9pAREScQr0PAxaLBZvNRkZGhtGlEBISwquvvsqTTz7JihUrGDRoEMeOHTO6LBERcXP1PgxER0cDGLKIsCJms5n+/fuzePFiDh8+TFxcHP/973+NLktERNxYvQ8DTZo0wcfHp856DVRW586dSU5Opk2bNgwZMoRXX32VsrIyo8sSERE3VO/DgJHbCy8nODiYBQsWMHjwYFavXs2AAQPIysoyuiwREXEz9T4MgH0RoZE7Ci7FbDbTu3dvli5dSkZGBrGxsWzevNnoskRExI24RRiIjo522jBwTseOHUlOTuaaa65h6NChvPLKK5SWlhpdloiIuAG3CAPOsr3wcho1asS8efN49tlnSU5Opn///hw5csToskREpJ5zizBgsViwWq0ucWM1m80kJCSwfPlysrOziYuLY+PGjUaXJSIi9ZjbhAFwnu2FlXHNNdeQlJREp06dGD58OHPnzqWkpMToskREpB5yizAQGhqKj4+P068b+LXAwEBeeuklhg8fzttvv03fvn1JT083uiwREaln3CIMmM1ml1hEWBGTyURsbCwrV67k5MmTxMXFsWHDBqPLEhGResQtwgA49/bCymjXrh3JycnceOONjBo1ilmzZjn9gkgREXENbhMGnLXxUFUEBAQwc+ZMRo0axfvvv0/v3r1d/j2JiIjx3CoMHD161OUX4ZlMJh577DFWrVrF6dOn6dGjB5988onRZYmIiAtzqzDgKtsLK6NNmzYkJSVx6623Mm7cOKZNm0ZRUZHRZYmIiAtyqzAArrW98HL8/f2ZOnUq48aN46OPPqJXr14cOnTI6LJERMTFuE0YaNKkCd7e3i69iLAiJpOJRx99lMTEREpLS+nRowcfffSR0WWJiIgLcZsw4Mrb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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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Brute force approach" ] }, { "cell_type": "code", "execution_count": 13, "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": "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", "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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Mapping to the Ising problem" ] }, { "cell_type": "code", "execution_count": 14, "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": 15, "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', 'IIIIIIZZI', 'IIIIIZIIZ', 'IIIIIZIZI', 'IIIIIZZII', 'IIIIZIIIZ', 'IIIIZIIZI', 'IIIIZIZII', 'IIIIZZIII', 'IIIZIIIIZ', 'IIIZIIIZI', 'IIIZIIZII', 'IIIZIZIII', 'IIIZZIIII', 'IIZIIIIIZ', 'IIZIIIIZI', 'IIZIIIZII', 'IIZIIZIII', 'IIZIZIIII', 'IIZZIIIII', 'IZIIIIIIZ', 'IZIIIIIZI', 'IZIIIIZII', 'IZIIIZIII', 'IZIIZIIII', 'IZIZIIIII', 'IZZIIIIII', 'ZIIIIIIIZ', 'ZIIIIIIZI', 'ZIIIIIZII', 'ZIIIIZIII', 'ZIIIZIIII', 'ZIIZIIIII', '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, 606.5 +0.j, 12. +0.j, 12. +0.j,\n", " 12. +0.j, 606.5 +0.j, 12. +0.j, 606.5 +0.j, 12. +0.j,\n", " 12. +0.j, 606.5 +0.j, 606.5 +0.j, 606.5 +0.j, 606.5 +0.j,\n", " 22.75+0.j, 22.75+0.j, 606.5 +0.j, 15.75+0.j, 15.75+0.j,\n", " 22.75+0.j, 606.5 +0.j, 22.75+0.j, 15.75+0.j, 606.5 +0.j,\n", " 15.75+0.j, 606.5 +0.j, 22.75+0.j, 22.75+0.j, 606.5 +0.j,\n", " 15.75+0.j, 15.75+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": 16, "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())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Checking that the full Hamiltonian gives the right cost " ] }, { "cell_type": "code", "execution_count": 17, "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)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Running it on quantum computer\n", "We run the optimization routine using a feedback loop with a quantum computer that uses trial functions built with Y single-qubit rotations, $U_\\mathrm{single}(\\theta) = \\prod_{i=1}^n Y(\\theta_{i})$, and entangler steps $U_\\mathrm{entangler}$." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "energy: -7326.024699521861\n", "time: 28.526036977767944\n", "feasible: True\n", "solution: [1, 2, 0]\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(), 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": 20, "metadata": {}, "outputs": [], "source": [ "algorithm_globals.random_seed = 123\n", "seed = 10598" ] }, { "cell_type": "code", "execution_count": 21, "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: [1, 2, 0]\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": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

Qiskit SoftwareVersion
qiskit-terra0.25.0.dev0+1d844ec
qiskit-aer0.12.0
qiskit-ibmq-provider0.20.2
qiskit-nature0.7.0
qiskit-optimization0.6.0
System information
Python version3.10.11
Python compilerClang 14.0.0 (clang-1400.0.29.202)
Python buildmain, Apr 7 2023 07:31:31
OSDarwin
CPUs4
Memory (Gb)16.0
Thu May 18 16:57:58 2023 JST
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of Qiskit

© Copyright IBM 2017, 2023.

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.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.9.7" } }, "nbformat": 4, "nbformat_minor": 4 }