diff --git a/Investigating TSP.ipynb b/Investigating TSP.ipynb index 7cb5a00..72fc30f 100644 --- a/Investigating TSP.ipynb +++ b/Investigating TSP.ipynb @@ -116,14 +116,17 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, + "execution_count": 2, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "from random import randint, choice\n", "from pprint import pprint\n", "from itertools import permutations\n", "from math import inf as oo # Infinity (∞) is larger than any number\n", + "from math import sqrt\n", "from time import time\n", "import matplotlib.pyplot as plt\n", "import copy" @@ -147,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -163,6 +166,22 @@ " dist_matrix[j][i] = v\n", " return dist_matrix\n", "\n", + "def random_euclidean_graph(n):\n", + " ''' Symmetric adjacency matrix of a Euclidean graph of size nxn '''\n", + " dist_matrix = [[oo for _ in range(n)] for _ in range(n)]\n", + " points = []\n", + " for p in range(n):\n", + " x,y = randint(0,MAX_DISTANCE), randint(0,MAX_DISTANCE)\n", + " points.append((x,y))\n", + " for i in range(n):\n", + " p1 = points[i]\n", + " for j in range(i+1,n):\n", + " p2 = points[j]\n", + " distance = sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)\n", + " dist_matrix[i][j] = distance\n", + " dist_matrix[j][i] = distance\n", + " return dist_matrix\n", + "\n", "def show(G):\n", " ''' Show adjacency matrix. Useful for debugging. '''\n", " n = len(G)\n", @@ -189,6 +208,31 @@ " return c" ] }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2 3 4\n", + " ---------------------\n", + " 0 | ∞63.19810123729984524.04163056034261545.011109739707630.0\n", + " 1 | 63.198101237299845 ∞50.9901951359278518.97366596101027653.53503525729669\n", + " 2 | 24.04163056034261550.99019513592785 ∞32.24903099319427.0710678118654755\n", + " 3 | 45.011109739707618.97366596101027632.2490309931942 ∞35.4682957019364\n", + " 4 | 30.053.535035257296697.071067811865475535.4682957019364 ∞\n", + "\n" + ] + } + ], + "source": [ + "G=random_euclidean_graph(5)\n", + "show(G)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -198,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -207,11 +251,11 @@ "text": [ " 0 1 2 3 4\n", " ---------------------\n", - " 0 | ∞ 36 54 31 34\n", - " 1 | 36 ∞ 82 40 82\n", - " 2 | 54 82 ∞ 53 62\n", - " 3 | 31 40 53 ∞ 27\n", - " 4 | 34 82 62 27 ∞\n", + " 0 | ∞ 12 19 68 74\n", + " 1 | 12 ∞ 91 29 6\n", + " 2 | 19 91 ∞ 50 55\n", + " 3 | 68 29 50 ∞ 88\n", + " 4 | 74 6 55 88 ∞\n", "\n" ] } @@ -277,8 +321,10 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, + "execution_count": 13, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def exhaustive_search(G):\n", @@ -301,6 +347,13 @@ "## Testing exhaustive search time cost" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test completely random graphs:" + ] + }, { "cell_type": "code", "execution_count": 5, @@ -404,6 +457,62 @@ "plt.show()" ] }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\t0.011517763137817383\n", + "9\t0.08803129196166992\n", + "10\t0.8997573852539062\n", + "11\t9.502121210098267\n" + ] + } + ], + "source": [ + "pnts_n = []\n", + "pnts_t = []\n", + "\n", + "n = 8\n", + "t0 = t1 = 0\n", + "\n", + "while t1-t0<1: # in seconds; if it takes too long then stop testing\n", + " G = random_euclidean_graph(n)\n", + " t0 = time()\n", + " exhaustive_search(G)\n", + " t1 = time()\n", + " # record time\n", + " print( f\"{n}\\t{t1-t0}\" )\n", + " pnts_n.append( n )\n", + " pnts_t.append( t1-t0 )\n", + " n += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\njPh/hmzs8qbbb5gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pnts_n, pnts_t, 'ro-')\n", + "plt.show()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -442,8 +551,10 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "execution_count": 16, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def greedy_nearest_neighbours(G):\n", @@ -484,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -493,20 +604,20 @@ "text": [ " 0 1 2 3\n", " -----------------\n", - " 0 | ∞ 38 69 88\n", - " 1 | 38 ∞ 28 61\n", - " 2 | 69 28 ∞ 14\n", - " 3 | 88 61 14 ∞\n", + " 0 | ∞ 44 50 62\n", + " 1 | 44 ∞ 70 51\n", + " 2 | 50 70 ∞ 13\n", + " 3 | 62 51 13 ∞\n", "\n" ] }, { "data": { "text/plain": [ - "([0, 1, 2, 3], 168)" + "([0, 1, 3, 2], 158)" ] }, - "execution_count": 9, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -517,6 +628,41 @@ "greedy_nearest_neighbours(G)" ] }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2 3\n", + " -----------------\n", + " 0 | ∞114.3372205364464877.0778826901725482.38931969618392\n", + " 1 | 114.33722053644648 ∞38.0788655293195496.42095207992918\n", + " 2 | 77.0778826901725438.07886552931954 ∞68.94200461257273\n", + " 3 | 82.3893196961839296.4209520799291868.94200461257273 ∞\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "([0, 2, 1, 3], 293.9670199956052)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "G=random_euclidean_graph(4)\n", + "show(G)\n", + "greedy_nearest_neighbours(G)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -537,27 +683,29 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "10\t0.08391809463500977\t0.51438\n", - "20\t0.28209686279296875\t0.316738\n", - "30\t0.7101566791534424\t0.24519466666666664\n", - "40\t1.3373019695281982\t0.201809\n", - "50\t1.8832175731658936\t0.1697088\n", - "60\t2.3597071170806885\t0.14916666666666667\n", - "70\t3.1153817176818848\t0.13403428571428572\n", - "80\t4.271535634994507\t0.1224815\n", - "90\t4.474817276000977\t0.113824\n", - "100\t5.076771259307861\t0.1047692\n", - "110\t6.347643613815308\t0.09884981818181818\n", - "120\t7.645779371261597\t0.09209633333333334\n", - "130\t8.667128801345825\t0.08805476923076923\n", - "140\t11.51081109046936\t0.08330828571428571\n" + "10\t0.0496525764465332\t0.5082679999999999\n", + "20\t0.1907353401184082\t0.319404\n", + "30\t0.3874533176422119\t0.24130666666666664\n", + "40\t0.7231287956237793\t0.19880899999999999\n", + "50\t1.103902816772461\t0.1685712\n", + "60\t1.5338325500488281\t0.14980266666666667\n", + "70\t1.8535380363464355\t0.13568571428571427\n", + "80\t2.7287096977233887\t0.123572\n", + "90\t3.5187318325042725\t0.11156755555555554\n", + "100\t4.073294162750244\t0.10502280000000001\n", + "110\t4.978093862533569\t0.09801854545454546\n", + "120\t6.004432439804077\t0.092656\n", + "130\t7.973381757736206\t0.087268\n", + "140\t8.291640758514404\t0.08288485714285714\n", + "150\t8.916183471679688\t0.0789024\n", + "160\t10.312152862548828\t0.07590525\n" ] } ], @@ -593,19 +741,17 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 24, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -616,24 +762,118 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nhv4fQW0BVLWREV4AAAAASUVORK5CYII=\n", "text/plain": [ - "
" + "" ] }, - "metadata": { - "needs_background": "light" + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pnts_n, pnts_q, 'ro-')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\t0.06430292129516602\t143.42119902704604\n", + "20\t0.17042922973632812\t142.83896438342083\n", + "30\t0.48963046073913574\t142.04123881625168\n", + "40\t0.776923418045044\t141.14993333691754\n", + "50\t1.0704421997070312\t140.34975785979168\n", + "60\t1.514561414718628\t140.55813580788916\n", + "70\t2.0883636474609375\t138.78251853848585\n", + "80\t2.5483763217926025\t138.66092482047029\n", + "90\t3.320828914642334\t137.51922662536322\n", + "100\t4.0691139698028564\t138.2574686102402\n", + "110\t4.8069376945495605\t137.42881961473122\n", + "120\t5.977138519287109\t137.11342466295704\n" + ] + } + ], + "source": [ + "MAX_REPETITIONS = 500\n", + "\n", + "pnts_n = []\n", + "pnts_t = []\n", + "pnts_q = []\n", + "\n", + "n = 10\n", + "t = 0\n", + "\n", + "while t<5: # in seconds; if it takes too long then stop testing\n", + " t = 0\n", + " expected_cycle_length = 0.71*sqrt(n) # TODO: Better estimate?\n", + " sum_of_distances = 0\n", + " for repetitions in range(MAX_REPETITIONS):\n", + " G = random_euclidean_graph(n)\n", + " t0 = time()\n", + " cycle, length = greedy_nearest_neighbours(G)\n", + " t1 = time()\n", + " sum_of_distances += length\n", + " t += t1-t0\n", + " # record time and quality\n", + " q = (sum_of_distances/MAX_REPETITIONS)/expected_cycle_length\n", + " pnts_n.append( n )\n", + " pnts_t.append( t )\n", + " pnts_q.append( q )\n", + " print( f\"{n}\\t{t}\\t{q}\" )\n", + " n += 10" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nJIyCW0QkYf4X3GmNLIbrjy8AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pnts_n, pnts_t, 'ro-')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "plt.plot(pnts_q, pnts_t, 'ro-')\n", + "plt.plot(pnts_n, pnts_q, 'ro-')\n", "plt.show()" ] }, @@ -700,7 +940,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.6.1" } }, "nbformat": 4,