{ "cells": [ { "cell_type": "markdown", "id": "0a1236e8-872c-4d9b-97bc-da933fc63474", "metadata": {}, "source": [ "# Model validation\n", "\n", "Mapping an optimization problem to a formalism that a quantum computer can handle requires building a model. This model must be validated to ensure that its solutions correspond to the solutions of the original optimization problem we setout to solve. In this `how-to` we illustrate this mapping with the maximum independent set (MIS) problem. In MIS we seek the largest set of nodes of a graph $G=(V, E)$ such that no two nodes in the maximum independent set share an edge. Mathematically,\n", "\n", "\\begin{align}\n", "&\\max_{x\\in\\{0,1\\}^n}\\sum_{i\\in V} x_i \\\\\n", "&\\text{s.t.}\\quad x_i+x_j\\leq 1\\quad\\forall~(i,j)\\in E.\n", "\\end{align}\n", "Here, $n=|V|$ is the number of nodes of $G$ and if the decision variable $x_i=1$ then node $i$ is in the independent set. First, we will define a MIS problem instance on a small five node graph. Such small instances are easy to solve and they allow us to test our modelling pipeline." ] }, { "cell_type": "code", "execution_count": 1, "id": "03e48006-21f4-415d-872f-fa14fe046e82", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "EdgeIndices[0, 1, 2, 3, 4, 5]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import rustworkx as rx\n", "\n", "graph = rx.PyGraph()\n", "\n", "# Add 5 nodes (0 through 4)\n", "graph.add_nodes_from([None] * 5)\n", "\n", "# Add edges\n", "edges = [(0, 1, 1), (0, 4, 1), (1, 2, 1), (1, 4, 1), (2, 3, 1), (3, 4, 1)]\n", "graph.add_edges_from(edges)" ] }, { "cell_type": "code", "execution_count": 2, "id": "5cd95b79-e4de-48fe-8b30-da8afbdb9c77", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_opt_mapper.applications import IndependentSet\n", "\n", "mis = IndependentSet(graph)" ] }, { "cell_type": "code", "execution_count": 3, "id": "27b1b8d3-e2b7-4304-b8d8-d5e63af5deec", "metadata": {}, "outputs": [ { "data": { "image/png": "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l19+kS1btsijjz5qRnXCewPlqVOn2Pa2CQIlALejQmlveiP71VdflRo1akiXLl1M03GdaqNVyokTJ5otbqqR3o9tb3vhljcAtwsNDZVixYpRobRhNVJvZn///fcSHBwsvXv3lvvvv9+EDgKk71YpdeRlcnKyFC9e3OrlwIWoUAKwrEpJhdL36ezskSNHyhVXXCE333yzxMbGykcffWTORo4fP970KyRM+vZtb7a97YEKJQBL0IvSd2VkZJjLGFqN/OGHH0w1WifaaDWycePGBEgbqVatmjRt2tRse2tFGr6LCiUASzB+0fdo9VHb/GiI6N69uzkTOXbsWPOjhssmTZoQJm3o9ttvN3+x0G1v+C4CJQBLMH7RN5w+fVrmzZsnXbt2NUHyvffek27dupmRiL///rs88MADTEqxOba97YFACcASbHl7t71798rzzz9vbvL27NlTEhISzGhEPRv5ySefyDXXXGP1EuGB297wXZyhBGAJLuV4ZzVy/vz5JjguWrTIVB779+8v9913n1x99dVWLw8eftv7xRdf5La3D6NCCcCyCqVWtXTUHjzb7t275dlnnzXNx3X78sSJE/Lll1+aauTHH39MmESBt721ZRR8E4ESgGUVSg2TR48etXopyEV6errZouzUqZMZh6jb2Hq54s8//5Q1a9bIPffcY/qJAgWhbaN023vWrFlWLwUuQqAEYAnGL3qm6OhoeeaZZ6Ry5comQJ48eVImTZpkqpEffvihREZGWr1EePG2N7e9fReBEoAlGL/oOdLS0mTGjBnSoUMHqV27tjkj2a9fP9m2bZusXr1a7rrrLgkJCbF6mfBybHv7NgIlAEtQobTezp07ZejQoVKpUiXp06ePGY84depUU43U9j/16tWzeonwsW1v7UXKbW/fxC1vAJYoU6aMaXJNhdK9tEI0e/ZsU4VcuXKlhIeHy913321ual955ZVWLw822PZ+6aWXJCUlhTO4PoYKJQBLBAQEmDBDhdI9tm/fLk888YSpRmqrH39/f/nqq68kLi5O3nnnHcIk3BYo9Vwu296+h0AJwDL0onQt/cY9ZcoUad26tdSvX99sZw8cONBsdS9btszMVg4ODrZ6mbDhtje3vX0PgRKAZZiW4xpbt26Vxx57TCpWrGgu1BQtWlRmzpwpBw4ckDfffNNcvAGsvu2t297wHQRKAJYhUBae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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mis.draw()" ] }, { "cell_type": "code", "execution_count": 4, "id": "5e6d6203-86dd-42f4-8210-c04d72b63c5e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem name: Independent set\n", "\n", "Maximize\n", " x_0 + x_1 + x_2 + x_3 + x_4\n", "\n", "Subject to\n", " Linear constraints (6)\n", " x_0 + x_1 <= 1 'c0'\n", " x_0 + x_4 <= 1 'c1'\n", " x_1 + x_2 <= 1 'c2'\n", " x_1 + x_4 <= 1 'c3'\n", " x_2 + x_3 <= 1 'c4'\n", " x_3 + x_4 <= 1 'c5'\n", "\n", " Binary variables (5)\n", " x_0 x_1 x_2 x_3 x_4\n", "\n" ] } ], "source": [ "opt_problem = mis.to_optimization_problem()\n", "print(opt_problem.prettyprint())" ] }, { "cell_type": "markdown", "id": "4b3517c7-5e6c-4319-8bb2-a9a9b2b9d537", "metadata": {}, "source": [ "To implement this problem on a quantum computer we need to convert the problem to a quadratic unconstrained binary optimization problem. This requires mapping inequality constraints into equality constraints and then add them as penalty terms to the objective. We do this with the `LinearInequalityToPenalty` converter." ] }, { "cell_type": "code", "execution_count": 5, "id": "125627ad-5ceb-4e38-8a7f-1dc244d58969", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_opt_mapper.converters import LinearInequalityToPenalty\n", "\n", "penalty = 0.5\n", "converter = LinearInequalityToPenalty(penalty=penalty)\n", "converted_prob = converter.convert(opt_problem)" ] }, { "cell_type": "markdown", "id": "c6b153b0-c016-4899-8f6b-a31a08ba5992", "metadata": {}, "source": [ "The result of the conversion is the optimization problem shown below. This problem no longer has any constraints. The objective is then easily converted into an Ising Hamiltonian, a step that we will not show here. Instead, we ask the question: *\"Is the unconstrained model of the MIS problem a good one?\"* Indeed, we made the choice to set `penalty = 0.5`, but was this a good choice?" ] }, { "cell_type": "code", "execution_count": 6, "id": "6407eb00-7837-45e7-8364-fac1fcaa993b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem name: Independent set\n", "\n", "Maximize\n", " -0.5*x_0*x_1 - 0.5*x_0*x_4 - 0.5*x_1*x_2 - 0.5*x_1*x_4 - 0.5*x_2*x_3\n", " - 0.5*x_3*x_4 + x_0 + x_1 + x_2 + x_3 + x_4\n", "\n", "Subject to\n", " No constraints\n", "\n", " Binary variables (5)\n", " x_0 x_1 x_2 x_3 x_4\n", "\n" ] } ], "source": [ "print(converted_prob.prettyprint())" ] }, { "cell_type": "markdown", "id": "092b21aa-0d78-43a9-95ed-cdaef9ed42d2", "metadata": {}, "source": [ "To answer the question above we need to solve our model and see if the solution is indeed an independent set. We do this with a classical solver. Here, we use CPLEX which at this small scale runs very efficiently. The code below, imports the solver, solves the model and interprets the result as a candidate solution to our original MIS optimization problem." ] }, { "cell_type": "code", "execution_count": 7, "id": "9619dc26-87f2-40be-9636-db7481463d46", "metadata": {}, "outputs": [], "source": [ "from qiskit_addon_opt_mapper.solvers import CplexSolver\n", "\n", "validation_solver = CplexSolver()\n", "\n", "result = validation_solver.solve(converted_prob)\n", "y = converter.interpret(result.x)" ] }, { "cell_type": "code", "execution_count": 8, "id": "f7035c7d-650b-4474-be9c-5eba30235051", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Objective value 4.0\n", "Is y feasible? False\n" ] } ], "source": [ "print(\"Objective value\", opt_problem.objective.evaluate(y))\n", "print(\"Is y feasible?\", opt_problem.is_feasible(y))" ] }, { "cell_type": "markdown", "id": "c61b4f08-dbd2-492c-81ad-7c7427fa06f2", "metadata": {}, "source": [ "The result above indicates that the solution to our model is an infeasible solution to the MIS problem! This is problematic and indicates that something went wrong in the problem modeling. Indeed, the conversion of the constraints into penalty terms is not strong enough to enforce the independent set conditions. To remdy this situation we change the modelling and increase the value of the penalty." ] }, { "cell_type": "code", "execution_count": 9, "id": "fb9fe906-618a-4c51-9076-d77c838b4b9f", "metadata": {}, "outputs": [], "source": [ "penalty2 = 2\n", "converter2 = LinearInequalityToPenalty(penalty=penalty2)\n", "converted_prob2 = converter2.convert(opt_problem)" ] }, { "cell_type": "code", "execution_count": 10, "id": "2fffd4af-347c-4f20-b05a-fe46dfc40140", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Problem name: Independent set\n", "\n", "Maximize\n", " -2*x_0*x_1 - 2*x_0*x_4 - 2*x_1*x_2 - 2*x_1*x_4 - 2*x_2*x_3 - 2*x_3*x_4 + x_0\n", " + x_1 + x_2 + x_3 + x_4\n", "\n", "Subject to\n", " No constraints\n", "\n", " Binary variables (5)\n", " x_0 x_1 x_2 x_3 x_4\n", "\n" ] } ], "source": [ "print(converted_prob2.prettyprint())" ] }, { "cell_type": "markdown", "id": "19aa8f2a-2f6e-4395-b8b8-31bb0a7348d5", "metadata": {}, "source": [ "Now, we solve this new model with CPLEX." ] }, { "cell_type": "code", "execution_count": 11, "id": "0708bf53-98ec-4359-b083-269b069b8292", "metadata": {}, "outputs": [], "source": [ "result2 = validation_solver.solve(converted_prob2)\n", "y2 = converter.interpret(result2.x)" ] }, { "cell_type": "code", "execution_count": 12, "id": "49292e2f-5727-4d1a-a566-3c0178b14e4b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Objective value 2.0\n", "Is y feasible? True\n" ] } ], "source": [ "print(\"Objective value\", opt_problem.objective.evaluate(y2))\n", "print(\"Is y feasible?\", opt_problem.is_feasible(y2))" ] }, { "cell_type": "markdown", "id": "3c4235ab-7ed4-4993-961d-624ce2fe3782", "metadata": {}, "source": [ "We observe that the optimal solution found by CPLEX is feasible. We can also visualize the solution form the bad model and the one from the good model. As seen below, there are multiple nodes in the bad solution `y` which share an edge and are therefore not an independent set. This tutorial shows how modelling assumptions play an important role in the type of solution obtained. It also shows how important it is to test the modelling pipeline with small problem instances that can be efficiently solved." ] }, { "cell_type": "code", "execution_count": 13, "id": "f1281552-b611-4911-bdb9-df7d1df97ad4", "metadata": {}, "outputs": [ { "data": { "image/png": "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3W1nJ0uUKOG7FAAhRaAEcmnbtm264IIL3Fzu/v37q1mzZr5LCv229/z58/X999/7LiWlLVu2zB09YLsbQCwIlEAewuSQIUPUt29fbsLGgQVy63fItrf/7W6bXmQBHwD2F5NygH2wnokXXnihu8ltYZJzZvHTqlUrF9btCAH8aNCggWsXZLfuAWB/sUIJ7CNMXnzxxe4mt50zI0zGl62KjRs3TuvWrfNdSkpauXKl61TAdjeAWBEogWzs2LFDl156qbs48tlnn+mcc87xXVLk2O+p/T7bUQIkX79+/ZQ/f37XnB8AYkGgBLJgIefyyy93W9yffPKJG62I+KtYsaJOOukkzlF6YqvutuV98MEH+y4FQMgRKIEswuQVV1yhTz/9VB9//LGbhoPET82x33ckz5o1azRq1Ci2uwHEBYESyMRGAV511VVuVfKjjz5Shw4dfJeUEoFy7dq1+vLLL32XklLsKMeuXbvcxCcAiBWBEsgUJq+++moXJP/73/+6BuZIvFNOOUXlypVj29vDdne9evVUvnx536UAiAACJSC5lZprrrlGH3zwgd5//33XcxLJYZdC7HIOgTJ51q9f7xr0s90NIF4IlEh5FiavvfZa/ec//9F7772niy66yHdJKbntvWjRIveBxLM2WNb/kyMdAOKFQAmlepi8/vrr9fbbb+vdd9/VJZdc4ruklNS0aVMVLVqUVcokbnfXrl3b3bIHgHggUCKlw+SNN96oN998U++8844uu+wy3yWlrLS0NBcqCZSJt2nTJg0ePJjtbgBxRaBESrKJo//617/0+uuv66233nJtguB/23vChAn67bfffJcSadZEfvPmzQRKAHFFoERKhsmbb75Zr7zyit544w3XJgj+2cUcu2lvq2dIHJv6VLNmTVWpUsV3KQAihECJlAuTt956q15++WW3OvnPf/7Td0nYo0KFCq6FENveibNlyxZ3IYfVSQDxRqBESoXJ22+/XT179tSrr77q2gQheNvetiW7fft236VEkrUK2rhxI4ESQNwRKJEyYfLOO+9U9+7d1bt3b1133XW+S0I2gXLdunUaP36871Iie7u7atWqqlatmu9SAEQMgRIpESbvvvtuvfDCC+rVq5duuOEG3yUhG7Vq1dJhhx3GtncC2KqvjVtkdRJAIhAoEfkwed999+m5555Tjx493M1uBFe+fPncKqUF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mis.draw(y)" ] }, { "cell_type": "markdown", "id": "dc0bf66c-1653-4998-a38f-7dc8b4bf50bc", "metadata": {}, "source": [ "In the good solution `y2`, drawn below, we see that no two nodes share an edge and are therefore an independent set." ] }, { "cell_type": "code", "execution_count": 14, "id": "309f88e4-5d1f-47f8-b63a-50346829ffeb", "metadata": {}, "outputs": [ { "data": { "image/png": "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GDDA7r77bvdrAIh1/fv3dzeTaQcHF0agBKKMrllUqDx48KALmhpUrqsWdVYye/bsYf/z1q1bZ6NGjbI33njDVTJvv/12u++++1yTDwDEqo4dO7qraj/55BO/lxIVCJQAUkT3hGvkkLbADx06ZD179rSHH37YNRABQKwpW7as3XDDDfb000/7vZSowBlKACmi2yL+9re/uZFDI0aMcLMyNXKoa9euNn/+fL+XBwBho3Pjeq6jISflCJQAUiV37tx2//33u61wbYOvXr3amjVrZq1atbLPP/+ckUMAop53BS4zKFOOQAkgTbJkyWK33HKLm2GpM0a62rFTp05Wq1Yte+edd9x/A0C0dngLFcqUI1ACCImagv70pz/ZvHnzbNasWVamTBl3paO6zXXmUoOBASDaZlAWLlzYNTsiZQiUAMJCI4y8be9vv/3WzcDU1rgOtj/55JO2d+9ev5cIACmuULLdnToESgBh5217//zzz9ajRw/XxKPK5b333usOugNApFco2e5OHQIlgHSjAesvvPCCbdy40R588EF7++23rWLFitarVy9buXKl38sDgD9QYyGBMvUIlADSnc4iadtbwfKZZ56xmTNnWs2aNa1z5842Z84cv5cHAAFbt251Z7/Z8k4dAiWADKMbfbTtvXbtWhs3bpwbPaSzls2bN7f//Oc/9uuvv/q9RABxTtVJoUKZOgRKABkuc+bMbtv7u+++c0FSDT0akK6qpYKmrpcEAL8CpZ6jypcv7/dSogqBEoCvI4e8be+vv/7aKlSoYL1793bnLP/5z3+6Kx4BIKM7vDX2LDEx0e+lRBUCJYCI0KJFC/vss89c1bJdu3b20EMPuc7woUOH2u7du/1eHoA4QUNO2hAoAUSUGjVquG1vnbPUtvioUaPcLMt+/frZhg0b/F4egBhHoEwbAiWAiKTqpLa9NbfykUcesffff99tQ9144422YsUKv5cHIAYdOXLETaOgwzv1CJQAIlrBggXt8ccfd0/yzz33nM2dO9dq165tV155pbvqUTPjACAc1qxZ415ToUw9AiWAqJAzZ0637a0nfA1I37x5s7Vp08aaNWtmn376KSOHAISMkUFpR6AEEFU0zqNnz55u21v3huu/r776aqtevbq98cYbjBwCEFKHty5iKFCggN9LiToESgBRSbMrte09e/Zsmzdvnqso9O3b140eUiNPUlKS30sEEGVoyEk7AiWAqNe0aVO37f3999/bpZdeao8++qhr6nnsscds165dfi8PQBQFShpy0oZACSBmVKtWzcaOHeuudOzTp4/rEtfIobvvvtu9DQCSowY/KpRpR6AEEHNKly7ttr01cmjw4ME2YcIEq1y5svXo0cOWL1/u9/IARKBt27a527kIlGlDoAQQs3SwXtveGoj+/PPP24IFC6xu3brWsWNHmz59OiOHAJzVkCNseacNgRJAzMuRI4fdc889buTQe++9Zzt27LD27dtb48aNbeLEiXb69Gm/lwjAZ9ru1tSI8uXL+72UqESgBBA3EhMTA9veU6ZMcbMtr7nmGnf28l//+pcdP37c7yUC8DFQVqxY0T1PIPUIlADicuTQ5ZdfbjNmzHDb4Jphefvtt7vKxMiRI+3gwYN+LxGAD1vebHenHYESQFzTtvfHH39sP/zwg5trqTOXGjk0cOBAtzUOID7Q4R0aAiUA/H7Vmra9169fb7fddpuNHj3aypUrZ3fccYf9/PPPfi8PQDo6cuSImwpBoEw7AiUAnKFkyZL2zDPPuG8uQ4cOdQPT9U2me/futmTJEr+XByAdqGFPUx/Y8k47AiUABJE/f34bNGiQGzk0ZswYFyYbNGjgbuKZOnUqI4eAGNvuFiqUaUegBIDzyJ49u915553uG84HH3xge/fudaGyYcOG9tFHHzFyCIgB+vouVKiQm12LtCFQAkAKaJTIdddd5yqVX331leXNm9f9t7bIXnnlFTt27JjfSwSQRnR4h45ACQCpHDmkCuW0adNs0aJFVqdOHbvrrrtcA8/w4cPtwIEDfi8RQCrR4R06AiUApJG2vcePH++qG126dLHHH3/c3SP+8MMPu3uBAUQ+nYcmUIaOQAkAIapSpYq9+uqrroHn7rvvdlvgGpKu8UOrV6/2e3kAzkM//B06dIgt7xARKAEgTIoXL+62vTVy6KmnnrJJkya5b1J//vOf3fY4gMhDh3d4ECgBIMzUsPPII4+4IemqVq5YscLdyNOuXTv78ssvGTkERFigzJw5s9tVQNoRKAEgnWTLls1te+uMpc5aJiUluTvE69Wr50YQnTp1yu8lAnFPX58VK1Z0oRJpR6AEgHSWkJBg11xzjdv2Vnd44cKFrUePHm6L7cUXX7SjR4/6vUQgbtGQEx4ESgDIwJFD2vbWHEvv5p1+/fpZ2bJl7e9//7v98ssvfi8RiDvMoAwPAiUA+EDb3h9++KGrjqhp569//auVKVPGHnjgAduyZYvfywPignYH1ERHhTJ0BEoA8FGlSpXspZdeso0bN7pq5euvv24VKlSwPn362A8//OD38oCYtmbNGtckR6AMHYESACJA0aJFbdiwYa5aotfqBq9WrZpdffXVtmDBAr+XB8TsdrcQKENHoASACJInTx578MEHbd26dfavf/3LVSmbNm1qrVu3tsmTJzNyCAgjHTkpVKiQFSxY0O+lRD0CJQBEoKxZs1rfvn1t1apV9vHHH9uxY8fsqquucneHv/vuu4wcAsKADu/wIVACQAS76KKLAtveM2bMsBIlSljPnj3d2cvRo0fbkSNH/F4iELXo8A4fAiUARMnIoTZt2tiUKVNs2bJl1qxZMxswYIAbOaRrHvfu3ev3EoGoouMjVCjDh0AJAFFG297vvfee61Dt3r27Pf300y5Y3nfffbZ582a/lwdEhe3bt9uhQ4cIlGFCoASAKKXxQmPGjHEjhxQmx40b595288032/fff+/38oCo6PBmyzs8CJQAEOWKFCniBqMrWI4YMcJd71ijRg3r0qWLzZ071+/lARFJ292JiYlWvnx5v5cSEwiUABAjcufObffff78bOTR27Fj7+eefrUWLFtayZUubNGmS/frrr34vEYioCmXFihUtc+bMfi8lJhAoASDGZMmSxXr37m0rV660Tz/91E6fPm2dO3e2WrVq2VtvvWUnT570e4lARFQo2e4OHwIlAMTwyKGuXbu6be/Zs2e7xh2dr9TIof/7v/+zw4cP+71EwDd0eIcXgRIA4mDkkLa9P//8c1uxYoW1atXKHnjgAStTpow98cQTtmfPHr+XCGSoo0ePujPHBMrwIVACQBypWbOmvf322+585Y033mgjR450wbJ///7uGywQDzRyS3Mo2fIOHwIlAMShcuXK2fPPP2+bNm2yhx56yF3nqAaFm266yb777ju/lwek+3a3UKEMHwIlAMSxQoUK2ZNPPumqk6NGjbJZs2a55h3dG/7111+7Kg4Qix3e+rdfsGBBv5cSMwiUAADLlSuXu8px7dq1bkC6AqbOWjZv3tz+/e9/M3IIMYWGnPAjUAIAAjSTr1evXq5557PPPrOEhAT705/+5Aalv/nmm3bixAm/lwiEjEAZfgRKAEDQkUOdOnVy295z5sxxo4ZuueUWd87yH//4hyUlJfm9RCBNdIxDW9405IQXgRIAcF7a9v7Pf/7jBqW3a9fOHnnkETfTcsiQIbZ7926/lwekyvbt2+3QoUNUKMOMQAkASJHq1au785U6Z6kB6c8995wbOfSXv/zF1q9f7/fygBRRdVIIlOFFoAQApIpCpMKkGncGDhxoH3zwgVWuXNluuOEG+/bbb/1eHnDB85OJiYlWoUIFv5cSUwiUAIA00ciVoUOHulmW//znP23evHlWp04du+KKK2zmzJmMHELEBkqdBVYDGsKHQAkACEmOHDnctrduH3nnnXds69at1rZtW2vSpIl98sknjBxCxG15s90dfgRKAEBYqOKj6xy17T158mTLli2bdevWzapVq2avv/66HT9+3O8lAq5CSYd3+BEoAQBhlSlTJrftrVt35s+fb5dccondeuut7szas88+awcPHvR7iYhTR48edWd/qVCGH4ESAJBuvG3vVatWWceOHW3QoEGuqUevd+7c6ffyEGd0LENnewmU4UegBACkO1Up33jjDVu3bp317dvXXnjhBTfL8q677nJjiICM2u4WtrzDj0AJAMgwpUqVslGjRrnOcA1GnzhxolWpUsWuv/56W7Zsmd/LQxwESk0n0AvCi0AJAMhw+fPnt8GDB7vzbKpWLlq0yOrVq2eXXXaZTZs2jZFDSBd0eKcfAiUAwDfZs2e3u+++21avXm3vv/++7dq1yzp06GCNGjWyCRMm2OnTp/1eImIIHd7ph0AJAPCdbi7xtr2/+OILy507t1177bXu7OWrr75qx44d83uJiHKqeitQUqFMHwRKAEBEjRxSN/j06dNt4cKFVrNmTbvzzjutfPnyNmLECDtw4IDfS0SU2r59uyUlJREo0wmBEgAQkbTtraadH374wTp16uSuedTIoUcffdSFAyA16PBOXwRKAEBEU0Xptddes/Xr19sdd9xhL774opUrV85uv/12N1cQSGlDjo5WaMA+wo9ACQCICiVKlLCRI0e6kUNPPPGE/ec//3FhU2ctv/nmG7+XhyioUFasWNFdEYrwI1ACAKJKvnz5bODAgbZhwwZ76aWXXCNPw4YNrX379vbf//6XkUMIioac9EWgBABEpWzZsrktcAWFDz/80Pbv3+/mWNavX9/9NyOHcCZmUKYvAiUAIKolJCRY9+7d3ba3KpQFChRwI4gUHl5++WU7evSo30uEz/RvQEP0achJPwRKAEDMjBzSUPSpU6fa4sWL3c07GpquBp5hw4a5Cibi088//+yOQlChTD8ESgBAzGnQoIF99NFHbjv8T3/6kz355JNu5NBDDz1kW7du9Xt58GG7WwiU6YdACQCIWZUrV7ZXXnnFbXfec8897tYdDUnv27dvIGQg9ukHi4IFC1qhQoX8XkrMIlACAGJesWLF7Omnn3Yjh/72t7/Z5MmTrVq1atatWzd3Iw9iGx3e6Y9ACQCIG3nz5rWHH37YDUlX5XLlypXWpEkTa9u2rbtDnJFDsYkO7/RHoAQAxOXIodtuu81d6zhhwgQ7fPiwXXHFFVa3bl17//337dSpU34vEWGiHxJUoaTDO30RKAEAcT1y6M9//rPb9p42bZoVLVrUbrjhBqtSpYqNGTPGjhw54vcSESLd+56UlESFMp0RKAEAcU8jh9q1a2dffvmlLV261Bo1amT9+/d3I4d05nLfvn1+LxFppOqkECjTF4ESAIAzaNv7gw8+sNWrV9s111xjf//7393Iofvvv9+2bNni9/KQhkCZmJjo7vFG+iFQAgAQhALIiy++6O4MHzBggI0dO9YqVKhgt9xyizt7iehpyNH/t8yZM/u9lJhGoAQA4Dx0rlJVSo0c0uihr776yo0c6tq1q82fP9/v5eECGBmUMQiUAACkQO7cue2BBx6wdevW2euvv+6CSrNmzaxVq1ZuriUjhyITHd4Zg0AJAEAqZM2a1fr06WOrVq2yTz75xE6cOGFXXXWV1a5d29555x07efKk30vE744ePeqOLFChTH8ESgAA0uCiiy5y94Rr23vmzJlWqlQpu+mmm6xSpUr2wgsvuNmW8NfPP//sKsdUKNMfgRIAgBBHDrVu3dptey9fvtxatGhh9913n5UtW9aefPJJ27t3r99LjFuMDMo4BEoAAMJE297vvvuurVmzxq6//nobPny4Gzl07733uqYeZHyHd4ECBaxQoUJ+LyXmESgBAAiz8uXL2+jRo12IVCPPW2+95cYQ9erVy90fjoxBQ07GIVACAJBOChcubE899ZQLliNHjrQZM2ZYzZo1rXPnzjZnzhy/lxcXFUq2uzMGgRIAgHSWK1cud65y7dq19uabb7rRQy1btrTmzZvbZ599Zr/++qvfS4w5asZhBmXGIVACAJBBsmTJYjfffLN999139u9//9u9rUuXLq5qOW7cODeCCOGxY8cOS0pKYss7gxAoAQDwYeSQguTcuXPt66+/dmcue/fu7c5Z/vOf/7RDhw75vcSY2O4WKpQZg0AJAICPNGZo0qRJtmLFCmvbtq09+OCDrjN86NChtnv3br+XF7W03Z2QkODu8Ub6I1ACABABtO2tbnCds9SA9FGjRrlZlv369XO3vSD1gVIVXx0zQPojUAIAEEEUIv/v//7PNm7caA8//LC999577vadnj17uiomUoYO74xFoAQAIAJpGPcTTzzhRg794x//cGctNTj9yiuvtFmzZrkuZiSPDu+MRaAEACCC5cyZ0/r37+/updaW+ObNm61NmzbWrFkz+/TTTxk5FMSxY8fcMQE6vDMOgRIAgCiQOXNmd7ZS295q4tF/X3311Va9enUbO3YsI4fOoKsvVcGlQplxCJQAAESRTJky2VVXXWWzZ892Y4eqVKliffr0cd3MauTR7MV4p+1uIVBmHAIlAABRStveGpD+/fffW4cOHezRRx91I4cee+wx27Vrl8VzQ06BAgXcOVRkDAIlAABRrlq1aoErHW+55RY3HF3d4nfffbd7W7w25Kiai4xBoAQAIEaULl3adYSrM3zQoEE2fvx4q1y5svXo0cOWL19u8YIO74xHoAQAIMZou3fIkCFulqVmWi5YsMDq1q1rHTt2tBkzZsT0yCF9btrypsM7YxEoAQCIUTly5LC//OUvruv53XfftR07dli7du2scePGNnHiRDt9+rTFGn2OakyiQpmxCJQAAMS4xMREu+GGG9y29+TJk13QvOaaa9zZy3/96192/Phxi7UObyqUGYtACQBAnFCTyhVXXGEzZ8502+CaYXn77bdb+fLl7ZlnnrGDBw9atNN2d0JCghujhIxDoAQAIA5p2/vjjz+2VatWuZA5ePBgN3Jo4MCBbts4miuUCpNZsmTxeylxhUAJAEAc09bw66+/buvXr7dbb73VRo8ebeXKlbM777zTXfcYjYGS7e6MR6AEAABWsmRJe/bZZ93IoaFDh9onn3ziGlu6d+9uS5YssWja8qYhJ+MRKAEAQED+/PndDMsNGza4aqXCZIMGDezSSy+1qVOnRvTIoWPHjrl1EygzHoESAAD8Qfbs2e2uu+5yW8gffPCB7dmzx4XKhg0buoHpkThy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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mis.draw(y2)" ] } ], "metadata": { "kernelspec": { "display_name": ".310", "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.18" } }, "nbformat": 4, "nbformat_minor": 5 }