From a6776b97c0d7d9b152ff989c0659c023f627d095 Mon Sep 17 00:00:00 2001 From: Dan Sandiford Date: Wed, 3 Feb 2016 12:52:12 +1100 Subject: [PATCH] the other ResBaz cafes --- geojsons/adelaideresistance.geojson | 23 - geojsons/green.geojson | 25 - merged.geojson | 2 +- notebook/tsp.ipynb | 5094 +++++++++++++++++++++++++++ 4 files changed, 5095 insertions(+), 49 deletions(-) delete mode 100644 geojsons/adelaideresistance.geojson delete mode 100644 geojsons/green.geojson create mode 100644 notebook/tsp.ipynb diff --git a/geojsons/adelaideresistance.geojson b/geojsons/adelaideresistance.geojson deleted file mode 100644 index 9d1b941..0000000 --- a/geojsons/adelaideresistance.geojson +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "marker-color": "#4b0e6a", - "marker-size": "medium", - "marker-symbol": "", - "Name": "Mockingbird Lounge", - "Address": "63a Broadway Glenelg ", - "Review": "5 stars for games and books. Plenty of tables for playing Resistance " - }, - "geometry": { - "type": "Point", - "coordinates": [ - 138.51726651191711, - -34.9879917294835 - ] - } - } - ] -} diff --git a/geojsons/green.geojson b/geojsons/green.geojson deleted file mode 100644 index 4fa4cd1..0000000 --- a/geojsons/green.geojson +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "marker-color": "#7e7e7e", - "marker-size": "medium", - "marker-symbol": "", - "name": "Green Refectory", - "Address": "115 Sydney Road, Brunswick, 3056" - "Review": "Cosy. Great food. Great coffee" - "Contributor": "Tessa" - }, - - "geometry": { - "type": "Point", - "coordinates": [ - 144.96074795722961, - -37.77476421128662 - ] - } - } - ] -} diff --git a/merged.geojson b/merged.geojson index cb5d46c..22adbcd 100644 --- a/merged.geojson +++ b/merged.geojson @@ -1 +1 @@ -{"type":"FeatureCollection","features":[{"geometry":{"type":"Point","coordinates":[144.961156,-37.811649]},"type":"Feature","properties":{"marker-color":"#7E7E7E","name":"1000 \u00a3 Bend","marker-symbol":"","review":"5 star","address":"361 Little Lonsdale St, Melbourne VIC 3000","contributor":"lhugrass","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967729,-37.799358]},"type":"Feature","properties":{"marker-color":"#7E7E7E","Name":"Cafe Italia","marker-symbol":"","Review":"Good gnocci","Address":"55-66 University St","Contributor":"AJ","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965638,-37.814850]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Bar Americano","marker-symbol":"","Review":"Literally a hole in the wall, seats no-one, standing room for up to 5","Address":"20 Presgrave Pl, Melbourne VIC 3000","Contribution":"Toffa","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965163,-37.806834]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Briyani King","marker-symbol":"","Review":"3 stars","Address":"72 Victoria Street, Carlton, Vic 3053","Contributor":"Noor Suaini","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.961821,-37.799162]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"House of Cards","marker-symbol":"","Review":"Good coffee, good food. They donate some proceeds every month to a crowd selected cause","Address":"","Address ":"Engineering Ln, UoM","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.968848,-37.809140]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Trunk","marker-symbol":"","Review":"Good coffee. They do food. Biggest attraction is a neon sign that says \"Get inside me\"","Address":"275 Exhibition St","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.975972,-37.824972]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"A Gazebo","marker-symbol":"","Review":"Very pretty, solid undercover area. Lack of picnic tables however, and the bathroom block is a good 100m away. ","Address":"Somewhere in the Botanic Gardens","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.974738,-37.756402]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Unknown","marker-symbol":"","Review":"A combination tattoo parlour and cafe, with an in-house pizza shop.They do all day $10 breakfast","Address":"53 Moreland Rd","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.958334,-37.809614]},"type":"Feature","properties":{"marker-color":"#7e7e7e","marker-symbol":"","Review":"Cats will sooth nerves during apocalypse","Venue":"Cat cafe","Address":"375 Queen street","contributor":"Leonie","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965482,-37.801290]},"type":"Feature","properties":{}},{"geometry":{"type":"Point","coordinates":[144.966365,-37.806654]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Trades Hall","marker-symbol":"","Review":"An obvious place, but probably the most likely","Address":"54 Victoria St, Carlton VIC 3053","Contributor":"Kim Doyle","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.044798,-37.733797]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Clover cafe","marker-symbol":"","review":"Food is technically edible","address":"Lunch Factory","contributer":"Thomas","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.977415,-37.801458]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Grub Street","marker-symbol":"","review":"Table tennis with your fried eggs. ","address":"87-89 Moor St, Fitzroy VIC 3065","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.026752,-37.789641]},"type":"Feature","properties":{"marker-color":"#7E7E7E","Name":"Guide Dogs Victoria","marker-symbol":"","Review":"Puppies!","Address":"2 Chandler Hwy, Kew","Contributor":"oncogone","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.982710,-37.829396]},"type":"Feature","properties":{"Address:":"Botanical Gardens","marker-color":"#7e7e7e","Contributer:":"Dai Barnett","marker-symbol":"","Review:":"Plenty of camoflauge + won't look as weird if you run :)","Name:":"Jardin Tan","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965732,-37.797073]},"type":"Feature","properties":{"marker-color":"#ff80c0","marker-symbol":"","address":"333 Lygon St, Carlton VIC 3053","Contributor":"Lisey","review:":"Never been here but heard it has a nice beer garden","name:":"Jimmy Watson","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.998106,-37.773140]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Joe's Shoe Store","marker-symbol":"","Review":"Great Pizza and Ambiance","Address":"233 High St, Northcote VIC 3070","Contributor":"Dean Freestone","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967271,-37.797412]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"heart attack & vine","marker-symbol":"","review":"amazing!!","address":"337 lygon street, carlton","contributor":"Lisa","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.972990,-37.782426]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"North Carlton Canteen","marker-symbol":"","review":"4/5","address":"1008 Lygon St, Carlton North VIC 3054","contributor":"Laura","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.962974,-37.761820]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Bar Oussou","marker-symbol":"","review":"Great cheap beer and pizza, awesome world music","address":"653 Sydney Rd, Victoria VIC 3056","contributor":"Alistair Walsh","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.211449,-38.036194]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"pyCafe","marker-symbol":"","Review":"4.5 stars","Address":"Dandenong","Contributor":"Warwick","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967668,-37.798187]},"type":"Feature","properties":{"Address:":"364 Lygon Street, Carlton","marker-color":"#7e7e7e","marker-symbol":"","Contributor:":"jolie-cullen","Review:":"5/5 stars. Burgers, sushi, fish and chips! What more can you want (and so close to the cinema)","Name:":"Sea Salt Carlton","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.971477,-37.811394]},"type":"Feature","properties":{"marker-color":"#00f3e8","name":"Rice Paper Scissors","marker-symbol":"","review":4.500000,"address":"3000, 19 Liverpool St, Melbourne VIC 3000","contributor":"Charlie","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.960930,-37.802494]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Pub","marker-symbol":"","Review":"Cold Beer!!","Address":"145 Pelham St","Contributor":"Ryan","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.984051,-37.799485]},"type":"Feature","properties":{"marker-color":"#d24bff","name":"Shop Ramen","marker-symbol":"star-stroked","review":"Best ramen in Melbs","address":"329 Smith St, Fitzroy VIC 3065","contributor":"Harriet","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.882030,-37.866926]},"type":"Feature","properties":{"marker-color":"#d12c94","Name":"summer 500","marker-symbol":"","review":"seeeeafood","address":"111 sea road","contributor":"lx","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.015583,-37.834056]},"type":"Feature","properties":{}},{"geometry":{"type":"Point","coordinates":[144.971155,-37.776333]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"The B.East","marker-symbol":"","Review":"Two Birds IPA","Address":"80 Lygon Street","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.972625,-37.766712]},"type":"Feature","properties":{"marker-color":"#7E7E7E","marker-symbol":"","contributor:":"Eve","address: ":"Brunswick St","review:":"Excellent service!","name:":"The Vegie Bar","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.963441,-37.799677]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Tsubu Cafe","marker-symbol":"","review":"The original resistance hangout, particularly on Thursdays at 3 pm (for Hacky Hour)","address":" gate 6, swanston st, building 1888 university of melbourne 3010","contributor":"Dan Sandiford","marker-size":"medium"}}]} \ No newline at end of file +{"type":"FeatureCollection","features":[{"geometry":{"type":"Point","coordinates":[144.961156,-37.811649]},"type":"Feature","properties":{"marker-color":"#7E7E7E","name":"1000 \u00a3 Bend","marker-symbol":"","review":"5 star","address":"361 Little Lonsdale St, Melbourne VIC 3000","contributor":"lhugrass","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.959117,-37.802850]},"type":"Feature","properties":{"marker-color":"#7E7E7E","Name":"Seven Seeds Cafe","marker-symbol":"","Review":"Great coffee, good food. Perfect place to meet for a cuppa.","Address":"106 Berkley Street, Carlton, VIC 3053 ","Contributor":"Peggy","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967729,-37.799358]},"type":"Feature","properties":{"marker-color":"#7E7E7E","Name":"Cafe Italia","marker-symbol":"","Review":"Good gnocci","Address":"55-66 University St","Contributor":"AJ","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965638,-37.814850]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Bar Americano","marker-symbol":"","Review":"Literally a hole in the wall, seats no-one, standing room for up to 5","Address":"20 Presgrave Pl, Melbourne VIC 3000","Contribution":"Toffa","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965163,-37.806834]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Briyani King","marker-symbol":"","Review":"3 stars","Address":"72 Victoria Street, Carlton, Vic 3053","Contributor":"Noor Suaini","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.961821,-37.799162]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"House of Cards","marker-symbol":"","Review":"Good coffee, good food. They donate some proceeds every month to a crowd selected cause","Address":"","Address ":"Engineering Ln, UoM","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.968848,-37.809140]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Trunk","marker-symbol":"","Review":"Good coffee. They do food. Biggest attraction is a neon sign that says \"Get inside me\"","Address":"275 Exhibition St","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.975972,-37.824972]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"A Gazebo","marker-symbol":"","Review":"Very pretty, solid undercover area. Lack of picnic tables however, and the bathroom block is a good 100m away. ","Address":"Somewhere in the Botanic Gardens","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.974738,-37.756402]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Unknown","marker-symbol":"","Review":"A combination tattoo parlour and cafe, with an in-house pizza shop.They do all day $10 breakfast","Address":"53 Moreland Rd","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.958334,-37.809614]},"type":"Feature","properties":{"marker-color":"#7e7e7e","marker-symbol":"","Review":"Cats will sooth nerves during apocalypse","Venue":"Cat cafe","Address":"375 Queen street","contributor":"Leonie","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965482,-37.801290]},"type":"Feature","properties":{}},{"geometry":{"type":"Point","coordinates":[144.966365,-37.806654]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Trades Hall","marker-symbol":"","Review":"An obvious place, but probably the most likely","Address":"54 Victoria St, Carlton VIC 3053","Contributor":"Kim Doyle","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.044798,-37.733797]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Clover cafe","marker-symbol":"","review":"Food is technically edible","address":"Lunch Factory","contributer":"Thomas","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.972281,-37.787980]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Gerald's Bar","marker-symbol":"","Review":"Wine and service is stellar","Address":"Rathdowne St Carlton North","Contributor":"Bonnie","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.977415,-37.801458]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Grub Street","marker-symbol":"","review":"Table tennis with your fried eggs. ","address":"87-89 Moor St, Fitzroy VIC 3065","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.026752,-37.789641]},"type":"Feature","properties":{"marker-color":"#7E7E7E","Name":"Guide Dogs Victoria","marker-symbol":"","Review":"Puppies!","Address":"2 Chandler Hwy, Kew","Contributor":"oncogone","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.982710,-37.829396]},"type":"Feature","properties":{"Address:":"Botanical Gardens","marker-color":"#7e7e7e","Contributer:":"Dai Barnett","marker-symbol":"","Review:":"Plenty of camoflauge + won't look as weird if you run :)","Name:":"Jardin Tan","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.964071,-37.760864]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Jelly Stone","marker-symbol":"","Review":"Nice building, 4/5.","Address":"179 Albion St, Brunswick","Contributor":"Oskar","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.965732,-37.797073]},"type":"Feature","properties":{"marker-color":"#ff80c0","marker-symbol":"","address":"333 Lygon St, Carlton VIC 3053","Contributor":"Lisey","review:":"Never been here but heard it has a nice beer garden","name:":"Jimmy Watson","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.998106,-37.773140]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Joe's Shoe Store","marker-symbol":"","Review":"Great Pizza and Ambiance","Address":"233 High St, Northcote VIC 3070","Contributor":"Dean Freestone","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.987506,-37.796602]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"The Knife Shop Cafe","marker-symbol":"","Review":"3.9 * Massive Turkish breads. Share one!","Address":"287 Wellington St, Collingwood VIC 3066","Contributor":"Vejune Zemaityte","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.978499,-37.799281]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Kodiak Club","marker-symbol":"","Review":"Cheap and tasty Dark and Stormy but their buffalo wings are breaded, what on earth.","Address":"272 Brunswick Street","Contributor":"Christine","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[143.894119,-37.424843]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"The Lemon Tree","marker-symbol":"","Review":"5 stars - something for everyone","Address":"Midland Highway, Creswick","Contributor":"Holly","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967271,-37.797412]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"heart attack & vine","marker-symbol":"","review":"amazing!!","address":"337 lygon street, carlton","contributor":"Lisa","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.922950,-37.787335]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Mama Bear","marker-symbol":"","Review":"Great food, average coffee.","Address":"Racecourse Road","Contributor":"Pradeep","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.959106,-37.806923]},"type":"Feature","properties":{"contributor":"Jonah Duckles","review":"Delicious spicy lamb meat pie, you have not lived until you have one of these","marker-color":"#ff6600","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.972990,-37.782426]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"North Carlton Canteen","marker-symbol":"","review":"4/5","address":"1008 Lygon St, Carlton North VIC 3054","contributor":"Laura","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.036118,-37.795865]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Ora","marker-symbol":"","Review":"good/expensive","Address":"Willsmere shopping Centre","contribuor":"jsands","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.962974,-37.761820]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Bar Oussou","marker-symbol":"","review":"Great cheap beer and pizza, awesome world music","address":"653 Sydney Rd, Victoria VIC 3056","contributor":"Alistair Walsh","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.998288,-37.774226]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Penny Farthing","marker-symbol":"","Review":"Coffee is amaze","Address":"High st, Northcote","Contributor":"Yamni","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.211449,-38.036194]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"pyCafe","marker-symbol":"","Review":"4.5 stars","Address":"Dandenong","Contributor":"Warwick","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.967668,-37.798187]},"type":"Feature","properties":{"Address:":"364 Lygon Street, Carlton","marker-color":"#7e7e7e","marker-symbol":"","Contributor:":"jolie-cullen","Review:":"5/5 stars. Burgers, sushi, fish and chips! What more can you want (and so close to the cinema)","Name:":"Sea Salt Carlton","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.971477,-37.811394]},"type":"Feature","properties":{"marker-color":"#00f3e8","name":"Rice Paper Scissors","marker-symbol":"","review":4.500000,"address":"3000, 19 Liverpool St, Melbourne VIC 3000","contributor":"Charlie","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.960930,-37.802494]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"Pub","marker-symbol":"","Review":"Cold Beer!!","Address":"145 Pelham St","Contributor":"Ryan","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.984051,-37.799485]},"type":"Feature","properties":{"marker-color":"#d24bff","name":"Shop Ramen","marker-symbol":"star-stroked","review":"Best ramen in Melbs","address":"329 Smith St, Fitzroy VIC 3065","contributor":"Harriet","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.882030,-37.866926]},"type":"Feature","properties":{"marker-color":"#d12c94","Name":"summer 500","marker-symbol":"","review":"seeeeafood","address":"111 sea road","contributor":"lx","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.015583,-37.834056]},"type":"Feature","properties":{}},{"geometry":{"type":"Point","coordinates":[144.971155,-37.776333]},"type":"Feature","properties":{"marker-color":"#7e7e7e","Name":"The B.East","marker-symbol":"","Review":"Two Birds IPA","Address":"80 Lygon Street","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[145.080310,-37.863720]},"type":"Feature","properties":{"The Resident":"246 High Street","marker-color":"#7e7e7e","Good coffee, outdoor seating, and multiple avenues of escape.":"Aidan","marker-symbol":"","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.972625,-37.766712]},"type":"Feature","properties":{"marker-color":"#7E7E7E","marker-symbol":"","contributor:":"Eve","address: ":"Brunswick St","review:":"Excellent service!","name:":"The Vegie Bar","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.963441,-37.799677]},"type":"Feature","properties":{"marker-color":"#7e7e7e","name":"Tsubu Cafe","marker-symbol":"","review":"The original resistance hangout, particularly on Thursdays at 3 pm (for Hacky Hour)","address":" gate 6, swanston st, building 1888 university of melbourne 3010","contributor":"Dan Sandiford","marker-size":"medium"}},{"geometry":{"type":"Point","coordinates":[144.963741,-37.812361]},"type":"Feature","properties":{"contributor":"","at the marker":"","uniqlo":"","excellent":""}},{"geometry":{"type":"Point","coordinates":[144.968331,-37.797577]},"type":"Feature","properties":{"Address:":"8 Raffa Place, Carlton","marker-color":"#7E7E7E","marker-symbol":"","Contributor:":"Angus Keillar","Review:":"Great coffee but there are better options to eat at.","Name:":"The Vertue of the Coffee","marker-size":"medium"}}]} \ No newline at end of file diff --git a/notebook/tsp.ipynb b/notebook/tsp.ipynb new file mode 100644 index 0000000..f13317d --- /dev/null +++ b/notebook/tsp.ipynb @@ -0,0 +1,5094 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:c386b020066aa63a7f28a0b3bcd099324a996834f4f61e3543b0e3291f02f377" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + ">>> The Traveling Salesperson Problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the [*Traveling Salesperson Problem*](http://en.wikipedia.org/wiki/Traveling_salesman_problem): \n", + "\n", + "> *Given a set of cities and the distances between each pair of cities, what is the shortest possible tour that visits each city exactly once, and returns to the starting city?*\n", + "\n", + "In this notebook we will develop some solutions to the problem, and more generally show *how to think about solving a problem* like this.\n", + "\n", + "\n", + "
(An example tour.)\n", + " \n", + "Understanding What We're Talking About (Vocabulary)\n", + "---\n", + "\n", + "Do we understand precisely what the problem is asking? Do we understand all the concepts that the problem talks about? Do we understand them well enough to implement them in a programming language? Let's take a first pass:\n", + "\n", + "- **A set of cities**: We will need to represent a set of cities; Python's `set` datatype might be appropriate.\n", + "- **Distance between each pair of cities**: If `A` and `B` are cities, this could be a function, `distance(A, B),` or a table lookup, `distance[A][B]`. The resulting distance will be a real number.\n", + "- **City**: All we have to know about an individual city is how far it is from other cities. We don't have to know its name, population, best restaurants, or anything else. So a city could be just an integer (0, 1, 2, ...) used as an index into a distance table, or a city could be a pair of (x, y) coordinates, if we are using straight-line distance on a plane.\n", + "- **Tour**: A tour is a specified order in which to visit the cities; Python's `list` or `tuple` datatypes would work. For example, given the set of cities `{A, B, C, D}`, a tour might be the list `[B, D, A, C]`, which means to travel from `B` to `D` to `A` to `C` and finally back to `B`.\n", + "- **Shortest possible tour**: The shortest tour is the one whose tour length is the minimum of all tours.\n", + "- **Tour length**: The sum of the distances between adjacent cities in the tour (including the last city to the first city). Probably a function, `tour_length(tour)`.\n", + "- **What is ...**: We can define a function to answer the question *what is the shortest possible tour?* The function takes a set of cities as input and returns a tour as output. I will use the convention that any such function will have a name ending in the letters \"`tsp`\", the traditional abbreviation for Traveling Salesperson Problem.\n", + "\n", + "At this stage I have a rough sketch of how to attack the problem. I don't have all the answers, and I haven't committed to specific representations for all the concepts, but I know what all the pieces are, and I don't see anything that stops me from proceeding." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Python and iPython Notebook: Preliminaries" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This document is an [iPython notebook](http://ipython.org/notebook.html): a mix of text and [Python](http://python.org) code that you can run. You can learn more from the \"Help\" button at the top of the page. But first we'll take care of some preliminaries: the Python statements that import standard libraries that we will be using later on: " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab --no-import-all inline\n", + "from __future__ import division\n", + "import matplotlib.pyplot as plt\n", + "import random\n", + "import time\n", + "import itertools\n", + "import urllib\n", + "import csv" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + ">>> All Tours Algorithm (`alltours_tsp`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start with an algorithm that is guaranteed to solve the problem (although it is inefficient for large sets of cities). Here is a sketch of the algorithm:\n", + "\n", + "> *All Tours Algorithm: Generate all possible tours of the cities, and choose the shortest tour (the one with minimum tour length).*\n", + "\n", + "In general our design philosophy is to first write an English description of the algorithm, then write Python code that closely mirrors the English description. This will probably require some auxilliary functions and data structures; just assume they exist; put them on a TO DO list, and eventually define them with the same design philosophy.\n", + "\n", + "Here is the start of the implementation:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def alltours_tsp(cities):\n", + " \"Generate all possible tours of the cities and choose the shortest tour.\"\n", + " return shortest_tour(alltours(cities))\n", + "\n", + "def shortest_tour(tours): \n", + " \"Choose the tour with the minimum tour length.\"\n", + " return min(tours, key=tour_length)\n", + "\n", + "# TO DO: Data types: cities, tours, Functions: alltours, tour_length" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: In Python `min(`*collection*`,key=`*function*`)` means to find the element *x* that is a member of *collection* such that *function(x)* is minimized. So `shortest` finds the tour whose `tour_length` in the minimal among the tours. \n", + "\n", + "This gives us a good start; the Python code closely matches the English description. And we know what we need to do next: represent cities and tours, and implement the functions `alltours` and `tour_length`. Let's start with tours.\n", + "\n", + "\n", + "Representing Tours\n", + "------------------\n", + "\n", + "A tour starts in one city, and then visits each of the other cities in order, before returning to the start city. A natural representation of a tour is a sequence of cities. For example `(1, 2, 3)` could represent a tour that starts in city 1, moves to 2, then 3, and finally returns to 1. \n", + "\n", + "**Note**: I considered using `(1, 2, 3, 1)` as the representation of this tour. I also considered an ordered list of **edges** between cities: \n", + "`((1, 2), (2, 3), (3, 1))`. In the end, I decided `(1, 2, 3)` was simplest.\n", + " \n", + "\n", + "Now for the `alltours` function. If a tour is a sequence of cities, then all the tours are *permutations* of the set of all cities. A function to generate all permutations of a set is already provided in Python's standard `itertools` library module; we can use it as our implementation of `alltours`:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "alltours = itertools.permutations " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For *n* cities there are *n*! (that is, the factorial of *n*) permutations.\n", + "Here's are all 3! = 6 tours of 3 cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "cities = {1, 2, 3}\n", + "\n", + "list(alltours(cities))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 4, + "text": [ + "[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The length of a tour is the sum of the lengths of each edge in the tour; in other words, the sum of the distances between consecutive cities in the tour, including the distance form the last city back to the first:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def tour_length(tour):\n", + " \"The total of distances between each pair of consecutive cities in the tour.\"\n", + " return sum(distance(tour[i], tour[i-1]) \n", + " for i in range(len(tour)))\n", + "\n", + "# TO DO: Functions: distance, Data types: cities" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: I use one Python-specific trick: when `i` is 0, then `distance(tour[0], tour[-1])` gives us the wrap-around distance between the first and last cities, because `tour[-1]` is the last element of `tour`. \n", + "\n", + "Representing Cities\n", + "--------------------------------\n", + "\n", + "We determined that the only thing that matters about cities is the distance between them. But before we can decide about how to represent cities, and before we can define `distance(A, B)`, we have to make a choice. In the fully general version of the TSP, the \"distance\" between two cities could be anything: it could factor in the amount of time it takes to travel between cities, the twistiness of the road, or anything else. The `distance(A, B)` might be different from `distance(B, A)`. So the distances could be represented by a matrix `distance[A][B]`, where any entry in the matrix could be any (non-negative) numeric value.\n", + " \n", + "But we will ignore the fully general TSP and concentrate on an important special case, the **Euclidean TSP**, where the distance between any two cities is the [Euclidean distance](http://en.wikipedia.org/wiki/Euclidean_distance), the straight-line distance between points in a two-dimensional plane. So a city can be represented by a two-dimensional point: a pair of *x* and *y* coordinates. We will use the constructor function `City`, so that `City(300, 0)` creates a city with x-coordinate of 300 and y coordinate of 0. Then `distance(A, B)` will be a function that uses the *x* and *y* coordinates to compute the distance between `A` and `B`.\n", + "\n", + "Representing Points and Computing `distance`\n", + "---\n", + " \n", + "OK, so a city can be represented as just a two-dimensional point. But how will we represent points? Here are some choices, with their pros and cons:\n", + "\n", + "* **tuple:** A point is a two-tuple of (*x*, *y*) coordinates, for example, `(300, 0)`. **Pro:** Very simple. \n", + "**Con:** doesn't distinguish Points from other two-tuples. \n", + " \n", + "* **class:** Define a custom `Point` class with *x* and *y* slots. **Pro:** explicit, gives us `p.x` and `p.y` accessors. **Con:** less efficient.\n", + " \n", + "* **complex:** Python already has the two-dimensional point as a built-in numeric data type, but in a non-obvious way: as `complex` numbers, which inhabit the two-dimensional (real × imaginary) plane. **Pro:** efficient. **Con:** a little confusing; doesn't distinguish Points from other complex numbers.\n", + "\n", + "\n", + "Any of these choices would work perfectly well; I decided to use complex numbers and to implement the functions `X` and `Y` to make things less confusing. An advantage of `complex` numbers is that computing the distance between two points is easy—the absoute value of their difference:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Cities are represented as Points, which are represented as complex numbers\n", + "Point = complex\n", + "City = Point\n", + "\n", + "def X(point): \n", + " \"The x coordinate of a point.\"\n", + " return point.real\n", + "\n", + "def Y(point): \n", + " \"The y coordinate of a point.\"\n", + " return point.imag\n", + "\n", + "def distance(A, B): \n", + " \"The distance between two points.\"\n", + " return abs(A - B)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an example of computing the distance between two cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "A = City(3, 0)\n", + "B = City(0, 4)\n", + "distance(A, B)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 7, + "text": [ + "5.0" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Random Sets of Cities\n", + "---\n", + "\n", + "The input to a TSP algorithm should be a set of cities. I can make a random set of *n* cities by calling `City` *n* times, each with different random *x* and *y* coordinates:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "{City(random.randrange(1000), random.randrange(1000)) for c in range(6)}" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 8, + "text": [ + "{(239+59j), (20+881j), (238+926j), (800+720j), (166+36j), (567+53j)}" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function `Cities` does that (and a bit more):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def Cities(n, width=900, height=600, seed=42):\n", + " \"Make a set of n cities, each with random coordinates within a (width x height) rectangle.\"\n", + " random.seed(seed * n)\n", + " return frozenset(City(random.randrange(width), random.randrange(height))\n", + " for c in range(n))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are three complications that I decided to tackle in `Cities`:\n", + "\n", + "**Complication 1:** IPython's matplotlib plots (by default) in a rectangle that is 1.5 times wider than it is high; that's why I specified a width of 900 and a height of 600. If you want the coordinates of your cities to be bounded by a different size rectangle, you can change width or height.\n", + "\n", + "**Complication 2:** Sometimes I want `Cities(n)` to be a true function, returning the same result each time. This is very helpful for getting repeatable results: if I run a test twice, I get the same results twice. \n", + "But other times I would like to be able to do an experiment, where, for example, I call `Cities(n)` 30 times and get 30 different sets, and I then compute the average tour length produced by my algorithm across these 30 sets. Can I get both behaviors out of one function? *Yes!* The trick is the additional optional parameter, `seed`. Two calls to `Cities` with the same `n` and `seed` parameters will always return the same set of cities, and two calls with different values for `seed` will return different sets. This is implemented by calling the function `random.seed`, which resets the random number generator.\n", + "\n", + "**Complication 3:** Once I create a set of Cities, I don't want anyone messing with my set. For example, I don't want an algorithm that claims to \"solve\" a problem by deleting half the cities from the input set, then finding a tour of the remaining cities. Therefore, I make `Cities` return a `frozenset` rather than a `set`. A `frozenset` is *immutable*; nobody can change it once it is created.\n", + "\n", + "For example:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# A set of 5 cities\n", + "Cities(5)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 10, + "text": [ + "frozenset({(151+11j), (346+408j), (261+23j), (122+324j), (654+243j)})" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# The same set of 5 cities each time\n", + "[Cities(5) for i in range(3)]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 11, + "text": [ + "[frozenset({(151+11j), (346+408j), (261+23j), (122+324j), (654+243j)}),\n", + " frozenset({(151+11j), (346+408j), (261+23j), (122+324j), (654+243j)}),\n", + " frozenset({(151+11j), (346+408j), (261+23j), (122+324j), (654+243j)})]" + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# A different set of 5 cities each time\n", + "[Cities(5, seed=i) for i in range(3)]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 12, + "text": [ + "[frozenset({(705+181j), (759+454j), (460+242j), (378+155j), (428+350j)}),\n", + " frozenset({(849+389j), (715+565j), (26+279j), (665+553j), (560+445j)}),\n", + " frozenset({(468+196j), (520+123j), (588+96j), (514+257j), (731+494j)})]" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to apply the `alltours_tsp` function to find the shortest tour:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "alltours_tsp(Cities(8))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 13, + "text": [ + "((648+296j),\n", + " (779+522j),\n", + " (329+588j),\n", + " (308+456j),\n", + " (5+449j),\n", + " (77+259j),\n", + " (715+107j),\n", + " (823+86j))" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "tour_length(alltours_tsp(Cities(8)))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 14, + "text": [ + "2395.20003959213" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Quick, is that the right answer? I have no idea, and you probably can't tell either. But if we could *plot* the tour we'd understand it better and might be able to see at a glance if the tour is optimal.\n", + "\n", + "Plotting Tours\n", + "---\n", + "\n", + "I define `plot_tour(tour)` to plot the cities (as circles) and the tour (as lines):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_tour(tour): \n", + " \"Plot the cities as circles and the tour as lines between them.\"\n", + " plot_lines(list(tour) + [tour[0]])\n", + " \n", + "def plot_lines(points, style='bo-'):\n", + " \"Plot lines to connect a series of points.\"\n", + " plt.plot(map(X, points), map(Y, points), style)\n", + " plt.axis('scaled'); plt.axis('off')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 15 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tour(alltours_tsp(Cities(8)))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks much better! To me, it looks like the shortest possible tour, although I don't have an easy way to prove it. Let's go one step further and define a function, `plot_tsp(algorithm, cities)` that will take a TSP algorithm (such as `alltours_tsp`) and a set of cities, apply the algorithm to the cities to get a tour, check that the tour is reasonable, plot the tour, and print information about the length of the tour and the time it took to find it:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_tsp(algorithm, cities):\n", + " \"Apply a TSP algorithm to cities, plot the resulting tour, and print information.\"\n", + " # Find the solution and time how long it takes\n", + " t0 = time.clock()\n", + " tour = algorithm(cities)\n", + " t1 = time.clock()\n", + " assert valid_tour(tour, cities)\n", + " plot_tour(tour); plt.show()\n", + " print(\"{} city tour with length {:.1f} in {:.3f} secs for {}\"\n", + " .format(len(tour), tour_length(tour), t1 - t0, algorithm.__name__))\n", + " \n", + "def valid_tour(tour, cities):\n", + " \"Is tour a valid tour for these cities?\"\n", + " return set(tour) == set(cities) and len(tour) == len(cities)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(alltours_tsp, Cities(8))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 city tour with length 2395.2 in 0.239 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 18 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "All Non-Redundant Tours Algorithm (improved `alltours_tsp`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We said there are *n*! tours of *n* cities, and thus 6 tours of 3 cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "list(alltours({1, 2, 3}))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 19, + "text": [ + "[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]" + ] + } + ], + "prompt_number": 19 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But this is redundant: `(1, 2, 3)`, `(2, 3, 1)`, and `(3, 1, 2)` are three ways of describing the same tour. So let's arbitrarily say that all tours must start with the first city in the set of cities. We'll just pull the first city out, and then tack it back on to all the permutations of the rest of the cities. \n", + "\n", + "While we're re-assembling a tour from the start city and the rest, we'll take the opportunity to construct the tour as a *list* rather than a *tuple*. It doesn't matter much now, but later on we will want to represent *partial* tours, to which we will want to append cities one by one; appending can only be done to lists, not tuples." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def alltours(cities):\n", + " \"Return a list of tours, each a permutation of cities, but each one starting with the same city.\"\n", + " start = first(cities)\n", + " return [[start] + Tour(rest)\n", + " for rest in itertools.permutations(cities - {start})]\n", + "\n", + "def first(collection):\n", + " \"Start iterating over collection, and return the first element.\"\n", + " return next(iter(collection))\n", + "\n", + "Tour = list # Tours are implemented as lists of cities" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can verify that for 3 cities there are now only 2 tours (not 6) and for 4 cities there are 6 tours (not 24):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "alltours({1, 2, 3})" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 21, + "text": [ + "[[1, 2, 3], [1, 3, 2]]" + ] + } + ], + "prompt_number": 21 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "alltours({1, 2, 3, 4})" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 22, + "text": [ + "[[1, 2, 3, 4],\n", + " [1, 2, 4, 3],\n", + " [1, 3, 2, 4],\n", + " [1, 3, 4, 2],\n", + " [1, 4, 2, 3],\n", + " [1, 4, 3, 2]]" + ] + } + ], + "prompt_number": 22 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:** We could say that there is only one tour of three cities, because `[1, 2, 3]` and `[1, 3, 2]` are in some sense the same tour, one going clockwise and the other counterclockwise. However, I choose not to do that, for two reasons. First, it would mean we can never handle maps where the distance from A to B is different from B to A. Second, it would complicate the code (if only by a line or two) while not saving much run time.\n", + "\n", + "We can verify that calling `alltours_tsp(Cities(8))` still works and gives the same tour with the same total distance. But it now runs faster:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(alltours_tsp, Cities(8))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 city tour with length 2395.2 in 0.046 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 23 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's try a much harder 10-city tour:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(alltours_tsp, Cities(10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtYVWXaBvB7y1bAPGBqapYm1KilaSZZplQmeCAzwVNq\n5ZfHcQRKbTLJ0oxpIE+AaWo6Ws4YjVRjbmfA0glt/FI7eMocBzWPjaZpKieB/f3xfAgkKIe19/uu\nte7fdXkRW2Q/Gtys/az3fV6H2+12g4iILK+G6gKIiMg7GPhERDbBwCcisgkGPhGRTTDwiYhsgoFP\nRGQTDHwiIptg4BMR2QQDn4jIJhj4REQ2wcAnIrIJBj4RkU0w8ImIbIKBT0RkEwx8IiKbYOATEdkE\nA5+IyCYY+ERENsHAJyKyCQY+EZFNMPCJiGyCgU9EZBMMfCIim2DgExHZBAOfiMgmGPhERDbhVF2A\nblyuDCQlpSM31wlf33xER4chPDxEdVlERNXGwC/B5cpATEwaMjPjrjyWmRkLAAx9IjI9tnRKSEpK\nLxX2AJCZGYfk5A2KKiIiMg4Dv4Tc3LJf8OTk+Hi5EiIi4zHwS7h8Ob/Mx/38CrxcCRGR8Rj4/2/b\nNmDv3jA0aRJb6nF//2mYODFUUVVERMbhTVsA//wnMHgwsGpVCBwOIDl5OnJyfODrW4ADB3rj7Fne\nsCUi83O43W636iJUcrmA//kfICUFeOSRq3//q6+Avn2B3buBm27yfn1EREaxdeCnpAAxMcDf/gZ0\n6VL+x02ZApw8Cfz5z96rjYjIaLYN/HfeAV59FfjHP4D27a/9sZcuyce89RbQp4936iMiMpotA3/e\nPCAxEdiwAbjjjor9mfR0YOxYYM8eoE4dz9ZHROQJtgp8txuYORNYvVrCvkWLyv35p58GGjaUHxhE\nRGZjm8B3u4HJk4GNG4G0NKBJk8p/jp9+Atq1Az75BAgONr5GIiJPssU6/IICacds3Qps2lS1sAeA\nRo2AOXOA0aOBy5eNrZGIyNMsH/h5ecDw4cChQ9LGadCgep9v2DCgWTNg9mxj6iMi8hZLt3Sys4GB\nAwGnU5Zg+vkZ83kPHwY6d5ZXDBW96UtEpJplr/B/+UWWUAYEAGvWGBf2AHDbbUBsrLSJrPvjkois\nxpKBf+YM0LMn0KYN8N57QM2axj9HdDRw8SKwfLnxn5uIyBMs19I5eRIIC5NxCH/8I+BweO65du4E\nQkOBXbuApk099zxEREaw1BX+4cNASAjw5JOeD3sA6NABGDVKrvaJiHRnmSv8/fvlavuFF4CoKO89\nb3Y2cPfdslzz8ce997xERJVlicD/9ltp4fzhD8DIkd5//k2bZBfu3r1AvXref34iooowfeD/61/A\nE08AixYBkZHq6hg1CvD3BxYsUFcDEdG1mDrwP/1UNkK9+y7Qu7faWs6elbELa9YAXbuqrYWIqCym\nvWn78ccS9qmp6sMeAG68EZg/HxgzBsjNVV0NEdHVTBn4q1YBv/0t8Pe/A927q66m2KBBQGAgEB+v\nuhIioquZrqWzaJHcnE1LA+68U3U1Vzt6FOjUCcjIANq2VV0NEVExUwV+fDyweLH07gMDVVdTvgUL\ngPffl9CvYcrXUERkRaaII7cbmDYNWLkS2LxZ77AHpN1UWAgsWaK6EiKiYtpf4RcWyk7WrVuljdOo\nkeqKKmbvXuDhh2WPQPPmqqshItI88PPzZX37wYPAunVA/fqqK6qcV14Bdu8GPvpIdSVERBoGvsuV\ngaSkdGRnO7F/fz6aNw/Dli0hqF1bdWWVl5sLdOwIxMUBERGqqyEiu3OqLqAklysDMTFpyMyMu/JY\nnTqx2LQJCA8PUVhZ1fj6AkuXAkOGAD16yGx+IiJVtLppm5SUXirsAeDgwTgkJ29QVFH1desG9OsH\nvPii6kqIyO60Cvzc3LJfcOTk+Hi5EmPFxwMuF/D556orISI70yrwfX3zy3zcz6/Ay5UYq359IDlZ\njkTMyVFdDRHZlVaBHx0dhqCg2FKPBQVNQ1RUqKKKjDNggAxXi4u7/scSEXmClqt0nnpqA1q08EHT\npgWIigo15Q3bspw4IadkbdwItG+vuhoishvtAh8AHn1UdtY++qjqSoy3eDHwpz8BX3wB+Jj71gQR\nmYxWLZ0iTqdsurKiMWOAWrWAhQtVV0JEdqNt4BeY+z5tuWrUkBk7M2cCR46oroaI7ETbwLfqFT4A\ntGkDxMTIkDX9GmpEZFVaBr6Pj7UDH5CNWD/8AKSkqK6EiOxCy8C3+hU+IH38d94Bnn9ezsMlIvI0\nbQPfqj38ku6/X45FnDJFdSVEZAdaBr4dWjpF4uLkBK/PPlNdCRFZnZaBb4eWTpG6dWWJ5rhxQFaW\n6mqIyMoY+Bp47DGgc2dZqklE5CnaBr4devglJSbKDtxvvlFdCRFZlZaBb6cefpEmTWSM8pgx9vu7\nE5F3aBn4dmvpFBk5UkYpJyaqroSIrIiBrxGHQ4arvfEGcOiQ6mqIyGq0DXy79fCL3H478MILwPjx\nHLtARMbSMvDt2MMvadIk4L//BVatUl0JEVmJloFv15ZOkZo1ZezClCnA6dOqqyEiq2Dga6pzZ2DE\nCJm1Q0RkBG0D3649/JJee01OxkpLU10JEVmBloFv9x5+kRtuAN5+W27gXryouhoiMjstA58tnWK9\negHdugGvvKK6EiIyO6fqAsrCwC9t7lygXTvgySeB4GDV1ZDZuFwZSEpKR26uE76++YiODkN4eIjq\nskgBbQOfPfxijRsDc+YAo0cDO3bIKh6iinC5MhATk4bMzLgrj2VmxgIAQ9+GtGzpsId/teHDgWbN\nJPiJKiopKb1U2ANAZmYckpM3KKqIVNIy8NnSuZrDASxaBMyeDRw4oLoa0p3bLQfrbN9e9ov4nBwf\nL1dEOmDgm0irVsC0aXJYCscuUFny8oD33gM6dgSeew64+eayv5H8/NgztSNtA589/LJFRwO//CKz\n84mKnDsHJCQAgYHAypUyanv3biA+PgxBQbGlPrZGjWkIDw9VVCmppOVNW/bwy+d0ytiFsDCgb1+g\naVPVFZFKhw/LOO2VK4HwcGDdOrm6L1J0YzY5eTpycnzg51eA9u17IzExBCNGAA0aqKmb1NAy8NnS\nubaOHYFnnwViYoCUFNXVkAo7dsj9nE8/la+FXbuAW24p+2PDw0OuWpGTny8LAdatA2po+TqfPEHL\n/9UM/Ot79VXgq6+ATz5RXQl5S2Gh/P9+6CEgMhLo0gU4eFBaOeWFfXkSEoBLl3iOst1oe4XPHv61\n+fsDS5bIKVkPPQTUq6e6IvKU7Gy5ETt3LlCnjkxRHThQvk+qqmZN4IMPZEhfcDDw2GPG1Uv60vIK\nnz38iunRA+jZE4iNvf7HkvmcPi1X4K1ayZX94sXA9u3A0KHVC/siTZpI6D/7LJf62oWWgc+WTsXN\nng2kpgJbt6quhIzy73/LwLzf/AY4fhzYtKm4leNwGPtcDzwgU1kjIjigzw4Y+CZ3443AvHnAmDGy\nBpvMye0GNm8GnnhChuU1aQJ8/7207dq29exzjxsnbZ3Ro7m/w+q0DXz28Ctu8GDgtttk7TWZS36+\ntFXuvx8YNQro3VuWWs6cKaHvDQ4H8NZb0taZP987z0lqaHnTlj38ynE4gIULgU6d5Gaep68Iqfou\nXgSWL5dXZ7fcArz0EtCvn3ztq+DvD3z4oaz8uece4OGH1dRBnqXtFT4Dv3JatJClmmPHyvI90tOJ\nExLut90GbNkCvP9+cStHVdgXadlSVgMNGwYcO6a2FvIMBr6FTJgAXL4MLF2quhL6td27ZQltu3ay\n/n3bNmnldOmiurLSQkNlfMfAgUBurupqyGhaBr6PD3v4VeHjI2MXXn5ZVneQWm43sGGDnFrWqxfQ\nujXwn/8ASUky80ZXL74I3Hyz7OQma9Ey8HmFX3Xt2smSvqgo1ZXYV14e8O67MgJj0iQ5qezQIWnl\n3Hij6uquz+EAVqwAPv8cWLZMdTVkJAa+BcXGAt99JzfhyHvOnZOVUq1aSS88IUFm3IwcCfj6qq6u\ncurVAz76SH5I7dihuhoyCgPfgvz8pI8fHS0hRJ51+LDMng8MBPbuBdavL27lGL1RypvatAHeflvm\n9pw+rboaMoKWgc8efvV17y7jcqdOVV2JdW3fDgwZIvNofH3lav7dd4EOHVRXZpyICFm18+STvAiz\nAi0Dn1f4xoiPly35GRmqK7GOwkJg7VoZczBokIwmOHRI/q0rO7HSLF5/XV6pcGaT+Wm58YqBb4yA\nACA5Wdbmf/uttHqoarKz5ep97lygbl3ghRek1WHEEDPd+fgAq1fLK5n77pO/N5kTr/AtLiJCdt7+\n4Q+qKzGn06eBGTNko9S6dTLbpqiVY4ewL9KokQzpGz9eFgSQOWkZ+OzhG2vBAmDRImDPHtWVmMf+\n/cUTK0+ckCWKnppYaRb33gu8+SYwYABw/rzqaqgqtAx8XuEbq3lzYNYsmYbIH6Tlc7vlfkf//nLT\nu0kTCf4lS2TFCskS00cflbcc4WE+DHybGDtWTjlauFB1JfopmljZpYv8UOzTp3hi5U03qa5OP/Pn\nAz/+yOmsZuRwu/WbgH35MlC7trwl43z/vcxa/+Yb4NZbVVej3oULMrFy/nxZYTNlikys5KHe13f8\nuMzQX7ECCAtTXQ1VlJZf2uzhe0abNrIZa8IEex90cfy47E9o1Qr44oviiZX9+zPsK6p5c/l3e/pp\neTVE5qDll3fRNx17hMabOlXWjX/wgepKvG/XLuCZZ4D27WWZ5fbtek6sNIuQEPl6ioiQf0/Sn5Yt\nHQCoVUsOiahVS3Ul1rN1q3yT7t1rjmFe1VE0sXL2bFmlFB0tR/o1aKC6Mmtwu4Hhw+X+0IoV9l3B\nZBbaBn7t2sBPP8lbMl5UlMxlX75cdSWekZcnm4XmzJFQmjIFGDrUfEPMzODSJdlxPH68tAtJX9oG\nft26sv65bl3VlVjThQvAXXfJVVmPHqqrMc7PP8syyqQk+ftNniw3FXnl6VmZmUDXrjJhs2tX1dVQ\nebTs4QNcmulpdevKwdVjx1qj/1o0sTIoSHaCrl8PpKebf2KlWQQFyavFwYNlySbpiYFvY/36ye7J\nmTNVV1J127ZdPbFy5UprTaw0i/BwYMwYGSrHJdV60ral06wZ8PXX8pY858cfgbvvlqvhjh1VV1Mx\nhYUy12b2bODIEbmyHzWK7T8dFBbK8tbAQCAxUXU19Gvajn/iWnzvaNoUeOMNuTLbulXvgWAlJ1bW\nqyc3Yu0ysdIsatSQ076Cg2Wy5vDhqiuiktjSITz7rFwdJyWprqRsp04VT6x0ueQ0r6JWDsNePwEB\ncrzmc88BO3eqroZKYuATHA5g8WIZoXzokOpqiu3fL2vm27QBTp6UiZVr18qGH96I1Vv79nIBEREB\nnD2ruhoqwsAnAMAdd0iLZPx4tWMXiiZWPv64BHuzZjIDaPFiTqw0myeflH7+iBHcNa8LbQOfPXzv\nmzwZ+O9/gT//2fvPnZ8PpKRI33f0aFnxcfiwtHI4sdK84uNlY5aZV4JZibYdUF7he1/NmtIf79dP\n1q83buz557xwAVi2TCZWtmgBTJ8OPPYYh5hZRc2aMq+oc2f51a+f6orsTdtvKwa+GsHBwLBhwKRJ\nnn2e48eBF1+UiZVbt0ooFLVyGPbW0qQJ8Ne/ytLZAwdUV2Nv2n5rMfDVee01YMsWIC3N+M9dcmJl\nTo5MrCxq5ZB13X+/nLoWESFDEUkNbQOfPXx16tSRM3DHj5f+a3W53fLDIyxMTpNq21ZmryQmyhU+\n2cPYsfIKcvRoe5/HoJK2gc8rfLV69wYefBB45ZWqf47cXBnO1qGDrAAaPlyWfU6dyvHEduRwyPym\n//wHmDdPdTX2xJu2VK5584B27WR5XefOFf9zP/8syyiTk2Vi5ezZQGgo184T4O8PpKbKoTOdOgEP\nP6y6InvR9grfx4eBr1rjxhLWo0dXbBjWoUNATIxMTty3r3hiJccTU0ktWwKrVsmFxLFjqquxF20D\n3+lkD18HI0bIOvi5c8v/mC+/lLG4wcFyBbd7NydW0rX17CmjFyIjpfVH3qHttMx+/eQmD9ftqnfw\nINChQwY6dkyHj48Tvr75mDgxDIWFIZg9Gzh6FHj++eKZPEQV4XbLKOWGDaUFSJ7HHj5d1759GfD1\nTcOWLXFXHtu4MRatWgGvvx6CiAgOMaPKcziAP/1JluQuWybr9MmztG3psIevj6SkdJw5E1fqsfz8\nOAQGbsDgwQx7qrq6deVYxJdekj0Z5FnaBj57+PrIzS070XNyfLxcCVlRmzbS0hk4EDh9WnU11qZ1\n4PMKXw++vmX/j/Dz409kMsaAAbJPY+hQft97EgOfris6OgxBQbGlHgsKmoaoqFBFFZEVzZolrdzY\n2Ot/LFWNtt1X9vD1ER4eAgBITp6OnBwf+PkVICqq95XHiYzg4wP85S+yvLdzZ1nBQ8bSNvDZw9dL\neHgIA548rlEj2Ynbq5fs0r7zTtUVWQtbOkSklU6dZIf3gAHA+fOqq7EWBj4RaeeZZ4BHH5W3PB7R\nONoGPnv4RPY2f74cufnHP6quxDrYwyciLdWqBaxZIztx771X+vpUPdpe4bOlQ0TNmwOrVwNPPy3T\nWKl6GPhEpLWQEGDaNDkeMStLdTXmpm3gs4dPREWio2WJ5vjxPB6xOrQNfPbwiaiIwwEsWQLs3Aks\nXKi6GvPS+qYtr/CJqMgNNwAffgh07Qrcc4+8pcrR+gqfgU9EJQUFyQz9wYOBkydVV2M+2gY+e/hE\nVJa+feU0vMGDK3bWMhXTNvDZwyei8rz8MhAQAEyZoroSc9E68HmFT0RlqVEDeO89YP16YNUq1dWY\nB2/aEpEpBQTITdwePYB27YCOHVVXpD9tr/DZwyei62nfHkhOBiIjgbNnVVejP4fbrd82BpcrA1On\npuPUKSc6dsxHdHQYZ7ETUbkmTQL27QPWrZOLRSqbdoHvcmUgJiYNmZlxVx4LCopFYmIvhj4Rleny\nZSA0VMYwvPaa6mr0pV1LJykpvVTYA0BmZhySkzcoqoiIdFezJpCSImv0165VXY2+tAv83Nyy7yPn\n5PB1GhGVr0kTGac8ejRw4IDqavSkXeD7+pZ9p/bUqQLexCWia+rSBZg1S45HvHhRdTX60S7wo6PD\nEBQUW+qxW2+dBqczFPfcA3z6qaLCiMgUxo6V4B81ipM1f027m7aA3LhNTt6AnBwf+PkVICoqFH37\nhuDjj2Vn3V13AXPmAHfcobpSItJRTg7QvTswdCgwebLqavShZeBfS24ukJgIJCQAI0cC06cD9eur\nroqIdPPDD3Klv3o18MgjqqvRg3Ytnevx9QV+/3tgzx7g3DmgdWuZk825O0RUUsuWMnZh2DDg6FHV\n1ejBdFf4v/bNN8Bzz0n4z5/Pn+REVFpCApCaCmRkyAWjnZk+8AG5MZOaCrzwghyMMHs2EBiouioi\n0oHbDQwaBDRsCCxerLoatUzX0imLwwEMHChbqzt3Bu67D5g6FfjlF9WVEZFqDodsyNq8GXjnHdXV\nqGWJwC/i5yen2+/aBfz4I9CmDbBsGfv7RHZXt65M1pw2Ddi2TXU16liipVOeHTukv5+VJSt7undX\nXRERqfTRR5IJO3YAjRurrsb7LB34gPTvUlKAF1+UJVoJCcBtt6muiohUmTYN+PJLIC1Nzt2wE8sH\nfpGsLNmslZgIjB8PdOyYgaVL05Gb64SvL0cwE9lFQQHQp48cmJKQoLoa77JN4Bc5dgx46qkMbN6c\nhoICjmAmsqMzZ2SBR0KCrOCxC0vdtK2IW24BatVKLxX2AEcwE9lJw4aylPt3vwO++051Nd5ju8AH\nyh/BfOiQD3JzvVwMESnRqRPw5psyWfP8edXVeIctA7+8EcxnzhQgMFC+COzyBUBkZ888A/TsKW8L\nC1VX43m2DPyyRjAHBU3DypWhcLmAb7+VnbpTpwInTyoqkoi8Yt484NQp4I03VFfieba7aVukrBHM\nJW/YHj4MzJ0rw5ciI2Usc+vW6uolIs85cQIIDgaWLwd69VJdjefYNvAr6qefgLfekl/dusmkzvvv\nV10VERlt82YZ0fK//wu0aqW6Gs9g4FfQpUsyj2POHKBFCwn+vn1lTgcRWUNSknyff/EFULu26mqM\nx8CvpPx84K9/BeLjZQPH738vp+rUrKm6MiKqLrcbeOopoEYNYOVK613QMfCryO0G0tNl48aBA8Ck\nScDo0UCdOqorI6LqyMoCHnhAzsb93e9UV2MsBr4Btm+XpZybNsnYhqgo4KabVFdFRFWVmQl07SoT\nNh98UHU1xrHlskyjBQcDH3wAbN0qN3nbtAEmTJAvGiIyn6AgYMUKYPBgay3NZuAb6PbbgUWL5CCW\nBg1kOueQIcBXX6mujIgqq08fYNw4mbWTl6e6GmOwpeNBFy4AS5fKxo7WreUGb2io9W4EEVlVYSHQ\nv78s00xKUl1N9THwvSAvD1i9Wm7w1qolwT9okP1mcROZ0blz0rZ99VVgxAjV1VQPA9+LCguB9esl\n+I8eBSZPBp591prrfYmsZM8e4JFHgA0bZI6+WbGH70U1agCPPQZkZAB/+Qvw2Wdy+tbMmTKfm4j0\n1K4dsGABEBEBnD2rupqqY+Ar8sADcr5mRgZw5Ahwxx1ATAzwww+qKyOisgwZIqOUhw2TTZdmxMBX\nrE0bYNkyecno6yszukeMAHbuVF0ZEf1afDyQmwvMmKG6kqph4Gvi5pult3/wINC+vSwJ69NHNnPx\nLguRHpxOICVFxi6sXau6msrjTVtN5eYC770nO3jr15eVPQMGAD4+qisjoi+/BPr1A7ZsAX7zG9XV\nVBwDX3OFhcDf/iYvJc+ckbn8zzwD+PmprozI3pYsARITJfzNMkOLgW8SbrfM646PB77+Wub1/Pa3\nsqOXiLzP7QbGjJENlu+/b44Nlezhm4TDAYSEAC6XTOn8/nuZ9zF5MnDsmOrqiOzH4ZClmgcPyul4\nZsArfBM7ckTGNqxcCTz+uPT577xTfs/lykBSUjpyc53w9c1HdHRYqSMcicgYR44A990ne2t69FBd\nzbUx8C3g7Flg4UIgOVkGtnXrloElS9KQmRl35WOCgmKRmNiLoU/kAZ99Jsupt20Dbr1VdTXlY+Bb\nSHa2jHSdPPllZGe/ftXv9+o1Hf/4xyzvF0ZkA2++KafhZWTou6iCPXwL8feXG7nBwWVPZcvJ4ZpO\nIk+ZMgVo2RKIjlZdSfkY+Bbk55dfzuMm3Q9OZAIOB7B8uazNX7pUdTVl44BeC4qODkNmZuyvevjT\nEBXVW2FVRMWsuqigbl2ZkdW9O9Chg9zM1QkD34KKvnFiYqbj8mUftG1bgKio3pb4hiLzc7kyEBNT\nelFBZmYsAFjia7R1a9mUNWiQnHet0/nWvGlrYQkJcsZuQoLqSsjMCgqAS5eKf2VllX6/rMeu9f6/\n/132ooKePadjwwbrLCqIjZVzrtPT9TnsSJMyyBP8/GTlDllbYWFxoF4veCsbzpcuAfn5ckjPDTfI\nr5L/Xd77DRuW//vjxjmxffvVf4+NG30wYAAQGSnnRgQEeP/f0kivvQb07Qu89JKs4NEBA9/C/P2B\nnBzVVZDbLT94Kxu0FQ3nnBz5f329IC75WLNmFQ9vPz9jxwY0aFD2ooKHHy5A//7ABx8AEyYA3brJ\ngSP9+wONGxv3/N7i4yObsYKDpZc/aJDqihj4lsYr/Ipxu+Xc4epcBV8rrLOy5Czj6wVryfcbN5Yl\nfhX5M/7+cpqaWZS3qGDSpN4IDwdGjpT5NC4XkJoq40PuvVeu/AcMkFHiZtGwofwdwsJkF/xdd6mt\nhz18C1uzRoY6rVmjupLqu3zZuDAu6/0aNSrXsijvyrms92vX5ljrX3O5MpCcvAE5OT7w8ytAVFRo\nuTdss7OBtDQJznXrgLZtJfwjI+WIUDNYuRKIi5ObuPXrq6uDgW9RM2YsxNy5nyMryx8BAdmYOPEh\nzJgxwWPPV1BgTL+4vPcLC6sWxhUN55o1PfZPQwbKy5MxBh9+KGPDb71Vgj8iQk6P09nEicDRo7Js\nU9UrMga+Bc2YsRBxcbuQn//2lceczvGYMuVuPP/8BMNu5pV8Py+v+mF8rfdr1TLH+Fnynvx8GRme\nmiohGhBQfOV/9936fb3k5QGPPCI3cmNj1dTAwLegRo2G4MyZlDJ+ZygaNXq/0i2Jirxv9I09osoo\nLJSDSFJT5ZePj1z1R0bKDVNdvjZPnJCbuMuWAb0V7INk4FtQQMBInD+/4qrH69cfiXPnrn6cyErc\nbuCbb6Ttk5oKXLwo4R8RISt/VN9P2bwZGDhQ1ugHBnr3uU10b58qyukse2mO08k1mmR9DgfQqRPw\n+uvAvn1yw7dRI+C552SFz7hxshnq8mU19XXvDrz8srz6yMry7nMz8C1o4sSH4HSOL/WY0zkOEyea\nf9s6UWXdeScwfbpc9f/rX8DttwOvvAI0bSrnQ69d6/39KhMnyhLN8ePlFYm3sKVjUTNmLMSCBRnI\nz/eD05mDiRNDPLpKh8hsjh4FPv5Y2j7ffis99YgIuanqjUPJs7KArl2B0aPlB4A3MPCJyPZOnSoO\n/61b5ajCyEigXz/Pjng4eBB44AF53m7dPPc8RRj4REQl/Pwz8MknEsKbNgEPPihX/k884ZkRD3//\nu1zl79ghIy88iYFPRFSOCxeA9etlxU9aGnDPPcUjHpo3N+55Zs2Sz79xo+w58RQGPhFRBWRny+qe\nohEPrVsXb/Rq1ap6n7uwUF5BtGwJJCcbU29ZGPhERJWUlyftntRU6f3fckvxRq+2bav2Oc+fl01Z\n06cDTz1lbL1FGPhERNVQUCCbqT78UH7Vq1c836djx8rt8t2zR8YvpKdL+8hoDHwiIoMUFgLbthWP\neHA4So94qMjQtJQUOTRlxw7gxhuNrY+BT0TkAW43sHNncfj/8guunOjVvfu1RzxMmSJX+y6XsaMg\nGPhERF6wb1/xfJ9jx+QmbWSktHB+vTInPx8IDZW1+bMMPOaXgU9E5GUHDxaH//79coZvZKScjOXv\nLx9z6hS27NDWAAABJklEQVTQubOs2unf35jnZeATESl0/LjM809NBb7+GujVS8K/b1/gu++AsLAM\ntG+fDqfTCV/ffKSlvV7l52LgExFp4tQpGeaWmgp88QXQtm0Gdu9OQ3Z28fm/1UlsBj4RkYbOnQO6\nd38Ze/aUvqKvTmJzPDIRkYYCAoCGDZ2Gfk4GPhGRpnx98w39fAx8IiJNRUeHISjIuBPPjX29QERE\nhgkPl1PqkpOnIyfHB35+BQCqvjCfN22JiGyCLR0iIptg4BMR2QQDn4jIJhj4REQ2wcAnIrIJBj4R\nkU0w8ImIbIKBT0RkEwx8IiKbYOATEdkEA5+IyCYY+ERENsHAJyKyCQY+EZFNMPCJiGyCgU9EZBMM\nfCIim2DgExHZBAOfiMgmGPhERDbxf4RetGPdSuQqAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 city tour with length 2492.2 in 2.617 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 24 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Complexity of `alltours_tsp`\n", + "---\n", + "\n", + "It takes about 2 seconds on my machine to solve this 10-city problem. In general, the function `TSP` looks at (*n*-1)! tours for an *n*-city problem, and each tour has *n* cities, so the total time required for *n* cities should be roughly proportional to *n*!. This means that the time grows rapidly with the number of cities. *Really* rapidly. This table shows the actual time for solving a 10 city problem, and the exepcted time for solving larger problems:\n", + "\n", + "\n", + "
n expected time for `alltours_tsp(Cities(n))`\n", + "
10Covering 10! tours = 2 secs\n", + "
112 secs × 11! / 10! ≈ 22 secs\n", + "
122 secs × 12! / 10! ≈ 4 mins\n", + "
142 secs × 14! / 10! ≈ 13 hours\n", + "
162 secs × 16! / 10! ≈ 200 days\n", + "
182 secs × 18! / 10! ≈ 112 years\n", + "
252 secs × 25! / 10! ≈ 270 billion years\n", + "
\n", + "\n", + "There must be a better way ..." + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Approximate Algorithms" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What if we are willing to settle for a tour that is short, but not guaranteed to be shortest? Then we can save billions of years of compute time: we will show several *approximate* algorithms, which find tours that are typically within 10% of the shortest possible tour, and can handle thousands of cities in a few seconds. (**Note:** There are more sophisticated approximate algorithms that can handle hundreds of thousands of cities and come within 0.01% or better of the shortest possible tour.)\n", + "\n", + "So how do we come up with an approximate algorithm? Here are two general plans of how to create a tour:\n", + "\n", + "* **Nearest Neighbor Algorithm**: Make the tour go from a city to its nearest neighbor. Repeat.\n", + "* **Greedy Algorithm**: Find the shortest distance between any two cities and include that edge in the tour. Repeat.\n", + "\n", + "We will expand these ideas into full algorithms.\n", + "\n", + "In addition, here are four very general strategies that apply not just to TSP, but to any optimization problem. An **optimization problem** is one in which the goal is to find a solution that is best (or near-best) according to some metric,\n", + "out of a pool of many candidate solutions. The strategies are:\n", + "\n", + "* **Repetition Strategy**: Take some algorithm and re-run it multiple times, varying some aspect each time, and take the solution with the best score.\n", + "* **Alteration Strategy**: Use some algorithm to create a solution, then make small changes to the solution to improve it.\n", + "* **Ensemble Strategy**: Take two or more algorithms, apply all of them to the problem, and pick the best solution.\n", + "\n", + "And here are two more strategies that work for a wide variety of problems:\n", + "\n", + "* **Divide and Conquer**: Split the input in half, solve the problem for each half, and then combine the two partial solutions.\n", + "\n", + "* **Stand on the Shoulders of Giants** *or* **Just Google It**: Find out what others have done in the past, and either copy it or build on it." + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + ">>> Nearest Neighbor Algorithm (`nn_tsp`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a description of the nearest neighbor algorithm:\n", + "\n", + "> *Nearest Neighbor Algorithm: Start at any city; at each step extend the tour by moving from the previous city to its nearest neighbor that has not yet been visited.*\n", + "\n", + "Often the best place for a tour to go next is to its nearest neighbor. But sometimes that neighbor would be better visited at some other point in the tour, so this algorithm is not guaranteed to find the shortest tour. \n", + "\n", + "To implement the algorithm I need to represent all the noun phrases in the English description: \"any city\" (a city; arbitrarily the first city); \"the tour\" (a list of cities, initialy just the start city); \"previous city\" (the last element of tour, that is, `tour[-1]`); \"nearest neighbor\" (a function that, when given a city, A, and a list of other cities, finds the one with minimal distance from A); and \"not yet been visited\" (we will keep a set of unvisited cities; initially all cities but the start city are unvisited). \n", + "\n", + "The algorithm (in more detail) is as follows:\n", + "\n", + "* Keep track of a partial tour (initially just a single start city) and a list of unvisited cities\n", + "* While there are unvisited cities, do the following:\n", + " * find the unvisited city, C, that is nearest to the end city in the tour\n", + " * add C the end of the tour and remove it from the unvisited set" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def nn_tsp(cities):\n", + " \"\"\"Start the tour at the first city; at each step extend the tour \n", + " by moving from the previous city to its nearest neighbor \n", + " that has not yet been visited.\"\"\"\n", + " start = first(cities)\n", + " tour = [start]\n", + " unvisited = set(cities - {start})\n", + " while unvisited:\n", + " C = nearest_neighbor(tour[-1], unvisited)\n", + " tour.append(C)\n", + " unvisited.remove(C)\n", + " return tour\n", + "\n", + "def nearest_neighbor(A, cities):\n", + " \"Find the city in cities that is nearest to city A.\"\n", + " return min(cities, key=lambda c: distance(c, A))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 25 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note:** In Python, as in the formal mathematical theory of computability, `lambda` (or λ) is the symbol for *function*, so \"`lambda c: distance(c, A)`\" means the function of `c` that computes the distance from `c` to the city `A`. \n", + "\n", + "We can compare the fast (but approximate) `nn_tsp` algorithm to the slow (but optimal) `alltours_tsp` algorithm on a small map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(alltours_tsp, Cities(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nCaBVq0j5DxpkewF5SShkW1QUFtoDUn362JTNsGFScrLrdMFF4QM+EwpJf/tbZPRfWmrnrYYvAJdd\n5m76Z/t2OxawsNCWVk6YYCdHdeniJg/qo/ABn9u/X3r33cjof906qV+/yPr/H/wgttM/1dV247Ww\n0E4gu/ZaG81ffrl/pp2CgsIH4syuXdIbb9jov7jYDoMJ3/xNT2++U53WrrU183Pn2hLK8EHfbC3t\nXRQ+EMdCIbvhG176WVpq2z2ER/99+zacUy8qKlN+fomqqpKUnFyjnJxMDR3aX5LtLR8+6PvTTyMH\nfZ9/voP/ODQZhQ8ESHW1tGxZZP5/zRqbegnP/2/aVKbbbitWefn0A78nLS1XN988WOvW9deLL9pN\n4qwsafBgNorzGwofCLDdu6UlSyLz/599dq/273+wwfe1a5enBx6YptGj4/+g73jG9RkIsI4dpREj\n7CVJl1ySpOXLG35fr16Juv32ls2G5sfBXwAOSE2tafT9tm1rWzgJYoHCB3BATk6m0tJy672XljZV\n2dkZjhKhOTGHD6CeoqIyFRQsVmVlolJSapWdnXFglQ78jcIHgIBgSgcAAoLCB4CAoPABICAofAAI\nCAofAAKCwgeAgKDwASAgKHwACAgKHwACgsIHgICg8AEgICh8AAgICh8AAoLCB4CAoPABICAofAAI\nCAofAAKCwgeAgKDwASAgKHwACAgKHwACgsIHgICg8AEgICh8AAgICh8AAoLCB4CAoPABICAofAAI\nCAofAAKCwgeAgKDwASAgKHwACAgKHwACgsIHgICg8AEgICh8AAgICh8AAoLCB4CAoPABICAofAAI\nCAofAAKCwgeAgKDwASAgKHwACAgKHwACgsIHgICg8AEgICh8AAgICh8AAuL/AOyOpcYkgjtfAAAA\nAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2217.5 in 0.283 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 26 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, Cities(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nDOL/AaUuI2R0iUUGAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2361.1 in 0.000 secs for nn_tsp\n" + ] + } + ], + "prompt_number": 27 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the nearest neighbor approach was a lot faster, but it didn't find the shortest tour. To understand where it went wrong, it would be helpful to know what city it started from. I can modify `plot_tour` by adding one line of code to highlight the start city with a red square:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_tour(tour):\n", + " \"Plot the cities as circles and the tour as lines between them. Start city is red square.\"\n", + " start = tour[0]\n", + " plot_lines(list(tour) + [start])\n", + " plot_lines([start], 'rs') # Mark the start city with a red square" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 28 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, Cities(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2361.1 in 0.000 secs for nn_tsp\n" + ] + } + ], + "prompt_number": 29 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that the tour moves clockwise from the start city, and mostly makes good decisions, but not optimal ones.\n", + "\n", + "We can compare the performance of these two algorithms on, say, eleven different sets of cities instead of just one:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def length_ratio(cities): \n", + " \"The ratio of the tour lengths for nn_tsp and alltours_tsp algorithms.\"\n", + " return tour_length(nn_tsp(cities)) / tour_length(alltours_tsp(cities))\n", + "\n", + "sorted(length_ratio(Cities(8, seed=i)) for i in range(11))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 30, + "text": [ + "[1.0,\n", + " 1.0,\n", + " 1.0,\n", + " 1.0,\n", + " 1.0,\n", + " 1.0060657396717771,\n", + " 1.0476876839109404,\n", + " 1.061687777368538,\n", + " 1.0980209876906022,\n", + " 1.137595917252964,\n", + " 1.1545257527154165]" + ] + } + ], + "prompt_number": 30 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ratio of `1.0` means the two algorithms got the same (optimal) result; that happened 5 times out of 10. The other times, we see that the `nn_tsp` produces a longer tour, by anything up to 15% worse, with a median of 0.6% worse.\n", + "\n", + "But more important than that 0.6% (or even 15%) difference is that the nearest neighbor algorithm can quickly tackle problems that the all tours algorithm can't touch in the lifetime of the universe. Finding a tour of 1000 cities takes well under a second:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, Cities(1000))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1000 city tour with length 21523.4 in 0.235 secs for nn_tsp\n" + ] + } + ], + "prompt_number": 31 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Can we do better? Can we combine the speed of the nearest neighbor algorithm with the optimality of the all tours algorithm? \n", + "\n", + "Let's consider what went wrong with `nn_tsp`. Looking at `plot_tsp(nn_tsp, Cities(100))`, we see that near the end of the tour there are some very long edges between cities, because there are no remaining cities near by. In a way, this just seems like bad luck—the way we flow from neighbor to neighbor just happens to leave a few very-long edges. Just as with buying lottery tickets, we could improve our chance of winning by trying more often; in other words, by using the **repetition strategy**." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Repeated Nearest Neighbor Algorithm (repeated_nn_tsp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is an easy way to apply the **repetition** strategy to improve **nearest neighbors**:\n", + "\n", + "> *Repeated Nearest Neighbor Algorithm: For each of the cities, run the nearest neighbor algorithm with that city as the starting point, and choose the resulting tour with the shortest total distance.*\n", + "\n", + "So, with *n* cities we could run the `nn_tsp` algorithm *n* times, regrettably making the total run time *n* times longer, but hopefully making at least one of the *n* tours shorter. \n", + "\n", + "To implement `repeated_nn_tsp` we just take the shortest tour over all starting cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def repeated_nn_tsp(cities):\n", + " \"Repeat the nn_tsp algorithm starting from each city; return the shortest tour.\"\n", + " return shortest_tour(nn_tsp(cities, start) \n", + " for start in cities)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 32 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To do that requires a modification of `nn_tsp` so that the `start` city can be specified as an optional argument:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def nn_tsp(cities, start=None):\n", + " \"\"\"Start the tour at the first city; at each step extend the tour \n", + " by moving from the previous city to its nearest neighbor \n", + " that has not yet been visited.\"\"\"\n", + " if start is None: start = first(cities)\n", + " tour = [start]\n", + " unvisited = set(cities - {start})\n", + " while unvisited:\n", + " C = nearest_neighbor(tour[-1], unvisited)\n", + " tour.append(C)\n", + " unvisited.remove(C)\n", + " return tour" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 33 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Compare nn_tsp to repeated_nn_tsp\n", + "plot_tsp(nn_tsp, Cities(100))\n", + "plot_tsp(repeated_nn_tsp, Cities(100))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8U+X3xz8dtEChbJAiq2XvvWkBoUFAEWUpU4YoCCii\nQoetTGUpreBAFAREHCDSCC1fRsNUZG+hFCtQoGxaupKc3x/nF9u0SZsmdyW979err7Zpeu9Jcu95\nnuc853yOGxERVFRUVFRcHne5DVBRUVFRkQbV4auoqKgUE1SHr6KiolJMUB2+ioqKSjFBdfgqKioq\nxQTV4auoqKgUE1SHr6KiolJMUB2+ioqKSjFBdfgqKioqxQTV4auoqKgUE1SHr6KiolJMUB2+ioqK\nSjHBU24DVFRUVFwRrVaHqKg4ZGZ6wttbj2nTgtG/f6CsNqkOX0VFRUVgtFodpk+PRULC/P8eS0gI\nBQBZnb4a0lFRUVERmKioODNnDwAJCfMRHb1TJosY1eGrqKioCExmpuXgSUaGh8SWmKM6fBUVFRUB\nMRiAq1f1Fv9WsqRBYmvMUR2+C6DV6qDRhKFHj0hoNGHQanVym6SiUix59AgYOBAoWzYYdeqEmv0t\nICAEU6f2kckyRt20dXKUujmkolLcuHIFeP55oFs3YMuWQGzfDrzwQji6dfNA6dIGTJ3aV/Z70k3t\naevcaDRhiIubZ+HxcOzYMVcGi1RUih/x8cCwYUBYGDBlCuDmBvz7L9CxI3DjhtzW5aDO8J0YIuD6\ndcsf4ZMn8m4OqagUF77+GggJATZsAPrkitgkJgJ168pnlyVUh++kXLwITJ9ufXPo5EmDIi84FeWi\nxEIhJaPXA+++C2i1wL59QMOG5n9X4v2nOnwFY+kGDAwMxLx5wOrVQGgo8MYbwXjnnVCzGH5AQAh6\n9uyLjh2BL74AXnxRxhfhpBQ356fuBRWNhw+B4cPZ6f/xB1ChQv7nKNHhg1QUSUxMPAUEhBAHbvir\nWrUQqlgxnkaPJkpONn+uRhNGQUERpNGEUUxMPBER/fEHUZ06RFOnEmVkyPRCnBBL731AQMh/76sr\nEhwcavZ6TV8aTZjcpimOS5eIGjUimjKFKCvL+vNGjSJavVo6u2xBdfgKxdoN2LFj0W7A+/eJBg0i\natuW6PJlkYx1MYqj8wsKirD4moOCIuQ2TVHs2kVUtSrRypXWnxMTE0/BwaHk6xtB7dqFKmqioIZ0\nFIq1Sr2SJYu2GVu+PPDLL8BnnwGdOwMrVwKDBwthoeui1CpJMcnKUmahkJL44gsgIgLYuBHo1cvy\nc/KGxv76C5g+XTmhMbXwSqF4ewt3A7q5AVOnAr//Drz/PqeNZWQ4aqFrQgRcu2b5vT992oCVK4Gb\nNyU2SmQSE4GLF4NRrZp5oVDlyvIXCikBvZ7vn+XLgQMHrDt7QLkaOiZUh69Qpk0LRvXqwlbqtWsH\nHDsG3L4NdOkCXL7sqJWuRUYGMHIk4O6ev0qybt0QvP56Hxw4ADRqBAQFAdHRwPXrMhkrEHfuAH37\nApGRgVi9WgONJhxBQZHo1i0cmZl98fTT8s9K5eT+feDZZ4FLl4BDh4B69Qp+vtJXh2pIR6H07RsI\nLy+gdetw+Pp6oGRJYSr1ypUDfvyRQztdurDTGjZMIKOdmJs3gRdeAGrXBk6eDMTu3UB0dDgyMvK/\n9xkZwM6dHCqLiAAaN+Yw2UsvAbVqyfxCikBaGjBgAGdxTZ0KAIFm19eGDcCQIcDRo0DZsrKZKRt/\n/w089xw7/CVLAE8bvKWQK3NRkHsTQcUy33xD1LUrkdEo3jmOHiWqV4/o9deJ0tPFO4/SOXmSqHZt\nooiIor/fmZlE27cTjR9PVKkSUYcORIsWESUkiGGpcGRnEw0YQDR6dMGveeJEopdfFvc6VCI7d/Lm\n7FdfFe3/LGd4zVbMxq0qraBAnjwBGjQAfv4Z6NRJ3HM9egS89hpw4QLP/Bs0EPd8SmPbNmDcOF7p\nDB/u2LGys7nE/uefgS1bgKefzpn5535f5c7xJwImTgSuXePXX6KE9eemp7M8wNSp/D+uDhGvfufO\nBTZt4tBdUdFqdYiO3omkJA/cvWvAN9/0UcSGLQB1hq9EFiwgGjxYuvMZjUSff05UuTLRhg3SnVdO\njEaixYuJ/PyIDh8W/vjZ2UR79hBNnkz01FNELVoQzZlDtGKF/Dn+4eFE7doRPX5s2/MvXOBr48QJ\nce2Sm6wsXu02aSLMCu3MGaL69R0/jpCoM3yFkZLCMeFDh4D69aU994kTwNChQI8enJFQqpS055eK\nrCzgjTc4Nr1tG1CzprjnMxiAgwd55v/ll2HIzJRP7O6LLzgeffAgULWq7f+3YQMwZw6nGbpKPD/3\nSsvdXY87d4JRs2YgNm4EfH0dP352Nh/n7l2gdGnHjycIco84KuZMnUr05pvynf/RI47ZNm9OdP68\nfHaIxZ07REFBRAMH2j7DFZLAQPkKnLZsIape3f4CPFeK51uKtZcrF0Jbtwq70mrRgujIEUEP6RBq\nWqaCuHwZ+P574IMP5LOhbFmezU2dCnTvDqxfL58tQnPhAsejO3YENm8GypSR3oaSJS1ncXh4iJvF\nceAAx+B/+w0ICLDvGMuXA2fOANOmOV/DHaOR96v+/Rc4exaYMyd/vvzDh/OxcqWw+fItWgCnTwt6\nSIdQ0zIVREgIMGMGUKWKvHa4ubFz6NiRQzx79vCmpmKWpXYQF8c59osWAWPHymfHtGnBSEgwF7vz\n9Q3BmTN98ddfXCshNOfOcerl+vWOHb9UKWDKFB0mT46F0SiNyBoRbxw/fMgO2/Q998+2/C01la9f\nX1/+siYrLnS+fPPmqsMvEnJnNEjFH39wXHXNGrktyaFFC47ZvvEG0KEDZ/E0aSK3VUVnxQrOuvjl\nF161yInp2s2b45+eHoh+/Tivf/JkHnSF4Nq1nDxyjcbx423eHGfm7AFTJWl4vvsyK6tojtrScx49\n4vx3X1+uITE5bNPPpu/VqvGel7XnlC0LeOTy5RqNHnFx+V+f0PnyT57osHZtHI4dU4b/UrTDLy6S\nrUSsqz1njvJm0WXKAN99B3z7LaeoLVkCjBkjt1W2odcDb70F7N7Ng6m/v9wWMf37B1q8flu14kKn\n+HhuquHoxuGDB+zsJ08GRo2y/f8MBsuO9+FDIDHRsss4fNgD7dqZO2+9np1tXuec1xnXrFnwc7y8\nHHsfLGFppcWV7H0FO4dWq8OaNbG4d28+4uP5MZP/AiDLRFbRDt+6LkX+2YQSKOpqxPT869c9cfWq\nHjNnBgNQ3utyc+Nc9Y4d2SHt3ctibD4+cltmnQcPuILYzY0znsqVk9uiwqlXj2196y2gbVvO6mnZ\n0vb/J+LQxaNHLJ/RuTNQpw4PdKtX2x4CSU/ngT6vEy5RArh0yfIeRP36rDOU22GXKiXcSkVorK20\nhPQrUVFx+Oef/P7rgw+m4OHD8rJMZBXt8K3pUqSnK0OXIjdFXY1Yev6MGaHw8FDu6qVpU+DIERZf\nM4V4mjaV26r8JCSwZECfPsCyZbaVxMsJEcs1mBzuhAk8y27VCujalfdRbHHUjx+zk/XxYYcPADVq\ncAFRbsf99NP5nXnu7z4+gHuedI5Dh3hlFxQUjKSkUCQmms+MIyP7on17Cd80AbC20hIKa/7r9OlU\nZGevMHtMqomsom8Fa7oUR48asGwZMHo0ULmyxEZZwdpq5KOPwhEcHJivmtHZVi8mfHx4n2HtWs7X\nN22CyjmTy72yevJEj7//DsbChYF44w3xz52d7ViM2vTd3T1/KKNhQ86uOXCA21n6+XGGjTVHbYpT\nT58OnDoF7NgBlCzp2OvLzOR9hTVreC/kpZcCodWKOzN2Faz5rxIlspCdnf9xKQTWFO3wLcXZqlYN\ngcHQF++8A8yaBQwaxBklvXrln5VIibXR/K+/PFC2LLc6a9yYlRYbNQJSUiw/PyXFA0Q5DlSpm9Zj\nxgDt2+dk8axcKU+ao6WVUvXqof8vYmb9fTIaeUbs6KZiVlbhG4rlyvFMu6DneHtbtvPJE+DNN4HY\nWA7xFLai+vhjDrnpdI47+2PH+HOuV48HEFOhltgzY1fB2j6Br68Pjh/P/3wpBNYU7fCtxdl69gzE\nsmXARx+xxvuRI/z88eN5tlmjhvS2WhvNg4IM+PVXlle9cAE4f55nXpcvW37+sWMG+PtzrNzPT4fP\nPlPupnWTJsCff3LOfvv2wJtv6vDbb+IOTkTsBE0Od+7c/Cul5OT5mDIlHFu2BFp14mlpvFopbEOx\nbt2Cn1O6tLirm9KlgW++yVlRLVkCVK5seRLw3Xc88B48yI1v7CU7G1i4kPdpli0DRoxQbixeyVjz\nXwA3RRFzw9gaTi2tcOMGEBbGTv+559gZbN4MdOvGcdB+/aSL32q1OkyaFIvr180/xOXLLS93Lc1M\ny5YNQa1afZGSEvj/MdgwAPKV4ReFmTN1+OQT8/zsgIBQLF+u+e/1Z2YKk6bn5ZXjcG/ciERqamQ+\ne/z9IzFrVqTF2bSvL4c/5FwR2sOZM8Czz+rw8GEsHj82f59HjdJg5cpA7N3LK0l7OXuWZ/WVK3Om\n0NNPO263Sn5+/FGHl1/eiS5dPODjY8DUqdIIrCl6hl8Yfn48+zl2jAuW7tzhbIT793n2/8YbPOMf\nP178lLz+/QMxciTw7bfhaNy48NhmYVkCd+8CvXt74sSJ/P+rlGYKuTl92nJ+9pAh4ShTJhAPH/KA\nXNBmoa8vUKECZ5YUFKfOvR9iLZ+6fn2Dy6k7NmsGNGwYh1278r/P8+eHY8+eQLudvcEAfPIJh4QW\nLOAJkzqrFw9Pz0D07h2I2FiJzyvt6cShTRuOI2/dyvns9euz4zcY+HvHjpzxMGECN7mwFi91lOrV\nAzF0aCCio217fkGx0EqVgKpVFd5MIRfW9jCaNfNATAw7bEdjypaQIp9aSej1lt/n+vU90LWrfce8\nfJknRp6eHKKrW9d++1Rs4/ffOQIhNU62qLWOmxs787NnOR0vMJCVAUNDWT9j/Hjgq6+4yGPGDC43\nF5rr14XdP5g2LRgBAcK2ORQLa3sYFSsaULWqOM4e4EFz+XJuzdehQyQ8PcMxb57rZo1Ye58TEw34\n/HPOobcVo5Ezbzp1Yt3+3btVZy8FRPI5fJdVy0xJYdXJypWJli7lzkRERJcuEc2ezaqBXboQffst\nUWqqMOccMYJo7VphjmUiJiaeNJowCgqKII0mTDGdc/KilE4/48ax3rurYu19XrQonp57jrX3Fy4k\nevCg4OP88w/RM88QdezIevcq0nH8uHw6+U69aWsL588DM2cCFy8CixfzKsDNjTMRfv8dWLWKsxqG\nDeP0zjZt7D9Xz568ifzMM8LZ70yYOv3k7ElI3+nnyhXOGLp0CahYUdJTS8bWrTqMH78TJUp4oGVL\n8/f5zBmOw2/fztfz9OnA0aPmWT2NGwdjw4ZAzJjBIVClF6a5GvPnc9+LTz+V4eTyjDPSExtL1KwZ\na6EfPWr+t3//5W5EtWsTtW5NtHJl4TMkSzRoQHTunBDWqjiCK8/yjUbuQztgAHfVskZiItGUKUQ+\nPvHk62u+IvDyCqHoaGWuFF2ZmJh4Cg4OpbJlI6ht21BZVuvFxuET8Q3yxRdE1aoRjR1LdP26+d8N\nBh4YBg8mKleOaMwYon37bGv4YDQS+fjYN1CoCEtCAlHFikR378ptifDMmkXUqRNRWpptz+/RI9Ri\nwxWNJkxcQ1XMsByKk7a1JVExa4Di6QlMmsThnapVWat67lwu5AE4Lzs4GPjpJ+DvvzkNbsIELjBa\nupSXYdZ4/Ji/C9EaTcUx/P05dCfLkllEoqO5zmTbNttVVYmk0X1XKRjrUirCNlwpjGLl8E2UK8dx\nzr/+4uYEjRpxcwijMec5Vaty7P/8ec7uOXWK0z2HDgV27jR/LsAZOn5+au6yUggN5QyUe/fktkQY\nfvqJa0tiY4umH2Utq0eJqb2ujLW0ZakH3mLp8E3UrcuKj99/z+3bOnVioarcuLlx04y1a4GrV7m8\n/b33WMRq3jx29ABX/coh6aBiGVea5e/dywqlWi0XpRUFZ0rtdWWUMvC6fJaOrRiN7Phnzwa6dOHZ\nlLWcZCKu7l21igeMrl05z9zdnaVoVZSBK2TsnD7NWV8//MACgfaghOyp4o4lKZWCpFfEQnX4eXjy\nhAWqli/ntLaQkILj8mlp7PTHjePfQ0KkkXJQsY3x43nlNWeO3JYUnaQknkwsXgwMHy63NSqOotXq\nMG/eTpw544GuXeUZeFWHb4Xr1zmnfscOIDKSHUdB+crTpnETCx8f3g9o2ZI3fAcNEk/KQaVwnHWW\nf+8eiwBOnAi8/bbc1qgIxd9/A/378/UoB8U6hl8QNWpwH1etlkM9rVvzZq01rl9nSYdPPuHG0RMm\n5KgNiiXloFI4zhTL12p10GjC0L17JPz9w9CokU519i5G+fIs7igbkiaBOilGI9EvvxD5+xP17090\n/nz+53TqRLR/f/7HL18mCgnJkXL45hvhpBxUbMMZ8vKVkqetIi6ZmUQeHrbV9oiBOsO3ATc34MUX\neZbesydn7UydyhLGplnZsWORmD07DFqtzux/AwK4lDopCXj/fc6jrlkTeP114OhRmV5QMcMZZvlK\nydNWERcvLw7xpqbKc37V4RcBb2/gnXfY8RMBdevqMGZMLOLi5iErKxL79s3D9Omx+Zw+wPH/55/n\nopnTpznUM3gwa/esXAk8eCDDCypGKD0v31qe9pkzHjh6lK83FdegQgX57nfV4dtBlSrc/q158zjc\nvVv0WVmNGrwhnJCQ04O0Th3uNLR/v3pzi4HSZ/nW8rS9vQ0YMoS7WM2Zw9eMinMjZxxfdfgOUKKE\nY9Vz7u680fvjj7xr36IFZ2XYIuWgUnSUPMu3ViAVFdUHCQmcQHD7NtC5MxcIRkfj/9tgqjgb6gzf\nSbE2K7t82YDk5KIdq0qVnHDRqlUc9ilIykGl6Ch5lp+7kUtQUCQ0mvD/inLc3NjRf/YZZ4NFRAB/\n/AE0aAA8+yynAcsVE1YpOnLO8NU8fAfQanV45ZVYPHqUE9apWzcErVv3xd69gXj7bXbipUrZd/wH\nD4CNG3kAuH+fawHGjlUbSzuCs+blWyItjdt6btjAocB+/YARIwCNxrzvr4qyGD2aq6fHjJH+3KrD\nd4CTJ4HAQB3att0Jo9G8bD0hgbNyjhwBFi4EXn7ZMWG1o0c5r3/TJq6+nDCBCzjU5hVFp08fHa5c\niUPNmtwQZNq0YKeXGkhJydGF+vtvYMgQdv5duqiCfkpj+nSWbXnrLenPrTp8OyHi9MxRo1hy2Rr7\n9nGlpKcnsGwZ34COkJbGyomrVgGJiTzjHz+e0z9VCker1WHy5FgkJeXWNAnF8uUap3f6JhIT2fFv\n2MA9bl95hb+aNpXbMhWAQ3JublzBLzVqDN9O1q0DMjN5pl0Q3bsDf/4JTJ7M8fjhw1l10158fNjJ\nHzgA/O9/LOfQqVOOwFZmpv3HLg5ERcWZOXvA9fLd69blDeqzZ7nuIzOT+zy0asW6PNeuyW1h8aZC\nBTVLx6l48IDDNStXAh42JOS4u3Pc7uJFTq9r25ZVOR89csyOJk141XDtGvDaa8Dq1Rzff/ttvtlV\n8pORoQxdcilwc2NJkCVLuPDvk0/4GmzRggsIv/5a5jL/Ykr58mqWjlPxwQfAc8/x5l9R8PHh5dyp\nU6yf37Ahh2YMDkpie3tzE/adOzl7w8eHZ3RdunA6X1qaY8d3FYxG4NIlZeiSS42HR46Tv3GDK8W3\nb+f6j0GDgJ9/5tUikFM93qNHJDSa/NXjKo4h5wxf1dKxEVMD4rZtI6hEiVDasMFxjZMjR4i6dydq\n3pxo504BjMxFdjbR1q1Ezz1HVKEC0aRJfD65NDzkxmgkeuMNoiZN4snfP69mzexiq1lz/z7R6tVE\nvXrxddK7dzxVry68po/p/gkKiqDgYHkaeCuFvXv5vpcD1eHbgJjCVkYj0c8/szDbgAFEFy4IYHAe\nrl0jmjePqE4dolatiD77jG/04oLRSDRzJlG7dkQPH/LnqdGEUVBQBGk0YcXa+eTm2jWiBg2Eb3qu\nCsOZc/IkUbNm8pxbdfg2EBws/E2Ql4wMokWLiCpVIpo2TRxlR4OBVxJDhxKVK0c0ahSRTuf6s/7I\nSF5FKVktUykEBUVYvNaDgiLsPmZh909xm/3/8w/R00/Lc241i9sGpGhA7O0NvPsuZ+BERHBj9ZAQ\nzu7x8hLmHO7uQO/e/JWSwplGr73Gt9+ECVwIUqWKMOdSCkuWcIqiTuf8hVZSYK163MPD/j0Oa/dP\nSooHYmJ0eOst89Z/CQksMeEqabJ5UbN07EDKjSUpGxBXqcLZP3v2cLetZs2A334TXlCtSpWcxiyr\nVwNnzrCUw5AhQFyca0g5rFzJX7t2AdWqyW2Nc2BJ06dcuRAkJPQpslyIifR0y/fP+fMGDBlS/GSh\ny5ThDfLsbBlOLs/CwjEsxQRLlZpETZu+JsqSMOd88QSEEhBBpUoNpYiIFYKexxLbtxM1bsybaidO\niHuuBw+IVq4kat2aqHZtojlziP79V9xzisWaNbxsTkiQ2xLnI+8ex7Zt8TRvHlFAAFFiYtGOlZRE\nVKGCpY3g2bRtWzy1ayd8CMkZqFSJ6PZt6c/rlA7fWkwQCBNtQygiYgV5e0+SZeMpO5toxQqiqlWJ\nxo8nSk4W/ZR09CjR669z5kb//kS//kqUlSX+eYXgxx+5w5ilzmQq9hMdzYPouXO2PT8tjahNG96b\nsrZRbu1e7tlTuP0xJRIQQPT339Kf1ymlFXr0iER8fKSFv0T+/xdQunQ4/P3nomRJjo8X5bulxyIi\nwnD06Lx8Z9RowrFjx1wRX20ODx5w96xvv+VwzNtv2y/MZismKYevv2bhMaVLOWi1wLhxHJZq2VJu\na1yP777josOYGC4gtAYRa/m4u/NekTU9H61Wh+nTzWP45cqFwGjsi7lzAzF5smsKwbVvz1LdHTpI\ne16n3LS1FlMHcmLqTZt6YPVqjpVlZHB5eWHfHz4Ebt2y/LfLl+Wv0CxfnkvjX38deO893tj96COW\naxBLIMsk5TB2bE68v3NnoHlz3ugdNIgHRCWwaxfw6qvcVUx19uIwejTg68uyzD//DARa2VddtIgV\nSXW6gq9N08ZsdHQ4MjJMAoR9UadOIN56C/jqK5az7tNHhBcjI7JV20q/qHAcSzF8YPb/x9iFT5kk\nkiY1s6js3ctL5k6diA4dku68GRlEmzYR9e5NVLky0fTpRGfOSHd+S+zfz7bEu3ZGn2LYuZPfb602\n/99iYoj8/Bzf/zEaOZTo7080cCDR5cuOHU9JDBlC9MMP0p/XKR0+ETv9Bg3CqHLl6VSq1FAzZy9G\n5aTl4hH5KzQNBt6grFGD6OWXia5elfb8CQlEoaF8g3fqxFWbjx9La8NffxFVqUK0Y4e05y3uHDrE\n+0rvvZeTR9+1ayj5+sbTgQPCnSc9nWjBAt7onD1b+utLDCZOJPriC+nP65QxfBNz53K4pXNnHaKj\nd+ZaEvYRJYdXq5XmPPaQlsbL6M8+45DPrFlA2bLSnV+vZ22WVatYEnroUG7X2LatuHrsZ85wXcEX\nX3A3KxVp+ewzzqM3GHJi8FWqhOLbb4WXm75+na/rPXs4lDlihPNq/b//Pufjz5ol8YmlH2OEIzyc\n6MMP5bZCWfz7L9HIkZylsmoVkV4vvQ0mKYe6dYlathRPyuHvv3ll8f33wh9bxTbkCHUePMgyGZ07\nsz6UM7JgAdH770t/XqctvAKArCzX3MF3hKef5qyIrVuBNWt4hr17t7Q21KjBeuyXL3Ol6759rMo4\nejRv4gmxpvznH57Zz5nD3cRU5EGKKvS8dO7MqrATJrBq7fjxnGzhLGi1OqxbF4a1a6VXI3V6hy+U\n7ICr0b49O9rQUL4xBg7k1ndSYpJy+OEHdv6tW3O4qVEjzja6fdu+4964wQ1f3nmHb3YV+ZCyCj03\n7u6cfnvhAodGmjYFli5ln6BkeWdTGur58/Nw82Yk4uLmYfr0WOlslH5RIRxvvkm0fLncViif9HSi\njz/mTa/p0+UVETMaOaNm7FgWcHvpJd5stTX0dPs2UZMmvCRWkR+lJDNcuED07LNENWqII+8sFHJn\n+6kz/GJAyZKct3/uHNcVNGoEREXJo+Xh5sZN2L/9NicsExLChVxz5hTcfu/BA0Cj4c3Z2bOls1nF\nOv37B2L5cg00mnAEBUVCownH8uV9JU9maNgQ+P13oGrVOCQnK1ebR44QWG6c2uFnZ6sx/KJQtSpn\ns+zaxZWSzZpxkZJceVrlynGI5+hR7r168ya33+vfH/j1V/MBKTWVi30CA4F5+QueVWSkf/9A7Ngx\nF3v3RmLHjrmyZq75+spfIFkQGRnydlxzaoevzvDto3lzIDaWe5y+9x5XMZ46Ja9NbdqwsuW1a5zS\nuXQpUKsWz+RPnwaef54HqE8+cd5UPBXxkWtPoTCysoCwMODChWBUq2auRhoQEIKpU6UpJXZqh5+d\nrTp8e3FzA/r1Y0f/wgscWnntNfmzHUqXZl3+ffs4uyg1lWf9e/YAQUFcd6GiYo1p04Lh5yefQ7XE\nmTNAx47AyZPAhQuBWL1avhCYUxdeDRoEjBoFvPii3JY4P/fvc6hk7VrOfnn7bfk1cvR61glKT+ci\nmzVrgOPH+ecJE3jGr6KSlz59dEhK2onq1eUtkDQYeEX68cf89eqr8q9OndrhDxjAMeABA+S2xHW4\ndImrAI8d44t06FB5LlKjkWf6KSlcU+DtzY8nJgLffMNftWqx4x82jJtKqKg8ecJ1IOfOAdWry2eH\nSVnWzY0nKnXrymdLbpw6pKMWXglP/fq8gbpmDTv8rl25yEVKiLi1Y1IS22Jy9gDfOHPncoZPaCh3\nA6tVC5g0CThyRL4NaBVlsHUrh0/kcvZELCXesSPXvuzZoxxnD7iAw1dj+OLQowc70IkTOWQ2YgQ7\nYLEhAmbOBE6c4Eyi0qUtP8/Tk1d2W7dyjLR2bZ7pt27NekJy9QxVkZd167iiWw6Sk7nyd+VKYO9e\nDo26K8xOOwtQAAAgAElEQVTDKsycoqGmZYqLhwfHHS9e5Dz51q2B8HDeSBWLyEhOG92+3XbxNz8/\nzuW/fJmze/bv51nVqFHCSTmoKJ+bN4FDh+QR0fvpJ6BVK842O3yYK3+ViFM7fHWGLw1lynBR1IkT\nHENv2JBj6AaBM90WLQJ+/JG7VVWoUPT/d3dnyQWTlEObNsJIOag4Bxs3srO3tioUg/v3efUbFsbh\nxTlzlO2TnHrTtlUrrths3VpuS4oXy5bpMGdOHPR6TzRurEdkZLDDWRArVgDLlvGMvEYNgQwFz+4P\nHeK46pYtPCBMnMhpqB7KqMVREYjWrXmF16uXOMfXanWIiopDZqYnvL316NYtGF99FYhBg1iuWcqB\nxm4kEXAQicaN5e+0VNywpJ3i4xNCX35pv1bJN98Q1apFlJgonJ2WePCAm060bcvn+/BDoqQkcc+p\nIg2nThHVrMkNgcTA0nXv4RFCc+cqQ6PHVpw6pKMWXklPVFScWcNpAEhLm49Jk3aiRw+O9xe2Zsyt\nZtiyZRhmztRh506WUBaTcuU4m+evv1i64dYtXiX278+zfzm0hVSEYd26nKbpYmDpujcY5mP/fmVo\n9NiKUzYxN6GmZUqPNfGnMmU8EB/P8XIAqFmTN05r1mSNftP3q1d1+PTTWFy9mnPz1KwZikuXgAYN\npCuOad2aw0iLF3Mz7mXLOBV0zBjO7a9XTzJTVBzEYAA2bAB2iuh7rV33T544V1zQqWf46qat9FjT\nKuna1QAilmro2pU169u3B4KDAV9fTp38+msgLCzOzNkDwL//yqdmWLo0p/Ht28c503o90KUL0LMn\n8P33rC6qomx27+ZMrSZNxDuHtev++HED/vhD2Rr8ZsgdU3KESpVYH11FOrZujSd394L1z41Gom3b\niBo2JOrTh+OrJoKCIizqgQcFRUj/YqyQmUn0449EwcF8jU2bRnT6tNxWqVhj5Ejx+2JY0/1/9914\nKl8+nsqVU64Gf26cPqSjzvClxds7EAEBgL9/eK5m7ubiT25uXBSl0bAc8zPPsO7RnDnKVTPMjZcX\nMGQIf5mkHPr25ZDUxImqlIOSSE1lie+lS8U9j+n6jo7Of90fORKGvXstafCHyyoVbRG5RxxHKFmS\nKC1NbiuKF6NGFX02de8e0Vtv8Wx5zJh48veXv0NSUcnO5lXLwIFE5csTTZxI9McfvJpRkY+1a4kG\nDJDXBmdYtZpQZ/gqNpOWxsUlixcX7f8qVGDVwDfeAN57LxCPHwMtW4ajXDkPlCqVf4WgRExSDgMG\n8P7E2rXcPL1MGd7kHTnSvmIxFfsw5cT/+acnatXSQ6t1vBbEXu7dU/6q9T/kHnHsRa/nUVSdYUnH\nhg1Effs6fpxdu4hatiTq2pVnyc6KwUD0v/8RDR/O/XlHjiTau1e9JsXGcjxdnpi5Tkfk6xtPNWs6\nx6rVaSttMzI4r1ptiCEd/fsDr7zC+c6OYjDwLDksjCsjFy7k1E1n5c4dYP16YNUqzuefMIFTPKtV\nk9sy10OjCUNcXP4+lxpNOHbsmCuZHRcvcsvN9euBrCwdoqN35orvy6PBXyhyjzj28vAhkY+P3FYU\nH27d4llsaqqwx330iCg0lKhiRaLwcKLHj4U9vtQYjUQHDxK9+iq/Xy++SLR9O69IVYRBCTHzW7eI\n/P2JVq+W7JSC4JR5+FqtDi+8EIaMDIXnvLoQmzZx/NrHR9jjli3LnbaOHwcSErhwa80aboDijLi5\nAZ07c2ZPUhLXIYSFAf7+wIcfSiMx7erInen15An3WH7lFWDcOElOKRxyjzhFRUnxu+JEx448UxWb\nQ4eIOncmat2a4+GuwrFjRJMn80rm2WeJNm8mysqS2yrnZNu2ePLykidmrtcTDRpENGKEc+7VOF0M\nXynxu+LEpUtA9+7AtWucrSI2RLyimDWLJY4XLXIdqYMnT1jK4euv+X0dMwYYP547janYRnw8MGKE\nDs2aSR8znzGDV6M7dph3YnMWnC4t8/r1FABhYNP1AIIBBCIjw7k0LZyJDRu42EgKZw9wWGT4cG4R\n9+mnQKdO3B80LAwoX14aGwojr1TutGm2pQWapBxGjwYuXABWrwa6dWNZgAkTgJdekr95vNJZtgwI\nDw/EpEnSbopGR3NjnoMHndPZA3CukE5MTDyVKjUpz2ZNCAHxpNGEyW2eS2I0EtWrR/Tnn/LZkJxM\nNGECUdWqRJ99xkVQciJ0WDEzk+inn3KkHKZONZejUMnh4kWiKlWkL7jcupWoenWiK1ekPa/QOJXD\nDw4Otbg7X6rUUDWGLxKHDxM1aKCMeOWJE0TPPMN9ELRa+Wyydh0KMelITORspRo1iDp0IFq1ijOZ\nVJjJkzmrS0r+/JMHGTknPULhVFk61iRKAwKqKzPn1QVYv57z7t3c5LYEaNmSJXA//hh4+23Wtzlz\nRvzzpqVxU+qFC7lJ9e7dlq9DIcKKdeqw5tDVq8AHH3Aj91q1WMPnzz+Lb39erVaHXr3C8OWXkdi/\nX7rMvMREDi1+/TWrvzo7ThXDt5aOVaOGjd2uVYpEdjb3mD14UG5LcnBzY6er0QCff85FWy+9xCmP\nVas6fnwi4J9/+DUfOsTfL1wAWrTgdMsxY4BHj/TQWfA3QqYFenpyoVv//kByMqeqvvwyp8VOnMiD\ncMWKgp1O0Wi1OkyfHvtfA5L4eODatVAAEHWid/8+v/+zZ3Mapksg9xKjKMTExJOfn3OUMLsCWi2n\nSCqZu3eJpk/n2PfHHxNlZBTt/9PTiQ4cIFqyhIukqlcneuop/nnxYv5berr5/1iTyhX7OjQYWJbi\n5Ze5qGvECKI9e5QRbhMTMUNo1sjIIOrRg+jtt0U7hSw4XVpmv346XL68E35+Ci9hdgFeeYWbmUyZ\nIrclhXPxIvDuuxziWbSIZ/2WwlA3bpjP3k+d4mKvLl14Bt+lC1C7duEhLK2WS+mTkz2QmGjAxo3S\nXod37+ZIOWRlcWrn2LGuKeXQo0ck4uMj8z0eFBSJvXvzP24vpsyrjAxPXLqkR506wdi/P1C0toly\n4FQOX6/nzjaHD3Ploop4PH7M+u+XLwNVqshtjTkFpUTu2sW50r6+7PhLlDB38GlpOY69c2eOyzpS\nPWww8PsUHw80aCDQCywCRMAff7Dj37yZQ1wTJnCFr4eLZCpz7U0wgDjkTsfWaHYKVnuTN2wEAP7+\noYiK0rjUhNKpYvh79vCmlursxefXX1kYSonOPu+NmZDA8dwOHQKRlsbx/cWL2akDQL9+wNChHOev\nX1/YDWgPD26UsmkTEB4u3HFtxc2N6xQ6dWIJ6h9+4M3eSZO47H/cON70dWY6d/bD7t3fQ6//4r/H\nPD1fR6dOLf77nYj3nDIyWFCxqN9XrMjfpPzKFYU2MXEAp3L4P/7IBUAq4rN+PfDqq3JbkZ+oqPw3\nZkLCfAwZEg4vr0B07MiOPjaWi5k+/5y7brVrBwweLE620fDhPKsOC5M3m8nXF3jtNf46cYIzS1q3\nBjp04I3e557jFY+zcejQDTNnDwB6/RdYuDAcn37KDjszkze6vb25cK2o39PTxcu8UhJO4/Czs4Et\nW7is2VWwt1pTbJsWL47D/v2eMBj0KFtWfptyYy01t2lTD/zxB/LFW+fPZwc4axbQsCH/PmpU/uc5\nQqdOHCo6cwZo3ly44zpCq1bAZ5/xSufnn4Hly4HJkznLaMIE55JysPaZt23rAa02x3E78pleuKDH\ntWv5Hxcy80oR97u8e8a28/vvRF26yG2FcChRBE6JNuUmK4soIMD+jI2DB1kErm1boniBX9J77xHN\nni3sMYXmwgWimTO5YjkoiGj9eqInT+S2qnCkyNKxN/MqJiaegoNDKSgogoKDQ60+Xyn3ltM4/DFj\niD79VG4rhEOOVDNntMnE6dNEbdoQtW0bT7Vr258SaTQSff89Ua1anHp5+bIw9h07RlS3rnOkSJqk\nHDSaHCmHkyfltso6UqXBxsSwREtQUARpNGE2OXtrTjwzkzXzL17kavU2bZRxbzlFSCczk3upLlgg\ntyXCYW2ZKmfM0JpN6eny2aTXc1hi2TKusH311UD8/jsQHR2eSynR9p64bm5cwPTCC3zMDh14YzM0\n1DFhtlatOD5+5AgfU8l4efF+xuDBXNH77bdcYOTnx7H+YcO4T4FSMH229n7mRTlPUY5pbT/p+efD\n4e4eiPLl+ZqqUAG4ckUh97ukw4udbN1KFBgotxXC0quXMkb83Fib4ZcvH0aHD0tvz7lzRO3bE/Xu\nTfTPP+Kc48YNovHjOcyxYoVjwmwREc5bqKPXc6HdCy8QlS/PYnWHDzvHikUurHXe6tYtIt/7Zu3e\natVK2vvdKUoKNm1yvewcT89g+PqGmj1WunQIpkzpI5NFwLRpwQgIMLfJ3z8EY8b0wUsvcTbKlSvi\n22Ew8Kw+MJALiuLixEstrF6ds1liY3lzs2VL1jq3h2HD+Fo1SNN4SVA8PDh9dcsW4Px5ICCA5Rta\ntgSiooB79+S2UHlYk3rx8THky9aydG/5+YUgJaUPXnyRCwIlQdLhxQ6ePOEy8ps35bZEOOLiOIa8\naVNOzLBPnzBq0iSeIiPltc1aHDM1lWjOHO7YNGMGSxqIwYULLOfQo4f0UrRGI68m69cn6tuX6MyZ\noh+jZUvX6dRlMBDt3p0j5fDKK8VDysFWfvstnjw8bN9bsHRvpacThYWxGudXX4n/3ire4f/8M0vi\nugqPHhHVrm25XWByMsvibtsmuVk2k5xMNGkSX6BLlxZdu8YaBgPRsmW8iRgdzb/LRWYm0SefEFWu\nTPTGG0S3b9v+vwsXEr3+uni2ycWdO5w00bQp90f46CO+FoozOh1R7dpF2+i1xqlTLIfdowfRl1/a\nlvljD4p3+EOHEn35pdxWCMeUKURjx1r/+8GD7Ez//ls6m+zh7FmiAQM4M2XTJsdmJpcuEXXvTtSt\nG/+sFO7c4QyWypVZSM2WwS0xkT8/V+1XazRy3+Hx4znWP2gQp0zr9XJbJj1Tp/KqVyj0eqIJE+LJ\n3V289E1FO/zUVCJfX6KUFLktEYb4eCI/P6J79wp+3uef80zq8WNp7HKEXbu44XjHjkT79hXtfw0G\nns1XqsSze6U6jfPneXDz9+cVZ2GDW6dO0jR8l5uHDzkM0b49Uc2avGl99arcVkmDwcDKqufPC3tc\nsVOjFblpq9XqoNGEoX37SJQoEYY//pCm2YGYPHnCG5ArV3KaVkFMmsSpfePHK7/hRa9ewF9/saLm\nK6+wSuWlS4X/X2Ii8Mwz3C/3wAFuaKJUsa9GjYBt24Avv2Q9nh49gKNHrT9/+HDWtHF1fH1zGrNs\n28YKnm3aAM8+C/zyC6t4uioHDgCVK/O1ISSip2sLMmwIiFIq0oTmnXeIhg+3/fnp6UTt2nEowVl4\n8oRj2KZiHtPKLG814uTJ8f/p1yt1Vm8NvZ5DjE89RTR6NNG1a/mfc+MGUYUK+XX0iwNPnhCtW8dp\n1NWqEb37LhcfuRpCh3NMiD3DV5zDV3K1p70cOsQXf1E2/4g49/ypp4j+9z9x7BKL27eJ3nyTY99j\nx8aTv7/5AO7tHUIrVjj3AP7wIdGsWZy1FBnJ4cfcNG8eT61aibPx5ixcuMAO3yTlsG6dc0g5FIbB\nwKFZocM5RDw5ynu/CFlVrDiHb62YISgoQm7T7CIjg5tu//CDff+/axcPFs4YG71wgahKFdcbwHOT\nmEg0bBjR008TrV3LziAmJp6qVHG9Vaq9ZGby3odGwwPkm28qW8qhMPbtI2reXLzjh4XFU4UKjmf+\nWEJxMXxrxQxCqtZJyZw5HOcbOtS+/+/Vizs5vfgikJ4urG1i07Ah0KSJQkrKRaJOHY7Xb9oErFgB\ndOwIfPhhHFJS8pfcR0fvlMdImfHy4r2dHTuAY8e4F2///rxPtWoVN9txJn780f772RYSEwMxd+5c\n7N0biR075goqIaE4h2+pIi0gIARTp8pXgWovx47xBb1ihWM66TNmsJzt5MnK38TNi6sN4Nbo0oW7\nar31FnDypGsPco5QuzZvfF+9CkRGAtu3cxX1hAncyU7p17fRyBvSQ4aIc/yMDECr5QFSDBTn8Pv3\nD8Ty5Rp07BiOsmUjodGEY/ly4YWSxCYrixuILFnC5fuO4OYGrF7N2TCffy6MfVLhSgN4Ybi7sxxB\n9+7FY5BzBJOUw+bNLOVQvz73KWjRgrX7lSrlcPAgUKkSr16FxJSZ2K5dJIAwHD0qUmaiYMEhgTl2\njKhVK7mtsJ85c4iefVbYUulLl7io58AB4Y4pBUWVnXV2tm3LX3JfufJs2rrVtV+3o5ikHF55JUfK\nYfduZUk5TJ1KNHeusMeUMjNRsU3ML1xgCdsLF+S2pOicOQP07MkhnZo1hT32778Do0bp0Lw5N3RW\nSqcslRxOnwZ699ahdeudyMjwQFaWAY8f9wFRIJYu5Z67KgVz7x632Vy1isMc48cDY8cCTz0ln01G\nI9/Pu3cLO8PnJu3zLDweLliTdhOK1cMvWZI/aGdDr2d99fnzhXf2AECkA1Es4uPzN/FWnb4yiIkB\nhg0LRFRUzudBBGzdCrz5Jocvli4FGjeW0UiFU7EiMG0aMHUqF3atWsXvV48eXOyl0UhbqKfV6vDh\nh3F48MAT06YJO8mStDeG4GsGgUhO5nREZ2PRIqJevcRbhrpinYKr0aULUWys5b9lZrKMROXKrKvk\nKrIhUvDoEUs5dOjAabAffJCTrhwxZgyNqV2PentWpmc8qlFvz8o0pnY9ihgzxuHzih1ykfKeVmf4\nAnLxIndl+vNPx7JyCkKJnbJUckhJ4ZBeUJDlv3t5sYzEqFGcrdK4MTdYnzqV/6ZinbJleXY/cSJw\n6hTP+tu0Adq3B8oePYCf7lw2/4d/7mDsXsvHIgJSU4H793O+Hjww/930WGxsHO7csZRmGy7ILH/a\ntGAkJISadc/ixIa+Dh87L4p1+KVKOVfeucHAccaICMDfX7zzWEtz9PZWM0CUwPbtrBHk7V3w8ypX\nBqKjOdV25kzOvlq8mPetxJosuBItWvD7t2gRp0mujn1g8XlJSQ8xfHh+R/7wIX9GFSrwl6kVYe7f\nGzTgn0+e9MSdO/mPLdQkyzRofPppOHbt8kBwsDgtHAEFO3wvLyA7mzdK3BWXPJqfFSv4+5Qp4p7H\n0mygVKkQpKX1RXY291VVkY+YGGDAANuf37gx513HxQHvvMMpicuW8cxVpXBKlQJGjgTWjPUALM55\n3DFwoLkzr1ABKFfO9hXV+vV6nDmT/3Eh02z79w9Et26BqFnT/o5rtqDYLB2AP8x79/i7krlyhasG\nDx7kWYHYaLU6REfv/K+h86RJfbB6dSC8vLjqUw0NyENWFlC1KmeW2ZNNotdzvUVEBCtOzp/PjcVV\nCqdPiSrYqc8/De/jWQU7s287dGytVofp02PzhVyErg+6d49bS96/L9gh86Foh8/d3guXE5YDrVaH\nqKg4ZGR44vRpPQYODMa338qXJZOZyeXebm5c+q06fekwXQs3b3ri6lU9vv/esQyOhw+BhQs5Rj19\nOod8SpcW0GAXZGyd+ljzz+X8j9euhzVXbdDrLoS8k6ypU/sIHnK5c4fTPe/eFfSw5gi+DSwg1asT\nXb8utxX5UaqEc2YmdyAaMEC41oMqBSPmtXDlCtGQIdxcZN06eds+Kp2cLJ0q/5+lU0WwLB2puHmT\nCyvFRNEOv25dooQEua3Ij5JTI7OyiF56iat8i6Meu9RIcS3s28e9Edq3J9q/X7DDqiiM69dZDl1M\nFL0dqtTUTCWnRpYoAWzcyClsL7zgXJlOzogU10K3bsAff3Ah0vDhHLpLTBTs8CoKwWgUv5hM8Q5f\niQ5L6QqQJUpw68CKFYGBA7m9ooo4SHUtuLtzNsrFi0CzZkC7dpy//+iRoKdRkRGDQfyMRMU7fCXO\n8J1BAdLTE1i3DqhWDXjuOSAtTW6LXBOpr4XSpYEPPuDCo1u3eJPvyy85w0fFuTEYxJ/hKzYPH+B0\nTCU6fNPufHR0ONLTPXDkiAHTpilPwtnDA1izhgvCBgzgRtNlyshtlWuR+1pIS/PA4cMGfPCB+NdC\njRrAt9+yQN/bbwOffcb5+32UM+dQKSJSOHxFp2X278+ViP37y21JwcycyY40MlJuSyxjMACvvQZc\nusRFPmXLym2R6zJ+PBdTzZwp3TmJgC1buDNao0YszNaokXTnVxGGixeB55/n72Kh+JCOEmP4eRk4\nEPjtN7mtsI6HB+d0N2rEBT1q3Fc8Ro3iUJqUuLlxC8xz57glZvfurM0jaj63iuAU6xi+VqvDwYNh\nCA+PhEYTBq1WpA4wAnD/vg5nzoShUyfl2uruDnzxBdC8OdC3Lxf3qAhPYCALbp06Jf25vb1ZnuHc\nOZ71N2oEfPIJVwCrKB8pQjqKzMNXamGTJZzJViKWbZ4yhSVm79+X2xrXZPZsopkz5baC6OxZrseo\nV49oyxZldY5Syc+JE0QtWoh7DkU6fCUXNuXFmWw1YTQSTZvGxTz37sltjetx9iyRnx+RXi+3JcyO\nHURNmhD16EF0/Ljc1qhY4+hR8du6KjKko+TCprw4k60m3NyATz/lWG/v3sptGO2sNGnC4mm7d8tt\nCaPRACdPAsOGcThv/HggOVluq1TyIkVIR5EOX+mFTblxJltz4+bG2RzPPMNflvS+VexHjs3bgvD0\nBF5/nTNAKlXi4q1585wjKaK4UGwdvjMUNplwJlvz4ubGHbr69uXsjpQUuS1yHV5+mTO3lFbwVq4c\nNw05cgQ4cYILt77/ngORKvIihbSCYvPwtVod3nprJ7KyPNC4sThypEJhkk5NT+fCm6ioPpg0SZm2\nWoKIqzd//RXYtYs13VUcp18/YMQI/lIq+/Zx4ZanJxdudekit0XFl337gNmzgf37xTuHYh0+wLPP\ne/f4u7MwcybXD8ybJ7clRYOIe6z+9BM7fXsaeKiYs3EjsHatuB2MhMBoBNavB0JCWKjto4+AOnXk\ntqr4sXcvN7+JjxfvHIoM6Zjw8nK+HOJRo/jmMRrltqRouLlxpfCwYUDPnsVvU0+r1UGjCUOPHsLV\nUgwcyCqXSn8v3d2B0aM5vt+4MdC2Lc805SrQE+OzcAakCOkoWkvHGR1+y5aAry8vywKdJ6rzHx98\nwMv7Hj04y6RGDbktEh9LLewSEnhfxpEwYunSLFG9cSMwY4bDZoqOjw/PMCdM4Nl+w4bAnDnAuHES\nFAT9P2J9Fs5Asa60BZzT4QM8y//uO7mtsJ+QEL7Je/QArl2T2xrxiYqKM3MwAJCQMB/R0TsdPrbS\nsnVsoUYNDkVt28a2t24N/O9/0pxbzM9C6RR7tcwSJZzT4b/yCksYREcrvwG7Nd5/P2emHxqqww8/\nxCEz0xPe3npMm+ZYz1alYDQCZ88CV65Yvg3S0x2/+4KCOPvpzBlOhXQm2rXjePLmzcCkSVxfsGQJ\nz/yFJimJ945OnHC+uhahKPYO38sLyM6W24qiU6MG3yzbtnF3ImflnXeACxd0eO21WOj1zr/Ezs4G\njh7lbIh9+4ADB7hJzJMnlmspjh41YPFibjxSvbp95/Tw4CyddeucK/nAhJsb8NJLLK8dFQV07cqv\nJyKC3zt7uXMH2LOHnfyuXaw/1KsXULmyHrdv53++0utahKDYd7xy1pAO4JxLeUskJcWZOXtAeUts\na5t8aWnsTCIjubisYkUuPkpKYid+5gxLRn/1leVaig8+6IOLF4GmTVll9IcfzAuVbN1cHDWKO5A5\n20Z+bry9WX75/HkeOBs14mptW+/P1FRg+3bOYmvdGggI4F4NDRoAP//MzVw2bQIWLXLeuhZHkSKG\nr/gZvrM6/EGDWKL29m1l5bVrtTpERRUenklPB/76C7h0SdlLbEubfH/8EYpq1YBr1wLRqhVLSMyY\nwbPT8uXzHyN3E5OMDA+ULGnA1Kk5TUyiolhv/ptvuD/D4MFAvXo6fPWVbZuLzZoBVapw2l2vXgK/\nARJTpQqwciUwZQqvAFeu5DDPc8/xasBEVhZnKJlm8MePc/bPM89ws5YOHThkmxfTe/f66+EoWdID\nAQHmn4UrU2zVMk1s306k0chthf2MHEm0fLncVuRgTdlz27Z4Skwk+v57oqlTWVStdGmi9u2JatZU\ntjicNfG69u3D6MkT4c/3779ECxcSlS5dtPdl6VKisWOFt0dutm8natyYhdnWrCFasoSob1+ismWJ\n2rQhevddFm9LTS3acbt0Idq7VxyblcqPPxINHizuORTr8GNi4qlt21AqVy6CgoNDFSs3XBBxcew8\nlYI15+jlFUZPPUU0aBDRokVE+/bRf87S8iAxWzGfR1BQhMXXFBQUIep5AwOLdt4bN4jKlydKSxPV\nLMGIiYmn4OBQCgqyfP8ZjUSXLhF98QVfN7nfg88+I7pzx/5zG41E5coRpaQ4+CKcjI0biYYNE/cc\nigzp5F2mx8U550Zhr17AjRsc92zcWG5rrCt7tm7tgUOHzJfkJgoLd8iNXOJ1JUsW7bzVqwMdOwJb\nt7LOjpKxlgt/7x7g7h74X5hGr+cQzcCBwPLl3Dpz/nze0H34kCUb7MlSu36dq9UrVxbwRSkcrVaH\nBQvicPOmJzQaETPhxB1P7MMZNeatMXMmN8SQG4OBqH5913lfTci1ArHnvOvXc0MSpWPt/vP0DKMX\nXiCKjiY6d856Q5XLl4lefJGoVi0OExa18cr27UTPPOP463AWpGyipEiHb22Z3rhxBGVmym1d0Th5\nki98g0E+G27d4r2Qxo3jqXZt5YZn7CUmJp40mjDq2DGCPD3DaMsWaV6P6bxNm0ZQxYphhb6Pqakc\nqrh5UxLz7Mba/RcYGFGk4+zdy3H8Tp2IDh2y/f+WLOEGPcUFKSe4igzpWFum37xpQK1aXAU6cSJQ\nt67EhtlBixZAhQqATsdFTFKzaxfrpIwdC8TEBCI2VrnhGXvp3z/wv9fQtavl7A8xz/vkCYdsOnUq\n+O0vZ54AABlpSURBVPk+PsDzz7PUwltvSWOjPVi7/0qVKlqYLCiIZZjXrePMpsBAYOFCoHbtgv/v\nzJnio9p58SJw8qSEmXCCDyECUNBy+fx5orffJqpUibMBfv2VKDtbbosLZskSonHjpD1ndjZRaChR\n9epEO3dKe26hKWwDMTfR0ZwdJTUvvUT0zTeFPy8ujme9SsbS/VemzGzats3+lVNqKtEHHxBVrEgU\nEkL06JH157ZrR3TwoN2ncgpOnyYaPpyoShWigADpZviKdPhEOcvloKAI0mjyL5efPCFau5aoc2ei\nGjWIIiI4ZU6J3LhBVKECiZImaImkJKJu3Yj69FF++KAwihrfXLcunjw8QqlbN2mzu77/nmjAgMKf\np9dzv9uzZ8W3yRFy33+9e4dR7drxFB3t+HH//ZcH5OrViVatyt/312Ag8vEhevDA/nMUZYIgNceO\n8f5GtWpEH3/MA5+U+1CKdfhF4eRJosmT2akOHMibPnLGzC0RHMxpV2KzdStR1aqcK66098AerMU3\ne/UKy7cZKOXmV14ePuTc84cPC3+uUjbyi8Llyzwb3bdPmOP9+SdR165ELVsS7dqV83hCAlHNmvYf\nV85roCAOH+YJgZ8f0Sef5E/PLWyCKxQu4fBNPH5M9NVXvGSuU4dowQLlzHDXrSPq10+842dkEE2f\nTlS7NtGBA+KdR2zyzs6aNZtu0eG7u0dQyZJE/v7sOIYMIapVS94spH79bBvUlbCRbw+//84O6/p1\nYY5nNHKxUd26RM8/T3TxItFvv3Go1l569lRWJppOxyvtWrWIVqwgSk+XxYz/cCmHn5sjR4jGj+es\niKFDiXbvLnp6mJCkpnLhjRgD0N9/8yA3aBDR3bvCH18qLM3O3N2HWr2BHz/m1753Lztaf395irBM\nfP01Dzy20KIF0Z49opojCnPmcBWskNly6ekc3qhUiT8vW/e7bt3i1fz8+byHUrcuTwSEyDByBKOR\n6H//IwoK4gnJqlXCvl+O4LIO38T9+7yR17QpUYMGXOLuSBWgI4weTfTpp8Iec8MGosqVubpRzgFN\nCCyHb+KpVKlJNsU35a7fSEnhCYYtezWLF0u/kS8EBgPRc88RTZki/LHXr48nIJSACGrUKJR+/ZU/\nY6OR6No1nv1HRvL5a9TgCVSvXizfsHEjrxCsXQNVq4bRrVvC25wbo5FIq+V9xYYNeY9RaQklLu/w\nTRiNHH8cOZJvylGjOPQhpZPcuVO4DI3UVHYYDRoQHT8uzDHlxlr+d9Omr9kU31SCDETPnpw5VhjX\nrrHDkmojX0gePCCqX5+1c4TC0mcHhBAQT1Wr8qRGo+EMn59/JrpyxfK9a+k4/v6zafDgeHrqKaLN\nm4Wz2YTBQLRlC1HbtkTNmhH98EP+zWilUGwcfm5SUjhVsn59oubNeXbsSFaArej1PDNxNEPj1CkW\nrBo1ivctXAUhZuhSbX5ZIzqaV3K20Ls3Owdn5PRpdsJHjwpzPGufPRBGDRvyvoetWLsGDhwgqleP\n75v79x23Wa8n2rSJfUjr1jyYKH1fplg6fBMGA2cIDBnCs60JE4j++kvcc773HtGsWfb9r9HIYlWV\nK/Ny0dWIiYmnmjWduxL42jXONc/KKvy5a9cS9e8vvk1isWkTJ0cIESK1trrr3j2CoqM5Q2jCBKLk\nZMfOk5rKGX01a3JNhD1kZ3MSRqNGRB07EsXEOE84tVg7/NwkJ/PmT+3avDRbtarokq62cPo00dNP\nF30m8OABD0wtWhBduCC8XUphxIh4qlVLvhm6EHTqRBQbW/jzHj/m8OLt2+LbJBbvvstZKI6GMApb\n3d27RzRjBm/sLljgeLZLbCzfh5Mn236fZ2YSrV5NFBBAFBjIIVpncfQmVIefB72e08+ef57z+qdM\n4RCKkLRqZZ57nJe8qYlLl8ZT3bp8ccqd1iU2LVpwKpszs2gR0aRJtj13xAiiqChx7RGT7GzeOHW0\nrsDW/Ze//+ZstNq1ORzmiMO9d4/39OrVKziVOSODaOVKPmfv3kTxzjcH+Q/V4RdAUhKXg/v5cSra\nd98Js8lWUDMMy6mJITR7thNfZTby999ETz2l3A0vW7l8mSspbXkdO3Zwoxln5vZtzjP/5RfHjlOU\n/Zc9ezhu3rkzFzU5wi+/8Of1/vtEmzfnTLaeeSaUJk6Mpxo1uMbCFeQeVIdvA9nZvAuv0XD8fMaM\nnLCKPWXcycn5m2FkZnKOfpcuyiockZKFC3kV4wq0bGnbSiU7m6h8+Xjq2lWZUgC2cuQIx9nPn5fu\nnHo96xf5+RG98grRP//Yf6ybN4k6downLy/zyZaPTwh98onzfR7WUKRaptLw9AReeIG/EhKAVatY\n+a9aNR1u347FrVs5jSIuXQrFrVtAq1aBuHcPuH8fZt9NPz94wOqJNWvyY5mZrKqZmqrsHrJi8vPP\nwOLFclshDE2b6jByZBzq1i24d3BsrA5EsThwoPDeuEqmXTvgo4/4HvnzT8DXV/xzengAr74KDBkC\nLFrEzdHfeAOYNQsoU6Zox6pWDShXLg5ZWfPNHk9Lm48dO8Lx1lvO81kUhMg90l2PgAC+sJOSADe3\nODNnDwCJifMxZcpOjBsHLFgAbNrEzcDv3wcqVeLmzS+/DIwfDzz1FLBvH5CczE2fb98GuneXp4OT\n3CQm8nvavbvcljiOVqvDvn2xSEqah/j4SMTFzcP06bHQanX5nhsVFYeHD82voYSE+YiO3imVuYIx\nbhxLgI8ZAxiN0p23TBlgzhzgxAng6lWgYUNuOG8o4i1jrSOcK0221Bm+nXh7AxUqWH77Onb0wN69\nBf9/v37AL7/wccqWzXl82rRgJCSEmrWXCwgIwdSpfQWwWrn88gvPDj1d4IqMiorDv//md+KvvRaO\n9u3NV37Jya7lZJYvZx38jz8GZs+W9tw1awLr1/MK4+23gehoYNkyoGdP2/5frnaZUuICt5d8OHKB\nlC7NvUA3buSL04TSe8iKxS+/AB9+KLcVwmBtplimjAfGjOHQXcWK/DV2rB67duV/rrM6GW9vDs11\n6AC0bQsEB0tvQ4cOwP79wE8/8aqjZUsOFdavX/D/FYvJltybCM6Mo6X8u3ZxpkFxJymJ86ttKVZy\nBopSMawEOQgx2LuXZbqvXJHXjvR0TgaoVIkbJ927V/Dz5a7UFhs3IiK5Bx1nRqvVITp6Z67ZeB+b\nZ+NGI7d7274daNZMZEMVzPLlHH/99lu5LREGrVaH6dNj880Uly+3vFJz5BpSMsuXA2vWAAcO8IpW\nTm7dAj74ANiyBQgPB15/XbpWmEpCdfgyM2sWz+s+/lhuS+Sje3d+H/r3l9sS4XBVJ14UiICRIzmb\nZu1awM1NbouA06eBGTOAa9eAJUt4L00JdkmF6vBl5uxZQKMB/vmHb4ziRnIy0KQJcPMmx39VXIu0\nNG5I/tprwJQpclvDEAFaLTBzJm/0LlsGNG8ut1XSoKZlykzTppwDXFhWj6uyZQswYIDq7F0VHx9g\n82ZOmzxwQG5rGDc3vuZOnwaefx545hlg0iQO+7g6qsNXAKNGAd99J7cV8vDzz8DgwTm/a7U6aDRh\n6NEjEhpNmMXcdRXnIiCAY/lDh/KKTimUKAFMnQpcvMgDU9OmXGOTkSG3ZeKhhnQUwK1bQKNGHFf0\n8ZHbGulISeFUueRkoFQpa5udoVi+XGNT/Fur1SEqKg6ZmQVXt6rIw9y5QGwssHs34OUltzX5uXQJ\nePdd4ORJ3lMbMsT14vuqw1cI/foBI0bwl6tjcsyJiZ549EiP1avZMWs0YYiLm5fv+RpNOHbsmFvo\nMR0ZLFTEx2jk4jqjUYfsbOUOzLt388ZumTIc3+/QQW6LBESufFAVczZuZHE2V8dS3nmdOiEUERFP\ntWrZ3oTcaOTGG8ePE23dStSokeXc91atwujQIc71d5U8f2dm06Z48vTMW3cQorh8d72ete+rV2cJ\n66QkuS0SBnWGrxDS0wE/P+DcOaB6dbmtEQ9rs/hKlcJRrhzhypX8f2vWLByDB8/Fv/+y3o7pe4kS\nQK1anGlx/HgkkpMjLRw3Ev7+kbh+nUNIFSsCNWrwl59fzs+5f69QwfWW8krBkVWcHDx+zOGdzz/n\nLKP33iu6MJuSUKUVFEKpUsCgQcD33wPvvCO3NeJhTXbA29sDVar0wrVroWaKhSVLhqBKlb7Izual\n9eDB7OBr1jRXZNRo9BY3BNu1M2DHDv5Zr2eBuuvX+evGDf6u05n/nplpPhhYGhj8/ICSJYV8Z4oH\nziZQVrYsMG8ep5XOns3CbPPmsUCcuxOmvKgOX0GMGsW6Os7s8IlYGCzvbNz0819/WdYfKlvWgHff\nDURSEvDbb+G4eNEDZcsasGyZbTpCtuigeHrmOOv27a0fKy0tx/mbBoKkJODQoZzHk5PZGRQ2MFSp\n4pyOQSycVaCsVi1gwwbg8GGO70dHA598wkJxzoQa0lEQRiNQpw4QEwO0aCG3NZZJT+dsIkvO3PTd\n05Nn4KZwS+7vly/rsGBBLK5cKVh2YPt2YOFCnn3bipTVrUYjcOdO/oEh78+PHrEMdmEDgzOHCYqC\nVqvDpEmxuH7dNtkJJUIE/Pgj8P77QJs2rMVfr57cVtmG6vAVRkgIkJ0tTyMQg4ErXvM68NxO/dEj\ndlKWnLnp58KaX9jimDMygKpVWd+8YkXxXrPYZGay8y9sYChRIv9gkHdgqFbNNeSjQ0J0+PrrnWjS\nxLllJ9LTgU8/BZYu5RBPeDhQvrzcVhWM6vAVxvnzQO/e7GCFlFog4i5blpy56XtyMjvXgpx51arS\nhSgGDgSGD+eGMa6M6bOxNhiYfr5zB6hcufCBoVw55W46a7U6vPtuHB488ETz5spLybSHmzfZ2f/2\nGwu0TZqk3IFZdfgKpF07Dmf06WP7/2RksOO25sxNA0hBzrxGDWVJHKxaxZITGzbIbYky0OvZueQe\nCCwNDHp9ziBgbWCoXl36z9rVayVOnuT9txs3WJjt2WeVN/CqDl+BLF8OHD2aI7dgCrUU5MwfPgSe\nftp67LxmTZ75ORPXr/Nexq1byp0xKZHU1PwDQd7fb97k68HSYJD758qVhXNazpaSaQ9EvAc3cybv\nxy1dqizpc/U2khnTcj63Ez91Cli3jpU0793jG7ViRXPnXacOywqbZuhShlqkokYN7hdw6JBr9LqV\nijJlOH2wYUPrzzEauS4h70Bw+LD576mpvBoobGCwRe/e2VIy7cHNDXjuOVbA/fxzoFcv4MUXWTyu\nalW5rVMdvuhkZOTPasn73c3NPLTi78//26oVEBqqvFCLlAwYwDMm1eELi7s7bwJXq8aZJtbIyMgZ\nAHIPBEePmj/u7W25iC33z15ezpmSaQ9eXsD06ZxqPWcOS4C/9x4/Jue9rIZ0HMBoNA+1WHLmDx4U\nntViKdSyaROwejUQFyf961ISf/4JvPoqr3ZUlImp9qKgLKTr14E7d3QAYmEw5MTwS5cOwWuvcUqm\naWDw9VVe7NtRLl5kh3/6NKdxvvSSPK9RdfhWIOK4eEHO/MYNLsMvyJlXq2ZfqCU9nS/+06f5e3HF\naOQZ4qFDQN26cluj4gjZ2cD69Tp8+eVOPH7sgVu3DLh7tw969uQNW9PgQGRd9sL0c/XqylTcLIxd\nu7hwy9eXhdkKKgAUg2Lr8DMzCy8gAgp25k8/Le7ybMIEjsO++65453AGxo3jsMObb8ptiYrQLFgA\n/PorF9iZpCoePSq8buHWLZ5sFbSv4OcHVKqkvNWCwcD9m8PDORNvwQL2JVLgkg7faOQLoqACovv3\n+aKwltVSq5b8WS3x8dyg4dQpee2Qm82bga++wn+aOCquAxEwbBhv+n77re3O2WBgXaTCBoYnT3Lk\nNApaMZQqJe7rtMTjx9xw5YsveDLz3nvi98OQxeFrNGEOaWE/fFiwM79+nUf/gpy5vaEWKdm2TYeh\nQ+PQtKknKlVyjSIVe3j8mG/K5OTiI0FQnEhLA7p2BcaOBd56S9hjP3lSeKXzjRs84BSkoFqjBusi\nidF3+p9/gFmzgH37gPnzeaNXLN8ki8PPPYrnLbwwhVoKyjknMg+t5HXmNWo4v5KhqxepFJU+fVie\n9oUX5LZERQyuXgU6d+Z05N69pT03EXD3buEFbffv80SxsIGhbFn77Dh0iMUTs7NZmC1QhNtcdocP\nAFWrhqN27blISuI31c+v8KwWpcXlhKY4FKkUheXLeQP766/ltkRFLPbuZSmNgwdzUpOVRFYWrzIL\nykS6fp1n54X1XHjqKdZPygsR8MMPPONv144zei5cMG/dGRub3y/YiiLy8G/f9kCtWtzer1Mnbnpc\nty6HZYorqamuX6RSFHx8dFi3Lg6XLnmiZMniG95yZXr0AMLCWEPp0CHlhe+8vLgQsHZt688h4k3n\nvAPBhQvcOtH0e2HNeH76iRU5W7XSwcMjFg8fzrd+0iKgCIffurUBI0cCiYnA+vX8PTGR42V163JV\nad26OV+m3+3Z4FBqo+vcdqWn63H8+E2Lz3PFIpXC0Gp1+OijWGRlzf9PLjkhIRQAFPHZqQjHlCnA\niROsPvnTT8rfZ8uLmxtHIMqV42IraxgMnFiSd2DYt898tZCaGgdAGGcPKMDhBwSEYO7cvujf3/xx\nIpYVMDn/q1dZSfL33/n3f/7hWJm1AaF27fwpk5bi4kpwHJbsqlBhBry9x+PmzdX/PZa3oUdxISoq\nzuy9AYCEhPmIjg5XHb6L4eYGrFgB9OwJjB6tQ0qK8iZnQuDhkZM9VBDdu3ti/37hziuLw9downNp\noVtufODmxjm0lSpxLCsvptTL3APCkSO8DEpM5NGxShXzAWHzZmU6DksO7f79ZWjTZgpatiz8vXJ1\nioMGi0oO3t7AG2/o8Oqr5lW5SpicSU3p0pblKOxFFocvxKajuztX21WvDnTpkv/vej07/dwDQkqK\n5Zd76JAHhgzhjRSTvki1aua/i5n1Y82hlS1bBTt2RIp3YifBWdviqdjP+vVxZs4eUMbkTGoste50\nBNlDOmLh6ZmzwdKjBz92+LDeojZNw4YGDB7Muji3brFioOnnW7e4wKNUKeuDQd6BoqiDg7lD0wGI\nA+CJM2fOQ6vVFasL3BKWLnovr0m4do2zmVxpqa/CFLSqU+o+nBiYXld0dM5KH7B/wuyyDt8S1hpd\nR0Tk30PIjUkcyjQA3LplPjjk/j3v4FDQqsE0OOTYpQEQC9Mmzd27wPTpxW8Zm5fcF/31649x6VIy\nMjOn4OzZQJw9WzyX+nlxNSdobVV37tw1vPlmLK5eLT6hnv79AwV7bS4prVAQYje6Nunb514h5B4Q\ncv+ee3Dw9NTh8uUVyMralO+YxTX33hKuXJ9gr9N2xSI9S6+pTp0QpKU9QErKynzPd4XPXwqK1Qwf\nEHa0tISbG9cPVKgANG5c8HNNgwMPAIGYPHk3zp/P/zx1czIHa0v9//3PA5075zT+aNCAv9erV3iI\nTQmz46JmkBkM3JwkNRVYuFCZyQiOkDeU4e1twIABfREVtRspKfmfr94jtlHsHL6S+L/27qalcSgK\nA/CxrYJQpX4sjFpQpFA/qAjiomrBzejOPyC4FEEQcTdYqBR0q3/BdXeiwrgTTHcuRCiNgihIERSt\nRKW01VkcrmknydiPEXXu+0BIEJtIJe9Nck/uLWwc/H4irzdnGfjonDTY3eqHQnlaXeVxxzWNp4dM\nJrmzXlGKGwGx3dlJtLf3+aW62SzR2pp1aM/OhsnvD5Gu85hCYp3J8HsobjfR3Z19McLcHF94+P28\n9nq/R237/T2R0xmikZEQqSq/iHVxQfT0ZD1BBM6R0iDwvxC7PgYZa+/t2H1Hy8tTND5unhkrl+Mq\nLU3jBuD4mCgW4+10msjh+EW6Xv7VcSV3BY+P/MZlIlG8nJ8T1dRYn4qK4qT1dQ72hgZjXV9vBPfk\npH0xQiDAx9je5mOn09zgiQZANAY+3+eNL//6yv8PEeyqymNmDQ9zBd7SEr+B39JCtLPzgxYXcY5U\nCoH/hVj1yMtae2+n3O/I5eIw8/nI1DH/8EA0MeGioyPz5w4OuFR3YMBYenp4f+89frm9NYd6IsGP\n7nw+Dtm+Ph43preXfzY9bR3aHR35d6d3LKcYIZ3m4BcNz9YWry8vuaKt8G5AbDc2/v34QqmNoK7z\nOzMi4ONxPkYwyAOozc/z5PVWE9fjHKmOdJ22AIXsOoGDwTAtLETp5ITellSKr46vr1colTJ/pqkp\nTLW1UXp+5kAXoSmW7m774XWtO15/0uZmaWFWbTFCJkN0dsbhX3gXkkwSeTzFDYDYbmszBjG06zje\n2Jik/v7Q25W7qvI+Bwc54EXIK0rJfypUAYEPUisnaHWdQ3BmJkKaFjHtKxCI0O5uhNrbKxvN9aMr\nyCrx8sJDk4sGoLAxyGaNBuDwcIVOT82NYF1dmJqbozQ6ysEeDPLsZZ85kbfM8EgHpFbOIwK3m+cg\n7erKkaaZ96Uo+armH/7oCrJKOBzGC4xTfzwmv7kxGoD9fesoGRpyUjz+/w9n/l0g8EF65QYtOtdZ\nayvR2BgvsViOrq7Mv+Px5BH2Xwge6QAASOIbVOQCAMC/gMAHAJAEAh8AQBIIfAAASSDwAQAkgcAH\nAJAEAh8AQBIIfAAASSDwAQAkgcAHAJAEAh8AQBIIfAAASSDwAQAkgcAHAJAEAh8AQBIIfAAASSDw\nAQAkgcAHAJAEAh8AQBK/AXR0Oczd7Mp3AAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 city tour with length 8447.8 in 0.004 secs for nn_tsp\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 city tour with length 6996.7 in 0.218 secs for repeated_nn_tsp\n" + ] + } + ], + "prompt_number": 34 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that `repeated_nn_tsp` does indeed take longer to run, and yields a tour that is shorter. \n", + "\n", + "Let's try again with a smaller map that makes it easier to visualize the tours:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, Cities(9))\n", + "plot_tsp(repeated_nn_tsp, Cities(9))\n", + "plot_tsp(alltours_tsp, Cities(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2361.1 in 0.000 secs for nn_tsp\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHqpJREFUeJzt3Xlc1NX6B/DPAAKugEZq5NZoaYWamvsaApbZImWWS6W/\nFksgc724Z7SnAraXV2+Z19DSjALEVNLM3XLPMFxIXFLTDFBgfn88d0RlZJ2Zc2a+n/frxatXXILn\nFn7mzPM95zkmi8ViARERuT0P1QUQEZFzMPCJiAyCgU9EZBAMfCIig2DgExEZBAOfiMggGPhERAbB\nwCciMggGPhGRQTDwiYgMgoFPRGQQDHwiIoNg4BMRGYSX6gKulpSUjvj4VOTlecHHJx9RUWHo27e7\n6rKIiFyeVoGflJSO6OgUZGTEXvpcRsZEAGDoExFVkkmnefjh4ZOQmvpysc/XqzcZvXvPgJcX4OlZ\n/MPW5yv7tY78WR4egMmk4F+wQfFdI5HQaoWfl2e7HH9/T4SGAgUFV37k5xf/nPXzubmlf21J/7wj\nv7awUEJf5YuOri+GZf1ajzI+feK7RqIiWgW+j0++zc83alSAoUOdXIwDWSwS+rq9EF3+cfFi8RfN\n8nxfR/9/MJnK9uJw4kQqcnNjr/j3n5ERi4SEyQx8MhytAj8qKgwZGROvWI2ZzTGIjOyjsCr7uzys\nvL1VV+OarC+Ypb04DBjghY0bi//zubmezi+aSDGtAt+64nrooclo1coT/v4FiIzsw5UYFePhIR9V\nqpT8df7+tt81ZmcXwGLhsxQyFq0e2loFBQEbN8pfiSrDVg+/YcMYeHv3QatW3TF3LlCrlsICiZxI\nqxW+1cWLpa/ciMrC+u4wIWEycnM94esr7xp79+6OUaOAO+8EFi8GgoMVF0rkBFqu8AMCgAMH5K9E\njvTpp8CLLwIzZwJDhqiuhsixtAz8GjWAo0eBmjVVV0JGsGMHEBEBhIQAs2cDPj6qKyJyDC1n6eTn\ns6VDzhMcDGzeDBw/DnTtChw8qLoiIsfQMvDZwydnq1VLevmPPgp06AAkJ6uuiMj+tGvpFBbK4ZnC\nQtWVkFH98IME//DhwJQpcl6CyB1oF/h5edK7v3BBdSVkZNnZwMCB0s9fsAC47jrVFRFVnnYtHbZz\nSAf16gFpacAddwBt2wIbNqiuiKjytAt8PrAlXXh5Aa+9BsTHA/36Ae+8I3OQiFyVdoHPFT7p5v77\ngfXrgY8+AgYPBs6fV10RUcVoGfheWp7/JSMzmyX0fXyA9u2BvXtVV0RUfloGPlf4pKOqVYG5c+Vk\nbrduQGKi6oqIyke7wGcPn3Q3fDiQkgKMHw+MGiWLFCJXoF3gc4VPrqBNG2DLFuC334CePYGsLNUV\nEZVOy8BnD59cQUAAsGwZ0LevTN38/nvVFRGVTMvA5wqfXIWHBxATI1M3Bw8GXn2Vp8RJXwx8IjsI\nCQE2bQK++Ua2cZ4+rboiouK0C3w+tCVXFRQErF4NNG0KtGsHbNumuiKiK2kX+FzhkyurUgWYNUta\nO2FhwCefqK6IqIiWgc+HtuTqBgyQqZszZwLDhgE5OaorItI08LnCJ3fQvLkMXcvNBTp1AjIyVFdE\nRqdd4LOHT+6kRg0Zr/zUUxL6y5aproiMTLvA5wqf3I3JBDz/PLB8ORAVBUyYIAsbImfTMvDZwyd3\n1KGD3J27dSsQGgocO6a6IjIaLQOfK3xyV4GBwHffAd27y8Uqa9eqroiMRLvAZw+f3J2nJzB9uszX\nj4iQnTy8WIWcQbvA5wqfjOLuu2UXz8KFwMMPA2fPqq6I3J2Wgc8ePhlF48bS1gkMlAFsO3eqrojc\nmZaBzxU+GYmPD/Dee8CkSUCvXsBnn6muiNwVA59IE0OGyIjll14CnnsOyMtTXRG5G+0Cnw9tyciC\ng2Xq5rFjco3iwYOqKyJ3ol3gs4dPRufnByxeDDzyiFyYnpysuiJyF1oGPlf4ZHQmEzB6tAT///0f\nMG0aUFCguipydQx8Io116yanc1evBu65Bzh5UnVF5Mq0C3z28ImuVK8ekJYG3HGHnM7duFF1ReSq\ntAt89vCJivPyAl57DYiLA+69F3j3XZ7OpfLTMvC5wiey7YEHgB9/BD74QC5NP39edUXkShj4RC6m\naVNg/XrA21t28ezdq7oichUMfCIXVK0aMHcuMGqUPNhNTFRdEbkC7QI/P589fKKyMJlky2ZKCjB+\nvIT/xYuqqyKdaRf4XOETlU+bNrJ1c/9+mcWTlaW6ItIVA5/IDdSuDXz9tezVv/NOmclDdDUGPpGb\n8PAAYmKATz8FBg0CXn0VKCxUXRXpRLvA58ErosoJCZEBbMuXA/ffD5w+rboi0oV2gc+DV0SVd+ON\nMo7BbAbatQO2bVNdEelAy8DnCp+o8ry9gdmzpbUTFgZ88onqikg1Bj6RmxswAEhPB95+Gxg+HMjJ\nUV0RqcLAJzKAFi1k6FpODtC5M5CRoboiUkG7wOfBKyLHqFEDWLBAVvmdOgHLlqmuiJxNu8DnCp/I\ncUwmYORI2bMfGQn861+yyCJjYOATGVDHjsCWLfIRFiZ36JL7Y+ATGVRgIPDddzJ8rW1bYO1a1RWR\no5ksFn2uUUhKSkdERCpat/aCn18+oqLC0Ldvd9VlEbm9b78FnnwSmDABeOEFaf2Q+9Em8JOS0hEd\nnYKMjNhLnzObJyIuLpyhT+QEmZnAQw8BTZrInv1atVRXRPamTUsnPj71irAHgIyMWCQkrFBUEZGx\nNG4sbZ06dWQA286dqisie9Mm8PPybO/F3LXLExs28P5OImfw9QXefx+YOFFGLS9YoLoisidtAt/H\nx/beMG/vAjz+ONCokVzwsG4dJwASOdrQoTJiefp04LnngLw81RWRPWgT+FFRYTCbJ17xObM5BvHx\nodizR3YT+PsDzz4LNGgge4jXrAEKChQVTOTmgoNl6mZ2tuzkOXhQdUVUWdo8tAXkwW1Cwgrk5nrC\n17cAkZGhNh/Y7t0LLFkCLF4MHD0KPPigPGzq0YOndInszWIBZs4E3nwTmDcP6NNHdUVUUVoFfkX8\n9ltR+GdmAg88IOF/113cz09kT+npwKOPAk89BUyeDHh6qq6IysvlA/9ymZlF4f/rr8B990n49+4N\npKWlIz4+FXl5XvDx4R5/oorIzgYeeUQe7i5YAFx3neqKqDzcKvAvd/gw8OWXEv5bt6bDwyMFf//N\nPf5ElZWfL7t4/vtfIDERaN9edUVUVm4b+Jfr2XMS1qx5udjnw8MnIzl5hoKKiFzf0qXA008D06YB\nI0bwdK4r0GaXjmPZfpKbm8smJFFFPfCAbJP+4ANgyBDg/HnVFVFpDBH419rj7+vLPZ1EldGsGbB+\nveyO69AB2LdPdUVUEkMEvq09/j4+MXj++VBFFRG5j2rVgH//G4iOlv36ixerroiuxRC71q0PZhMS\nJl/a43/wYB9kZ/OBLZE9mEyyXbNNG+Dhh6XV88Yb3BqtG0M8tLXll1+A0FAZEBUYqLoaIvdx6pSM\nZjhzBli0CAgKUl0RWRmipWNLy5bAoEEy/5uI7Kd2bblC8Z57ZOrmqlWqKyIrw67wAeDsWeDWW2UV\n0qWL6mqI3E9amuzgiY4Gxo0DPAy7xNSDoQMfkLCPjQW2buUcHiJHOHIEGDBATuXOnw8EBKiuyLgM\n/3o7YABQty6QkKC6EiL3dOONwOrVcpNWu3bAtm2qKzIuw6/wAZm707kz8PPPfMBE5EiLFgEjRwKv\nvQYMH666GuNh4P/P5MkS/IsWqa6EyL3t2QNERACdOgFz5gBVq6quyDgM39KxiomRyx5SU1VXQuTe\nWrQANm4E/vlH3lkfOKC6IuNg4P9P1apAfLy83eR1bkSOVaMG8PnnwLBhQMeOso2THI8tnas8+CDQ\nti0waZLqSoiM4aefZPPEoEHAjBncLedIDPyrHDwogb9xI3DTTaqrITKGEyeAxx6TO6oXLpSdc2R/\nbOlcpVEjYOxYuSSdL4VEzhEYCCQnA127yoJr3TrVFbknBr4No0YBv/8OLFumuhIi4/D0BF56Cfjw\nQ6B/f2DWLC667I0tnWtYtQp44glg926genXV1RAZS2am3EfdpAnwySdArVqqK3IPXOFfQ69eMtt7\nBm9AJHK6xo2BtWuBOnVkANvOnaorcg9c4ZcgOxsIDgbWrJEha0TkfP/5DzB6NDB7tuzkoYpj4Jdi\nzhxgyRLg++95STORKr/8IqdzQ0Olt+/jo7oi18SWTilGjAD++ksOiRCRGi1bAps3y7vubt2AQ4dU\nV+SaGPil8PQE3ntPtmqeOaO6GiLj8vOTd9sDBgDt2wMpKaorcj1s6ZTRs8/K/Zwco0ykXno68Oij\nwNNPy+BDXqxSNgz8Mjp1Sh7cJiXJwRAiUuvoUWDgQJmD9dlncsEKlYyvi2VUuzbw6qvS0y8oUF0N\nEdWvD6xcKf39du1kHAqVjIFfDo8/Dnh7Ax9/rLoSIgJk0Nobb8jOnXvvBd59l6dzS8KWTjn98gvQ\nu7ccBLn+etXVEJHV/v1yOjc4GPjgA56Qt4Ur/HJq2RIYMgQYP151JUR0uWbNgPXrZWddhw7Avn2q\nK9IPA78Cpk0D0tLk6DcR6aNaNWDePCAqSiZvLl6suiK9sKVTQYmJMtlv61bZrklEetmyRVo8Dz4I\nvP46/5wCXOFX2EMPATfcwH35RLpq21ZCf98+GYaYlaW6IvUY+BVkMsmcnVdeAY4cUV0NEdlSuzaw\nfDlw990ydXPVKtUVqcWWTiVNmQLs3Qt88YXqSoioJGlpsuEiOhoYN86Yp3MZ+JWUkwPcdpvM2wkP\nV10NEZXk8GGZxXP99cD8+YC/v+qKnMuAr3H2VbWqtHZGjgRyc1VXQ0QladBA7rdo1Eh6/Nu3q67I\nuRj4dnDPPXLY4403VFdCRKXx9gbi44HYWJmvP3eu6oqchy0dOzl0CGjTBtiwATCbVVdDRGWxZ49c\nrNKpk7xTr1pVdUWOxRW+nTRsKA+CoqI4y4PIVbRoIUPX/vkH6NwZOHBAdUWOxcC3oxdeADIzgaVL\nVVdCRGVVo4bcaDdsGNCxo2zjdFds6djZ6tXA0KHA7t3yi0RErmP9euCRR4DBg+UkvZeX6orsi4Hv\nAEOGyCnc119XXQkRldeJE8Bjj8m9FwsXAnXrqq7IftjScYA335Qn/7t2qa6EiMorMBBITga6dJGL\nVdatU12R/XCF7yDvvCOnb1evljEMROR6kpKktz9hgjyjc/U/ywx8BykoANq3l1+SIUNUV0NEFZWZ\nKcMSmzSRd+41a6quqOLY0nEQT08ZtzBuHHDmjOpqiKiiGjeWuy9q15YBbK7cquUK38FGjJDwnzNH\ndSVEVFnz5wNjxgCzZwODBqmupvwY+A52+jRw663AN9/I7A4icm2//CKnc8PCgJkzAR8f1RWVHVs6\nDhYQALz6qqz0CwpUV0NEldWyJbB5M/DHH0D37jJWxVUw8J1g6FBZBXz0kepKiMge/PyAL78EHn5Y\nNmekpKiuqGzY0nGSHTuAkBBg506ZxU1E7mHNGjmo9fTTwOTJel+swsB3ojFjgJMngXnzVFdCRPZ0\n9KiMZKheHfjsM6BOHdUV2cbAd6Jz5+QB7oIF0vsjckVJSemIj09FXp4XfHzyERUVhr59+Qt98SIQ\nEwMkJsrHnXeqrqg4NxsNpLeaNYFZs4DnngO2bQOqVFFdEVH5JCWlIzo6BRkZsZc+l5ExEQAMH/pV\nqshYlc6dgb59genTgWef1et0rsbdJvcUEQHceCMQF6e6EqLyi49PvSLsASAjIxYJCSsUVaSfBx+U\n+TvvvScbNs6fV11REQa+k5lMcgjrtdeAI0dUV0NUPnl5tpsCf//t6eRK9NasGfDTT/IAt0MHYN8+\n1RUJBr4CTZsCzz8PjBqluhKi8vHxybf5+U2bCjBzJpCT4+SCNFatmmzQiIoCunYFlixRXREDX5kJ\nE4CtW2UMK5GriIoKQ/36E6/4nNkcg5kzQ7F2rSxm3n0XuHBBUYGaMZlku+Z338kuvdGj5eGusnq4\nS0ed774DIiNlb76vr+pqiMomOjodixevQLNmnvD1LUBkZOilB7Zbtshe9N27galTZVKsu90aVVGn\nTslNWic3P4Gbvdfh2LEzsFg8YTIVICjIH417dsE0B+/ZZuArFhEhR7WnTlVdCVHZvPSSrFJnzLj2\n16xdC0yaJOMHpk+XPeo6H0hylsJCoH/tZlj612/F/rcnGjXFvMz9Dv35/E+g2OzZQEIC8Fvx//5E\nWjp8WHaalaRrV2DVKtmpEhcHtGoFLF0KGH156eEBnD9ve156VtZfjv/5Dv8JVKIGDYDx44GRI/mH\ngVzD4cPye1sak0nGiaxfLwMEp02TuTPJycb+XbdYbO9oslgcH8cMfA288IL8IfryS9WVEJWurIFv\nZTIB994rmxTGjwdefFFOmq9Z47ga9WZ7bK7JVOjwn8zA10CVKvLWd9Qo4O+/VVdDVLLyBr6Vh4dc\nFbhjh+xcGTYMCA2V/epG4ufnb/PzQUF+Dv/ZDHxNdO8O9OolD8SIdHX2rLRj/CqRTZ6esntn715g\nwAD56NcP2L7dfnXqKj8f2H+xCx65vilCvQLR27MuQr0C8USjpmjcs4vDfz536Wjk2DHg9tvlYdft\nt6uuhqi4Xbtklb5nj/2+Z24u8OGH0ufv1k129bRoYb/vr5MFC4D33wfS09XM2OEKXyN168ov+3PP\nGfuhFumrou2ckvj6ymnU334D2rUDevSQGTQHDtj356hWUCBbWadOVTdQjYGvmWeeAf75B/j0U9WV\nEBXniMC3ql4dGDcO2L8fMJtlR88zz8jPdAeJiUDt2rJzSRUGvmY8PeUB7rhxcgE6kU4cGfhWfn6y\nCt63TwKydWvZyXbsmGN/riMVFsrqfsoUteOSGfgauvNOoH9/YOLE0r+WyJmOHCn90JW91Kkjff1d\nu+Tvb71VZlD9+adzfr49LVkC1KgBhIerrYOBr6nYWOCrr4BNm1RXQlTEGSv8q9WrJyfSt2+Xd723\n3CLPus6edW4dFaXL6h5g4GsrIAB4/XVgxAh52EOkAxWBb9WgAfDBB8CGDfJAt2lT+TOi0wUjtixd\nCnh7A/fco7oSbsvUmsUC3H57OiyWVFx/Pe8PJbUsFmlLZGfLdZ2q7dkjvf4ffgD+9S85zKXb1FmL\nBbjjDjlfc999qqvhnbZa+/bbdJw7l4LDh2Mv7Xvm/aGkypkzMupYh7AHZK/+F19Iq2fKFOCtt2RC\n55NP6nNf9PLl8td+/dTWYcWWjsbi41Nx+HDx+0Pj43l/KDmfynZOSVq3Br7+WsI/MRFo3ly2Natu\nhVos8qxBh969FQNfY9e6P3TlSk/07y8n9tztcArpS9fAt+rYEVixAvjkE+n1BwfLC0Ch42eS2fTt\nt3JvwAMPqPn5tjDwNXat+0O7dStARISMne3aVQ6pjBgh0zbP2B61TVRpuge+Vc+e0tefOVMe6rZt\nC3zzjXNPr1ss0refPFmvi180KoWuFhUVBrO5+P2hY8aEYtAgYP58ICsLWLYMaNYM+OgjoGFDoFMn\neZi1bp3a+zPJvbhK4APSQunTR7Y1T50qD3U7dQLS0pwT/CkpMvk2IsLxP6s8uEtHc0lJ6UhIWIHc\n3OL3h9qSmwv8+COQmiofBw7Iiic0FAgLk61suvQTybU8/rj8Lj35pOpKyq+wEFi0SML/hhvknEsX\nBw2ntFiAzp2B6Ghg4EDH/IyKYuC7uePHgZUrpbeZmiq7F6zhf9ddcnSdqCzuuguIiQF691ZdScXl\n58sDXetEzhkzZGCbPaWlyQ12u3bJqBSdMPANxGKRvcvW8P/hB/mlDwuTF4GOHeWACJEtzZpJL/yW\nW1RXUnkXLgAffywr/Q4dpN9uj5HkFovcbfHMM8DgwZX/fvbGwDewvDx58JuaKi8Cv/4qv6xhYfJx\n881s/5CwWIBq1YCTJ2WqpbvIyQHefRd44w2ZYjltmvzeV9SqVRL2u3fLmQXdMPDpkpMnge+/L+r/\nA0Wr/5AQ4Lrr1NZH6pw4ISv7U6dUV+IY584B8fEys+e++2R3TePG5f8+1mccjz9u7wrtg7t06JLr\nrpPr5j7+GDh4UFb9rVrJLT1ms0zxjIkBVq+WdwdkHEeOuM4OnYqoWVOm0/76K1C/vmzlfP554I8/\nyv491qyRf0+DBjmuzspi4JNNJpOs6CIj5RTjiRPA22/LQ6jx44HAQKBvXyAuTt6+8n2ie3OlLZmV\nERAAvPyy3Ldbtar09ceMkd//0syYIQsiHVs5Vgx8KhNvb+nvz5gh0wozM+Wt665dMgWwQQP5+4UL\ny/aHg1yLUQLfKjBQZvPs3Cl9/ubNZU7PtQ42rlsHZGTI5ew6Y+BThdSuLZdZf/gh8Pvv8rCqXTvZ\n69ysGdCmjVxWsXKlnA0g13b4sPMuPtHJDTcA77wDbNkCHD0qv9uxsdLzB+ScTHj4JNx77zRUqzYJ\nqanpagsuBR/akt1dvAhs3Fi0+2fnTjnkYt3/f9tt3P3jagYPlv92Q4eqrkStX3+VnTwrVwL9+qVj\n1aoUHDhQNODQbJ6IuLhwbafZMvDJ4c6ckd0/1v3/OTlF4d+7N1C3ruoKqTQ9ekjQ9eqluhI97NgB\n9O49CcePv1zsfwsPn4zk5BkKqiodWzrkcP7+ckfve+9Jn/OHH2SuyZIl0htt3RoYO1ZeEHJyVFdL\nthith1+a4GCgRQvbT2dzczU7XnsZjZ8nk7sym+Xj2WflqPumTRL206cDP/8sLwbW/f8tW7L9o1ph\noQzpM2IPvyTXmmbr66vvnaRs6ZBW/vpL9vlb+/9nz0rwWz/q11ddofFkZ8uKlruvrpSUlI7o6BRk\nZFzew49BXFwf9vCJKuL33yX4V6yQB2VBQUWr/+7d5bg/OdbmzXJf7NatqivRT3mn2arGwCeXUVAg\n2+Osox+2bZPBV9YHwK1a6XXZhLv46itg3jy5d4FcGwOfXNa5c9L+se7+OXVKdv1Y3wEEBamu0D3E\nx8t2xDlzVFdClcXAJ7dx6FBR+KelAfXqFa3+e/RwrymPzjR2LFCnjhykI9fGwCe3VFAgLR/rw9/N\nm+UksHX136YN2z9lNXAg0K+f3kPBqGwY+GQIf/8NpKcX9f+PH5f2j3X3T8OGqivUV9euwCuvyENy\ncm0MfDKkI0eKdv+sWCEtC+vFLz16yLhcEo0aybOSJk1UV0KVxcAnwyssBLZvL+r/b9woLR9r/79t\nW/3uJnWWggIZE3zuHODjo7oaqiwGPtFV/vmnqP2zYoVcgnHXXUX9/4rchOSqsrLkBS87W3UlZA8M\nfKJS/PHHle0fP7+i8O/VC6hVS3WFjrNhAzBypIy/INfHwCcqh8JCmZRoXf2vXy8Hvqz9/3bt9L7x\nqLwWLwY+/xz48kvVlZA9MPCJKiEnR6Z/Wvv/hw5J+8fa/7/pJtUVVs6sWXK7WVyc6krIHhj4RHaU\nnS2HvqzvAKpXLwr/Xr1kVLQrefFFGVg3dqzqSsgeGPhEDmKxyG1f1tX/unUyddLa/2/fHqhSRXWV\nJXv4YSAiQg5fketj4BM5SW6uhL718NfvvwM9exa9ADRtqt/s/06d5DLvLl1UV0L2wMAnUuT4cWn/\nWN8BeHsXhX9ICBAQoLpCufTkxx95EtldMPCJNGCxAHv2FK3+164Fbr21qP/fsaPz2z/5+XLfwPnz\n+reeqGwY+EQaysuTlbX14e/+/TLywfoCcPPNjm//HDokLZ2sLMf+HHIeBj6RCzh5Um78sr4D8PAo\nCv+QEJkFZG/r1gGjRwM//WT/701qMPCJXIzFAuzbV7T6T0+XFb+1/9+5szwPqKxFi+TgVWJi5b8X\n6YGBT+TiLlyQVbh19b93L9CtW9Hp3+bNK9b+eestaefMmmX/mkkNBj6Rm/nzT+D772X1n5IiEy+t\n4R8SAgQGlu37REfLaOQXX3RsveQ8DHwiN2axyANf69bPNWsAs7mo/9+lS/Gxx0lJ6YiPT8WWLV4I\nCsrHK6+EoW9f3n7iDhj4RAZy8aJMwLT2/3ftktC39v8zM9PxwgspyMiIvfTPmM0TERcXztB3Awx8\nIgM7fRpYtaqo/5+VNQkXLrxc7OvCwycjOXmGggrJnniNM5GBBQQA/fsD778PHDgAtG5te7Zzbq5B\nr/xyMwx8IrrE3z/f5ud9fQucXAk5AgOfiC6JigqD2Tzxis+ZzTGIjAxVVBHZE3v4RHSFpKR0JCSs\nQG6uJ3x9CxAZGcoHtm6CgU9EZBBs6RARGQQDn4jIIBj4REQGwcAnIjIIBj4RkUEw8ImIDIKBT0Rk\nEAx8IiKDYOATERkEA5+IyCAY+EREBsHAJyIyCAY+EZFBMPCJiAyCgU9EZBAMfCIig2DgExEZBAOf\niMggGPhERAbBwCciMggGPhGRQTDwiYgMgoFPRGQQDHwiIoNg4BMRGQQDn4jIIBj4REQGwcAnIjII\nBj4RkUEw8ImIDIKBT0RkEAx8IiKDYOATERkEA5+IyCAY+EREBsHAJyIyCAY+EZFBMPCJiAyCgU9E\nZBAMfCIig2DgExEZBAOfiMggGPhERAbBwCciMggGPhGRQTDwiYgMgoFPRGQQDHwiIoNg4BMRGcT/\nAwTo9292BSSTAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2322.1 in 0.000 secs for repeated_nn_tsp\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nP1Xko7QsdgZxAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2217.5 in 0.263 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 35 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This time the `repeated_nn_tsp` gives us a tour that is better tha `nn_tsp`, but not quite optimal. So, it looks like repetition is helping. But if I want to tackle 1000 cities, I don't really want the run time to be 1000 times slower. I'd like a way to moderate the repetition—to repeat the `nn_tsp` starting from *a sample* of the cities but not *all* the cities.\n", + "\n", + "Sampled Repeated Nearest Neighbor Algorithm (improved `repeated_nn_tsp`)\n", + "---\n", + "\n", + "We can give `repeated_nn_tsp` an optional argument specifying the number of different cities to try starting from. We will implement the function `sample` to draw a random sample of the specified size from all the cities. Most of the work is done by the standard library function `random.sample`. What our `sample` adds is the same thing we did with the function `Cities`: we ensure that the function returns the same result each time for the same arguments, but can return different results if a `seed` parameter is passed in. (In addition, if the sample size, `k` is `None` or is larger than the population, then return the whole population.)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def repeated_nn_tsp(cities, repetitions=100):\n", + " \"Repeat the nn_tsp algorithm starting from specified number of cities; return the shortest tour.\"\n", + " return shortest_tour(nn_tsp(cities, start) \n", + " for start in sample(cities, repetitions))\n", + "\n", + "def sample(population, k, seed=42):\n", + " \"Return a list of k elements sampled from population. Set random.seed with seed.\"\n", + " if k is None or k > len(population): \n", + " return population\n", + " random.seed(len(population) * k * seed)\n", + " return random.sample(population, k)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 36 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compare with 1, 10, and 100 starting cities on a 300 city map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def repeat_10_nn_tsp(cities): return repeated_nn_tsp(cities, 10)\n", + "def repeat_100_nn_tsp(cities): return repeated_nn_tsp(cities, 100)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 37 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, Cities(300))\n", + "plot_tsp(repeat_10_nn_tsp, Cities(300))\n", + "plot_tsp(repeat_100_nn_tsp, Cities(300))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nzizkkZGp9NlnRc+glULooalevfhz1umEz61161RF3QZLEtnZRPPnc4TslClEV6543pbRSNSkibCA\nPnGC6J13iAYOJAoMJKpf30j16rE7cu/ePInZsYMN8g0aEK1e7frk48gRflFdu+Z536XENokLDU2l\n1q3LPMdc4bPP+CWvhCOGJgW+jZgYaWetzmbBTZok08CBvCxv1oxo0iSi9evVeYg8malfvUoUEiK8\nX0BAMgUGsqpqyRL29LjfPXysVqIvvmCVycCBREePStNmnTpGatcuibp1S6U2bZIoIYFVhRERRCNG\nEK1aRbRqleMLvVKlRAoNNdJ773mmyuzd20j160uzCpaKZ57hojByIuXqX00sFl7RrV8v/7E0LfCl\n9lktbslpNhPt3s2zvthYDiBp355o5kwig4GDSuSmefMpbp3zwYO8JHz4YefndukSC7gxY4hq1+aU\nvaNGEX36KdG5c/bXpzQ8QEXxyy+sF2/ThujHH6Vp02olWrLESD4+9tc/JCSRFi822s3Wnb3Q+/Tx\nbBKTlmakOnW0Z7tZsIBoxgz52hd6lv39n6bo6HElcuzq9URNm+bHd8iFpgW+HIFN7hhZc3J4qf7i\nixxdWakS+1y/9BLR9u3SG5bT0rgylavn/PXXvJz/9FPXz81q5cCcd94hevRRNlRHRxM99JD4sopa\n5p9/iIYM4Zfdxx+Lt9dcusQz9hEjeAbv7+/aWJV6EqNV281nn/H1lgtn5w0kl8ixa7USde9O9NFH\n8h5HswL/u+84dYGjEFLPCHTzJvdrxgyeIQYEcB3QhQu5gIhYIcKD2EhA4ZnLOLvyejpdKtWvn0Rh\nYUbavVvcMc1mNo43aKBNwSGWrCxeoYWE8Iv61i3P2snLI9q2jWjWLKK2bdnYOmAA0dtvc2lDVwW5\n1AJa7chNZxiNRF27yte+s/PmsqT8//btk+nMmZKjwty+nVfgcmZbVT15mhCffMLBTunpOmRmaic3\ne+XKnByqb1/+++pV9ovfupWLGly5wiXMevUCevYEGjVyL0CK/Zht55YCwBuABWYz+3j/9ls6LlzI\n97+uWzcJFy+iwD7u4+3NCeFq1PDB3387/l5SfajNZg6ceuklICGBk4lVr+5eGydO5PvE//gj0LAh\nJyB7802gSxf7oj2uJmKTusCMs+P6+qobiFWrFnD6tHzt+/gInzeQf97HjnmjTRsOlGzShBPcNWvG\n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\neEJ8u82brQgJKcCWLd7HW6vBbbcB//mPfgZfyiCWlHSBIEwDIO93GTwY+Ogjh9FPTPSuH2IPHiAH\nQBYAi88GWstF8uBgYxh8Q4VlAnwjBgVxgo3R2bED6NWLI2L27rVg/nwW5EpM5JDSO+8cgjlzLCgv\n17unrlx3HbBhAws63XcfcPWqNu2KhUHGxIiHQRYXA3v2cKSNUsTGcqWmBQuA6dPFt5k1qxAlJXYD\nYwWQiYMH62Ls2LnIz7cq1xkPDBzI0SGnT2vWZA2kDCLgsFxyw3wHDQI+/hi46y5++HrD8ePuq3n5\naqAnTkxBZKQ2IblBQSx3rTt6+5Sc+e03FmIyMlVVRDNnclGWjz5yv9299xLddZe+VW7cUV7OFZWG\nDNFOt6X6ukLbtpmUnCzug334YaIXXlCnD7/9RvSXvxBNncrXqTqO9Rix+sHaRl6NGEG0ZIlmzdVA\nqiqb3X/uzzrVhg3s01+3Tnqbykqi554jCg2VrtfrbxRT794Cde8ufxFWLkVFRD17qnJoWRjO4O/Z\nQ9S5s969kKakhA1kr15EP/3kefvycqK//pXomWfU75uvXLvGi5T9+xOdPatt2+fPswCc841/5gxR\n06ZEJ0+q1/apU1w2c8qUmkbfsZinf+TVu++Ki8VpRfWHc0TE3S7G3p/fY+NGNvpr17p+d/IkZ/Ym\nJRG9957rgycsLJ169Bjvl4GuqCBq1Eg8Gkdptm/nsaY3hjP4335LlJCgTVvualeKsWkTUbt2bCCu\nXPG+ndOnOfJo0SI/O6wiNhufV1wcz361JDeXf59Llxyfvfwy0dix6rd99ixRnz4cf29/C3PMbPWP\nvDp9muPBjVDLWY08AUFgo//ii457MSEhgyIiBJo6lScj9rZ9CYd0x/r1fO21YOdOloLQG8MZ/NWr\n+cmuNnJCzioriaZPZ1dTbq5v7e3dywlAYrMZo1BVxQktsbFEBw5o2/Y99xD9+9/872vXeNa/fbs2\nbZ8/TzRgAL/lVFbyZ7m5AtWvf7fuM3wiDudTUhdf7kTHed/U1EyyWDhPYNo0/w3vK68IFBRU816M\nilLfdfbMM0SZGl3K3bvZhag3hjP4H3/sXoJVKdzF4Fa/IRITMyg+XiCLhejoUf/a3LiRqHFjgfr3\nN16xjerMn88x4N9/r12bJ0/yA3HbNqJPPtE+ZvnTTwVq3jyDrrsumwYPzqA77xSoXTuBYmL0z3x9\n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\nYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "300 city tour with length 11503.8 in 0.029 secs for nn_tsp\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "300 city tour with length 11454.3 in 0.193 secs for repeat_10_nn_tsp\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nX0dHR6ee8P8P3TsnX6qXrwAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "300 city tour with length 11194.7 in 1.894 secs for repeat_100_nn_tsp\n" + ] + } + ], + "prompt_number": 38 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we add more starting cities, the run times get longer and the tours get shorter.\n", + "\n", + "I'd like to understand the tradefoff better. I'd like to have a way to compare different algorithms (or different choices of parameters for one algorithm) over *multiple* trials, and summarize the results. I'll get to that soon, but first a brief diversion for more vocabulary.\n", + "\n", + "New Vocabulary: Maps\n", + "---\n", + "\n", + "We use the term *cities* and the function `Cities` to denote a set of cities. But now I want to talk about multiple trials over a collection of sets of cities: a plural of a plural. English doesn't give us a good way to do that, so it would be nice to have a *singular* noun that is a synonym for \"set of cities.\" We'll use the term \"map\" for this, and the function `Maps` to create a collection of maps. Just like `Cities`, the function `Maps` will give the same result every time it is called with the same arguments." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def Maps(num_maps, num_cities):\n", + " \"Return a list of maps, each consisting of the given number of cities.\"\n", + " return tuple(Cities(num_cities, seed=(m, num_cities))\n", + " for m in range(num_maps))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 39 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Benchmarking (Any Function)\n", + "---\n", + "\n", + "The term *benchmarking* means running a function on a standard collection of inputs, in order to compare its performance. We'll define a general-purpose function, `benchmark`, which takes a function and a collection of inputs for that function, and runs the function on each of the inputs. It then returns two values: the average time taken per input, and the list of results of the function." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def benchmark(function, inputs):\n", + " \"Run function on all the inputs; return pair of (average_time_taken, results).\"\n", + " t0 = time.clock()\n", + " results = map(function, inputs)\n", + " t1 = time.clock()\n", + " average_time = (t1 - t0) / len(inputs)\n", + " return (average_time, results)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 40 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `benchmark` to see that the abolute value function takes less than a microsecond:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmark(abs, range(-10, 10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 41, + "text": [ + "(2.9999999995311555e-07,\n", + " [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + } + ], + "prompt_number": 41 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can see that `alltours_tsp` can handle 6-city maps in about a millisecond each:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmark(alltours_tsp, Maps(10, 6))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 42, + "text": [ + "(0.0011670999999999765,\n", + " [[(654+277j), (508+326j), (208+535j), (188+480j), (156+351j), (595+162j)],\n", + " [(100+74j), (595+166j), (810+232j), (381+309j), (379+432j), (147+593j)],\n", + " [(502+121j), (380+210j), (237+277j), (272+467j), (531+557j), (889+424j)],\n", + " [(245+540j), (598+423j), (896+240j), (302+321j), (150+406j), (11+376j)],\n", + " [(862+280j), (710+441j), (652+440j), (405+598j), (362+42j), (755+142j)],\n", + " [(593+177j), (591+247j), (757+499j), (721+520j), (57+379j), (535+204j)],\n", + " [(253+77j), (242+298j), (34+377j), (283+545j), (529+364j), (827+8j)],\n", + " [(424+468j), (183+486j), (173+489j), (20+349j), (276+316j), (400+312j)],\n", + " [(669+590j), (790+529j), (507+186j), (80+41j), (240+328j), (505+564j)],\n", + " [(410+69j), (555+162j), (581+497j), (16+339j), (337+163j), (385+127j)]])" + ] + } + ], + "prompt_number": 42 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Caching (or *Memoization*) of Function Results\n", + "---\n", + "\n", + "Here's an issue about benchmarking: each time we develop a new algorithm, we would like to compare its performance to some standard old algorithms. It seems a waste of computer time to re-run the old algorithms on a standard data set each time. And it seems like a waste of human time to scroll back up and check (e.g. \"How did `nn_tsp` do on `Maps(30, 60)`? Where was that?\"). It would be better if the `benchmark` function could *remember* the (function, inputs) pairs that it has already run, and when asked for the same pair over again, just go look up the results rather than re-computing the results. \n", + "\n", + "The process of taking a function (such as `benchmark`) and making it remember its previously-computed results is called **memoization**. The idea is that we do:\n", + "\n", + " benchmark = memoize(benchmark)\n", + " \n", + "and now when we call `benchmark(function, test_cases)` the first time it will be computed just like before, but when we make the same call a second time, the result will be instanly looked up rather than laboriously re-computed.\n", + "\n", + "Here is one way to implement the function `memoized` so that `memoized(func)` creates a new function that acts just like `func` except that it stores results in a table, called a *cache*: " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def memoize(func):\n", + " \"Return a version of func that remembers the output for each input.\"\n", + " cache = {}\n", + " def new_func(*args):\n", + " try:\n", + " # If we have already computed func(*args), just return it\n", + " return cache[args]\n", + " except TypeError:\n", + " # If args are not hashable, compute func(*args) and return it\n", + " return func(*args)\n", + " except KeyError:\n", + " # If args are hashable, compute func(*args) and store it\n", + " cache[args] = func(*args)\n", + " return cache[args] \n", + " new_func._cache = cache\n", + " new_func.__doc__ = func.__doc__\n", + " new_func.__name__ = func.__name__\n", + " return new_func" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 43 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are three paths through the function: \n", + "\n", + "1. If the tuple `args` is already in the cache, then look it up and return it.\n", + "2. A `TypeError` means that one of the `args` is not hashable; in that case we just call `func(*args)` and return it. We can't do caching in this case.\n", + "3. A `KeyError` means that `args` are hashable, but have not yet been seen. So compute `func(*args)`, store the result in the cache, and return it.\n", + "\n", + "We also copy over the documentation and function name from the old `func` to the new memoized function, and store the cache there as well, so that, if we want to to, we could do `benchmark._cache.clear()`.\n", + "\n", + "We could now do \"`benchmark = memoize(benchmark)`\", or more Pythonically, use the [decorator](https://docs.python.org/2/reference/compound_stmts.html#function) syntax:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@memoize\n", + "def benchmark(function, inputs):\n", + " \"Run function on all the inputs; return pair of (average_time_taken, results).\"\n", + " t0 = time.clock()\n", + " results = map(function, inputs)\n", + " t1 = time.clock()\n", + " average_time = (t1 - t0) / len(inputs)\n", + " return (average_time, results)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 44 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that the first call to `benchmark` takes 5 seconds, while the second repeated call takes only microseconds but correctly delivers the same result:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%time benchmark(alltours_tsp, Maps(2, 10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "CPU times: user 4.96 s, sys: 116 ms, total: 5.08 s\n", + "Wall time: 5.03 s\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 45, + "text": [ + "(2.5396495000000003,\n", + " [[(664+505j),\n", + " (617+543j),\n", + " (500+564j),\n", + " (57+539j),\n", + " (98+220j),\n", + " (797+56j),\n", + " (781+126j),\n", + " (583+264j),\n", + " (485+435j),\n", + " (587+492j)],\n", + " [(560+80j),\n", + " (743+218j),\n", + " (461+142j),\n", + " (420+268j),\n", + " (153+264j),\n", + " (152+251j),\n", + " (297+73j),\n", + " (363+53j),\n", + " (434+55j),\n", + " (482+20j)]])" + ] + } + ], + "prompt_number": 45 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%time benchmark(alltours_tsp, Maps(2, 10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "CPU times: user 109 \u00b5s, sys: 20 \u00b5s, total: 129 \u00b5s\n", + "Wall time: 120 \u00b5s\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 46, + "text": [ + "(2.5396495000000003,\n", + " [[(664+505j),\n", + " (617+543j),\n", + " (500+564j),\n", + " (57+539j),\n", + " (98+220j),\n", + " (797+56j),\n", + " (781+126j),\n", + " (583+264j),\n", + " (485+435j),\n", + " (587+492j)],\n", + " [(560+80j),\n", + " (743+218j),\n", + " (461+142j),\n", + " (420+268j),\n", + " (153+264j),\n", + " (152+251j),\n", + " (297+73j),\n", + " (363+53j),\n", + " (434+55j),\n", + " (482+20j)]])" + ] + } + ], + "prompt_number": 46 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Benchmarking (TSP Algorithms)\n", + "---\n", + "\n", + "Now let's add another function, `benchmarks`, which builds on `benchmark` in two ways:\n", + "\n", + "1. It compares multiple algorithms, rather than just running one algorithm. (Hence the plural `benchmarks`.)\n", + "2. It is specific to `TSP` algorithms, and rather than returning results, it prints summary statistics: the mean, standard deviation, min, and max of tour lengths, as well as the time taken and the number and size of the sets of cities." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def benchmarks(tsp_algorithms, maps=Maps(30, 60)):\n", + " \"Print benchmark statistics for each of the algorithms.\" \n", + " for tsp in tsp_algorithms:\n", + " time, results = benchmark(tsp, maps)\n", + " lengths = map(tour_length, results)\n", + " print(\"{:>25} |{:7.1f} \u00b1{:4.0f} ({:5.0f} to {:5.0f}) |{:7.3f} secs/map | {} \u2a09 {}-city maps\"\n", + " .format(tsp.__name__, mean(lengths), stddev(lengths), min(lengths), max(lengths),\n", + " time, len(maps), len(maps[0])))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 47 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are two functions to do simple statistics:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def mean(numbers): return sum(numbers) / len(numbers)\n", + "\n", + "def stddev(numbers):\n", + " \"The standard deviation of a collection of numbers.\"\n", + " return (mean([x ** 2 for x in numbers]) - mean(numbers) ** 2) ** 0.5" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 48 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How Many Starting Cities is best for `nn_tsp`?\n", + "---\n", + "\n", + "Now we are in a position to gain some insight into how many repetitions, or starting cities, we need to get a good result from `nn_tsp`." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def repeat_25_nn_tsp(cities): return repeated_nn_tsp(cities, 25)\n", + "def repeat_50_nn_tsp(cities): return repeated_nn_tsp(cities, 50)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 49 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "algorithms = [nn_tsp, repeat_10_nn_tsp, repeat_25_nn_tsp, repeat_50_nn_tsp, repeat_100_nn_tsp]\n", + "\n", + "benchmarks(algorithms)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 5689.8 \u00b1 487 ( 4536 to 6861) | 0.001 secs/map | 30 \u2a09 60-city maps\n", + " repeat_10_nn_tsp | 5238.1 \u00b1 396 ( 4150 to 5977) | 0.008 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_25_nn_tsp | 5137.2 \u00b1 375 ( 4071 to 6181) | 0.020 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_50_nn_tsp | 5123.1 \u00b1 358 ( 4071 to 5977) | 0.041 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_100_nn_tsp | 5116.0 \u00b1 352 ( 4071 to 5977) | 0.049 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 50 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that adding more starting cities results in shorter tours, but you start getting diminishing returns after 25 or 50 repetitions.\n", + "\n", + "Let's try again with bigger maps:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(algorithms, Maps(30, 120))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 7843.8 \u00b1 457 ( 6993 to 8983) | 0.004 secs/map | 30 \u2a09 120-city maps\n", + " repeat_10_nn_tsp | 7361.4 \u00b1 365 ( 6824 to 8157) | 0.031 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_25_nn_tsp | 7249.5 \u00b1 353 ( 6527 to 7984) | 0.077 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_50_nn_tsp | 7230.6 \u00b1 336 ( 6647 to 7969) | 0.154 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_100_nn_tsp | 7201.4 \u00b1 345 ( 6527 to 7957) | 0.307 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 51 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(algorithms, Maps(30, 150))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 8657.3 \u00b1 417 ( 7743 to 9323) | 0.005 secs/map | 30 \u2a09 150-city maps\n", + " repeat_10_nn_tsp | 8268.5 \u00b1 357 ( 7637 to 9260) | 0.048 secs/map | 30 \u2a09 150-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_25_nn_tsp | 8168.0 \u00b1 380 ( 7429 to 9369) | 0.119 secs/map | 30 \u2a09 150-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_50_nn_tsp | 8091.9 \u00b1 349 ( 7511 to 9250) | 0.242 secs/map | 30 \u2a09 150-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeat_100_nn_tsp | 8067.2 \u00b1 351 ( 7409 to 9238) | 0.481 secs/map | 30 \u2a09 150-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 52 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are similar. So depending on what your priorities are (run time versus tour length), somewhere around 25 or 50 repetitions might be a good tradeoff.\n", + "\n", + "Next let's try to analyze where nearest neighbors goes wrong, and see if we can do something about it." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "A Problem with Nearest Neighbors: Outliers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Consider the 20-city map that we build below:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "outliers_list = [City(2, 2), City(2, 3), City(2, 4), City(2, 5), City(2, 6), \n", + " City(3, 6), City(4, 6), City(5, 6), City(6, 6), \n", + " City(6, 5), City(6, 4), City(6, 3), City(6, 2), \n", + " City(5, 2), City(4, 2), City(3, 2), \n", + " City(1, 6.8), City(7.8, 6.4), City(7, 1.2), City(0.2, 2.8)]\n", + "\n", + "outliers = set(outliers_list)\n", + "\n", + "plot_lines(outliers, 'bo')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 53 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what a nearest neighbor search does on this map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, outliers)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "20 city tour with length 37.3 in 0.000 secs for nn_tsp\n" + ] + } + ], + "prompt_number": 54 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The tour starts out going around the inner square. But then we are left with four long lines to pick up the outliers. \n", + "Let's try to understand what went wrong. First we'll create a new tool to draw better diagrams:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_labeled_lines(points, *args):\n", + " \"\"\"Plot individual points, labeled with an index number.\n", + " Then, args describe lines to draw between those points.\n", + " An arg can be a matplotlib style, like 'ro--', which sets the style until changed,\n", + " or it can be a list of indexes of points, like [0, 1, 2], saying what line to draw.\"\"\"\n", + " # Draw points and label them with their index number\n", + " plot_lines(points, 'bo')\n", + " for (label, p) in enumerate(points):\n", + " plt.text(X(p), Y(p), ' '+str(label))\n", + " # Draw lines indicated by args\n", + " style = 'bo-'\n", + " for arg in args:\n", + " if isinstance(arg, str):\n", + " style = arg\n", + " else: # arg is a list of indexes into points, forming a line\n", + " Xs = [X(points[i]) for i in arg]\n", + " Ys = [Y(points[i]) for i in arg]\n", + " plt.plot(Xs, Ys, style)\n", + " plt.axis('scaled'); plt.axis('off'); plt.show() " + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 55 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the diagram below, imagine we are running a nearest neighbor algorithm, and it has created a partial tour from city 0 to city 4. Now there is a choice. City 5 is the nearest neighbor. But if we don't take city 16 at this point, we will have to pay a higher price sometime later to pick up city 16. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(outliers_list, 'bo-', [0, 1, 2, 3, 4], 'ro--', [4, 16], 'bo--', [4, 5])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\noblZQVSUGyZTzk0XF//qV7/C/PnzMWjQIFy5cgU/+clPUFdXp2omADh//jwGDBiAM2fO4J577vFb\nHtlcjY2N+PGPf4yzZ88CAI4fP46pU6di3759fs8WtgT5j9stChKSRHc8KwDR/hWDCcKQ/qzPw7p2\n7erXWCUlK4WiTPfIpCjTRUnJSo/9zpw5I4QQ4urVq2LSpElizZo1fstUUVEjdLp5Hpl0unmioqLG\nY7+lS5eKRYsWCSGEeOutt8TkyZNVzySEEH/4wx/ElClT/JblTnKNHDlS7N27V7S2torS0lJRXFwc\nkHzhimXpZ7F43ONJff0rFo/7PKZbt25+zRQX96zXTHFx4z32+9nPfiaGDBkiRowYIYqKioTL5fJb\nppycIq+ZDAbP/8EbGxvFuHHjxMCBA8Vzzz0namtrVc8khBCZmZmisrLSb1nuJNeuXbvE008/LZKT\nk8WLL74o6urqApIvXPHSIT/TIMbr+CVkt3+4ZElJ260zr7t8+TKAtrH5828+9r/3v052f7fb+62o\n3G6tx3Z1dbXX/fxB9lZbMTExePfddwMRSToTAOzYscPfcdrJ5nriiSewefPmQETqFFiWfiZwxet4\nLKpwUZhveazZ7L0U73Z/RWnyMe6S/2MdLCrK+0KYVtsS4CTfC8ZMQPDmCndcDfezkekPIAaeK6Qx\nmICR6Q+olAgwGjOgKDM8xhRlOozGjr9Ti6xA3mpLVjBmAoI3V7jjangA/DxjPPY6/g9ANwDf3bQa\nroa21XAH3G4tFMUFozH9lqvhgRCoW22FeqZgzhXOWJYBpNG0vRRPRKGHp+FERBJYlkREEliWREQS\nWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliW\nREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkFi\n2rRp0Ov1SElJwYwZM3Dt2jW1I1GI27dvH0aPHo2BAwfCaDSitbVV7UghjWUZJJYvX44jR47g8OHD\nuHbtGv72t7+pHYlC3KxZs1BcXIzPPvsMra2tsNvtakcKaSzLINGtWzcAgMvlgsvlglarVTkRhbIr\nV67g1KlTGDZsGCIiIpCXl4d//OMfascKaSzLIDJ16lTcd999+M9//oNJkyapHYdCWExMDBITE/HB\n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\n8kusXLkSY8aMUTuOh+3bt2PNmjUoLS1VO0pIUNQO0BmYzeWw2WoADER8/OcwGjNgNr/U/vPo6Gjc\nd999uHDhAnr06IHjx49jxIgRfs1ktztgsWxDc7OCqCg3TKYc6c9179atW/v306ZNQ1FREZqbmxEV\nFaVapkOHDmHChAkAgPPnz+PDDz9Ely5d8PTTT6uW6Ubjx4+HyWRCU1MToqOj7ypTR+Q6evQoZsyY\nga1bt7af0dAPUPcl0/BXUrJSKMp00faJ4W1fijJdlJSs9NivoKBALFy4MCALPBUVNUKnm+eRSaeb\nJyoqarzu369fP3H+/Pn27a+//lq0trYKIYTYvHmzyMrKUj3TjaZMmSI2btyoeqaTJ0+2P052u108\n9dRTd52pI3KdOnVKJCYmir1793ZIns6CZelncXHPejypr3/FxY332K+urk6kp6eLhIQE8cILLwi3\n2+23TDk5RV4zGQzFHvutWLFCPPDAA6JLly6iT58+4sUXXxRCCGG1WsXgwYNFcnKy+PWvfy0++eQT\n1TPdqKPK8m4zLVq0SAwePFjo9XoxdepUcezYsbvO1BG5pk2bJnr27Cn0er3Q6/Vi2LBhHZIr3LEs\n/Sw29nmvT+zY2OdVy5SRUeI1U0ZGCTMFeaZgzhXuuMDjZ4rS5GPcFeAk34uKcnsd12rVuxCemeQF\na65wx7L0M6MxA4oyw2NMUabDaLz9RYKOYjLlQKcr8hjT6eahsDBbpUTMdDuCNVe40wgRJNdYhLG2\n1XAH3G4tFMUFozHdYzVcDXa7A1ZrFVyuSGi1LSgszL6jVV5mYq7OgmVJRCSBp+FERBJYlkREEliW\nREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkREEliWREQSWJZERBJYlkRE\nEliWREQSWJZERBJYlkREEliWRBQwNpsNiYmJiIiIQENDQ/t4U1MTnn/+eaSkpCAjIwObN29WMaV3\nLEsiCpi0tDRUV1ejb9++HuNvvvkmYmJicPjwYaxevRovv/wygu0TbxS1AxBR56HX672Ox8bG4rvv\nvsO1a9fQ0NCAe++9FxqNJsDpbo1lSUSqmzhxIrZs2YL4+Hi43W7s2bNH7Ug3YVkSUYew2x2wWLah\nuVlBVJQbJlOO9Mfz2mw2KIqCs2fP4tixY8jNzcWpU6cQERE8rxSyLInortntDsycWQmns7R9zOks\nAgCpwnQ4HJg2bRruvfdejBgxAn369EFtbS0GDBjgt8y3K3hqm4hClsWyzaMoAcDpLIXVWuXzmBsX\ncJ588kls2bIFra2t+Pe//42GhoagKkqAZUlEHaC52ftJqssV6bFtsViQkJCAuro6JCUlIT8/HwAw\nYcIEREZGYujQoSgoKMCKFSv8nvl2aUSwrc8TUcgxGIqxbdsCL+OvYuvW36uQqONxZklEd81kyoFO\nV+QxptPNQ2FhtkqJOh5nlkTUIex2B6zWKrhckdBqW1BYmC29Gh4KWJZERBJ4Gk5EJIFlSUQkgWVJ\nRCSBZUlEJIFlSUQkgWVJRCSBZUlEJIFlSUQkgWVJRCSBZUlEJIFlSUQkgWVJRCSBZUlEJIFlSUQk\ngWVJRCSBZUlEJIFlSUQkgWVJRCSBZUlEJIFlSUQkgWVJRCSBZUlEJIFlSUQkgWVJRCTh/wG7/UHL\nAwzkfQAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 56 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems that picking up an outlier is *sometimes* a good idea, but sometimes going directly to the nearest neighbor is a better idea. So what can we do? It is difficult to make the choice between an outlier and a nearest neighbor while we are constructing a tour, because we don't have the context of the whole tour yet. So here's an alternative idea: don't try to make the right choice while constructing the tour; just go ahead and make any choice, then when the tour is complete, *alter* it to correct problems caused by outliers (or other causes)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "New Vocabulary: Segment\n", + "---\n", + "\n", + "We'll define a *segment* as a subsequence of a tour: a sequence of consecutive cities within a tour. A tour forms a loop, but a segment does not have a loop; it is open-ended on both ends. So, if `[A, B, C, D]` is a 4-city tour, then segments include `[A, B]`, `[B, C, D]`, and many others. Note that the segment `[A, B, C, D]` is different than the tour `[A, B, C, D]`; the tour returns from `D` to `A` but the segment does not. \n", + "\n", + ">>> Altering Tours by Reversing Segments\n", + "===\n", + "\n", + "One way we could try to improve a tour is by *reversing* a segment. Consider this tour:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "cross = [City(9, 3), City(3, 10), City(2, 16), City(3, 21), City(9, 28), \n", + " City(26, 3), City(32, 10), City(33, 16), City(32, 21), City(26, 28)]\n", + "\n", + "plot_labeled_lines(cross, range(-1,10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 57 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is clearly not an optimal tour. We should \"uncross\" the lines, which can be achieved by reversing a segment. The tour as it stands is `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]`. If we reverse the segment `[5, 6, 7, 8, 9]`, we get the tour `[0, 1, 2, 3, 4, 9, 8, 7, 6, 5]`, which is the optimal tour. In the diagram below, reversing `[5, 6, 7, 8, 9]` is equivalent to deleting the red dashed lines and adding the green dotted lines. If the sum of the lengths of the green dotted lines is less than the sum of the lengths of the red dashed lines, then we know the reversal is an improvement." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(cross, 'bo-', range(5), range(5, 10), \n", + " 'g:', (4, 9), (0, 5), \n", + " 'r--', (4, 5), (0, 9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 58 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that reversing `[5, 6, 7, 8, 9]` works:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "tour = Tour(cross)\n", + "tour[5:10] = reversed(tour[5:10])\n", + "plot_tour(tour)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nG2vX7rJwAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 59 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is how we can check if reversing a segment is an improvement, and if so to do it:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def reverse_segment_if_better(tour, i, j):\n", + " \"If reversing tour[i:j] would make the tour shorter, then do it.\" \n", + " # Given tour [...A-B...C-D...], consider reversing B...C to get [...A-C...B-D...]\n", + " A, B, C, D = tour[i-1], tour[i], tour[j-1], tour[j % len(tour)]\n", + " # Are old edges (AB + CD) longer than new ones (AC + BD)? If so, reverse segment.\n", + " if distance(A, B) + distance(C, D) > distance(A, C) + distance(B, D):\n", + " tour[i:j] = reversed(tour[i:j])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 60 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's write a function, `alter_tour`, which finds segments to swap. What segments should we consider? I don't know how to be clever about the choice, but I do know how to be fairly thorough: try all segments of all lengths at all starting positions. I have an intuition that trying longer ones first is better (although I'm not sure). \n", + "\n", + "I worry that even trying all segements won't be enough: after I reverse one segment, it might open up opportunities to reverse other segments. So, after trying all possible segments, I'll check the tour length. If it has been reduced, I'll go through the `alter_tour` process again." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def alter_tour(tour):\n", + " \"Try to alter tour for the better by reversing segments.\"\n", + " original_length = tour_length(tour)\n", + " for (start, end) in all_segments(len(tour)):\n", + " reverse_segment_if_better(tour, start, end)\n", + " # If we made an improvement, then try again; else stop and return tour.\n", + " if tour_length(tour) < original_length:\n", + " return alter_tour(tour)\n", + " return tour\n", + "\n", + "def all_segments(N):\n", + " \"Return (start, end) pairs of indexes that form segments of tour of length N.\"\n", + " return [(start, start + length)\n", + " for length in range(N, 2-1, -1)\n", + " for start in range(N - length + 1)]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 61 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is what the list of all segments look like, for N=4:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "all_segments(4)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 62, + "text": [ + "[(0, 4), (0, 3), (1, 4), (0, 2), (1, 3), (2, 4)]" + ] + } + ], + "prompt_number": 62 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that altering the cross tour does straighten it out:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tour(alter_tour(Tour(cross)))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nG2vX7rJwAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 63 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Altered Nearest Neighbor Algorithm (`altered_nn_tsp`)\n", + "----\n", + "\n", + "Let's see what happens when we alter the output of `nn_tsp`:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def altered_nn_tsp(cities):\n", + " \"Run nearest neighbor TSP algorithm, and alter the results by reversing segments.\"\n", + " return alter_tour(nn_tsp(cities))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 64 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try this new algorithm on some test cases:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_nn_tsp, set(cross))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nG2vX7rJwAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 city tour with length 93.2 in 0.000 secs for altered_nn_tsp\n" + ] + } + ], + "prompt_number": 65 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_nn_tsp, Cities(9))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "9 city tour with length 2217.5 in 0.000 secs for altered_nn_tsp\n" + ] + } + ], + "prompt_number": 66 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It gets the optimal results. Let's try benchmarking:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "algorithms = [nn_tsp, repeat_50_nn_tsp, altered_nn_tsp]\n", + "\n", + "benchmarks(algorithms)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 5689.8 \u00b1 487 ( 4536 to 6861) | 0.001 secs/map | 30 \u2a09 60-city maps\n", + " repeat_50_nn_tsp | 5123.1 \u00b1 358 ( 4071 to 5977) | 0.041 secs/map | 30 \u2a09 60-city maps\n", + " altered_nn_tsp | 4812.1 \u00b1 263 ( 4091 to 5320) | 0.012 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 67 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is quite encouraging; `altered_nn_tsp` gives shorter tours and is three times faster than repeating nearest neighbors from 50 starting cities. Could we do better?\n", + "\n", + "Altered Repeated Nearest Neighbor Algorithm (`altered_repeated_nn_tsp`)\n", + "---\n", + "\n", + "We have seen that the *nearest neighbor* algorithm is improved by both the *alteration* and *repetition* strategies. So why not apply both strategies? " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def repeated_altered_nn_tsp(cities, repetitions=20): \n", + " \"Use alteration to improve each repetition of nearest neighbors.\"\n", + " return shortest_tour(alter_tour(nn_tsp(cities, start)) \n", + " for start in sample(cities, repetitions))\n", + "\n", + "def repeat_5_altered_nn_tsp(cities): return repeated_altered_nn_tsp(cities, 5)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 68 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see it in action:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(repeated_altered_nn_tsp, Cities(100))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nCPyE/wNh2qDS+Y1LDgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 city tour with length 5851.6 in 0.831 secs for repeated_altered_nn_tsp\n" + ] + } + ], + "prompt_number": 69 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks like a good tour. Let's gather more data:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "algorithms = [nn_tsp, repeat_50_nn_tsp, altered_nn_tsp, repeated_altered_nn_tsp]\n", + "\n", + "benchmarks(algorithms)\n", + "print('-' * 100)\n", + "benchmarks(algorithms, Maps(30, 120))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 5689.8 \u00b1 487 ( 4536 to 6861) | 0.001 secs/map | 30 \u2a09 60-city maps\n", + " repeat_50_nn_tsp | 5123.1 \u00b1 358 ( 4071 to 5977) | 0.041 secs/map | 30 \u2a09 60-city maps\n", + " altered_nn_tsp | 4812.1 \u00b1 263 ( 4091 to 5320) | 0.012 secs/map | 30 \u2a09 60-city maps\n", + " repeated_altered_nn_tsp | 4628.8 \u00b1 233 ( 3925 to 5120) | 0.238 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "----------------------------------------------------------------------------------------------------\n", + " nn_tsp | 7843.8 \u00b1 457 ( 6993 to 8983) | 0.004 secs/map | 30 \u2a09 120-city maps\n", + " repeat_50_nn_tsp | 7230.6 \u00b1 336 ( 6647 to 7969) | 0.154 secs/map | 30 \u2a09 120-city maps\n", + " altered_nn_tsp | 6622.8 \u00b1 261 ( 6064 to 7155) | 0.054 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp | 6441.1 \u00b1 215 ( 6000 to 6946) | 1.124 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 70 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, repetition gives us a modest improvement in tour length over the `altered_nn_tsp`, at the cost of 20 times more run time. It looks like the alteration strategy is more powerful than the repetition strategy in this case." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Non-Random Maps\n", + "====" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I thought it would be fun to work on some *real* maps, instead of random maps. First I found [a page](http://www.realestate3d.com/gps/latlong.htm) that lists geographical coordinates of US cities. Here is an excerpt from that page:\n", + "\n", + "
\n",
+      "[TCL]  33.23   87.62  Tuscaloosa,AL\n",
+      "[FLG]  35.13  111.67  Flagstaff,AZ\n",
+      "[PHX]  33.43  112.02  Phoenix,AZ\n",
+      "
\n", + "\n", + "I also found a [blog post](http://www.randalolson.com/2015/03/08/computing-the-optimal-road-trip-across-the-u-s/) by Randal S. Olson who chose 50 landmarks across the states and found a tour based on actual road-travel distances, not straight-line distance. His data looks like this:\n", + "\n", + "
\n",
+      "Mount Rushmore National Memorial, South Dakota 244, Keystone, SD\t43.879102\t-103.459067\n",
+      "Toltec Mounds, Scott, AR\t34.647037\t-92.065143\n",
+      "Ashfall Fossil Bed, Royal, NE\t42.425000\t-98.158611\n",
+      "
\n", + "You can't see, but fields are separated by tabs in this data.\n", + "\n", + "Now we have a problem: we have two similar but different data formats, and we want to convert both of them to `Maps` (sets of cities). Python provides a module, [`csv`](https://docs.python.org/3/library/csv.html) (for \"comma-separated values\"), to parse data like this. The function `csv.reader` takes an input that should be an iterable over lines of text, and optionally you can tell it what character to use as a delimiter (as well as several other options). For each line, it generates a\n", + "list of fields. For example, for the line `\"[TCL] 33.23 87.62 Tuscaloosa,AL\"` it would generate the list `['[TCL]', '33.23', '87.62', 'Tuscaloosa,AL']`.\n", + "\n", + "I define the function `Coordinate_map` to take an iterable of lines (usually a file object or a list of strings), parse it with `csv_reader`, pick out the latitude and longitude columns, and build a `City` out of each one:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def lines(text): return text.strip().splitlines()\n", + "\n", + "def Coordinate_map(lines, delimiter=' ', lat_col=1, long_col=2, lat_scale=69, long_scale=-48):\n", + " \"\"\"Make a set of Cities from an iterable of lines of text.\n", + " Specify the column delimiter, and the zero-based column number of lat and long.\n", + " Treat long/lat as a square x/y grid, scaled by long_scale and lat_scale.\n", + " Source can be a file object, or list of lines.\"\"\"\n", + " return frozenset(City(long_scale * float(row[long_col]), \n", + " lat_scale * float(row[lat_col]))\n", + " for row in csv.reader(lines, delimiter=delimiter, skipinitialspace=True))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 71 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You might be wondering about the `lat_scale=69, long_scale=-48` part. The issue is that we have latitude and longitude for cities, and we want to compute the distance between cities. To do that accurately requires [complicated trigonometry](http://en.wikipedia.org/wiki/Haversine_formula). But we can get an approximation by assuming the earth is flat, and that latitude and longitude are on a rectangular grid. (This is a bad approximation if you're talking about distances of 10,000 miles, but close enough for 100 miles, as long as you're not too close to the poles.) I took the latitude of the center of the country (Wichita, KS: latitude 37.65) and plugged it into a [Length Of A Degree Of Latitude\n", + "And Longitude Calculator](http://www.csgnetwork.com/degreelenllavcalc.html) to find that, in Wichita, one degree of latitude is 69 miles, and one degree of longitude is 48 miles. (It is -48 rather than +48 because the US is west of the prime meridian.) \n", + "\n", + "Now let's create the map of USA cities, and find a tour for it:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "USA_map = Coordinate_map(lines(\"\"\"\n", + "[TCL] 33.23 87.62 Tuscaloosa,AL\n", + "[FLG] 35.13 111.67 Flagstaff,AZ\n", + "[PHX] 33.43 112.02 Phoenix,AZ\n", + "[PGA] 36.93 111.45 Page,AZ\n", + "[TUS] 32.12 110.93 Tucson,AZ\n", + "[LIT] 35.22 92.38 Little Rock,AR\n", + "[SFO] 37.62 122.38 San Francisco,CA\n", + "[LAX] 33.93 118.40 Los Angeles,CA\n", + "[SAC] 38.52 121.50 Sacramento,CA\n", + "[SAN] 32.73 117.17 San Diego,CA\n", + "[SBP] 35.23 120.65 San Luis Obi,CA\n", + "[EKA] 41.33 124.28 Eureka,CA\n", + "[DEN] 39.75 104.87 Denver,CO\n", + "[DCA] 38.85 77.04 Washington/Natl,DC\n", + "[MIA] 25.82 80.28 Miami Intl,FL\n", + "[TPA] 27.97 82.53 Tampa Intl,FL\n", + "[JAX] 30.50 81.70 Jacksonville,FL\n", + "[TLH] 30.38 84.37 Tallahassee,FL\n", + "[ATL] 33.65 84.42 Atlanta,GA\n", + "[BOI] 43.57 116.22 Boise,ID\n", + "[CHI] 41.90 87.65 Chicago,IL\n", + "[IND] 39.73 86.27 Indianapolis,IN\n", + "[DSM] 41.53 93.65 Des Moines,IA\n", + "[SUX] 42.40 96.38 Sioux City,IA\n", + "[ICT] 37.65 97.43 Wichita,KS\n", + "[LEX] 38.05 85.00 Lexington,KY\n", + "[NEW] 30.03 90.03 New Orleans,LA\n", + "[BOS] 42.37 71.03 Boston,MA\n", + "[PWM] 43.65 70.32 Portland,ME\n", + "[BGR] 44.80 68.82 Bangor,ME\n", + "[CAR] 46.87 68.02 Caribou Mun,ME\n", + "[DET] 42.42 83.02 Detroit,MI\n", + "[STC] 45.55 94.07 St Cloud,MN\n", + "[DLH] 46.83 92.18 Duluth,MN\n", + "[STL] 38.75 90.37 St Louis,MO\n", + "[JAN] 32.32 90.08 Jackson,MS\n", + "[BIL] 45.80 108.53 Billings,MT\n", + "[BTM] 45.95 112.50 Butte,MT\n", + "[RDU] 35.87 78.78 Raleigh-Durh,NC\n", + "[INT] 36.13 80.23 Winston-Salem,NC\n", + "[OMA] 41.30 95.90 Omaha/Eppley,NE\n", + "[LAS] 36.08 115.17 Las Vegas,NV\n", + "[RNO] 39.50 119.78 Reno,NV\n", + "[AWH] 41.33 116.25 Wildhorse,NV\n", + "[EWR] 40.70 74.17 Newark Intl,NJ\n", + "[SAF] 35.62 106.08 Santa Fe,NM\n", + "[NYC] 40.77 73.98 New York,NY\n", + "[BUF] 42.93 78.73 Buffalo,NY\n", + "[ALB] 42.75 73.80 Albany,NY\n", + "[FAR] 46.90 96.80 Fargo,ND\n", + "[BIS] 46.77 100.75 Bismarck,ND\n", + "[CVG] 39.05 84.67 Cincinnati,OH\n", + "[CLE] 41.42 81.87 Cleveland,OH\n", + "[OKC] 35.40 97.60 Oklahoma Cty,OK\n", + "[PDX] 45.60 122.60 Portland,OR\n", + "[MFR] 42.37 122.87 Medford,OR\n", + "[AGC] 40.35 79.93 Pittsburgh,PA\n", + "[PVD] 41.73 71.43 Providence,RI\n", + "[CHS] 32.90 80.03 Charleston,SC\n", + "[RAP] 44.05 103.07 Rapid City,SD\n", + "[FSD] 43.58 96.73 Sioux Falls,SD\n", + "[MEM] 35.05 90.00 Memphis Intl,TN\n", + "[TYS] 35.82 83.98 Knoxville,TN\n", + "[CRP] 27.77 97.50 Corpus Chrst,TX\n", + "[DRT] 29.37 100.92 Del Rio,TX\n", + "[IAH] 29.97 95.35 Houston,TX\n", + "[SAT] 29.53 98.47 San Antonio,TX\n", + "[LGU] 41.78 111.85 Logan,UT\n", + "[SLC] 40.78 111.97 Salt Lake Ct,UT\n", + "[SGU] 37.08 113.60 Saint George,UT\n", + "[CNY] 38.77 109.75 Moab,UT\n", + "[MPV] 44.20 72.57 Montpelier,VT\n", + "[RIC] 37.50 77.33 Richmond,VA\n", + "[BLI] 48.80 122.53 Bellingham,WA\n", + "[SEA] 47.45 122.30 Seattle,WA\n", + "[ALW] 46.10 118.28 Walla Walla,WA\n", + "[GRB] 44.48 88.13 Green Bay,WI\n", + "[MKE] 42.95 87.90 Milwaukee,WI\n", + "[CYS] 41.15 104.82 Cheyenne,WY\n", + "[SHR] 44.77 106.97 Sheridan,WY\n", + "\"\"\"))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 72 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_lines(USA_map, 'bo')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nrkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 73 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(repeated_altered_nn_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nwRhjTNL/A1u3SrQKh+aPAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 13633.0 in 0.471 secs for repeated_altered_nn_tsp\n" + ] + } + ], + "prompt_number": 74 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not bad! There are no obvious errors in the tour (although I'm not at all confident it is the optimal tour). \n", + "\n", + "Now let's do the same for Randal Olson's landmarks. Note that the data is delimited by tabs, not spaces, and the longitude already has a minus sign, so we don't need another one in `long_scale`." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "USA_landmarks_map = Coordinate_map(lines(\"\"\"\n", + "Mount Rushmore National Memorial, South Dakota 244, Keystone, SD\t43.879102\t-103.459067\n", + "Toltec Mounds, Scott, AR\t34.647037\t-92.065143\n", + "Ashfall Fossil Bed, Royal, NE\t42.425000\t-98.158611\n", + "Maryland State House, 100 State Cir, Annapolis, MD 21401\t38.978828\t-76.490974\n", + "The Mark Twain House & Museum, Farmington Avenue, Hartford, CT\t41.766759\t-72.701173\n", + "Columbia River Gorge National Scenic Area, Oregon\t45.711564\t-121.519633\n", + "Mammoth Cave National Park, Mammoth Cave Pkwy, Mammoth Cave, KY\t37.186998\t-86.100528\n", + "Bryce Canyon National Park, Hwy 63, Bryce, UT\t37.593038\t-112.187089\n", + "USS Alabama, Battleship Parkway, Mobile, AL\t30.681803\t-88.014426\n", + "Graceland, Elvis Presley Boulevard, Memphis, TN\t35.047691\t-90.026049\n", + "Wright Brothers National Memorial Visitor Center, Manteo, NC\t35.908226\t-75.675730\n", + "Vicksburg National Military Park, Clay Street, Vicksburg, MS\t32.346550\t-90.849850\n", + "Statue of Liberty, Liberty Island, NYC, NY\t40.689249\t-74.044500\n", + "Mount Vernon, Fairfax County, Virginia\t38.729314\t-77.107386\n", + "Fort Union Trading Post National Historic Site, Williston, North Dakota 1804, ND\t48.000160\t-104.041483\n", + "San Andreas Fault, San Benito County, CA\t36.576088\t-120.987632\n", + "Chickasaw National Recreation Area, 1008 W 2nd St, Sulphur, OK 73086\t34.457043\t-97.012213\n", + "Hanford Site, Benton County, WA\t46.550684\t-119.488974\n", + "Spring Grove Cemetery, Spring Grove Avenue, Cincinnati, OH\t39.174331\t-84.524997\n", + "Craters of the Moon National Monument & Preserve, Arco, ID\t43.416650\t-113.516650\n", + "The Alamo, Alamo Plaza, San Antonio, TX\t29.425967\t-98.486142\n", + "New Castle Historic District, Delaware\t38.910832\t-75.527670\n", + "Gateway Arch, Washington Avenue, St Louis, MO\t38.624647\t-90.184992\n", + "West Baden Springs Hotel, West Baden Avenue, West Baden Springs, IN\t38.566697\t-86.617524\n", + "Carlsbad Caverns National Park, Carlsbad, NM\t32.123169\t-104.587450\n", + "Pikes Peak, Colorado\t38.840871\t-105.042260\n", + "Okefenokee Swamp Park, Okefenokee Swamp Park Road, Waycross, GA\t31.056794\t-82.272327\n", + "Cape Canaveral, FL\t28.388333\t-80.603611\n", + "Glacier National Park, West Glacier, MT\t48.759613\t-113.787023\n", + "Congress Hall, Congress Place, Cape May, NJ 08204\t38.931843\t-74.924184\n", + "Olympia Entertainment, Woodward Avenue, Detroit, MI\t42.387579\t-83.084943\n", + "Fort Snelling, Tower Avenue, Saint Paul, MN\t44.892850\t-93.180627\n", + "Hoover Dam, Boulder City, CO\t36.012638\t-114.742225\n", + "White House, Pennsylvania Avenue Northwest, Washington, DC\t38.897676\t-77.036530\n", + "USS Constitution, Boston, MA\t42.372470\t-71.056575\n", + "Omni Mount Washington Resort, Mount Washington Hotel Road, Bretton Woods, NH\t44.258120\t-71.441189\n", + "Grand Canyon National Park, Arizona\t36.106965\t-112.112997\n", + "The Breakers, Ochre Point Avenue, Newport, RI\t41.469858\t-71.298265\n", + "Fort Sumter National Monument, Sullivan's Island, SC\t32.752348\t-79.874692\n", + "Cable Car Museum, 94108, 1201 Mason St, San Francisco, CA 94108\t37.794781\t-122.411715\n", + "Yellowstone National Park, WY 82190\t44.462085\t-110.642441\n", + "French Quarter, New Orleans, LA\t29.958443\t-90.064411\n", + "C. W. Parker Carousel Museum, South Esplanade Street, Leavenworth, KS\t39.317245\t-94.909536\n", + "Shelburne Farms, Harbor Road, Shelburne, VT\t44.408948\t-73.247227\n", + "Taliesin, County Road C, Spring Green, Wisconsin\t43.141031\t-90.070467\n", + "Acadia National Park, Maine\t44.338556\t-68.273335\n", + "Liberty Bell, 6th Street, Philadelphia, PA\t39.949610\t-75.150282\n", + "Terrace Hill, Grand Avenue, Des Moines, IA\t41.583218\t-93.648542\n", + "Lincoln Home National Historic Site Visitor Center, 426 South 7th Street, Springfield, IL\t39.797501\t-89.646211\n", + "Lost World Caverns, Lewisburg, WV\t37.801788\t-80.445630\n", + "\"\"\"), delimiter='\\t', long_scale=48)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 75 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_lines(USA_landmarks_map, 'bo')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 76 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(repeated_altered_nn_tsp, USA_landmarks_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "50 city tour with length 10235.3 in 0.205 secs for repeated_altered_nn_tsp\n" + ] + } + ], + "prompt_number": 77 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compare that to the tour that Randal Olson computed as the shortest based on road distances:\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The two tours are similar but not the same. I think the difference is that roads through the rockies and along the coast of the Carolinas tend to be very windy, so Randal's tour avoids them, whereas my straight-line tour does not. William Cook provides an\n", + "analysis, and a [tour that is shorter](http://www.math.uwaterloo.ca/tsp/usa50/index.html) than either Randal's or mine.\n", + "\n", + "Now let's go back to the [original web page](http://www.realestate3d.com/gps/latlong.htm) to get a bigger map with over 1000 cities. I note that the page has some lines that I don't want, so I will filter out lines that are not in the continental US (that is, cities in Alaska or Hawaii), as well as header lines that do not start with `'['`." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "url = 'http://www.realestate3d.com/gps/latlong.htm'\n", + "\n", + "def continental_USA(line): \n", + " \"Does line denote a city in the continental United States?\"\n", + " return line.startswith('[') and ',AK' not in line and ',HI' not in line\n", + "\n", + "USA_big_map = Coordinate_map(filter(continental_USA, urllib.urlopen(url)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 78 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_lines(USA_big_map, 'bo')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAADqCAYAAABXyrn9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvX9UVFeaLvwABVaFH1IhmkKMJtAziZGOC2Z0kdv3w7R3\nIumQpPMbTFQSIaL4g47rS2YiEhgZ18xK35VvRDHp6WSm9dq5yczc7v66ZT6Dc51AZq62rgmrbQyd\nTqPGoFQwJQholWXB/v7Ydeqcvc/e50dRSGnqWSvLUHXqnL33OWfv/b7v8z5vEiGEIIEEEkgggQQE\nSJ7uBiSQQAIJJBC/SCwSCSSQQAIJSJFYJBJIIIEEEpAisUgkkEACCSQgRWKRSCCBBBJIQIrEIpFA\nAgkkkIAUiUUigQQSSCABKRKLRAIJJJBAAlIkFokEEkgggQSkSCwSCSSQQAIJSJFYJBJIIIEEEpDC\nMd0NiDe0t3ehtbUDV686MGNGCJs3L0d5eel0NyuBKULifieQgDFu2EViKl7u9vYu1Nd/iL6+HZHP\n+voaACAxcdyESNzvBBIwR9KNqAIrerkLChqwc2fZpF7usrJt6Oj4K8HnjTh4sCXq89pFYnd7fWD3\nfifuSwLfRNyQlkRra4dmgegC0IG+vlRUVbVh797od4FXr4qHIxBIia6hUWAyu9vEJGYPdu53wupI\n4JuKG3KRoC93F4B9AFIBvAUA8PmA+nrrLy4/qY6MeIXHOZ3jMWm3lUmcXQAp+vp2YNeuRsM+3aiT\n2HQubDNmhISfi+53tPclgQRudMT9IiGaREZG+gHsBTAG4APmeKsvrmhS9Xi2wOOphtf7buSzgoKt\n2LTpoZj0w8okHq01E6tJbLKTtp3ft7d3oaZmL7ze3MhnJ07sxTvvXJ+FbfPm5ejra+DcluL7HQ9W\nZgIJTAfiepEQTawff7wOaWmnAZSAWhF6WHlxRZOq1/smios3YNGiRgQCKXA6x7Fp00MxmbCsTuJ2\ndrdaxGISky1kx4/34MiR86YTv11rprFxH7xeDwA1LuD1NqCxcZ/hmDc378Hu3Z0IhVxwOPzYuHEp\nmpvrLPdRu4itXJmHo0fN73e09yWBBG54kDjDgQOdZPnyBrJ0aRPJyXmWAETw38PhfxuE35eVbTO9\nztKlTcLfLl3aNCX9snq9Awc6SUHBVuaYgoLXyIEDnYbnX748+rEwPkcncblqufZsFbbHbhvc7grh\n8W53pbSNTU1txOFg2+Nw1JKmprbIMQcOdJKiomridleQ7OzVpKhoPTlwoFMytuK+8Ij2viSQwI2O\nuLIk9DvRZsmRGeF/lwNoAKDuXB2OWpSULDK91vXeGVq9nrKL3bXLnjVjx3Uig9ga6YDf/zbzicyN\nZdeaIWSGpCVp0jZSC4J1MYZCb2P37ko0N9dpXFgeAO8AALq7gZqaLcjNHUFf3zuW+sLDyn1JEAcS\nuBkRV4uE3iUjnliBa+F/lRewEUAKgN8iFKrH0aOHTK9ld1LVTgAjI4MAgsjKmmt5MrBzvfLyUtuT\nS7SLixbihcx84lfG5sSJPwiP5RdC5fhr164B2Aa62KvtvOuuDMgQCrkknzsB0GeIxjhYaqvX+yau\nXl1h2hcjGN2XG5U4kEACZoirRUK/E9VbCsBWAH+GtLSXEAz+GHRyKQXwEgA3AGsvvZ1J9bnn/hwf\nfPB7TEwsAl24KgF8CGAZgFLdZGC0o5zMJG6lT5M5n2ghc7l64ffrj1UmfnZy7AJ/v/iFUDSZ0t8A\nQCk8npexfXuFtI0Oh6AxAByOAAC5NQMAhIgtlFhYj7KY0+uvb0hYFwnc0IirRUK/k6UvU3Lyo5iY\n+BMA4wAegsfzE9xyy2WcOVOOiQmAup9yw//+GCMjYjeGaPI2S5Jrbt6D//k/vwbwc82nDQDKABwC\nXSR2oLGxBq2tHTh/fgx9fQPw+zdE2q9dRKKdINrbu9DYuA9nzoyBkBm46650tLRUxnyRAdiFrKRk\nKfbvl1tA7OSoWnZu91ksWTJPtxCKJlNgB9zuFViy5BA2bXrCsE8bNy7Fjh3rEAqpLjCHoxYbN9Lf\nyNx6AJCfn4FLl8R9mayrSLY4ffrpKAKBtsjfdq2LhAsrgelGXC0SYpfMQaxc+T0cPTqAQCAFIyP7\nMDCQjVOnXgB1KSwGa2k04PTpT1BWto15sQDodrAnTmxBbu4+Q7fR7t2d4Gm29HqKiwsAutDbm4ru\nbq2LQ90dT5ZPb+RnjxVdlJ2MCF55ZVnkvIsXd0ktIP3kSC27++5rxsGDzbrryCbT++67W3g8D8pi\n2oPduysRCjnhcASwcWNphN20efNynDixF14va9FoLRS+L4D+2TCazEUTt2xxCgTmM3/beRYSLqwE\n4gLTHTnnceBAJykr20aWLm0iZWXbGPbIgQOdYcbTWgLUEkDMjgEe1TFYioqqJcdui/y/y8WyZAgh\nZObMKsnvmjS/FbN6tOeeDGuKsoYmz16SwS7rR89A67TcrliwsKz0h7KbKonbvZoUF9cZspCstEnp\n88KFa4Vsr6amNt0YOp21wrExexaUa8nYX7EcqwQSMEPcLRIysBNZQ/jle1oyOa8W0irlk736t8v1\nLDOhyGm4j0cmAKdzlem5J/NiU/qsdcqudhJfvrwhpvRZ0YJCKanqZGhEDY1HKqkZPVn/7InHit/g\nyDYmRs8Cey3r9zyBBKYKceVu4qE163t6euHzbQANjv4WAAFwt+SXenaMLGhJ4xwq/P4F2LXrUMSc\nF/nAgTW4/fYruOeew3A6D2FwMAPd3fJza3340fiYjfzsIuaQXReFHeqqKKYQCr2NnJxKFBYeNg3I\nxyqAb3UcrRxnRk9m+ywfKz7mRO+FPVoye61EAt+NgusRM5wuxO0iIWbBbAFwCYAT1N+sZ9MALwBY\nozufKGhJmVL8CzvOTI5aH7jfn4RgcAx5eVm4++7F2LyZ+u1Fk4HLVYv8fGDu3MbIJBitj9nIz75p\n0xPMsdHIc9jJGZEtKIWF9+Cjj5p1n8sm6WgndOU4K+NoNYM8J+caHA59MFzJt2H7LB6rnp5ePPBA\ns7CPdhZE9lpzAKwDIG5XAvGB6xEznFZMtykjg8wFQv389Zq/O8OfNRHgKXL77Q9L3Rlad0BxcR1J\nS3uGO/drBOi07GbR+u2NYilmfSoqqjZ1D1n1s0eTSW7HBTRZ15Qs1mHnWKttsJpBTv9u0zxH25jn\ngD1PJwF4d9tazt1mLYtbBPZailtV3K4E4gNTHTOcbsStJSHnu6eAdScpeRKAy1WBd9/9cwA8jXOu\njrkDAJs3t+H06e+DkOzwOStQUHBQ6A4w26FbobeK+6RnRim7YuW6yo63pWV11K4pIxeFnR2vnaRA\nO1aNnWOtusesZpDTvxsBaOnQXTh27HM88EAzRkYuaoQf1WetoCAXAwMDYTeo2kYjy83MWmLH1wHt\n863287Cw/wlMD86fHwOQLfzuZhCAjNtFQu6HH4coyS4t7SW8+urSyAunTWwTUV+BS/B6VWqr07ke\nCxbsk07Esonp3LnRSfapA4HAW8wnSt7FyMjttmmZ585dgMu1jpkIrchz2HEB7dxZZmlBsRPrsHOs\n1YXQTga5SmcGqBvzQwwNvY/OTvpJWtpa5Oc/hTvu+Ha4zxtQXl6KBx5oRmenvu/R1qTQLtjHjn2O\noSF9S0+c+AxlZdumVKE3AesYGBiAKA4K3CTxo+k2ZWQQuR88nh9oXESKGb6KAHWkqKhaeB5jt5We\nASVz98jOw7Oh7PZJxoyyQ3/Un7eTuFzPksLCeqnrK9r22nGl2HFNTd6NpXePiY5LS3tKeh9ZN4+1\nez1VfZS1X3GJ2r0XTU1tloUaE7CHhQvXEmCNzg2Zmlp9U4xv3FoS5eWlOH68B7t3V0QkoWtrl+Kf\n//kKTp7UJrLVAChFVlaz8DzGbisWQ0N3o6OjGSdOVCM3931kZc2O7Lg2b16Ojz9ex7kqtsLv38Cw\nocz6BLBuHTkzSpw1bo1xVAq/vxR5eZMruzrZGhV2XFN2ta0Aa2J7TufXyMmpQG5uLtLSruHUqQkE\ng3oCQG3t0ohk+IkTXwp38DzzzW677Qogavv561+fxfDwPFCihZLJb712yhtvdMLvj672SgLGyMub\nhZMnl4MWQVsBKlCZgRkzzk9vw2KEuF0k2tu7sH//Ofh86oO9f38DsrLGwfqOKWRmnbHbSvRZF7xe\nD7xe1iWwc2cZ8vOJZoGiEiFAqS0fsVWaZFZWunCissM4mqw/dLLntRPrsMsEsiu2l53dgNTUIQwP\n/wzUnaTex9zcUaYeBa19LTrzuK7vdtodbbxIdWs16763WjvF718g/O5m8JlPN+hG4UNOYXgrxsb+\nAvX1HwK4sRlOcbtIyHaxxcUbUFBgnXsu2ul5PC8DGIGXqVaq0GE7wFJq1R0X3THoF6iRkX6dDIjV\nh4KfZGjVvTRcu5YGl6uC0YCS9XOqZM9jcV7Roigbq8kKFCqQPTtud1X4L20wuAtnzuxh6KsyqxF4\nCE6nXmHYarsnI+du5V7IYg50sU/kXEwVlHtfVVUBn28BtBvIvr7SG95ai9tFQraLzcyche3bl9na\ncQL8Tu+JyGd6M15sFQQCKXjllWWCBWcNBgayGXbSxx+vQ37+T5GXN8vSgqFMMqIdsMtFzzV37uwI\nS+uHPzyMGTNCuP/+OThy5LxpsDragGUsalRocb20iOQuxqvc3/oAtWI1vvrqfXjjjYrwDpy+9DLm\nm1XYtZZYefqLutK6LpeaM2E0tnSB0ZM9XK5abNr0fNT9+SbB7B0qLy9FYeHhqK29eEbcLhJGOyfl\n5rS2diAQcKC1tUOXIKVMoEYTIzsxA7S2gbwmgjim4ER395vMsX7/2zh5shEnT7bYmgRFO2C//+1w\nQt6D3CTQhcOH39MkgHVFaJl5eZmTTuDTft/YWIMzZ8YAzEBWVrppP+z0byr84rJn5847M3DrrdpF\nT241HjzYgsWLC7Fr16HwvT4UE2l3q5aV6L653RuRlvYwgsElAMbh9z+P/fs/xOLFXYZje//9c/Dx\nx+/B738OipvN5epl2IAJyGH1HbpZS9zG7SIh28WWlMxFcXEdenvHEAikgQaJxtHRMQBA3WUdPrwO\nodBzEMl1a6EEyN94473wTlyfxa3NbOZf8gceaJb0ICV8XeuToFEMQD8JdHBSIeJgdSwm5pGR2zE0\nRP2tQ0NAfX10u3+rMQ47lo/oWNmz09KyGoC6yMsC1Nr2EEKYf41g12IzmnxE921oaDfoJN+sOZ66\nM4wo2vv3T4QXiEPQLhBW64LfLIjWorb6DsXa8o4XxO0iIdq1l5TMxf7959DXtweKq4BO5tvAVyKj\nE2gjrDBBjhw5r3HVKN83AjgLYB6AEWk7rQTGrZqbRjuRQIC/VZNJKLPeplju/q361a1aPrJjd+4s\nM8zlUP6VBaidznHbFlg0FpvR2Nph5QUCKdKxpcl+CvmDtsPvB44ebZSc/+bEZCxqmiynB58jFStd\nsrjDdHNw7UAvWaD8v1iKgv9cJk0hk7Kg8h8NBKCS2FblJLRcdhEPXqbSeuBAJ/F4XtblhijHs9eY\njDSFdbmAaGQ+ZLCS3zCVeQd22mP33NG0xWhs7eT3KLkwor5QDn9s7t+NjMk8KzIl6JyciuvQ8ulH\n3FoSIrC7K3PRNZ7map8mOwCl4JDPJ3azaHcP586Ngq9Kx1c+O3fuAk6dSmKCzFoZDipgqKXZUitG\nb8ou14nSiUzbyZrA0fhZzUT9jHZaU5WlLYLMWm1t7cCvf90PUf3tX//6rE7IL9q2GI3tpk3a+9YF\noAOpqWeQlDSGYLAL/PMlG9vW1g6cPCm+xjcpA3syz4rHkw2fT19G2eOZGZvGxTluqEWCfam0/69n\nbjgctQiFVOaGXZosUAtgA3OczM2inQDb27vCwU5VNhvQVj7Tu8aU8xJCGPYKAHi9iARSAX5Cuy+S\nACYzbSdrAttdZMzMejO6qJ1FyehYqxMgf++M6m8DwPBwBjo7QwAc+PjjNrz6ag+am+uiWkxpQFlh\nUFEGksKg0pIGentTEQi8hWvX6O+0jDfejSbqoyy2dyNXvbO7wE0mqKwmy7E5UnPn6unQNyWm25Sx\ng6amNgLUhM09Xo2TlaJoamozVWXVQlFxLSysD0s0rNVcpyHsuqKVyUS/NVJxZU1duYshlq6dWMKK\nwq2CqXQBWT1WVCXOigSFuYvnRQI8wXznctVGFIZFlemKisTSDKLjRZURY1HJT3T/rkeFwKlCNHIx\nVp4rIzewSCKoqKjacmGvGxk3lCVx5Mh5AKugruhfge72x5CTcxV7926IehfE7yirqtrg82mD4xSn\nTq1De3uX4e6T35FZqUfgdI6DECL9TsFUuQiMzmsnyS0esrSjDbbL2n7LLadx5cqjoDvIf2G+8/vf\nZiy911/fgE8/HUUgMB+BwHPo7i4VuikbG/ehr88DylSiVoTf/7YuoGx3PK3W7/jhD+X5QPEKpW/H\nj/8BQ0PvM9+Z3V+z58rKe6z8dnT0As6fD6C7+13psTcVpnuVkkG0qst22k7nqpiv5AcOdHKib+Ld\nlpUdmVk9Am29C7pjUa0Xl+vZyO5SFNhOS3uJLFy4dlK7mckK+WkRDztUuxaZWU1pGrhUrEnj81qt\nl+10ruOOofedb+NU1e+Ih/tkB3bKutot30sIIUVF6y2Px402dpNFXFoSYnnvaly+7IN256X4ie+9\nNzPmK3h5eSkKCn6Gnh79d9rdlpWdnurXLwNN4LqM5ORHcccdWbjnnnxmR8PmbFC64v79DVi8uAuN\nje/D693DXCcY/Dtp4p5VqyOWNNd44IrbkbA4f35MQzbQx7YKCrbC6cyGz2dN2sLK80CTQN/ijtgB\noBFOp/pJe3sXLlzwwulczxwfi/od+mfSAZerFyUlS4Xtn25YLesqmju6utgyAPx7cf/9c9DbK6a5\n2iFMHD36ZVQS7vGOuFwk9A97V7g0oDaoSyfEgoKD2L69QneOWLhl5szJEC4S2knByoSkT9gDJiYA\nh6MBmzY9yLSLzdmgUF7006cvS1qqT9yzwwu3MrGxEhFUX0qrksvnIFyvGtaiY++/f45uoXI612Fw\nMIT29i4AkASoy8L/NcLtPoslS+ZpGELWpC2sPA+y8XY6v8CmTTWRPtE2vgNFkNDp/AL33puJ7dsr\ndFnbKiNLj3PnRoVZ3UYbknib5NgxE9+H/n6E3cSs2m0g8Ba6uxtRX/8hjh/vCedaqb/96KNnEQwG\nIdqAikgQIyMXhW28dOkOdHTYU1m4ITDdpowIeneB2LzLyamYdClMI1gNdlkJtFo1UY1cJTJ3iJY7\nr5jcscw3YPsocpfJS5LaNfvlY2qv7GlTUxspLq4L1+vYRrQ1GIqKqi2PIy0bu56kplYQ4FmiLXOa\nlvaULtA8mVyQ4uI6QgglaDgcjxCFLGGWc6NeT14HQzSWN5LbRN9WWk8mPb0y3D9ljMTvj/I5HVf+\nPHyeE3X9OZ21QhKEx7NG5/Y1y426kRGXi4T+gRDf+MLCeou/j/7G8cyQpqY23cRnhf1j1U9u1HY6\nuVlL3LPjlzeb2ORJjPKxFScGvmyJTRKrBU72ndtdaTiRKL8XjUtS0hqSnv6YtMa46JmxUgxJGW+6\nQNRy7VpDgPUEoBsF+YKjn/BcLrb+trZ/8cqm46Es1HTBVxfNgoLXBLEEM4ZalcXjKyK150XfZ2R8\nj7jdlSQl5RkC1OnGON7GcDKIS3eT3q8tNuH7+gYYppGCWNZXMOPRKzIQZsV9rPK0zXz6NTV74fU2\nAhgFTfYTS4nLrjc6ekEq1S1zEcmTGFXwYyuKn3i9b+L11zeYusOmOqGOkDTJN/ReKOMo8vET8i7+\n63+lbCaZOJ+MDaZ1W2RlDaGoqAZZWXOZ8a6s/BuEQsVQXR9zAHiguFZ47Sy2/6qkzMyZX6Kk5A70\n9wMnT+rbYiTlEU+CdM3Ne/DGGycYF6y21LCepaV3RallAADAzx0vc/2loaVlNf7iL34m/H5sbAlU\nDa0G3ffxNIaTRVwuEvykNTLixcmTLyEY/LHmKHlVuKl6+CcT4LUa0DWbsN95B+FkvWyMjIwhKekD\nZGYe1h0nq6Nx/nwAn3yiJvPxiW4iyJMYVShjq0yEJ074IMpYPn2aBgiNxnLGDCK8Rn//adx2m1qp\ncOPGpYaL4W23uYXf5edn4NIldmxcrlrk5yOsuEvH0YgmahbzEcVJeF94QUEDWlqWMZuQy5fngE22\nrICS9c+PU3l5qaD/pQBKUVJCF7Kysm3SjGs2q1tpE020i7Y+Siwhq6gXCLyF2bNp/1tbefEt2s7M\nzKdw7Vo6AoH5UMsAbAWwFOwiIn5+7r03EwDdiIqhnUso6cCs7ssNi+k2ZayCatBsC7sEVB9zNO6T\naDFZ89xOUloswF9P5os3c8OZxyR4Cq/ev6t19RBiPJai87jddSQ5+RnmM4ejlqxY8arQP+zxrJEk\n1altLS6uI9nZq4nbXckkvZlRYt3uSqmej8xNFT2d2viZM3vWrXzPu1NjRYeeLOh4RN9/pW/Z2as1\nc0Ynoa671QQoJ8CTBGCfH5drLWlqagvf43pCY1Fad9JrhHcvud2rr9t7fb0Rl5aECLKqcCLrIBqG\njRU2jXjX2oWenl6hno8IhBDm32jbY6W9VmXNzdxwesvuKyQlbUBm5ixmbMvKtumsA3aXtRV33knr\nUVipF6K9f//xH6cxMcEmsoVCb6OjoxLz5mWEXXCqZILXW4qjRxuxc2eZtB7GpUvZGB5uA6C6cVj2\ni142HtiKoaH1MCpOJa4LYl4+VOw6M7bczJ51USIYIVfxwx8eRmtrBzZvXs64SkX3cLpqYVupqKft\nX3//ILzeYbhcuUzf2JoxHwLQukG3APgC2trUs2Zd1JVOBtYB+CmAYWhdvAqWLJmHgwebJ9njOMV0\nr1JaKAFMWXB4KqwDQqyzafTHdeqCjHZZONEcGy17a6rZLHI13SoCbCMez4uWd7g8Zs7kA470v5kz\nq2xbJUYMJzH7ZRtxOJ4mWgvWKIAvbo/dpEvtM8a2Ndrn3spzE0/BbDoe4mC8NTIA+87IrD9WWXcr\nycz8vsFxncTl4t/52MxD8Yq4WiTUF7WWaM05hdJYVFRN3O5Kkp292pBdYhd2s1qVicDI5TCZa5gd\nG+1kP5ULrVG73O5KKcvHqvvNSK45tgwn+WKkXzzsyIybTy5GWlSxcFPaVwew/mxNBVgFgm0EWEuS\nkx8h8+fX6CjVZrRiQow2Mezn6ekrpMfF8n7cKIhLd5OoYBCtN6yaf5cu6RkF0cIOQ0brwnnggeZI\nbWSz38WSsRMte2uqi6LIgvM7d643VWA1w8aNS7FjByuN7nDUYuPGUixeXCglBciCzyzDiUpxUx6H\nL/w32y6Hw88dFwKQh5ycShQW3qMbS317DmLlyvvwq19twKlTY0hKCiIrKx3Hj/cwbsOVK/Miyr5K\n0uJHH6VhxgyCV15ZJhwvq4mH9tQBYlfXXNY2K+3OyhqC2/0ugsGvEQi4MD6+CF984cAXX4Rw4sRe\nvPOOiOWl4tNPRyMMSJm7GOiFNpEuLW0ClwV5qzk5v8POnXU3T5KcRcTlIkHBTni8TzeWftJo2VCy\n3/X09KK5eQ9TY3tkxGv5GmbtmXyNB/mEMxlM5SJES23uwe7dlQiFnHA4Ati4sZQpwSm6rp79QqEy\nnMrAizhS/zOgZassWXIn/umf3uMWqXW6NgDycQCA/fvPMXGQ3/5WX2Z3584yAPqscFEmr+pvV+U1\ntBLmWhg9r8pEGst7KJbX2YLc3H0IBlOkdVVYirQSP6gBcDu0zC+vtwGNjfsMFgAgEJgfYUDqF8Au\nAO+BZY814MqVQbhc65i20c3ON2+BAIC4dDfp/YSiv2PnJ43WDSNm81DmA+8y83heJh7PGtNrGCUO\nRevPtxsPiSZLOlaIxfW15ygqqtaxn7TsF7mfuoLQioQVMctOtlptzshNpnWfqOfUu76Sk9fohB+N\nntepYDAZ99euS1XMNMvIeCrSt9TUGu77HxCgk2Rnr448TytWvEpycp4lM2dWkZSUhyXto8lx2tID\nN7tLyQhxaUnwBYNcrlr4/c/rjotVwkq0uyfl+6qqCvh8C6Awa4BShEKl0LrMvN43UVy8AYsWya+h\n3z2xiUPR6COpsudyrr3++vrdKwDbWlh29bMmU4fY6BweTzWKi/VsLAAoLDwsdBkC96CgIBjZPcZC\nWttq3Wqjc2rdJ+o5O8BaQsDExLuM8OPx4z04cuQ8XK7LcDgeRSg0B8BsKM9rX19pzBlMdup0K5C7\nVGcIj798OSmixzUxMQS2MNDXAIDh4Xno7GwG0AWH4z2EQhtAx+yqpBVDAAC//wPk5TWaJsre7Iir\nRWLp0uZwxbVFOHpUre5WUrIIP/rRXni9qj/Y4zmPTZteiNm17fjH+d/l5v4MPl+z4Fv2ZcjMnGVI\nkxNRJ6n6Zw1aWzvwwx8eNqwRwEOZMOkCpgc/GckS3BobazAycrutyTuaCV8k7NjXl4RVq97F4sUd\nlhYmUR+83nexaFGjcOxlbgre/xyLBE15mdxxaOMdPT29mDcvU3ik1n2intN4MhbF9Ci198Hw/28D\n4MC///snKC6uEwo3RgPj/hLhN3KXarr+YACEzMauXYcwOOjD+Pg/C454HJTmCgAdYdee4l7UC4NS\nFIC6oXriur7G9UJcLRIffdQs/Ly9vQs/+tEfwGaibhEee73R3t5lMStTzaeQqaiKd15d6O1NRXe3\nOEtaaYNox65OmNuEreMnONnO78yZMQwNvcN8ZhYTiiY7nb2+WvBpaAjo6DDOaDYeQ/nuXBaoXbmy\nlFmYRcqydrOTRdeiVvMiaOMiPh+QmroFqakVuHZNO7FTeYlA4DBzzo8/boOfV5sAoH3+9HkaO0D5\n/tnh/+/C5cvX0N0du3KmmzcvR1cXK3POSmToZdmVevAXLlyE07kagcA80Kz9SgAvAvgHzbleBlCB\nQOCwgULyLVBJCLzVNQEaf3oOKiGhFzQruwVABUZGxIv1NwlxtUjI0NraAa/3TeYzr/dNrFq1wvIO\ncyrbRmuPMp3nAAAgAElEQVQR8ElXNQBWh/+fmrk+3wfo7NRXu1NeRvHOS197wKokuDphiusk8IwV\n+c5PbOob7bKiYWCx19e7UJR+A/KgbrR1r9na4XN1Ehp9fQ0M88joOEAfXFY1m75iXF8lJYuwe3en\nzh3o9b6JzMzHce0amyQIlMLpVGsrl5eX4tVXe/DGG+s4iXntZAywGxYFYwDawv//Ptgks8mTQ8rL\nS7FgwT50dyt9uAAgAC1zzOWqQEFBLvLyMrl68LzL9RouXbqCU6e04/EElPFISpK5jrQWi9bq6gKQ\nA+A+UKtBO3YN4e8XICnpQlR9v6kw3UERKzDjN0+XbADbNoXL3USAbWTevKcl+RRy3r4oyEoD2Prj\nrUiC6xVCtzHBWB6ygLidql0Kogn0stcX33MlACk7t1GuQayrtlmtQhdtAlthYb2tet9Kjfa0tKeJ\nljSRlPQioRLnaq12+v13wwHhSgI8bficRQtRAqpRQNgor6WoaL2U/CFXSH6QewceD/9/dXgcjOT3\n624qNddoEXeWhGi3Z+zbZHeYk+FkRwO1baXQ7pAWLFADXmw+hXjIh4buxtBQMzyeahQUVMHnA5KS\nggiF/AgE9McrriKjHfsrryzTuDdo+4yofEbUzfp6e9z5aPj22usfO/Y5hobE/Q4E5H2W9cGO+8uq\nFWS1Cp3ZdUdGBoXnSUu7hqeeysPu3aqo4cqVSw3kWQieeuqPsXPnWQSDbaDSIeMgZBaAbgBagcyn\nAdwLYHf4b2suSRFE75bSd7HirbgWfXt7F44d+1J4DfX92CJUzwW0CsnU0khO/hwTE4+DWvVjoPPF\nBIDvAbgT1H3dLOnV5wAybio112gRV4uEzHWycmWebsLhzen+/kFDZs5kWTMyWJkMraioKgue11sF\nl+s9jeugCw4Hm0RmRRJcpoFkxtoyCojbPQ8AqW4SD36y27y5FPv3i8dVlvugfaEJIcy/dtxfVoPU\nk6lCx143CL27ch0+/fQznD6dhKEh1RX1ox9tiVSOE70vH3+8Dn7/rQC0MaRtYBcIALgHbIxP75J0\nOtdh06bnhO1XIMuFAC7B61UrSfKKt7LzDA/fIbmS8n68KSQhlJeXahSSgZ6e38Pn2xT+9g9gx+Mp\nAIoL1+h9HEBJSbHk+28QptuU0cLMjaBXdFSPMZLImGqpAXtFZkSVsLSqkmJJh5ycCuH5YyG1Ecvc\nCPMcBSuaWKoUi2hczZQ/7Wg1yaRXrIyp6DiP5wekqKg6MpZWXHXU3dRJKD9fW0lPeRaU/6euIo/n\nMUKIUR4CLzkicmeJPusM/7aJAFQ12AxWcz+Ud1T2jKnnMXs/rLnAVBeeaPy1fTe63pM3VYW5aBFX\nloS662LlD/r7L0R2uKyiYx2Ay0hKGsbly1chklMwCpTGit5mRkeVqaieOjWG4eF5UPXuAb1xR8ci\nFHJixowQNm1i3WSTzZCNRW6C/FzbwO5WxS4emUvm6FE9R12xOFyuy8jJqYDHk425c2cbKtH29e1A\ncfEGFBRYc39ZHVORwur58wF0d6s7aI+nGh7PFoZ4wbOienp6ASwD4IYaSAaou0hPdPB6q9HcvEfA\nBlPemStg3wXRbln0WSmAQwCaUVCwFS0tqwXHsLCTC+HzLQjnK+ifMfU8SpsbAZwFwL8f5iQEQGvl\niVhP2r5rr9cHSn9VrrcLHR1HkJX1OObPvxNz5mRMK0lm2jDdq5QWctXHWmbn0dTURtLS+OzKrYSW\neWQtjOthSUQL87oD1utJy85vZiHEcmyslp3ld4JWlUfF41XL1Jk2U4SdSmE22VgWFVWb1mygGfpr\nud82EBnRISWlnOTnK6QG0W5Ym/HfSVJS2HMnJT1JAP4dqiGpqY8KxTOV4LDbXUGys1eToqL1hpno\nIktClFluPHZiUUQZCUGrHq0GuUWB6U4CvMB9pq8RQS27+KitMZ2IK0tC5XyzdEC//21m93nkyHmu\nSh2g1i04BL5C1PHjPWFfrdivP10Q0y+Xanzxchqo1UQ6MwshlqVe9eeKjW9f2TUeO/Zl2Get7pL9\n/rfxxhsVWLy4UKPhwwvxLY/EaKLVIJqMgF5W1lxs2rQMra0dCAQcQsprKPR2OBNa++lysL50FePj\nt6G/fxA0jpAE/jkB6PkyM9/FXXdl4NFHF0Xou6OjF3Dq1C0YHl4FNUP5N8jPT0Zr6/+tC4xv3tyG\nU6dGQXMqvgVgObq7S1FTswW1td8SVkAERuBl5MqUGKJ6b44d+zySPS6O7VFRRC3tWE5CyENLyyFM\nTCwCveeV8Hh+AZfrLPx+Pt5zEMAIUlIewfj4n0JEzaXtvaob1+mqrTGdiKtFory8FAUFP0NPj/4l\nNy/OAgApSE//Pf70T5t1omp+/3NQXgiXq1fHEokWk2VNiSauxYu7sGtXI44e7celS/wvunDs2Oem\nRY6ssnmsBF+t9lF/Lmv5GUbBf9Fip9YUVhaKBZEs5Pvvn4PDh/VCfCUl90X60ti4D2fOjIGQGbjr\nrnS0tFTGJHNcNpYjI/3cOZqFx91zTwG+/roaXm8u1GdfzHwCAggGl4C6qd4VHvGd7/yJMEG1rGwb\nPvlEcWupffijP9LLtFDG0LfATpa0/17vm5HCTtqiP7fdlovU1BnIzaUspJ6eXvh8G8K/VV1nfL1u\nQOziU56/QMCB1tYOnDvH5y50ATiBiYmfM230eh9HRsbvkJLyGcbHtfkVXgD1GB/fBfVedIHOD1+C\njn0a6PjrS/B+07Kw42qRAIDU1DHoVTkbMDLyVeQvI0rsxMQ4o3DK+qiVSQU4erRx0m2Nxp9vp6Jc\ncXEduru131D/9NDQ+xFKrex6Vi0EM3aWmL1Sjdzc93UZ4/pzlcLj+QnmzBHrJmn7C4gnCPNqdwAw\nHunXkSPnmQUCoLv0o0cbNZOeB8oOvbsbqKnZEpGc5mGHOisbSyCNO4f4+b1yxQuAr3H9OPSZxrXh\nvp8P/2vO9tLC6rNBk1hzwceVtOP/61+fRSBwGCMjA/D5suDz/Qg+Hz2qoKABjz02GyMjg7h8+R0E\nAldBs7xV8GNJCGH+FT1/Ltc6sDGXDrDJcEobazA2lgU63v8BwAlqDWWHj7kMRZJE2YwC+0DVZuWb\nkm8aLTbuFgm6gusnhaQk9eHavHk5TpzYwmVhbwXghd+/gdG2iaU7hYdd6QnZoqKIr/E889OnvaCy\nAcoLYN39ZJXGaRakFekpeb0eeL3yhVEN0PcDcCIzc5Yw6C5qh3bHCFgJjFI3hpKFbHS/ZZOe1/um\n9J6ZPT/8os9nZYtrWiwHlZVhn9/+/gCCwTe5Y38Bai08CpohrLhF6gB0hSWtn4MVi02B7NkYHWV3\n6PKxB5TxV8XzxCQFsWYUwO/MZe9GVtYQk30NUBejy1UBv19E9lC8EGMALgL4QfhzfuP5LIA7uDY3\ngJYy5V186qLo8byMTZuewDcJcbdIZGXNDv8f63K6elV9sBVOdEXFE7h8OQuUZ54O4AUApYy2zWSF\n2Yx2/nYXINmiwr9IfX0NIOR3GB5eAKAMqt/4M8vXs5PMZuSr1/fReKHSs9CsWVlGk4QYn4GOy0Nw\nuX6K/n5qNY6MXBQerSbhDQu/P3duVPi5mcyHqM07d5bp2Fv6OMkXYBVLH0IwqC2EpMV9oJNeKoCf\nRD5VffaH0N//NbzeSuTmepCXl4mSkrlCUUhAvsk6fz7AKMzKLXaE26zNVRK/C2LNKK0VSMdS9m64\n3VXC81IpD7oYU3cWIGKC0Yl/CLzkCPDHEFtITwuvR3MtGpGbO/qNikcAcbhIqIFH9mafOrWOeYDL\ny0vxne90oKODv9HsAjCZSltmE53sJTpx4jOUlW3TuZJki4qooJLD8SjoAqGdWGYJfy9a8CZLjVWg\n76N1V4UdK0t2fEbGw3A6WZE4j+dl5Oam49q1UfT1tcHv34CTJ0tx8qSYcurxvIzBwdFwUh8Rtn9g\nQFwUyuj5MeujssH43e8+A/AV2IS2GlAVVu1YiN1GQCaAv4XiN3e7z2LJknmG8vBGz215eSlyc/cx\n2cnAQ/B6SxnlgvPnx5CW9nsEg7zV8xKoq+vPYUyzBcSaUeqz4nSuw+BgCMGgzLIXazLl5WXi4MGW\ncGD9t/D5HgXVGHOA1U1LAq02WAe6mZwbbuuY5HqyhM9vAWhBVlaz5PubGNNNr+Jx4EAnRwOV0zLN\nkp4Uil5hYT3JyXmWLFy41hb10YwealTERUSXs0MXTEr6noDWuCaswyPu71RA30drlFmrtFaz4ymN\nlupOOZ2rSH5+BSkqWq/RxOJpiyzltLi4TqP300mARwXj+hpZuHCt4RiIqLNmdFt13Kzedz3lU0TN\nFFGDtVRnK4mDsrYvXLhW90ynpT1DkpMfJsBqohTk0fdJRF1fK7w/mZlPhjXJ1KRY2m/xveTb43TW\nkqKiatLU1Eays58geirvVgKsJJQSz3+uXENWbKouTEcW34Ppps1PB+LOklAZTvrv+N1qeXkpjh/v\nEWrbiHZT2dkN2LTpQcu7adnO/9y50UgilKLqKUqM43fOol2prKBScnISxsf52My7cDrLUFraiHPn\nRjEwMACnMzviv48m+c1KEB1QLZIvv+xFf//TCAYLoQT7CgoOWlaU5WmtZuVd6U6U6k4FAl0YGHgP\np05pXQdbQIONyg5xObKy5kZkGyiTR7E2S0HVTrUuPLqLnjv3EETg26mNqxj1kbUyZLvWL5i/PJ6f\no7ZWpXyqrCD2nvDMM/45dzrXwyyxVNZ2r3cYPt+PmM+CwX+E270CQ0N7uaO1cZBSUFfYBqSmXsK3\nvz0Tjz66CPv3f4i+PrUdBQVbkZXlRnc36/fXxxnAJPS9/voGfPrpKAKB+QgEnkN3dylOnnwJweAE\n9JIjikuLh9bVtQE8IcDpXIcFC0J47LFi/OpX6vWUdzoeaPPTgbhbJABgzpwM4SLBu1Xa27uwf/85\nhnO+f38DFi/uiqqeAQ/Zi9TXN4CeHvWaBQUNmDs3FcPD+gpW2hdTnBchfpFCoTn44gvd6VBQsACb\nNj0YLib0AXw+4ORJ+xXk7LCWtHGGmpoRJrialLQGhFwCK0ttn9bq8WyBx1PN6P3o5a47ODlsgLpB\nGqFSGVkmnH6hrwTvypS9/GZuG6M+qsHqLgCyeiOZ0C5WY2Of4aOPZkZqkAPLwtdnnw0+W5vPuaCu\nOdbvD1hzw7pcuRF2khaE8PESem4112AcSkzw2jUA2IDm5roInVseyFdjNSkp4ygqqkEwmAKvdxgu\nVy4aG/cBSMOZMxcRCLzPtIDmSlUJxhWQV79TPi/FwoU/xdy52rY9F3lXmpvp/adaUIfhdB6KWb32\nGw1xuUhYjSMYLQSxYDXJd/56Gl9OjrjKlYhNJMuL4BOGRItEXl6mtN+vv74Bly5lWwoWR8Naamx8\nH14vGwAk5O9x6tQG1Nd/yBxrl9ZK6yc8GVH4FO+irUhAsEw4cXJdHnJyaJDXyBpTx0j9fV9fEhob\n9zH3UdRHVYSwA3TXyid01QJ4nunf2FgzI1uxc2dZJAdBXsOiWTgiTucXjHow//7I2t7a2iHcoOXn\nZ+DSJX2y28BACq5c0bfhk0+8mD//GVy+nIyMjCyMjY0gPX0CVVW/RyCQDMqGmgPgXGRcxsaAgQEq\nDkg3QNrYJH8N5Z4MQ5Q8KY6FgPl87tzZhqVJo02+vNkQl4uE1aArXQjEiXexKDcpakd/P3DypP7B\n8XiykZ0dXYBcRP/MybkWpjeqO2eXqxYlJYvw0UfiBCvq8mpjPrMuh21Or5VX/xpDX18bc6yRm0a2\ngI+O3oeBgS8BDCI3NxdXrigV10rD/e81rcAG0DKxCmTJdcuXz8exYw6hNca2U0+i6O1dHyFRyCYS\ndYORCnUh0Lq4AH6nr+2HMvYHD7YwQfDW1i4MDWl31OLnPDV1BC7XChCShvz8DGzfXiHNx+Eh2qBt\n3043QfyCtWPHb0EncGVyVs4XwNmzdwB4O8I88vn44j5KVTgVlHDwfQDl4U8Wgy4oWnek9p7sAfBT\nAFoX2TrQxYcvlqVapt9U11E0iMtFQgHhEmt4UB6+OPGupWW1LVaTzD/Pv0hlZdtw8qT+91Rk7sGo\n2ER6t4ZSsF3NEgd64fcvxf7956S00KSkoPBza3LY4kehv38w4toYGxPTRylrhM0diIYVBvTrrBmX\nax3y83+KuXNnc5IlCniXFLsRkCXXdXRUhC0VNZmqr69MUD9av3gGAm+Z1i9R/q2qagtPkqXgK7Kx\nCx7fDzWzfmRkEAMDV8OuuGZuzPRZ7Q5HLUZHt0Sud+lSA8ygzUQPBpOQmfkk5s2bxYgnavul3ONQ\n6FeasyjXOQhK19WOuyjh7W2I3GKAB8BtYMd9C4Bq0OzyfeFjmkHLjX7A/f5t0JoR9wJoRGrqacyb\nl4KsrFRkZX2zXUdRYboj5yJYqeZFCJHKMBcX10XOY0XQzer15MdOjmGkZz0Zs2FEjA9aQW4ycthW\nBNZk1b+qmetEzwozl9XW3lOWuSS+FzIWzy23fF/Ql60My+nAgU5pZUBx1bitOmbdwoVrhSJ1K1a8\nSnJyniUzZ1YRh+MRQivHyZlCKjPHWEpexvjSjj0v+njgQGd4HHnZ85cZ0TytSKScqVdBgBcJUM99\nLr4P4s/lzCPgSQJ8n6gV9vjr0P+Skp4gbvdqoVhhAvYQl5aE1aCzmngHaN1Op0/7GHdArK5nJlMd\nLfTuF2Pfe1bWXLS0LJtUBTl9drQXAwNsfoHLxYstrgawF6zbxAvgBeY6ZvEgdZddAZ9vAdT6zXxm\nMvs75bf8PTGy3mRWSzA4DlFmv9dbyVxrwYL3OWkUioGBAV3AWF6Du4up5azEFbS/p4Wl9oDmH3wJ\nmg2sZSgpzBy95eDx/By5uRkAgImJJGF/2axmNf/m44/bkJsbgte7AKJMdFGiJ2CUjT0DNIDN53yI\n70Na2kkEGQN4K4BcyblTQSU1tOQGcSzw1lvT8PXXPBsrgWgQl4uE1aCzOgGwfmORcNhkrxcLSq0M\n+onMODFJcacQzh1nN4FOO+FSd8P7uHq1CsBV3HlnBq5dy+WCmMp53gKQDGAEQAaAv8GSJd+2RA3V\nXnvvXn4ytadBxPdBBBkJIhTyCIkBubke5u+Wlkrhwut0ZgtZQIr8B7vpKIXfX4q8PBpjEAXuQ6G3\nkZz8JCYmfqb5lJewSIE2vuF2n8Vdd2XoaliIpC9UWm4ZtO+K3w+cPl0NmuynhyjRc9euRsyYQYTH\nU9mQw6CSGM8C+Mfw58vBSsx0IS2tFePjAJ3oA6CZ5Q9BnlT4GYD/j/tsA3deANgKj2em5BwJ2EVc\nLhI01sALb5XqJgt1AtBLJZtpKLEcfbmUgwIjRpE2sBiNGqx+IluuK1mq+KwVCqRZRq0R+Lbef/+c\nMGNGZS7demsDsrJEE0cpRCJov/iFmhFvlZ1mxZqxG2AU3QeeIWTGHjNqo/b3otiUWQ1uQL4pmZi4\nj/tEL2RIUYqCgoPYubMara0dmjwQ8e9YWq4+xkLIu6DaUCLoF2h9/XSKlJS1GB9XGWkpKdVwucqR\nkzMHY2OjSE8fx+XLlcjISMHgYCb8/n/WnHULgDOavvJssBoAtwraVwoauH4KwLcB/A5AnTTvJQH7\niLtFor29CwMDWeCFtzyen2DTpheYY5UXeNWqdzEkiOWKArZijr4i5fA4FDPc5epFScnSyDGyF/vT\nT0fR3LyHoyXaq+4mzp+gSVU0ac4Lj2cm5s49ZEkOwgjiusi8CJu8mhtdrPQijNqaH1YsGr6mtaLc\ny7uPjDSIrPRNoZKKqI7sJNcFl6sN587l6iRV7LCArNTgNlIx1oM+wykpa3HbbV8gGKyEUi/8+PEe\nHD/+B4jYRW73Wdx3X7OAlit75cchp+myOHHiM7S2smKGIsry+Pi7+M539NUFi4vr8MUXvJbSm6BW\nwQakpFxAauoIrl79Hgi5GzTPZAPkFsYwgHoAPwdQJ0zuTGASmO6gCA9ZQEwJRtv5jRKs1tZczszU\nBr3UAF9+/pOCAONWC4G6bYb1te3Wj7ZyvF3JC/OxEp9v5swqUlRUTVJSHg4fU0eo1EH011f6aIUo\nYIdQIO+bXEpBCYKLgst8xTuj39upwS37nlal0wecac3pbQRo07WRykdof6PKTsjICjLJm8zMJ4gi\nf6Le62dJUtIK7l3Ry84cONBJ3O4K4XslkhCRkQGU56qoqDr8TinnU6rqdRLgZe43LxLgaQJsI6mp\nz5KioupEoDrGiLtFwkwPRzSBil66pKQ1xOV6MKztojxgMsYICT/k8gmGPtzruO/pCzNzZpXwtyId\nHKNJzuqkGM1kqIxbdvZqwW9lC2BdeCxXaD7rJDL2SXFxnaUF0Wr77fZT9uwUFtYbtou9jsIgaiLJ\nyY+YLhQymDHr6MRaGZ4I6SIgZo4pE67sHmknUzrJy9h2Bw50kvz8J0lSkp4RxpYE1b8rSUnVhLLY\n2IVMxLQzWqzoWMs3XLfc8ghJSnqc65N2MawOj9dqotV+Mns2EogecbdIGFkSZpTDgoLVBFjBPTy1\n4RfQmFbqdosmT3YnRCmmyk5LvYbMkjCyMOz03Yqwocu1lixcuFY3CVqlutJx4ieoaslv9JNIWlq1\ngI4qXhCtWkJ2LSbZ+CUnP6FrV1NTGykqWk+ys1eTlJRnpP3i66vHEmp7lYWpngDPkuTkMsEEKB4L\n9vOtJD39MUl96vXhHXxD+H2ggolaiqiysMk2TCIhSqNjRYsVvaeiDduLJC3t/yL62tPKgvM01197\nz0YC0SPuFgmZqW4lB0A2KVPutuwlqw+f3xpHX9Q2cWH210hhoZjDbVcJVXS88kIXFtaHXQidmmsb\nucn0L6jTqSyk/ALYpPkNP/5PEOARAlSR5ORHyO23P2o6fgoma0mkpz9OcnKejVgIxm6cFwm/2wQI\nSUt7WvO3smPld+XyPvD3wqpLkXV/rg9bumyb3e4NugVX5ibiJ+6cnArd9ezs9I2eQ9E7JNtcORxP\nC60wdmHUPm9PSseffq+43ZRFyZ6VmUD0iLvAtSzoqa/uRaENTvv9qZKzOiGjlSYnn8XKlX+GxYsf\nMs0xMArIyvSXrAoVtrZ24MSJP4hbL6kXoeggqWKDNFekry8VVVVt2LtXFHBXApsrcN99d8PpHMfg\nYAjd3XWCKx+K/CY/fw8uXapEKOREMOhDMDgD4+M023ZiArh0abXg95MriCQ6DngZly/fisuX34XP\nB/T0sCQBrSrw5cs+hEJZ0Gf0AsHgQs1fcwC8BzZzV6WRnjs3KmWv2Smu1Ny8B2+8cYKRWklLWwuq\nSqtiaGg3ios3YNEibQDfWrY5T+EVkRy07Cdr2fgUvCwKVXRNF5JGQqF7sH//OSxe3MWMA3tPlc9X\ngjKXtGquWhpvChyOKwiFWkCf8QbQMbNejS+BSWC6VymrsJLFm5z8iGQH9AiRu1Q6mXNYydC2CivZ\n2ewx+l2+WTa3uusT/XarJQvMvC4G2wZ6L1TfPf3Xera3nbFWjqOxlG2G1xH3w8oO3NgVmZn5pNTV\nKR6LTt34FhWtJ0lJjxlchz2HqL6FdszMMqv1z4fYKrCWja9azPw9M3t2ZOcvK9sWjuXVEZpBLR//\n5OTHuedYsULWEofjEVJYWB+T9zUBMeLOkpCB3YHQHbPTeRaDgxmRXd7ExPegLxr/MoBUzJu3Cz5f\nEJcvs3UE+HKnhBDm38nAChWU3emxiVJG1ccUqLs+sUCfiMbq8azB4KATDzzQHNkVL1kSwhdfPApC\n0gGM4rbbQpg16woGBtp0Kqnnzl2AXjNrC1JTK3DtmlZCXb6zs5oNrxz3wAOKQmqz8DhxEhsgSrZK\nTl6DiYkXNMcYZbhvxfh4SEo5Fo9FA/r7vwagpeXukbYdGNWd4/PP1zKVGAF98qNIRtxqXQ9g3HI2\nvhUdslWrVmBo6G5o3ytAbElqreCODoBmUouQAmANKir+GM8/Xx629NVscZdrGK+++j00N4us4ARi\nhRtmkVDlqmvQ25uKQOAtBAJAdzfNrnY6vwblif8rWNmIEQA/wOXLe/Cd73wbHR16vrxRvWLttaNt\nt9Hvxe6gUtx3X3OkcI4IysJ4/vxYWCwuW3hcZuYsbN++TJOw1o+BgWx0d6sJa8eOrcLoqDPiPgKA\nr7+uxdWrZzE8/DOdSqrXOwxWdRMA3oTT+TiWLZtcuVQZ1MlOns0tTmJTkq0aAYwiObkPOTkEly79\nDwSDSttkEylNzJox4zSuXNF/GwikSMZClfdgFy7ZdfoA/Ir5JBj8O9TXVxlmywPmE7nIZacU12lp\nWW0p2XTTpuUAEBF6FIkZLl7cgY6OZt25jLLlN29ejn/7t/+Oa9dckiP+E/n5aXjvvb9He3sXCPkS\nSUlvg5B8AMvg9zdH6sckxPqmENNtytiFnMHyMKFuJXHga+bMKkP3j1265VT3x+i6on4kJ6+x5H4Q\nX89IrE1/PllAfv78mikbJ7XPcpecbCxzcioEuRCdJC3t+yQ9fQVJT3+YOBwvcr+jLhOP5weGLjvZ\nWBQW1hNCeHePiNXzGgGeE54jKWmFbRdKU1NbRDgwJ+dZ0tTUZsuNKnq2PJ6XTZlrRi4qo6C+mp/B\nj8sLJC3te6SwsJ4UFVUTj4fPjzAOvicQO9wwloQCuaRBDqhchAI+8BUw3H1ZCYwD1kp+2oHVIK4W\nIrfKxMS7wvKP/HnE4yd7DJy6TwKBFGnlwMHBETQ378GRI+eZ8VHaPJkxU+/dIfT3fw2vlxYNysvL\njNzD48d7wtnjC6AtrbpzZ11YRkObxV+KYLAU3/0uzQhub+/C669vwGefXcTVq2OYMSMZd999KVJH\nQUZqkJETBgYG0N7exbl7lD6vAKB1zYgziQkpiEiXW3numpv3YMeOEwiFVJffX/7lS5g3799wzz13\nR7LajSB6tqhMClsOlM/wF6sG8AWSgI8/ptLveXmzsHnzcsyfPw89PaJ6G4MIBv8lPLbbwIsPmgXf\nE/UBhPgAACAASURBVIgdbrhFQu5jnc/9rdWv+Q02bnwQgNz9Y0WUbipcUtH4f2UL5ezZWRgb09f7\n1kLcT9mYBnSf0PYtx8cfr+NKiW6F378Bb7zBKseeOFENYCajxyQbM7OJ0Mh1p5Sy1V7b5VqHlSvv\ns7QJsBIjkd0jPQNrK3w+Wq1v5co87vtSAP8P9PGJ9aDCieo5gIcQCBy2/Nzt3t3JLBAUP8bZs5U4\ne/avLD2rcnVX/UQsmpyJJqb3y1/2MHpgAJVvOXmyESdPtqCvrwFZWYoELFtvg12UjNtkp5BYAlFg\nuk0Zu6Da97zpWSV0tVDX0wuktPQFS+c1YyJNl0uKh6wdPJfeqtRFdvbzJCWlhvksJeUlTba6fjwW\nLlxLRImFei599AmCRtnpVsfEao2LyeDAgU6NjASbBKe4d7Q1MPLznxRk7/+ZcDzLyrZZavuBA50k\nJUXG5Kqy3F8j+RnVZUZZWIo7S1Y3w0x+AxBnbNO8He37LG/TZGu5JGCOG86SoLgEfXBaBBp4PHfu\nQx1ThIeVHX0s6maLYNeFZaf2Ni/6J+7n2nB+Ac2DcDgC2LixFIsXF0rHIy9vFk6eFNUH5nd11sZM\nJlpYVVWBwkJzcT/ZvfnXf/09iovr8NhjhboxE7G8orUI1ToOhPk8EEgRWimKkOG5c6Po6xuA3z8X\nQA+ARZFzsOqtCtS6KceOfY729i4AVHJ9XLqhVi1Cs2dV9Gx5PC8DGIHXy0ry+3zAjh3rwhUUO8C7\nhAKBeZKrqA0V1UaheTva8ZoDvRx4NfLzL2PnzrpE0HqKccMtEq2tHeEyjjyeAGuuroViwvb1laKq\nqgJ798pNbW35RkJm4K670nXHyFxSIyP9UuaHcm7ZIhCNC0s00ctqbxtREPnPRFRCWRvkCxWvGmqt\n1rhskvf5FoSpr8bjor83dDIdH3eiu/tWnD59BPX190dUS0Usr2hch8r9Y+tOq/EwmSuETYbcADr5\n/kPk++Tkaqxc+Sca9ValT/q6KVlZX6Gv7x3Qes/8ZFoLvq4E335zafUnACilWFl3FpWzb4R4KlkO\np3M9AgG9G03bHlEhKTYGdB60FrZ2Y1iFP/qjQ4kF4jrghlsk5D7T+aCa+AUAMkGzOFVNeZ9vAerr\nPwQg9oXX1OyF1+sB8A4ASq2tqdmCd95RjxfvstaEJxt1F6WdbMwWgcnIfhON/zctTbxDnKy/1qj2\nN8AHKhdh/36Wu+/xnAdgXiPCiny20bjo82jYvIPh4Qb88pef4JNP6P0tK9vG3DOz88tglNFsRbKa\nPs/6HJeJiXdx9Ggj1zdx3RS3e0X4rzrQhaISlHRwAUB5+HP9uMuezZUr85hnC6DPamHhYXR2inox\nCirn3QxWsrwUCxbsw+zZWotJlRNX2iNbqBoba3DmzBhGRkjYSlKl0AEw+U0JTB1uuEVCPplkAvgT\n0ElFcYMoD1EXgF709S3A44//EA0NPcyumVonuRCVbzRjcAwOOpndKMBONmaLQDQuLOOaGPrJOFpG\nltkCJ7JI9PIkLwCIjs8vkp3gqwVq+7VyZR5aW1dgaOgKgP+X680OnDmzIvKX0bjbGS/Zedzus9i5\ns9p0nOnzbK3cq6xuCiFpmr/qoCwKxcUbMGvWAAKBZuG4i5/NMrzxxnsMKUG55/J3bwAiSROP5+eR\nfsyZk4GnnlqKo0cPIRA4zJXcFS9UIyO3Y2joHd15lYUiEbC+PrjhFonNm8XMGjqZHALLwhgHXSBU\nXZ5QiPpRgT2RhUJunegna35ifOCBZsPfmS0CVlhVPMQ0xXdRVFTD6P0YvYTHj/foqKr8hGbFyhFN\nqKICP2aTJb8Ai4rYaMdFtoDdeWc6hobSIIb6uWzcR0cvhK1Ktc7yiRN78U54ruL7OjIyKDzPkiXz\nTPvc3t6FCxcuIinpHAjRf8+Xe6UJa/rj8vMzcOmSnqK7fXtFFEymDu7dUu/5/ffPweHDfMXEF0Gz\n2rXYgaSkcgQCt6K7+39ozkMLQGnbpC/l2oW+vq/wl3/ZDeBfdOdVGIsJnabrhxtukSgvL8Wrr/ag\npeXJcLlHhWt+EOpCAQBVoCZ3G9hdDvWj7t5dGVkk5Dsk892K2SRvFsdQM6b1ZrgMsoUnK2uuLktb\nVE/ZaLdoJ1AfLSVYtLAA7AS8ceNSnetKOy6yBay4eAPS0r5GMAgd7rorI/L/svyU4WEvvN57oLUq\nvd4GbN68B0lJBczxJ05UIxAIghea83hejvjxjcZAletQROvY+E5JySLmN7I2K7kcVmjU2rHv6ekN\nX1t7nPyeHzlyPhyk1sYGguAXcgAg5DYMD+9lPhO589hnrAvAXgAeAHOF7Zg580uUlDTGNJs/AWPc\ncIsEgMjk/td//W9hNc9DoAvET0CDXFUAvEhKugOELBCeIxRSE8U2b16OEyf2wuu1/7KbJcNZjWO4\nXDTJaO7c2cIXwPzlFi9odneL2uuaLYDRxFNEC4ssl0JbHpOf+GQLWGbmLLz22kL89V+/hGBQVRX1\neF6OTKaAnM22atUp8H5/YAfOnv0+QiHeelNclF1QZD+AAYyOBhitKxFkml3AWQDz4Pc/j/37P2Qk\nJ2QJa6IysCKIxp7WUlfbwCu9KlBlT/h8hm3Ca9HFA9CysYAQ+vsvMEexz1gHAGVMxectKblDaKkm\nMIWYXgbu5EBzJp4hwFOE6s0rlbPWEqCNZGQ8TBwOsTKsw/EIIxVAlTqridtdSdzu1UwxFivtMKtC\npv3eSu0K/vc8l5wvXSnji4urrlUJry8qNWmUO0JzJVj1U9F55O2xl0thfh5WFVh2T4zqP4gr9xFN\nYSIx31+mwqutdaG9pkzOg88zsSvPEk1515ycisg4yWqjyGVPOsOSMNrPlIJV5kWc2D40EbaGiV6q\nY8WKV6XjkcDU4Ia0JBSUl5diYKAUS5e+iK6uCwC+BvA3AGYCaEdx8Wx897uLw1xu7c65BqHQK+js\nVDNmd+4sizBfogHh2CB8O+3EMXiIduyh0NvIyalEYeFhQ/eCasmUQWX8iHdpvCVilDvS3t6FU6eS\nwAb7G4Tn0cKOLIhR8N7MglPa3tragUDAoaGRimM0ym/uuisd3d36691ySxCjo/yn/C5YbFWJruly\nVUAMduy0rj09RTsYpr7qryl6FmTWV2HhPfjoo+bI36LaKLLs8oKCg1iy5Db84heKHAp1/3o8P8HF\ni60IBv+ZuZbf/7aUDHLs2OcYGvpW+EheqoPmPP3iF++Z5jwlEGNM9yoVKyxc+Djhaw04HLSYPRU9\nqyAzZ1aFLQtzITyr0O/mOklS0hMkPb2SFBWtt7C7N2+D3TKeojayVfvs162w2geX61nD88TKklD6\nZWQtiHbZZvU1RBn9Hs8PhDtsj+dFzbHyeyTbgfMZymxNa7VdtE1rdPcsNfUl4bNst7yrKPtdZmnJ\nxpz/vKmpjaSnV9p6bmX9BH5A+Cz2BK4fbopFwqjgEF/OcbITLg+9O0evoGlFGsNoko6FpIS+37Rw\ny8yZVZaUQflJQzaOivqpbKIRq4y+qJuYo5Fb0F5TVsrW7TafuKxOhIqb0qgutHK86LuFC9eS4uK6\nsHxFHQF4pVWtm8dMLsP8ubBfBEtdXO3cC/Uc0Skcu1wPEuo+fiY8LuxCmKhjfX1xQ7ubFNCCQznC\n77QBagAcZVENqvX09EZlxrImvN7l4PW+iVWrVmDx4g7DRDQjtkY0SrE89EFoGoAsKWk0DATKGExZ\nWQLCPoC8vExLrCeruRRWcxZoadBOjQJsru4YAGBzClTwdFPRNUQuLIXyq88SZpViRZg7d3bkt1Td\ndlCobisTJ6Tt/gIBjQ6jWaEnwE4RLAq7SYbqOfSsLbPntry8FP/0T9uwatU/YmgoAMANmu/UASWZ\nLpEfcX1xUywSdKIWUDIATEwMR/6/vb0LAwNXodbIZXVo6uvtyzKwk694OIeG7kZHR7NpIpoM0SjF\n8oh2oZFNGkVFNbqKd9pJ0WiiMZuEFVil2La3d4VrR2upzmKff35+Bs6frw4zkyjjxuM5H1mo+Otr\nF6j775+jk742Xvzo2F64cBFO5+qwlhGd6Pj4idG9FLPM6AYnJSWEnJwKeDzZUmacFmbXija5UztO\ntFofwMcV3O7PsHPnekvPrdt9AUNDGeBjXh7PT4T3KoEpxHSbMrEANcfbCFDDmbavkZSUp0hTU5vm\nOMXVInZH2PV3sua5uUtgOv2p0TB+jNxzsvPJfjNzZpWw8IwMVt1sMp8/X9Pc4VhLVqx4VRBz0LsE\nm5rawqq6TURhbtEYgvV4lsh143SuI/n5FaSoqJosXdpEiorWR/5fNjZ6X72YNaQ855OBXdemqI9J\nSdVEZTfZe7fMXFXFxXWT7mMC9nBTLBLqg/UsEcktK8FUdvKKXWziwIFOUlxcR1JTH9VNTHww0k6w\n2aiiVywhetFdrlqycOFaqW8/Gnqqslha9XFbjR/JjqNU6ArmebDSH+oX5++jUglNHwMwDxSr8tpA\nA0lL+57k3PKx0VK0HY7HhH3gSQN2nyF6jfXhGEmDpk3242V0nJR+dRKX61lSWFjPUM5FbVPPJ76n\n2dmrE9Lg1xk3hbtJ1bbpx9CQ3r/u9y/Arl2HMGMG0XxqXw7D6PqK/7yxcR9++9vvIxRKA3APtEXh\nrZ5/quptyyByDynFYYDnwwlXKoXYzE1lpsNk1cdtVbJEnjE/DCoZoV4nFPp74ZFad0prqz7ZUJWE\n0LtdZPeUum70YoPB4HqwyZCq3IRsbLRuogceaBYK7SnPuZmwpNJHPuNdzQBX+rUeCxbsi9TCFsWH\njIsUtSA9vRwTE3fA7/8APT1ATw9w4sQWAJcYNWelber5xPd0eHieVKgzgSnCdK9SsYR8V1NN3O4K\nUlhYH3YhdBKrNNBodvR0Z6s/v9NZa+n317u4kXwnXh/eUdYTh+MRsnDhWlJUVE2Kitabjofiipo5\ns4rwhXisWlRWWWDimt8vEuqCZPtkxHoyY24BTYLCTma7bKusJDUx0e2uiIJGTM+pjKvsmOLiOgk1\n2DjBU04pFv9O6Z+M9SVjZbHWl6geeKKu9fXGTWFJKNi8eTk++mgtgsG/03y6BkA2hobeiShoUgkM\ngrS0cSQlbUBm5ixhMDjaHT3d2fLJQONYsCBkafcTy+JGVthBVtQ9QyHA51N2gOpuUzYe2noJHR16\n686KRWU1YK897ty5UQwMDCA9fQIXLpxgJCYKCrZi5cql2L9fb+UMDa1HR0epIXPL5erFq68ulUqF\n8Ni8eTm6ut5h2EcqtPeyC4CamKjUidD2jT+vTOTS6aTaZbJn6NSpMQwPtzGfUbnxKuHxyjNnh8DA\nqvfOEJ5XVg71lVeWcVZoI4AvQFWeK6C8V4m61tcR071KxRr5+U8SGptQ/NDmEhjm/lHtf9SvbRZo\ntJMHwSNWloRVzrvoOLqzFZWEtc7Lj8VY8OcysurUAG81obGIFSQp6SEyf/5zwnwHKsGht3Ly85/U\nxSRcrrVRBYblO21tUJyPUZiPKxtYp33QjqvsGZLlibA7frZEqZF1pRAY1HwPdTwLCl6T9F8hjtSH\n/6VWVFFRNXN/1HyX2CW/JmAfN5UlAQB33PFtnDq1DFT0bxDAReFxVpRM9bsx6l/2+T5AZyelIHZ1\nvYMFC95HS0uloRCbHd5/LPIiAOucd34nTovDZEOk7inbASqwVumM9sOomh8PK1ZdY+M+eL0AQAB8\nC4ADhITQ3/87tLU9yNyf8vLSsG+/mbtSF86fn41AYAUUK1CxIESV+8zuZ0tLpS5/IiVlLcbH1VhJ\nUlI1CNELNhrtlpub68LlZQ+Fx/UQY9XInqGsrHRhTYo778zArbfy8i0qNTwr6ytmjLT5RcAy/Od/\ntkXyPQKBwxgd/QCEXEUwmAKXS2v1dCEl5acYH+frTyzHwMAvIrlKWil6et97AHQCcCE52Ydbb71X\nOjYJxBjTvUrFGnqfpngnp1DpZDuu/PwnwxIeym5P2V2J/aVWGDt2slm1u6ni4jpTmqQIRlnRRrIL\nRUXricPxNNEyXKxYEpOxXMzGz4p1RXfD1bp7A2yN7FLNz2ndirPTX7OdsV0LzQiKxaWw0woL65kM\ncZllp5dvYd8X+jvzZ18kVQN8nyQnP0FcLjEzi2ZWNxC3e7XumVyx4lXC09sVyZ0Eph433SKhPqDV\n4Rf+MSKipSqThngiFeVcbCXULLY3kWgRjRtJNhE1NbWZBtSN9JVEL7nY7aTSM93uurA7Rz/B2Olf\nNONgJgNCiKLgKg6Uut2VlsaWukz0vxcF2mUUV9GCpECm/pqa+rx0XO1A7ZPaJpfrWWZCNcqXMcpx\nKSpaTzIzv29676g+ljIe68PvYhOhrqWnJYvEKq7/6sIjW7h4yZ0EpgY3nbupvLwUx4/3YPv2r0CI\nkq3ZBRr0ygUNgD2Ea9d+BkAWtO0EX6iImt8Ph/8/usByNAFpuyUmta4OkcvB5aoNFzjSno+6oAgh\numvRfq8AcAgzZgRQW/sntms88P2LZhxkwfW+voGIi0Km4ErBynEobiKX6zKTsTw4mCE8h7xWRxeA\nXwBQa2H09LwklXgZGBgQts7pHMOyZdFn1CugzwvrMvL7gTfeWBepTWGUda2OM1sH4tIlB7q798Dp\nXC38ndZ929ubCr068DLQGtgy9dv5zDX7+pLQ2LgP5eWlCIVcwl/wkjsJTA1uukUCAI4cOQ9CtBLK\nSqGURij1r/v6qA+VnUiVh3RCcuZ0uN0bMTSULfxWxthRJqTf/OZLUJlutqC7fWlta0WDRLGR/n7g\n5En9BGG8wN0NoBleL3D0qFzrabJ5DUbjQJlrbCEh4GX4/RsiuQEtLZV4/PH/Hi6iw0JblU4U38jO\nbsCmTQ/i+PEe/O53LHNIFg+i/XgfwB7m82vXfozXX98gnIg9nmz4fKyeEbAV8+bdLh1X+zW39Rpi\nvES3DJs3L8exY6swPDyPO8cWAF1haRE9tIWoAoG3uG/VPBCat7IGgDZfZR2A+8Dnk/T2rkd7excc\nDrHkjsMhpI0lEGPclIuEcYIPAGyNTC7Ki9nYWIPe3tTwAy7b7STj0qXfAbgTwHoA6svgctVi06bn\ndb8QTUjagu6iCUhfhY6H9Z04v2ssK9uGkyf1v3U6x0EIEZ5XW+NgMjUe7B7Hg5ARsKUzRwC043//\n70+Rnf0CHA4//st/ycHRo8ZV6WQB/cbGGoyM3A6/Xy3R6XL1YuXKpVIq6qFDuyAattOnx4R9yMub\nhZMnl3P9eAhz5x4SHi8L2MtqlNOFiy8JSnfnx459bipiWV5eivHxN6GvzvdmuM3L4XSuZxYC7b0z\nf/dKkZz813C7K+DzZQHwgm7KbtNdMxB4C7t2NWLjxqW6mjAORy02bkwk010P3JSLhJz33wP6oM8F\n0IGjR2md6c2bl2PWLI+mnOhSADUAtNZILYANmJg4DGo2KyUr6Yueny/mtIsmJGAH3O4VWLLkkIXc\njC5dxrNRiUkzmE3QRpnSZteIJq9Bdhy/e75wwYtr13gX4B4A3QiFfoVLl+gn/+f/rMMzz8zExYva\ncz9hqXb3mTNjGBpS7jk93u+n1pOsXTNmjEryIARFtqGM/4eWF0i77kaaQ9EWfj7YbG+z/Aulf1eu\niJVy6bNeigUL9mH2bPG9k7976nNz112zMXfuXejsDAH4cbid4oJfgUBKmFW2B7t3VyIUcsLhCGDj\nxlIh2yyBKcB0B0WmAuIArJKtKWZn0FKc2uO1OlBaRoo4dyIz8wlhENlu/Qp5boZxiUmP50VLmdDK\n+BgJ/ZWVbeOy0+0FUyerOyUTxtOzgowDmvbyXwhxu8WlS5V7JWpXWloN4etAaIkRRuOvZR8tX94g\nJCOInx/jwD/Noag1PU4+7vKMbrNnwPjdo+QHWgTsWULL6CoMOnslfRO4frgpLQl+pzo6egHnzwfg\n9ZaCxgS0O7Mu9PUlweG4GP5uDoBPQHeCn4Kawtpd4XJQ/+ybkd8D72F09GcRPR1tENmu/128yy2F\nx/NTzJgRQiDgwJEj57FyZV4kgDwy0o+BgWx0d6vBU6PMcKPAJc9RV3jvVoOpduS9ZX520e6ZujcU\nv7YCeUDTqB12cwi0/na+XcHgj5GW9jiCQdWqTEv7HI899l1h27TjUF//IXy+H8Hno5pGhw+vQyj0\nXKSPNPv7K8EZjN2Nys57+/Z/E7rCzMvk6utAANXIz7+MnTvrTJ+BrKyv4HavACFpyMkBsrJSkZV1\nGE7nIZSULMT+/efg8/F5EoW6a0aTG5TAFGC6V6nrBWX3kpJSodm98FZFJwGe0lkawEsEeJRQml41\noVWzlExRY1VRuxnHVktdaimCscjQNtr927EMrLTFLL9AZn3x9FSjaoRm7RBZU2b3Stau+fNrBNnP\n0eV98PkSIq0lnsIsGmMj3ShrZXIVxdsm4nA8ZiknwUreiHG/VbVYs2qJCVw/3JSWBI/29i7J7uUr\nsL7QDlDl1uWgVgWl/wErAbQBuBXAHwAQUCrtlwDyhNdUdmuxqELncrVxBXVYNtNktZ7MFEPt6FdZ\naYtZJrjM+rr33kzMmqWOo99/G7q6ngCwCPQ+LYfD8VNs3FiKjz4aFJ5De19k90B2r2TtGhsbEdyf\nUkM2kXmAlyIzcxa2b1/GtKmkRK8/5fG8jMHBUTzwQLOm8M/zUHfnSgD7D/j3f7+K4uIatLRQOitL\nklAyv5X/gP/23xoj/n/FAjx37gK83mFkZDgwNhZCbm4uBgYG4POJ6dVmNOmZM79ESckhbNokZoUl\nMH34RiwSsuAx5f9r4QDwOXgqHn3RHAD+VvN3GYC9APpBA9l0klJeLCvlMEUQLSrnzuWip0d/rDLh\nRUMp1cJo0iZEnzthJPVtpS1mC4nMHbR9e4VOrgH4h8gxycnVeOaZ29DcXIeysm2m7RDB6F7J2uV0\nZsPnk/dHBCsBXqW9ojYtXtylc6d2d6vS2y7XuvD/lYGSMFKhsPEuXwa6uxuwcuXfwum8E16v6qak\nJAlAeY61Lh91M6HkYTwPn4++K2r/Veaegv7+wYgEC7sQqSgpucOwjG4C04dvxCIhm5RSUsYxzryT\nIdAaBKIF5WGoD/cO0BfPA+BdzXH0BfF4fo5Nm54AYI/jrkDVInofv/nNZYyNXYToxVImvMlqPUVj\nici+s9KWkZF+sJYaW7s42lrMExPv4uLFRmk7nM51GBwMMTRQO/dH1q7W1g4prVgGUfscjlqEQs9D\n2fU7nWcxOJghpK1qF46ysm345JO/Yr73+9+Gy1URtnA6wCa3AcAODA9XQJsECACh0NvIyalEYaE+\nDqWOuRLX4+N7AJsTAQB70NsbwsmT6vWNFqIE4g/fiEVCtmtbtGgWenu1iVPLQYPVIiwB3T0B9OEe\ng562twNAJYB0ANEHcXNyruF//a+LXOKYsjPUv1iTrYFttPsnosgn5BOgWVuam/fg5MlhUBqyskB8\nqKtdPNlazMpvX399Az79dBSBwHwEAs+hu7s0QgMF7LnSRO1qb+8yrWGthfZeZ2V9heJiVaq+pGQR\nfvnLfZF8nUAA6O4W01a15zlx4g+gCwugzZKePduBe+5pxL/+6+fcZkiBOPBfWHgPPvqoWfe5Oub8\nvzyUDUQXgEOYmPg5863RQpRAHGK6gyLXA0YBSb3k8sMmAUXlXzFdUim7yBZQsRfEBV4gqt5NNaH0\nwCYCPELS0x+LeVDPTPQtllLfsrKgdmsXx0Inykpw20yaXETVLSqqFpboFFGX+cCuWfEf2XWBlwlP\nxXW5aJEreeEfa6VclT6o4oTKuInHT6Fr0+PFwf5oygQnMD34RlgSst0tQCU8CgpyMTDQC48nG59/\nPopgcB0AfUEXihTQxDrxDlvxKVt11YjjJf8AarIvAx8fuXJlDUpKcmO285JpGPG7u2hlz7UwKgua\nmTnLVrututiidaVZsQJlVN3Zs6nLi/89LRT0HHO8Nr5DdY/Emdq//vXZSFD6woWLTJlRCiUjWoUi\nxXHnnRkYGtLStgH6TF9C6v/f3tkHRXHmefw7MMBMQGSCJo2SFyFu4kvMwYaUqexhNhUhG/OyeruB\nXAxmFSVRINGrS21EIhViJWWqkhKV22zI7eqaPb293UvtOlWKqVQgf8TarSwbQmKyHGpWhYmKEEEZ\nhxn6/njo6bfnmWmGl2Hg96mylJ7up5/uwf7183v5/hLWY3BQXbHyYxBal9iz8PuXQI3LmdNWlTRZ\nJsU+dm2CiegwLYwEwHcT8PR7XnqpGK+/7sa1a48C+D4U2QTVx/opgGwAZxEXtwpDQ3/QnEU1Jg5H\nAOfPdyGU7x0Il+Vi1uCR5f/Ezp1FyMtbPGpDEUrDyKgBZTxXJF37Ql3rSB8aVl1skbrSwmVgud3N\n+POfz3CP93rjhX3DzbUe+u5vIm2k3t6bg70vRCJ7ol4ftbUlWLVqD3y+TWBuUh+A7wA8hsWL/yqs\nnuZdg+IqkqSZ8HjqkZISj/7+YmRkSJg7dwYnG6wARkMikrAhJifTxkgYET0E/vjHUixceAva2r7F\n4ODfwArnlP/UZQD+Pfiz3b4emZnF6OxMhNd7CxRjkp29FUuXZuLtt6/AqIZp9L2HznLhfz3ahvej\nwWpTorE6VnStTucJVFRs4n4WCitZY/feOwcff1yEgYEFYIZ6DpzOJpw7l4GEhH5I0hZddo/yJv3G\nGx9yx9OuMnp7b+Lu43AE4PVaS3FV9gcUI/oAzIVsemkUkSExZkYBzWhrO4E33gAyMx04e/YUfL57\nhvdbjuzsI6itLRmxURfFLIyoEiSFMDZwohhE7DBtjQT/P0DzcNBQu5T/GdgyPQlMwVL95fb53sH8\n+dWoq1uuqUw+Fsx40T58lD7GfX1e1NU1AmAPOZ7bRH0oNApmHxiTHr+ih8DZs+eRm7sRp05dgc12\nDbfemmJ6mETixhFJl4/XQ6Omph6vvXYYPl8qgFNgLsKvMDDwP8GUYklapwseK2/CyndkRL/KM4pO\nwQAAGwlJREFUMFcmK0ZGdLxRd0vr3uH3Rv8aTExSe38KYLOVQqt0LEmbAVwe7swHMM2v3w53UVT2\n2YKMjLNITc00dbLjMZLU6lCuR7V7XoDqIGKQaWsk+P8BeDLHvwKwAsA/gdfO86uvPME3Wre7GdXV\n+/H00/W4fFmGKgsOKLGFK1eAxkaza0ab837y5GX09irn4r9VKg3vtYw0RsC/B81ob5fh86mGsqen\nCqWl+9DQAIMrwczIBQCfGhO3mTE77PDhdvT1AayPxEao3x2TvFZ+9njexV13VePIkRrdmKFiHuoq\nQ/9Ad7m+xq5dzwWvh3f86tXLhP049Odk21gaq/H+5EOW98PpLEJ2dsawm4elXCv3tq3thKF4FPB4\n3uReqwircZ9wrkcyCjFOtCPn0WIkXclmz14dIuupUF60aIOck7NOTktbLfNaZwKrZG3nMkXsLJTQ\nmiqy96AMKG1UzQ3vQ10Pr61kuGwbVdTPON9tFqQ11HmNVuTPKuZ5iLoKasUB9dIXokwbkRCi1cyq\nUEKKoa5HewzvO9IK5onaqrIufaGzihSpmpkz18jp6U9wpTesXMNYyMIQk5dpu5LgvdWKupLl5t6K\no0fPgP9WD3zxxQ1Qs53MRUvAKpg7dYldM7wgu6jhvYKVQCvvbU8rFOhwBPDVV3Z88w2v4vwivN4M\n3RwBcdbTSIPakWK+blFXQW3AuE/3abiaj8rKBvzjHwP44INWOJ2v49FH70R2dmhZDGUVF8n1ysMB\ndVmWkZe3GHl5i/H000+ip+d2GBMpjL9D4eIlfX0XADBX3I4drfD71Xu1Y8ezAOp1Etyia+DXafAD\n8kRsM22NBCDKeOIvr48e/RIs5U/fLIZpOfUB4HerYywx/MweWg6L3RetPGzCxQhERsTYaW7WrCLw\nq2iL4XDcYJqXMrbXaw/64a0Gta24x5gL76AwPmK+bn6BmD5gHHTc6x7urBI8EampNyApyY97752D\nurov0dOzP7h/f38VDh1qR1HRPNx2m1gWQ2QUQ11zTU09du5s0gTZWeB3165C5OVlo7GxxnRVn376\nZ+TmbgzOWU2P5Sm5bkZnpxdudzP27GnSGQiAZS7t2VMctk9DuEZaCpTmOjWY1kbCSOi0ytegFT1T\neQvsoZMCMeb/LA7HN6ioKB2TeQPhYwQiI3L8+Jlg4yW2XwA8LaqEBKCiYrnuWNGKweG4yD2X9s3S\n7W5Gaen7uuB+a+sWXdxD3UccH2HXre3HzBFRAqB+B+uRnDyAu++uMTzc9Q16AH5dA7ADQ0PVaGxs\nx8WLBwHwZTFERjGUkOLOna0GocAqdHQUYvfuY4IEh7Xo709HS8v1wS0JCZeG/8ULgF8Hj2cNdu8+\nNqq+0WItNHW1RlIbU4ho+7tihaSkB4erWrV+1xdk4EGZSYY3yazildeUxtgsRx5xhbEWni85XIwg\nnDS1JK2VJcl4faovnzdf0Zis0ja0j1pUWaw9T6g5axvs2O3aKu4mTkziZzLwrzKTgd8bPFY/vjXp\nbvZnuzxz5prgPK02loqk+hvYpmt6pFYxb5NZxbQxXsG/91rFALUamvfdFYX83QsV73C5SkYUfyFi\nA1pJWGThwlvQ0nIBenfTGQCpAG4Aawz0a1x3XQd6ep4EkIh581Lw6KM5OHDgKDo61DdKRdE0EkS+\n5KoqYNeuQmFxWehUW8DjyQA/nlKN7Owj3PmKVicZGRlISzO77ZYuzQyqgX7++QXusdre0KGK75SW\noZ980qlr7arWsDyK+PgUXLv2HZiW1h1QagP4/Zit1zUAAdjtas9Sq5lekUm6q4WGK1bkY/HiD4NF\ndUwnzPhGvwk22zrIslZ4Uq8Y4HAEIuobzVZ2+9Dby+3Xinvuudly5hQRO5CRsEhtbQlWr34Hvb3a\nralITOzD/PnnkZlZjYqKZ7ixA62s82gFzUL5ki9eFHcN07rSjh8/g+++uwn6SnL+r4Ld/hVWr/4h\nN5bw2WdnoKb5qp+zlMzlhh4ImThw4JzGcBQLrlDtAhiq0FCJ54g6+d1334f46KOakEF//fj8c9nt\nnw8rlipsRVxcO8rL1c5zVlNFI6n+NhYa6sdI0vxbdbnZbF1ITn4Y/f1K4Zz6PSvjsXtgvW+0292M\n4uLX0d9/C1i9EHWRmzZEeykTSxw+zIToXK4S2eUqDgq5TSQzZ67hLvW17o9w8F0bofoab9WltppT\nMlW3lFYYUJsCm5OzznDMOo6rRN8b+vDhJo4L7CU5LW1lsJ+3FdeWCP218HqfvzScgloi2+0/lePj\nH5NTUh6OOFVU5BLcvn2vnJOzbriPt/qZ07nBdC79GM8J5y5Jm2VJMgr+mcezAr/3tbZz3SPkXprC\n2GRZ8ApDTEpmzSoyFUkBgN3+OB544E5L/Sp4AVRJWgsgzVAlrrgp8lFYyLKgCgu3obHR6JYCXK4n\ncc89twWD28bxHY7n4PU+CXXF0QzWtGkOFPedJJ1DQ8MzplXLyy8fGnZD+eBy+XD16i2aebLKYq3b\nhBWtZeKTTzrDFhZqVxqXL5+FzZakqb5eHvGKT5TFpF/ZBLB0aYZmhcWktR2Ob7Bw4QxdkyXenM+e\nPY/29iH4fDfC7CoEcnM3Yfbs6zUr2MiuR/3Oa4b/6HG51uDSpX0jHpeIDcjdFGPwfMnAVvj9/4bG\nxny0tq5DRsbBYEok7+HIz+J6BgDC5uOL/OpLltwe9EcXFm7jqqPqaxXY3+np9Vi8+A44HOC664zp\nv2YjlQ+/H8P9Ce4QuLbEKanjURE8kgrk3NxSdHRI0GaUeb35mD1brIGlHcPtbsbTT7+Lnh7zfjNm\nzDbFCKymHWv3Ya1QAZFLbt68UJl9RMwT7aUMMXJYdlORHB//U1mpwha7TLaOyBUQrnrWSnWtKNvH\nWNEuqhwPValtJZNooiqADx9uknNynpPT0kpkl6so6H4cSUW20cWkuO5G0m9BdD67/TE5J+e5kK5C\nXlW+uQq/bPh3i+fWeoFcTVMcMhIxjPmBOfqHoxW5jXBNiEQPrdzcjSH99lYeYqEewMoD+rrrnpK1\n8ic8QyK6ditSIsw4rJMTEtabHvCStFZevPh57hzT0kp0Y1tJ8Y30O9NKd0jSZsvGS7SPKtfynAyU\nyDbbY3JWVhEZiGkAuZtiGHO2TCQplnrC9Wmw0sdBlO0j8rErWKnUFo29dGmmqTjPWAUcqgLYqpSI\nWhVtA3DQMMoOeDzVGBz8O/cc2p4QHR1VcDqvcPcbaaGlMr81a4rQ3e0AcDO0rkKP503s3l1tKQW3\ns5Pf9CglJQDgt8GmUbIM2GxV3H2JKUa0rRQROeY3yMkjtBaJuJ3VojTe2KLiPKWIzOncEHIOVlvN\nqu1X+XMFtsuLFm0I+Wav/BFlZkVaaMnun/geiq4xJ2ddcAVltz/C3Ue0nUT8pj60kohhjG/1ly97\n0NXFb6ITjbmNNCBstSiNN/bq1e+CzxkA1cjKCi0uaOUtW99+VVzDwdq/qnUira1fo6fH2BMCkKQ0\nbtGh1UJLY4D58mUPAIm7b1vbCZSXLzOtwiRpLU6dGtQIW94E4AkA/605eisSE1MM9SIMEvGb+pCR\niHH4irFjU7g30VgtSuNhs10TfHITgFpkZlYLPmdYMVB6Q2JuywlshSR5gllayn1nGVnm78BoTIxK\nuiJhQ6VvSVubTdef2uUqR1ral+jtNQv7dXdvwoEDR02qv+3tV+Dx3AZ9Cu0WsB4qeVCy3JzOvbh6\nNfT9IaYmVCdBTCp4dQRW6h1yc0vR0nIjeA2anM738LvfsZ7KovRPUe1IRoZDp7Da0qLtWsjqGoAT\nSE4O4HvfS9cp1Cpv+ufOXcDJkzbNKoQZv127+AacJ37IWt96UFb2/eH03h4A9aZjs7PXIDU1AZ9/\nfgF+fxqY8GQRlFWMUu+icP31xejpMcZWAOBJAP8VvA/XXXcFnZ3X65pyhboGYupARoIYE0baFc/q\nmMYHd3Z2FXbtKuTm9jPZlFvBpNs9AK4iMTEOL71UgLy8xWHHMhbWdXWl6h7UkrQOwEzdNtZ+9S6T\nnIV57s1wOvdqOsktNwXEmeSKE1eudMPv/xPnjlRjxozP0df3PoDHAcwG0A8mz5EMoBgu17u4dGkf\n7r+/RqPxpNAMl6seS5bcEfyOVq9+F7295kI4u/0J3HffQsN9qAfQBJsNSEkZxJYtD4aVFSemANEN\niRBTASupq5Ew0nqH7dv3yjNmrJTj45+Q7fZH5KysVSPuJhfu3Dk56ywF5MOdT5tum5W1So6P36AL\nfvOD4qUy61K4QQZ+LJtlTTbLyckPC87Pr6HJyuJ3Y1SC5+o4o6/BIWKTuGgbKSL2Eaeuqn243e5m\nFBZuw/3316CwcBvc7uaw445ENdXtbsaBA+fQ1/cHBAKH4Pf/CV1ds/GXv7SNeCzx/s04fbofXm88\nkpL8utWA8frUKmXz+ZRVRmPjq2hqqsHJk3YEAm9r9hIFxbsB/AlsBbEIZgXYNzE0ZENh4TZ0dvbD\n6SwCc4kBTPzP/B3NnJkISdqi2y5Jm4PBc3YdGwHsBtABoDQ4pvE7JqYmFLgmRk24B3Ck7UytZjsB\nfEM1MPAL7NxZhLy8xcKx2tpOmFqO8s/NmhL19BxEU5P+GgBFq6oQihJrXNx5MPeM3h3jcARQXb3f\nIMWRYDgXLyheBuCF4X+L/9v6fDN1siWJiesxf/576Oz0cqU7UlMzUVv7gCF4vjIYIG9vHwKgNWBV\nYJpbAJBP2U3TADISxKgJ9zC32s7UCC/bSdRLWmSoBgYWCDu72e1l6O5ehqamTgB2fPzxXrz4Yhtq\najZy9ue/ie/eXQ1ZlocNhNrZbmgIANZB2/tZkjajvf0fOHXKBX020aOGWbP94+MfQWpqOgAffL6r\nuHJFuVeilQYQCGTpfvb53kFS0ibk5d2Exkbz/g5HQJiuXFfXCJ/vHcNWpQPdMQD5lN00DSAjQYya\ncKmrkTXbMdeBhOolHar3hNcbbxqrre0EuruXATgH5cE+MADs3Pks8vKaTfu3tp7hvol7vfHo7u4F\nz4gA7w4LD34YnPvJkwtgVmz9EYD1ANQHst3+HqqqHg4GhlkarfJpAdjbvH61YbOthSw/oxmX9Zj4\n7LOLWLJEhiStg8ej3rtw6cWhmj4BLGhfUfGU8HhiakBGghg14aQ6RuI24o2trTcQ9ZKurCwY7kmt\nV8cFHoLDccw0Fsv+6QR7yKoNewYGZqG6en9wX2X/3NyNXCNx5sxX6OqSASzgzr+3dwiffXYKgcB3\n6OvbAuAPnL02wmZ7ACkp/4K4uBncBkB6Q6y89dfC4VgJpzMV8+al4Ouvv9WsNtSe3YEA0NICSNIW\n5OSUIjU10/QdGbPT7r13DtraTnCvCQggLu5vePHFH1H663Qg2pFzYupjRRTQCmbZjiYZWCfHxz8m\np6WVyJL0Uzkx8Uey2gO6SXgelrWznZu1k5Cw3nQMa5pkltqYMePx4THC9ZZWspN+qJm7Mocq2eks\nsHQfQ2VW6edoPZvL/P00DfcNb5LNfd1fkhMTfxJR8yIiNqGVBDHuWBEFVKqIT5/uhywnYd68ZNTW\nFuv2YSsS5a3/AoAeAPMRCDQE28q6XOVYtOjs8NvyMWHFeWVlAT744C0MDflhdBMNDv7SFC9JTc0E\n8AD0Pc4fQlxcJ9ibfRuAZwGYVzIq7wBYCRarkHTn9fvXw+1uDvlmHk7qpLa2BKWl++DxVAM4y92H\n5+Izx4waDf1KNgHoh93eizvvnI3a2gpaQUwnom2lCIK1KV1relNXJK4Vtm/fO/yGq7wp80X9rIrO\n3XzzT2TgSe4YaWklliTK9SJ9aktPVs/QxDmmZNTzDncvCwu3yS5XkeVzmFdoYpFAYvpBdRJE1Kmr\na4THkwHjGz2TuFbz8D/5pFPzhnsBrNrYjNW0zDvuuB1AGvez3t6b8fzzR4P1HJWVBcjO1ktjZ2dv\nRXn5Ms32fAC1cDq7ANwIo6AfI2XU8w7FihX5OHKkFr/5zUbufJX2slrMMaPQ6cK5uaXIzd04opoX\nInYhdxMRdcRZNPoHp36/XgDzucdYTcusrCxAa+s+eDxmoT7gIXR05AfdTqFcZnl5elHFpUvvwttv\nf8oZdzOYjhJPK2lsxfKsuPgUzNlpBbDb9S1yWbrwpuEaETXVF7BW80LELmQkiKgjTl/VPzj1+2WA\nV3Rms60N9usGQmtKrViRj4YGoLp6P1pbH0cgkANRb29lf96DkLc9L4/FWNrbf4IrV2yQ5RugCu39\nGkxpdXwl3a3KtfMMytKlS4JqsSxdeNPw3LdBVC9CRmJqQgJ/RNRhqqf74PHog7mStBkNDSsFSq3b\nwOoNFCVWFkzOympHR8dBzv4Mp/NZZGXJmDt3ts5gsDoEY/2CWTU10uvbvfsYjh8/g+++uwmA4vJh\n83a5vkZl5T9bUruNBnqxwDIwWRA7mFuqAEA+li2rwUcf1fAHIGKbaAdFCEKW1b7RLlex7HKVyLm5\nG7mpq0pgdtGiDXJior7HtCS9YCnYrKSlagXqxipNNxShen+Ph0DiWKEX+SszzL9MBjbI6elPTJr5\nEmMLrSSImIFX8HX8eJfG566X3+bLZQNMM4lt164UjL0sjOONdH7G1QBf+nwrUlPPo6WlwTTeWKxi\nxgJ13vweFsyNtgmS9D4aGn48aVZAxNhAMQkiJhCJBBp7S2gf1KxiWNVOUlHjHFZiDlaoqanHzp1N\nGBhYAMUN09FxNDiu9m9jMPmNNz7kjjlZxPNWrMjHe++50dFxSbDHAgBH4fH8GC+/fIiMxBSDjAQR\nE1gRCeQZEpalA6iGQl/gZiWjyMoKYefOVgwMHNIcVYWOjkLs3n1Mty/PENXVcZT3LM5tomhsPA1R\nNhkzukz479QpfnovEbuQkSBiAisigWZD0gy/fxbs9j1wOOrg812Fz/dzKAZDlFGkNQq8DnXGlM+6\nukaDZhSgPDStrAZG09t7ohgYuAbgEoASADdDCVjrjW48BgevRGeCxLhBRoKICayIBOoNiSpw5/cD\n/f1M4C4jYz98vvfg8fTC6cwIvsWLVyNKFpWKcQUTSi3VqoghYK2mYbypqanHm2824urVRNhs15Ce\nLiM5OQFXr7qgj0c8B2A/mNFQ5nkCgUDfRE+ZGGfISBAxgZW3bb0hMUt3ezxvIiOjFF7vLHR3v43u\nbqCtTb8yMK9Gwq9gRAbM6TyBiopNlq5vNPGQsaKmph6vvtqCQOD94LZvv60C0ArgV4a9/wNMx0qZ\ncxmAQcTFOSZiqsQEQkaCiAnCvW273c24cOESHI4SeL2JADwA1gC4BiaFwd54T5/uR0+PPpNIuzIw\nrwrCr2B4BszpLMOLLy6L+oN/JOzZ04RA4JBh6w6w+8jj78Of+QAkg3XOe2v8JkhEBTISRExgDB5X\nVBRwXET1UN1MWkOgbbmZxB1fWRmYVwXmqm7jCoZvwJ6KKQMBKHGHbTAWyjFDy2MI6n0FgK0YHEwI\nq2ZLxBZkJIhJT7ge2aqLqBnAXgC8t+FqOJ17ceut6dzmQcrKwLwqyIck/Rpz5mzCjBmzhfGCyeAu\nGg1udzO83nTo4y+KQGAKmLy52tVOkjbjwoWLCAT00uk+Xz5JdEwxyEgQk55w6a/MRaSsIPgd4oB4\nZGdnoLZ2FZ5/Xhzb4K8KnpnyD726ukYMDb1r2LoDrFDOD6ZcWw2H4xssXDgDr7xShJ//XEZbm7nY\nb7LUdxBjAxkJYtITLv2VuYiUQPU2wSgBzJ07w1ImUayvCiJBnKElA3geyclv4Qc/ACoqSnWpv21t\n5iMmU30HMXrISBCTnnDpr5WVBWhuboDXC/BiCMBWSJInqA47HY1AOMRKvLcDyMfdd3+II0dqdJ/E\nQn0HMXrISBCTnnAPoxUr8rFgwUG0tABqSibzldvtn+LOO29Ebe3UdxmNBt491hbK8VYHk6m+gxg/\nSOCPiAnCie+JxPN27aKHllXc7ma8/PIhfPllH7zeW8AkzfPpPk5zyEgQU4bRqrgSDO19vHz5LIBE\npKbeELLPRTh9KyJ2ISNBEAQXtRlUBpTaCUnqQkPDGgurOLNCLxGbkJEgCIJLbm4pWlpuhD4JoAo5\nOd/ir39VixXHs6sfEX0ocE1MKcjtMXacPt0PfeU6AOzA6dNP6rZYUeglYhcyEkTMoxiGc+cu4ORJ\nm0622yjrTVhHlvkSJj6fTfezFYVeInaJi/YECGI0KP7wxsZX8cUXs019HVhl9rEozS62mTcvmbt9\ncPAq3O7m4M/p6YMAVoK1hN0GoBl2exmWLs2YgFkS4w0ZCSKm0Ut28BfG585Rj4NIqK0tRmLiesPW\nzfD5tgQNr9vdjN//vgfA/4IZiVcB/BZ+/104frxrQudLjA9kJIiYRu8P57s9Ojq6dG++hDVWrMjH\n/PlxYIWJNcN/rwSQH4w3VFcfhM/3S8ORvwDQRTGJKQIZCSKm0fvDCwA8a9hjKwYGNpHLKULmzp0N\noBbMSNRCqWhX4g1ffnlecGQfxSSmCGQkiJimsrIA2dmKpHU+mCCd9s33IWjffImRob+/DCaJshxu\ndzOuXRNpPv0fKiqWj/8EiXGHspuImMaoH9TW1ovu7rdN+9FbbWSE0mfKzd0IYAvMgoplSEqSKaNs\nikDFdMSUgjScJg6Xaw16e/eB9fI4BrX50Hnk5trx6ad7ozo/YmyglQQxpSBl0onDZlPamuZDVd8F\ngJV45ZXNUZgRMR7QSoIgiIjgy3aUISvrIjo6fh+taRFjDBkJgiAiQhUAnAPF1SRJ59DQQL07phJk\nJAiCiBiSZ5/6kJEgCCIkNTX12LOnCX6/E3b7AMrLl6GmZmO0p0VMEGQkCIIQUlNTjx07WuH3q5pY\ndvuzqKpaQoZimkBGgiAIIbNmFaG7+5Bpe3p6MS5ePBiFGRETDVVcEwQhxO93CrY7JngmRLQgI0EQ\nhBC7fUCw3TvBMyGiBRkJgiCElJcvg92uF02028tQXk4ZTNMFikkQBBESlt3UDL/fAbvdi/LyfApa\nTyPISBAEQRBCyN1EEARBCCEjQRAEQQghI0EQBEEIISNBEARBCCEjQRAEQQghI0EQBEEIISNBEARB\nCCEjQRAEQQghI0EQBEEIISNBEARBCCEjQRAEQQghI0EQBEEIISNBEARBCCEjQRAEQQghI0EQBEEI\nISNBEARBCCEjQRAEQQghI0EQBEEIISNBEARBCCEjQRAEQQghI0EQBEEIISNBEARBCCEjQRAEQQgh\nI0EQBEEIISNBEARBCCEjQRAEQQghI0EQBEEI+X/3Gk8knTAR/AAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 79 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's get a baseline tour with `nn_tsp`:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(nn_tsp, USA_big_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAFgREgAAq38Bkm7vtBpG4wQAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1089 city tour with length 52919.1 in 0.297 secs for nn_tsp\n" + ] + } + ], + "prompt_number": 80 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now try to improve on that with `repeat_100_nn_tsp` and with `repeat_5_altered_nn_tsp` (which will take a while with over 1000 cities):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(repeat_100_nn_tsp, USA_big_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1089 city tour with length 51166.0 in 24.777 secs for repeat_100_nn_tsp\n" + ] + } + ], + "prompt_number": 81 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(repeat_5_altered_nn_tsp, USA_big_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1089 city tour with length 44550.9 in 27.845 secs for repeat_5_altered_nn_tsp\n" + ] + } + ], + "prompt_number": 82 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again we see that we do better by spending our run time budget on alteration rather than on repetition. This time we saved over 8,000 miles of travel in half a minute!" + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + ">>> Greedy Algorithm (`greedy_tsp`)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At the start of the *Approximate Algorithms* section, we mentioned two ideas:\n", + "\n", + "1. **Nearest Neighbor Algorithm:** Make the tour go from a city to its nearest neighbor. Repeat.\n", + "2. **Greedy Algorithm:** Find the shortest distance between any two cities and include that in the tour. Repeat.\n", + "\n", + "It is time to develop the *greedy algorithm*, so-called because at every step it greedily adds to the tour the edge that is shortest (even if that is not best in terms of long-range planning). The nearest neighbor algorithm always extended the tour by adding on to the end. The greedy algorithm is different in that it doesn't have a notion of *end* of the tour; instead it keeps a *set* of partial segments. Here's a brief statement of the algorithm:\n", + "\n", + "> *Greedy Algorithm: Maintain a set of segments; intially each city defines its own 1-city segment. Find the shortest possible edge that connects two endpoints of two different segments, and join those segments with that edge. Repeat until we form a segment that tours all the cities.*\n", + "\n", + "On each step of the algorithm, we want to \"find the shortest possible edge that connects two endpoints.\" That seems like an expensive operation to do on each step. So we will add in some data structures to enable us to speed up the computation. Here's a more detailed sketch of the algorithm:\n", + "\n", + "1. Pre-compute a list of **edges**, sorted by shortest edge first. The list contains one edge for every distinct pair of cities—if it contains `(A, B)` then it does not contain `(B, A)`, and it never contains `(A, A)`.\n", + "2. Maintain a dict that maps **endpoints** to **segments**, e.g. `{A: [A, B, C, D], D: [A, B, C, D]}`. Initially, each city is the endpoint of its own 1-city-long segment, but as we join segments together, some cities are no longer endpoints and are removed from the dict.\n", + "3. Go through the edges in shortest-first order. When you find an edge `(A, B)` such that both `A` and `B` are endpoints of different segments, then join the two segments together. Maintain the endpoints dict to reflect this new segment. Stop when you create\n", + "a segment that contains all the cities.\n", + "\n", + "\n", + "Let's consider an example: assume we have seven cities, labeled A through G. Suppose CG happens to be the shortest edge. We would add the edge to the partial tour, by joining the segment that contains C with the segment that contains G. In this case, the joining is easy, because each segment is one city long; we join them to form a segment two cities long. We then look at the next shortest edge and continue the process, joining segments as we go, as shown in the table below. Some edges cannot be used. For example, FD cannot be used, because by the time it becomes the shortest edge, D is already in the interior of a segment. Next, AE cannot be used, even though both A and E are endpoints, because it would make a loop out of ACGDE. Finally, note that sometimes we may have to reverse a segment. For example, EF can merge AGCDE and BF, but first we have to reverse BF to FB. \n", + "\n", + "\n", + "\n", + "
Shortest EdgeUsage of edgeResulting Segments\n", + "
A; B; C; D; E; F; G\n", + "
CGJoin C to GA; B; CG; D; E; F\n", + "
DEJoin D to EA; B; CG; DE; F\n", + "
ACJoin A to CGB; ACG; DE; F\n", + "
GDJoin ACG to DB; ACGDE; F\n", + "
FDDiscardB; ACGDE; F\n", + "
AEDiscardB; ACGDE; F\n", + "
BFJoin B to FBF; ACGDE\n", + "
CFDiscardBF; ACGDE\n", + "
EFJoin ACGDE to FBACGDEFB\n", + "
\n", + "\n", + "Here is the code:\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def greedy_tsp(cities):\n", + " \"\"\"Go through edges, shortest first. Use edge to join segments if possible.\"\"\"\n", + " edges = shortest_edges_first(cities) # A list of (A, B) pairs\n", + " endpoints = {c: [c] for c in cities} # A dict of {endpoint: segment}\n", + " for (A, B) in edges:\n", + " if A in endpoints and B in endpoints and endpoints[A] != endpoints[B]:\n", + " new_segment = join_endpoints(endpoints, A, B)\n", + " if len(new_segment) == len(cities):\n", + " return new_segment\n", + " \n", + "# TO DO: functions: shortest_edges_first, join_endpoints" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 83 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**Note:** The `endpoints` dict is serving two purposes. First, the keys of the dict are all the cities that are endpoints of some segments,\n", + "making it possible to ask \"`A in endpoints`\" to see if city `A` is an endpoint. Second, the values of the dict are all the segments, making it possible to ask \"`endpoints[A] != endpoints[B]`\" to make sure that the two cities endpoints of different segments, not of the same segment.\n", + "\n", + "The `shortest_edges_first` function is easy: generate all `(A, B)` pairs of cities, and sort by the distance between the cities. (Note: I use the conditional `if id(A) < id(B)` so that I won't have both `(A, B)` and `(B, A)` in my list of edges, and I won't ever have `(A, A)`.)" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def shortest_edges_first(cities):\n", + " \"Return all edges between distinct cities, sorted shortest first.\"\n", + " edges = [(A, B) for A in cities for B in cities \n", + " if id(A) < id(B)]\n", + " return sorted(edges, key=lambda edge: distance(*edge))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 84 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the `join_endpoints` function, I first make sure that A is the last element of one segment and B is the first element of the other, by reversing segments if necessary. Then I add the B segment on to the end of the A segment. Finally, I update the `endpoints` dict. This is a bit tricky! My first thought was that A and B are no longer endpoints, because they have been joined together in the interior of the segment. However, that isn't always true. If A was the endpoint of a 1-city segment, then when you join it to B, A is still an endpoint. I could have had complicated logic to handle the case when A, B, or both, or neither were 1-city segments, but I decided on a different tactic: first unconditionally delete A and B from the endpoints dict, no matter what. Then add the two endpoints of the new segment (which is `Asegment`) to the endpoints dict. One or both of them might be A or B, but we don't need conditional logic to check." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def join_endpoints(endpoints, A, B):\n", + " \"Join B's segment onto the end of A's and return the segment. Maintain endpoints dict.\"\n", + " Asegment, Bsegment = endpoints[A], endpoints[B]\n", + " if Asegment[-1] is not A: Asegment.reverse()\n", + " if Bsegment[0] is not B: Bsegment.reverse()\n", + " Asegment.extend(Bsegment)\n", + " del endpoints[A], endpoints[B]\n", + " endpoints[Asegment[0]] = endpoints[Asegment[-1]] = Asegment\n", + " return Asegment" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 85 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try out the `greedy_tsp` algorithm on the two USA maps:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(greedy_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 16087.5 in 0.007 secs for greedy_tsp\n" + ] + } + ], + "prompt_number": 86 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(greedy_tsp, USA_big_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nrgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1089 city tour with length 46981.5 in 1.383 secs for greedy_tsp\n" + ] + } + ], + "prompt_number": 87 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The greedy algorithm is worse than nearest neighbors on the small map, but better on the big one. Let's see if the *alteration* strategy can help:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def altered_greedy_tsp(cities):\n", + " \"Run greedy TSP algorithm, and alter the results by reversing segments.\"\n", + " return alter_tour(greedy_tsp(cities))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 88 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_greedy_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nu/JgCFQkPJXUOTkR2LEjHzExiVi2zI6qVf3bTuXKbAPzyivANdewd1jHjv6PRzCGgwfZyueKK4Bf\nfuHvsygrVgDNmwO1axszPq2xpEhoWcBUtH92To4N2dlutG2rT6aC0iymYkU3evQIbJs9bTagoPTz\nRMYnts2cye1ltZ6m22z+i4S3pb8qVVKweHFgNyJhYcDo0Xyh6dsXmDoVGDDA780IOrNuHQvEI4/w\nsqi3oPTChUDvwJPwzI/RQZFASEgY6zW4nJAwVvV9/fMPUe3aHPzUGm8WD7GxoykqKqtYkMwfekVc\nVvoPBVBPWx11B+8nx48T1a1LtHq19vs6epQoOtq/92iZwPDHH0SNGhGNHcuBcMGczJ9PdNllRF99\ndenXdelC9PPP+ozJCCw5k9AzbhATAzz7LKc8zp+v+uaLUXIW40mnrFXLjttuA157zf+77gYNagJ7\nSrflKyiogZUrgc6d1Ri5/4wdyyaLHTpov69Alpu0TGC46ipeorj1Vg5of/yxBLTNBBHwxhvAW28B\nDselz5GTJ4FNm4Bu3fQbn95YUiS0rqQtyciRbNmxaBECXvbxleRku9fljMWLudDv4EEWLV9zsRtf\n3w33L+YYBFE4wsIK0KBBDTSJ74abbgLmzgUSElT9CGWyYQPw5Zd8gdSDQERC6xuR2Fj+TocM4b//\nd99JQNsM5OUBQ4cCq1cDy5eXXYP1669cUFcyThFSGD2VCZSMjCyqXz+VWrTwz/01UObOJWrblig/\nX9PdXJL9+4natCEaMUKdvPuffy6d7601BQVE111H9N57+u3zwgWiihX9e493d9fRqh9nBQVE6elE\nDRsSrVql6qYFPzl2jOj664n69SM6c+bSr/XUM9WrN5ZatAjteibLigQR0W23EX39tT778lzcPvhA\nn/0pceIEkd1ONGAAUU5O8NtbtowoJoZo9Gh9ivg++4yofXt9xfbiRSKbzf/3ZWRk0VVXpVLt2trf\niHz7La9/z5mj2S6ES7B9O1Hz5kRPP132sVne7OEtLRI9ehAtXKjf/lat4grvU6f026c3Llwguv12\nvus5eTL47U2alEU2m/YH/enTRA0aEC1dqupmy6SggD9TIEHiX3/lmwM9WLuWA9rjxklAW08WLeIb\npenTfXu90a4MemN8HmQQnDqlbX59STp25P4TL7+s3z69UbkyMGcOV3za7VzgEwwOhxNut7eU4oXB\n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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 14220.1 in 0.052 secs for altered_greedy_tsp\n" + ] + } + ], + "prompt_number": 89 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_greedy_tsp, USA_big_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "1089 city tour with length 43716.7 in 7.309 secs for altered_greedy_tsp\n" + ] + } + ], + "prompt_number": 90 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's the best result yet on the big map. Let's look at some benchmarks:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "algorithms = [altered_nn_tsp, altered_greedy_tsp, repeated_altered_nn_tsp]\n", + "\n", + "benchmarks(algorithms)\n", + "print('-' * 100)\n", + "benchmarks(algorithms, Maps(30, 120))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_nn_tsp | 4812.1 \u00b1 263 ( 4091 to 5320) | 0.012 secs/map | 30 \u2a09 60-city maps\n", + " altered_greedy_tsp | 4780.0 \u00b1 297 ( 3934 to 5383) | 0.013 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp | 4628.8 \u00b1 233 ( 3925 to 5120) | 0.238 secs/map | 30 \u2a09 60-city maps\n", + "----------------------------------------------------------------------------------------------------\n", + " altered_nn_tsp | 6622.8 \u00b1 261 ( 6064 to 7155) | 0.054 secs/map | 30 \u2a09 120-city maps\n", + " altered_greedy_tsp | 6577.3 \u00b1 223 ( 6184 to 7091) | 0.060 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp | 6441.1 \u00b1 215 ( 6000 to 6946) | 1.124 secs/map | 30 \u2a09 120-city maps\n" + ] + } + ], + "prompt_number": 91 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So overall, the altered greedy algorithm looks slightly better than the altered nearest neighbor algorithm and runs in about the same time. However, the repeated altered nearest neighbor algorithm does best of all. \n", + "\n", + "What about a repeated altered greedy algorithm? That might be a good idea, but there is no obvious way to do it. We can't just start from a sample of cities, because the greedy algorithm doesn't have a notion of starting city.\n", + "\n", + "Visualizing the Greedy Algorithm\n", + "---\n", + "\n", + "I would like to see how the process of joining segments unfolds. Although I dislike copy-and-paste (because it violates the *[Don't Repeat Yourself](http://en.wikipedia.org/wiki/Don%27t_repeat_yourself)* principle), I'll copy `greedy_tsp` and make a new version called `visualize_greedy_tsp` which adds one line to plot the segments several times as the algorithm is running:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def visualize_greedy_tsp(cities, plot_sizes):\n", + " \"\"\"Go through edges, shortest first. Use edge to join segments if possible.\n", + " Plot segments at specified sizes.\"\"\"\n", + " edges = shortest_edges_first(cities) # A list of (A, B) pairs\n", + " endpoints = {c: [c] for c in cities} # A dict of {endpoint: segment}\n", + " for (A, B) in edges:\n", + " if A in endpoints and B in endpoints and endpoints[A] != endpoints[B]:\n", + " new_segment = join_endpoints(endpoints, A, B)\n", + " plot_segments(endpoints, plot_sizes, distance(A, B)) # <<<< NEW\n", + " if len(new_segment) == len(cities):\n", + " return new_segment\n", + " \n", + "def plot_segments(endpoints, plot_sizes, dist):\n", + " \"If the number of distinct segments is one of plot_sizes, then plot segments.\"\n", + " segments = set(map(tuple, endpoints.values()))\n", + " if len(segments) in plot_sizes:\n", + " map(plot_lines, segments); plt.show()\n", + " print('{} segments, longest edge = {:.0f}'.format(\n", + " len(segments), dist))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 92 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "visualize_greedy_tsp(USA_map, (60, 40, 20, 10, 5, 2));" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "60 segments, longest edge = 104\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "40 segments, longest edge = 148\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "20 segments, longest edge = 210\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nPQIAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 segments, longest edge = 255\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nD0L/DHvVVmpoAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "5 segments, longest edge = 335\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "2 segments, longest edge = 597\n" + ] + } + ], + "prompt_number": 93 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">>> Divide and Conquer Strategy\n", + "===\n", + "\n", + "The next general strategy to consider is *divide and conquer*. Suppose we have an algorithm, like `alltours_tsp`, that is inefficient for large *n* (the `alltours_tsp` algorithm is O(*n!*) for *n* cities). So we can't apply `alltours_tsp` directly to a large set of cities. But we can divide the problem into smaller pieces, and then combine those pieces:\n", + "\n", + "1. Split the set of cities in half.\n", + "2. Find a tour for each half.\n", + "3. Join those two tours into one.\n", + "\n", + "The trick is that when *n* is small, then step 2 can be done directly. But when *n* is large, step 2 is done with a recursive call, breaking the half into two smaller halves.\n", + "\n", + "Let's work out by hand an example with a small map of just six cities. Here are the cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "cities = list(Cities(6))\n", + "plot_labeled_lines(cities)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nqVTwRMBKWRVRioh45ZVXYtOmTfHHH3/Eiy++WPQ4wAopfPu2nKdKXHL27Nl444034qGHHoqJiYkO\nTwp0QqG3w13uUyUu2bBhQ4yPj8ehQ4dECdaoQrdvy32qxKlTpyLiz2tKR44c8RhlWMMKPVNazlMl\nWq1W7Nq1K86dOxfr16+P0dHReOaZZzo1ItBhhUZpOU+V6OnpiePHj3dqJKBghW7fPFUC+KsUn755\nqgRwSeFRArjSqvnyJNAdRAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBU\nRAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRE\nCUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJ\nSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlI\nRZRY06anp2PLli1x0003xZkzZ4oeh2UQJda0Rx55JObm5mLz5s1Fj8Iy9RY9AKykbdu2FT0C/5Iz\nJSAVZ0qsWrXafFSrM9Fs9kZf30JUKqMxNraz6LG4TqLEqlSrzcfExNGo1w9eXqvXJyMihGmVs31j\nVapWZ9qCFBFRrx+MqanZq/6bVqu10mNxA4gSq1KzufRJfqOxru24Wq3GXXfdFd9991088MADsWfP\nnk6Mx3WwfWNV6utbWHK9VFpsO65UKlGpVDoxEjeIMyVWpUplNAYHJ9vWBgf3Rrk8UtBE3Cg9LRtt\nVqlabT6mpmaj0VgXpdJilMsjLnKvAaIEpGL7BqQiSkAqogSkIkpAKqIEpCJKQCqiBKQiSkAqogSk\nIkpAKqIEpCJKQCqiBKQiSkAqogSkIkpAKqIEpCJKQCqiBKQiSkAqogSk8j+x4mdk3Oib4QAAAABJ\nRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 94 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Step 1 is to divide this set in half. I'll divide it into a left half (blue circles) and a right half (black squares):" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(cities, 'bo', [1, 3, 4], 'ks', [0, 2, 5])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nf/580SsBHbIofvbt7NmzsXLlyoi4GKi77rornn322YK3AjphUVwp/TdIMzMzMTMzE8uWLSt4I6BT\nFkWUIiKeeeaZWLVqVfz+++/x5JNPFr0O0CGFR6lWG4u+vq3R2zsSfX1bo1Yba/u4999/P44ePRo9\nPT3x5ptvLvCWwEIpNEq12liMjh6MEycm4vTp8ThxYiJGRw/OG6be3t4YHh6Ozz//fIE3BRZKoVGq\n1/dEo/F2y6zReDvq9b0tsyNHjkTExXtKu3bt8t8owxJW6K/DbTSWzzP/343sZrMZIyMjcebMmVix\nYkXcd9998cgjjyzUisACKzRK5fK5eeYzc38ulUqxb9++hVoJKFihx7dqdXOUyztaZuXyC1Gtbipo\nI6BohX94slYbi3p9bzQay6JcnolqdVPUai8VuRJQoMKjBPBHhX9OCeCPRAlIRZSAVEQJSEWUgFRE\nCUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJ\nSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlI\nRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZSAVEQJSEWUgFRECUhF\nlIBURAlIRZSAVEQJSEWUgFRECUhFlIBURAlIRZRY0ur1eqxduzZ6enpienq66HW4DKLEknb33XfH\n7t27Y82aNUWvwmUqF70AdNLg4GDRK/A3uVICUhElFq1abSz6+rZGb+9I9PVtjVptrOiVuAoc31iU\narWxGB09GI3GxNxsdHRHRIxFrfZScYtxxVwpsSjV63ui0Xi7ZdZovB31+t55n9NsNju9FleBKLEo\nNRrL55kva/n6rbfeiptuuimOHTsWd9xxR2zfvn0h1uMKlJq+fbAI9fVtjRMnJi6Z33DDP+Pnn/9V\nwEZcLa6UWJSq1c1RLu9omZXLL0S1uqmgjbhaXCmxaNVqY1Gv741GY1mUyzNRrW5yk3sJECUgFcc3\nIBVRAlIRJSAVUQJSESUgFVECUhElIBVRAlIRJSAVUQJSESUgFVECUhElIBVRAlIRJSAVUQJSESUg\nFVECUhElIBVRAlIRJSCV/wByYElaZqi6xQAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 95 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Step 2 is to find a tour for each half:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(cities, 'bo-', [1, 3, 4, 1], 'ks-', [0, 2, 5, 0])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAEACAYAAAD1BmDyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4zWf+//HnSWJfSqIEtY1Ua2/GErXHNsReOlRTjaLa\n0pqrvmUotZUqhp+lqigdRSf2LRhlilqKUFVJ0bSjNE3tEQ0h5+T8/rgnreWELOec+/M5n/fjuuaa\ncSTnvK+m88r9vj/3YnM6nU6EEMIg/HQXIIQQd5JQEkIYioSSEMJQJJSEEIYioSSEMBQJJSGEoUgo\nCSEMRUJJCGEoEkpCCEORUBLiIZKSkmjRogWVKlViwIABOBwO3SX5NAklIR5i4sSJdOzYkfj4eK5c\nucK6det0l+TTJJSEeIhDhw7x8ssvU6RIESIjIzl48KDuknyahJIQD3Dz5k0uXLhAiRIlAKhevTpf\nffWV5qp8m4SSsKyQkBCKFClKQEABAgIKEhBQgCJFihISEnLX18lBGt4loSQsKynpV27cSMXhuI3D\ncQuH4zY3bqSSlPTr719TqFAhSpcuzdWrVwGIj48nLCxMV8mWIKEkLOvWrfRsvR4WFsaCBQtITU1l\n+fLlNGrUyBvlWZaEkrAwW7ZeHz16NFu2bKF69eqULFmS7t27e740C7PJyZPCqgICCuBw3L7vdZvN\nj5SUaxQtWlRDVUJGSsKyChTI5/J1Pz8bNWvWZMOGDV6uSICEkrCwsmWDKVy4CH5+AYANf//8FC5c\nhMqVK7NkyRKGDx9Ot27dOHfunO5SLUVCSVhWQkICqam/sXVrDG3btsFuv0Vq6m8kJCTQqlUrjh8/\nTmhoKKGhocyYMQO73a67ZEuQUBKWZ7fbCQgIuO/1AgUKMHbsWPbv309MTAwNGjTg0KFDGiq0Fgkl\nYXnp6ekuQylTtWrV2LFjB8OGDaNr164MHjyYa9euebFCa5FQEpZnt9vJl8/1pHcmm81GZGQkcXFx\npKenU6NGDaKjo2W1twdIKAnLe9hI6U6BgYEsWLCAlStX8u677xIREcGPP/7o4QqtRUJJWF5Wc0oP\n0qRJE44ePUrLli1p2LAhkydP5vbt+9c8iZyTUBKWl532zZV8+fIxYsQIDh8+zL59+wgNDWXv3r0e\nqNBaJJSE5eWkfXOlSpUqbN68mfHjx9O7d28GDBjA5cuX3VihtUgoCcvLTft2L5vNRs+ePYmPj6dw\n4cLUrFmTpUuXykR4LkgoCcvLbfvmSvHixZk9ezabN29m1qxZtG7dmlOnTrnlva1CQklYXl7bN1fq\n16/PwYMH6dq1K02aNOGdd94hLS3NrZ/hqySUhOW5o31zJSAggKFDh3Ls2DHi4uKoXbs2O3bscPvn\n+BoJJWF57mzfXHnsscdYs2YNM2fOZMCAAURGRnL+/HmPfZ7ZSSgJy/NE++ZKp06diIuLo1y5ctSu\nXZsFCxaQkZHh8c81GwklYXmeat9cKVKkCFOnTmXHjh0sWbKEZs2a8e2333rls81CQklYnqfbN1fq\n1KnDvn376Nu3L61bt2bEiBGkpqZ6tQajklASluet9u1efn5+DBo0iG+//Zaff/6ZWrVqERMT4/U6\njEZCSVieN9s3V8qUKcPy5ctZsGABf/vb3+jZsyeJiYna6tFNQklYno72zZW2bdty/PhxatSoQd26\ndZk9ezYOh0N3WV4noSQsT1f75kqhQoWYMGECX375JWvXriUsLIwjR47oLsurJJSE5elu31ypXr06\nX3zxBUOGDCEiIoKhQ4eSkpKiuyyvkFASlmeU9u1eNpuNqKgo4uLi+O2336hZsyZr1qzx+U2+EkrC\n8ozUvrlSqlQpPv74Y5YvX86YMWPo3LkzZ86c0V2Wx0goCcszYvvmSvPmzTl27BiNGzemfv36TJ06\nlfT0dN1luZ2EkrA8o7ZvruTPn59Ro0Zx8OBBdu7cSb169Thw4IDustxKQklYntHbN1eqVq3Ktm3b\nGDVqFD169GDQoEFcvXpVd1luIaEkLM9MI6U72Ww2evfuTXx8PP7+/tSoUYMVK1aYfiJcQklYnlnm\nlLJSokQJ5s2bx/r165k6dSrt2rUjISFBd1m5JqEkLM+M7ZsrYWFhxMbG0r59exo1asTEiRO5deuW\n7rJyTEJJWJ5Z2zdXAgICGDZsGEePHiU2Npa6deuya9cut7z3888/z5NPPknDhg0ZM2aMW97TFQkl\nYXlmb99cqVixIhs2bGDKlCn07duXqKgoLl26lKf3jIyM5OTJk+zdu5fY2Fh27tzppmrvJqEkLM9X\n2jdXunXrRlxcHIGBgdSsWZPFixfn+rTLDh06AGpZQps2bdi9e7c7S/2dhJKwPF9q31wpVqwYM2bM\nYNu2bcyfP5+WLVsSHx+f6/e7desWS5cupVOnTm6s8g8SSsLyfLF9cyU0NJQDBw7Qq1cvWrRowdtv\n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\nAX6RLQawawgYAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 96 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Step 3 is to combine the two halves. We do that by choosing an edge from each half to delete (the edges marked by red dashes) and replacing those two edges by two edges that connect the halves (the blue dash-dot edges). Note that there are two choices of ways to connect the new dash-dot lines. Out of all the choices, find the one that yields the shortest tour." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# One way to connect the two segments, giving the tour [1, 3, 4, 0, 2, 5]\n", + "plot_labeled_lines(cities, 'bo-', [1, 3, 4], 'ks-', [0, 2, 5],\n", + " 'b-.', [0, 4], [1, 5],\n", + " 'r--', [1, 4], [0, 5])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAEACAYAAAD1BmDyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xlc1NX+x/HXAOKGBmJaSlqm5o7kllqSSybkWnY1NbM0\nV5K63vTnzs0lu3YzlczQNE1J3PfrdUUTzTUyJTUtN9wVwg1hYH5/nPRK4gLMzPl+Zz7Px6OHt3GY\n7+dKvjnf8z3ncyw2m82GEEIYhIfuAoQQ4k4SSkIIQ5FQEkIYioSSEMJQJJSEEIYioSSEMBQJJSGE\noUgoCSEMRUJJCGEoEkpCPMCZM2cIDg6mbNmy9OjRg4yMDN0luTQJJSEeYNSoUbzyyiskJCRw+fJl\nlixZorsklyahJMQD7Ny5k549e1K4cGG6dOnCjh07dJfk0iSUhLiPGzducP78eXx9fQGoXLkyP/zw\ng+aqXJuX7gKE0KVbt27s2RPPqVNJ2GwWLBYbAQF+1KpVk2+++eb2+6SRhnNJKAm3tWdPPPv3/5Tl\nteTkE1n+vWDBgpQoUYKkpCT8/PxISEigXr16zizT7cjtm3Bbp04l/fm/igL5b7+emJiU5X316tUj\nKiqKa9euMXfuXJ577jnnFemGJJSE27LZLMAjPMskNlHs9uuZmZYs7xs2bBirV6+mcuXK+Pn50a5d\nOydX6l7k9k24MW/gv3gzj/ycuf1qauplrl69io+PDwClSpVi8+bNmmp0PzJSEm7riScKASPx4nOs\nd7xeoIAnVatWZdmyZbpKc2sSSsJt1apVk2rVzlLMpwR45sfPrwzVqgXStm0bZs6cycCBA2nbti0n\nT57UXapbscjBAcLtrV0Ln36qfr3DzZs3GTduHJMnT2bIkCH0798fLy+Z8XA0GSkJt5GcDNHR2fyG\n1QrZhE3+/PkZOXIk27ZtY9WqVdSpU4edO3c6vlA3J6Ek3MbVq/D773DXvUHz5rBgwT2/rmLFiqxf\nv54BAwbQpk0b+vXrxx9//OHYYt2YhJJwGwEBMHQoWCx/+Q0vLyhc+L5fa7FY6NKlCwcOHCA9PZ0q\nVaoQExMjq70dQOaUhMiFuLg4evfuTUBAAF988QXlypXTXZLLkJGScFnJyXD6tGM+u2HDhuzdu5cX\nX3yRunXrMnbsWNLS0hxzMTcjoSRcUnKymiqaNctx18iXLx+DBg1i165dxMXFERQUxNatWx13QTch\nt2/C5WRmwgsvQO3a8Pnn2cwhOYDNZmPRokW8//77tGjRgk8++QR/f3/HX9gFyUhJuBwPD5gyJQeB\nNH06fPBBnq5psVho3749CQkJFCpUiKpVqzJ79myZCM8FCSXhkgIDczBCunFDrVWyg6JFizJp0iRW\nrlzJxIkTadq0KYcOHbLLZ7sLCSUh7rF4Mi9q167Njh07aNOmDQ0bNmTEiBGkpqba9RquSkJJmF5y\nMoweDbk+ZCQ93e6hBODl5UV4eDjx8fEcOHCA6tWrs379ertfx9VIKAnT8/aGYsXUXFKuWK2QL59d\na7pTQEAAixYtYsKECfTo0YMuXbpw7tw5h13P7CSUhOkVKgR9++bhKZsDbt+y07JlSw4cOECpUqWo\nXr06UVFRZGZmOvy6ZiNLAoS4eVNtiCtQwGmX3LdvH7169cLDw4OpU6dSvXp1p13b6GSkJEwnORl+\n/NGOH5g/v1MDCaBGjRrExcXRtWtXmjZtyqBBg7h27ZpTazAqCSVhKrdWas+fr7uSvPPw8KBXr178\n/PPPnDp1imrVqrFq1SrdZWknt2/CVF55BcqXd95KbWdat24dffv2JTAwkIkTJ1K6dGndJWkhIyVh\nKlFRrhlIAC+99BL79u2jSpUqBAYGMmnSJDJyvc7BvGSkJIQB/fLLL/Tp04erV6/y1VdfUatWLd0l\nOY2MlITo1w9mz9ZdRRaVK1dm06ZNhIWFERoaSnh4OCkpKbrLcgoJJWFY165Bnz5w/bqDL3T1ajY9\ncvWzWCx069aNAwcOcPXqVapWrcqiRYtcfpOvhJIwrEKFoFkzKFjQwRdy0uLJ3CpevDhff/01c+fO\nZfjw4bRq1Ypjx47pLsthJJSEYVks8NprTpjUdtDeN3tr1KgR8fHxNGjQgNq1a/Ovf/2L9PR03WXZ\nnYSSEA7e+2ZP3t7eDBkyhB07drBhwwZq1arF9u3bdZdlVxJKwjCSk2HFCg0XNvjtW3aefvpp1qxZ\nw5AhQ3jttdfo1asXSUlJusuyCwklYQjJyfDyy7Bxo4aLx8RASIiGC+eNxWKhY8eOJCQk4OnpSZUq\nVYiOjjb9RLisUxKG8M474OMDEye65sJIZ9ixYwe9evXi0Ucf5csvv6R8+fK6S8oVCSVhCFeuqFCS\nQMobq9XKxIkT+fjjjwkPD2fgwIHkz59fd1k5IrdvwhCKFJFAsgcvLy8GDBjA3r172b17N4GBgcTG\nxtrlszt37kylSpWoW7cuw4cPt8tnZkdCSQgXVKZMGZYtW8a4cePo2rUr3bp14+LFi3n6zC5dunDw\n4EG2bt3K7t272bBhg52qzUpCSTid1arWH509q7sS19e2bVsOHDhAsWLFqFq1KjNmzMh1t8uQPx8G\neHt706xZMzZv3mzPUm+TOSWhxfbt8NxzBrllq19ftR9w8e6PP/74I7169aJAgQJMnTqVKlWq5Opz\nbt68Sd26dZk2bRp169a1c5UyUhKa1K9vkEACSEnJw6kD5hEUFMT27dvp0KEDwcHBDB06lBs3buT4\nc/r06UOzZs0cEkggIyUh4JlnYPly9aubOH36NB988AG7d++mXLlynD17gVOnkrDZLFgsNgIC/KhV\nqybffPNNlq/75z//yb59+1i0aJHDajPXMlZhSsnJqjPIe+8ZaHR0J5PsfbOnUqVKERMTw5o1a2jd\nuvVde+iSk0/c9TXTp09n3bp1Dj+7zvXHrEKrWyu1jxzRXcl9mGjvm721aNGCwoVLZvt7iYlZt630\n6dOHc+fOUb9+fYKCghg9erRDanKvHw/C6f79b6hXz+ArtU24982eMjOzH5tkZmb9hjmrI4HMKQmH\nslrB09PAgQSqyVuhQm4x2Z2dggV9SU39467X/fzKcPnycafX474/HoRTmGIA4uOjuwJtvvvuO6zW\n7M+bK13az8nVKGb4T0aYiM1m8FGRuG3Tpk2Eh4cTGhrKb78dJzExicxMCx4eNkqXVk/fdJDbN2E3\nNhu0agXjx0PlyrqrEfezf/9+mjZtyrx582jcuLHucrKQUBJ2dfQolCsnoyUjS0xMpEGDBnz88cd0\n6tRJdzl3kVASwo388ccfNGrUiM6dOzNw4EDd5WRLQkm4t/R0ePRRtaDKxaWlpREaGkqlSpWYPHky\nFoMOZ93zGaiwi+RkGDAAbt7UXUkeWK0m/z/wcGw2G927d8fHx4eJEycaNpBAQknkUnIyNG+u/k57\ne0P//v0pUqSI7rJyzk0WTg4bNowjR44QHR2Np6en7nLuy/W/G8IhFi1SO/0//xz27NlNcnKyoX/6\n3pMb7HubOnUqCxYsYNu2bRQqVEh3OQ8kc0oi12w2yMzM4KWXXiI6OpoKFSpw5coV3WXlzPnzUK2a\n+tUFLV++nN69e/P999/z9NNP6y7nobj2jwjhUBYLREZG0qZNGx577DHd5eSOC9++7dixg+7du7N6\n9WrTBBLInJK4j4iIKRQv3gFf3274+3ciImJKlt8/ffo0CxcuJCwszLxnjT32GBw+rLsKuzty5Aht\n27Zl5syZ1KlTR3c5OeKaPyJEnkVETGHMmH1YrTG3Xxs16jNgChERfQGIj4/nyJEjt88Xu379OhUr\nVuSwmf6Se3i43N63CxcuEBISQkREBC1bttRdTo7JnJLIVvHiHbh06VYg2QA1ie3v35GLF+dl+zVF\nihQx35ySi7l+/TqNGzfmpZdecli/I0eT2zeRLau1IACPc5r9VEMFE1itBe75NaZ8+uZCrFYrHTt2\npFKlSowaNUp3ObkmoSSylZGh7uzP8DiP8AdPcxQAL6/Ue35NSkqKU2oTd7PZbPTv35/U1FSmTZtm\n6h8QEkoiC6sVPvwQPD074unZD7CwicY0YSNeXr0IC2uku0SRjU8++YRt27axcOFCvL29dZeTJxJK\n4rZLlyAkBOLj4ejRZgwbVhV//478UPA3QrxHM3Ro4O1JbpexYwcYrHVHTs2ZM4epU6eyevVqihYt\nqrucPJOJbgGoIGrXDl5/HcaO/cvSnePHoW5ddaStiW8LsvX99zBkiPrVhDZs2ECnTp3YuHEjVatW\n1V2OXciSAEF0NISHQ2QkdOiQzRvKloWYGNdsK2nixZP79u3jjTfeYMGCBS4TSCCh5NasVhg0CJYu\nhQ0boEaN+7z5xRedVZZzmXTv28mTJ2nZsiWTJ08mODhYdzl2Zb7vhrCLCxegY0f193HXLihWTHdF\nmpjwzLfk5GRCQkIIDw+nQ7ZDW3OTiW43tHcv1KmjpolWr3bjQALT3b7dvHmTdu3a0bRpU/7+97/r\nLschZKLbzcyZAx98AFOmqEltt2e1qlu4ggV1V/JAmZmZdO7cmbS0NObPn2/4vki5ZZ4fESJP0tNh\n4EBYuRI2bVLdOnIlI0OdLukqvLxMM1IaPHgwJ06cYP369S4bSCC3b27h/HnVJfLQIdi5Mw+BtGED\ntGlj19rEw4mMjGTp0qUsX76cgiYY1eWFhJKL271bzR81aAArVoBfXg49rVkTtmxRwy7hNEuWLGHs\n2LGsWbMGf39/3eU4nISSC5s9W63Q/uwzGDPGDndd/v7w9NPqcZ1wiu3bt9OzZ0+WL1/OU089pbsc\npzDHzbTIkfR0dcrImjUQGwt2XVfXpAls3KiGXsKhDh8+TLt27Zg9eza1a9fWXY7TyEjJxZw7B82a\nwW+/qfkjuy/0bdJEzZS7ii+/VAluMOfOnSMkJIQxY8YQEhKiuxynklByIbt2qfmj4GBYvhx8fR1w\nkRdegMRE9RTOFaSmQmam7iqyuHbtGi1btuTNN9+ke/fuustxOrl9cxEzZ6pH/lFRamOtwxQtCgcP\nOvACTmawxZNWq5UOHTpQvXp1Ro4cqbscLYzz3RC5kpamFkOuX68ejFWurLsikzHQ3jebzUbfvn2x\nWq189dVXpm7UlhfG+G6IXDl7Vq3K9vNT80ePPKK7IhMy0N63sWPHsnv3bjZv3kw+g9Skg8wpmdSO\nHWr+qFkztctfAimXDHL7NmvWLKZPn86qVavMefy5HcneNxP6+msYPBimT4fWrXVXY3JpaapPVP78\n2kpYt24dXbp0ITY2lspy/y23b2aSlqaascXGqvmjSpU0FnPmDBw9Cs8/r7EIO9Dczzo+Pp7OnTuz\nePFiCaQ/ye2bSZw5o1pJnzmjbt20BhKoQAoP11yEuR0/fpyWLVsyZcoUnjd7uNuRhJIJbN+u5o9a\ntIDFi9VTee3q1oVff4WkJN2VmFJSUhIhISH84x//oH379rrLMRQJJYOLilIb86dOheHD1SnThuDt\nDfXrw+bNuisxndTUVNq2bUuLFi14//33dZdjODLRbVA3b8J778HWrerpWsWKuivKxiefqNXdkybp\nrsQ0MjMzeeONN7DZbMybNw8Pw/yUMQ75EzGg06dVn/6LF9X8kSEDCVxjH9y776p2nE4ycOBAzpw5\nw+zZsyWQ7kH+VAwmLk7NH7VqBQsXgqGXrAQFQfv2hts7liPXrzvt2KiJEyeyevVqli5dSoECBZxy\nTTOSJQEGYbPBV1/ByJFqH1toqO6KHoKXlyrYzJy0eHLRokWMHz+euLg4irn1SQ0PJqFkAKmpEBYG\nP/ygRkrly+uuyI04Ye9bXFwcffr04b///S9ly5Z16LVcgdy+aZaYqFqNJCerR/8SSE7m4L1vBw8e\n5LXXXmPOnDkEBQU57DquREJJo++/V/NH7drBggUGnz9yVQ68fTt79iyhoaGMGzeO5s2bO+QarkiW\nBGhgs6lz1z76CGbNUosihSapqQ45Zunq1asEBwfTtm1bhg8fbtfPdnUSSk6Wmgp9+6pTRpYsUX34\nTW/7dli71vyT3naSnp5O69atCQgIICoqym37IuWW3L450cmTqpvstWvq77FLBBKoU06+/loNAd2c\nzWajT58+eHh48OWXX0og5YKEkpNs2QL16qmmbPPmQeHCuiuyowoV1Fqlo0d1V6LdRx99RHx8PDEx\nMXgZoE+TGcmfmoPZbBAZCaNHw7ffqpNqXY7F8r+jl9z48eGMGTOYNWsW27dvx8fHR3c5piUjJQe6\ncQO6dVPN2LZvd9FAuuVWKLmpNWvWMGTIEP7zn/9QsmRJ3eWYmoSSg5w4oeaP0tNh2zYoV053RQ7W\nuLHaB2e2eaXatSEhIU8fsXfvXt58800WL17MM888Y6fC3JeEkgPExqr5ozfegLlzXWz+6F7KllWn\nF5htYvfKlTydZ37s2DFatWpFVFQUDeTUYLuQOSU7stlUF4+PP1Ybz5s1012Rk5lxC0UeFk9evnyZ\nFi1aMHjwYNo59LA99yKhZCfXr0OvXrB/v9rD9uSTuisSDyWXe99SU1Np3bo1rVu3JiwszAGFuS+5\nfbODY8dU/3ybTW2olUAykVzsfcvMzKRLly488cQTjBs3zkGFuS8JpTzauBGeew7efFM98i9USHdF\nIkdycfs2YMAALl68yDfffCON2hxAbt9yyWaDCRNg/HiIjlZPxAVqEWVSklrlbQbHjkHBgg/99gkT\nJrBu3Tq2bt1Kfo1nxbkyCaVcuH4devSAQ4fU/JEZ53cdZtkymDYNVq/WXcnDycHQdv78+Xz22WfE\nxcXh6+vrwKLcm4w9c+j336FBAzXi37pVAukujRqpP5j0dN2V2NWWLVsICwtj5cqVlClTRnc5Lk1C\nKQfWr1enCr3zjmo5koNRv/vw91dbTXbt0l2J3SQkJPD6668THR1NYGCg7nJcnoTSQ7DZ4NNP1WR2\nTAz072++NYJO5UJbTk6fPk1oaCiffvopzdxu4ZkeEkoPcO2aWpk9b5467ig4WHdFJuAioZSSksIr\nr7xCz549efPNN3WX4zYklO7jt9/U7VqBAqp1rUwlPKQXXlB/aEbfB3fjBtzjZJH09HTat29PvXr1\nGDx4sJMLc2/SefIe1q5Vt2sjRqhOkXK75oKuXIFSpdSvd7DZbLz99ttcunSJJUuWSF8kJ5OR0l/Y\nbOo06m7d1GGQ/fpJILmseyycHDlyJAkJCTzyyCNUrFiRoKAggoKC2Ldvn4Yi3Y/8CLjD1avqydqx\nY2rDe0CA7oqEQ2Wz723atGlER0ezbds2Bg0axKeffsqrr76qqUD3JCOlPx05ouaPfHxU61oJJDfw\nl31vq1atYsSIEaxZs4YSJUoA6lZOOJeEEvCf/0DDhmru6Ouv1RytcAN33L7t3r2bt99+m6VLl1L+\njpa+gwcP5oUXXiAyMhKr1aqrUrfi1hPdNpvqffTFF2r90fPP667IxfzyCxw+DG3a6K4ki27durFn\nTzynTl4mvw1uYOXatQs0avQCG+9YynD27Fkee+wxzp07x7vvvkvXrl1p3769xsrdg9uOlK5cUSeL\nLF+u5o8kkBzg0iUYNUp3FXfZsyee/ft/IvmPk5xLOUlKyhkyMqxcuHA5y/see+wxAEqWLEmPHj1Y\nsmSJjnLdjluG0q+/qnYjfn6weTOULq27IhdVt64aKSUl6a4ki1Onsq8nMTHr62fOnAHgxo0bxMTE\nEBoa6vDahBuG0qpVav4oPFxtZpfuEw7k7a12L2/erLuSLGy27Nd4ZGZmfb1Lly7UqFGDxo0b89RT\nT8mtm5O4zZKAzEwYOxamToWlS9XfFeEEt7actG2ru5LbLJbsp1E9PLK+vmHDBmeUI/7CLULpyhV4\n6y04e1bNH5UqpbsiN9KkiVqJaiABAX4kJ5+46/XSpf00VCP+yuVD6dAhaNdOtfmZN0/dUQgnCgqC\n//s/9ajTIEvja9WqCag5pMxMCx4eNkqX9rv9utDLpZcErFgB3bvDmDHw7ru6qxFGM2QIDBoEjzyi\nuxJxJ5ccKWVmwujRaiJ7+XL1pE2IvypTRg56MCKXGymlpEDXrnDxotpQ++dSEyGESbjUkoCDB9XS\nmFKl1AMfCSQhzMdlQmnZMjWZ/eGHMGWKTGgLYVamD6XMTBg5Et57D1auVBPbwoBWr1bNzYV4AFOH\n0h9/qL2emzapwzPq1tVdkbin8uXVqlWDTGF++CGcPKm7CpEd04ZSQoIKoaeegg0boGRJ3RWJ+6pQ\nQQ1rjx7VXQk2G3z1leqdJYzHlKG0ZIk6VWTwYJg0KUufLmFUFothTjk5c0ad2ecnC7gNyVShlJEB\nw4fD+++rxmwG270gHsQgoeTjA99+q7sKcS+mWaeUnAydO6tz2ObPhz+7lQozOX5cDXF//90wW06E\n8ZhipPTqq90pWbImu3YFUbFib/z8XOucerdRtqzqrySBJO7D8KG0aBFs2fI506fHc/78j2RkpPOt\njL3NSxaQiQcw7N63W/NH0dGwdm0Rnn0WUlNTSU1NpYB09hfCZRlypJSUBC1bwg8/qPVHzz4Lb7/9\nNiVKlCAtLY1OnTrpLlGY1PXrEBpqmOVSIhvaQykiYgrFi3fA17cbxYt3oE+f6dSpA5Urq6OzH31U\nvW/mzJmcOHECDw8PJk6cqLdoYVpeXqpliUxrGZfWp28REVMYM2YfVuvUO14dTLt21Vi8uHO2X7Ni\nxQrmzp3LvHnznFOksL+kJLhwASpW1F2JMCCtI6XIyM1/CSSAj9myZUWWV44cOQKoOaWFCxfKMcpm\nt2mTWmwmRDa0TnRbrQXv8fr/JrJtNhvdunUjJSUFHx8fmjdvTlsDNaEXuRAcrFa+pqfLcnxxF62h\n5OV1I9vXMzLy3T5R2WKxsHXrVidXJhzK319t0N21S46VEXfRevsWFhaMl1fvLK95evbD378dVarA\nd9+pPZzCBTVu7PQtJ5mZahP3zZtOvazIIa2hFBHRl6FDa+Dv35FHHumGv39Hhg2ryu+/h/LllzBx\nIgQGqg248gjXxWjYB5eYCKdOyQGkRmfovW82m+oNNmwYeHqqY+lbtJDHuS4hJUU9m4+MdNol161T\nB5Ju2uS0S4pcMHQo3ZKZqUZLI0aAr686qaRxY91VCbO5fh3On4cnn9RdibgfU4TSLRkZ6kDJkSPV\n3s7Ro6F+fd1VCSHsSfuK7pzw9FTtS375BTp1go4d4ZVXYO9e3ZUJIezFVKF0S7586oCAw4fVPqZW\nreC112D/ft2VCSHyypShdEv+/NCvH/z6q1ru0rSpGkn9+qvuyoQQuWXqULqlUCEYMACOHIEqVVRA\nde8Ox47prkw80LZtMGOGwy+zdy+8/LLDLyPswCVC6ZYiRWDoUHVbV6oU1KqlRlKnT+uuTNxTZqY6\nPdTBAgNhzhyHX0bYgUuF0i1+fmpN08GDahRVrZoaSZ0/r7sycZe6ddVPkaQkh17G0/N/bXCEsblk\nKN3y6KMwfjwcOABpaapH09ChDv/vX+SEt7e63968WXclwiBcOpRuefxxmDxZzSucP6/ORRw1Si0q\nFgagYR+cMC63CKVbypaFadNUm93Dh9VG9fHj1UpfoZGD98HZbLKx20zcKpRuKV9eHUYYGws7d6p/\nnzxZdo9r8+yzEBXlsI8/cQKeecZhHy/szC1D6ZYqVWDBAli1SvUDr1BBjaTS5Vg55/L0dGhfpYMH\n1ShZmINbh9ItQUGwYoU6eXf+fKhUSY2kMjJ0Vybs4bff1PdUmIOpNuQ6S2ysOnPu4kX46CO1hcVD\n4tvUpPOueUgo3YPNpm7phg1T/0GPGqXOopNeTkI4loTSA9hssHy5GjkVLKjapTRrJuHkMLeaswu3\nJTclD2CxQJs2EB8Pf/87vPcevPgibNmiuzIXNHcu9OihuwqhmYTSQ/LwgA4dVHuUd95RJwS9/LJa\nUiDspE4dtV7JjoP3GzfUP8I8JJRyyMsL3npLPWZ+9VU1Cd6mDfz0k+7KXECFCmqV49GjdvvItWuh\nd+8Hv08Yh4RSLnl7Q69eqndTkybqQIMOHVRXTJFLFovdV3e3aQOzZtnt44QTSCjlUYECEB6uejk9\n+6w6/PWtt+z6w969yD44tyehZCeFC8OgQSqcypWDevXUSOrkSd2VmUyTJtIAy81JKNlZ0aLqtJVD\nh6BYMahZU42kzp7VXZlJlC0rjzbdnISSg/j7w8cfQ0KCenJXtaoaSV26pLsy93H9ugy6zEhCycFK\nloQJE9TTuStX1G71kSMhOVl3Za4vNlYt3RDmIqHkJAEBqhX1rl2qlUaFCmokdfWq7spc16FDshHX\njCSUnOypp2DmTNi6FX7+WfVymjBBFvg5QlqaeiIqzEX2vmn2888wYoRaGT50qNpl4e2tuyoDOHoU\nLlyA557TXYlwMhkpaVa9OixZAsuWwcqVULGiOgbNatVdmWY//aT6xgi3IyMlg4mLU+1SEhMhIkKt\nEvf01F2VBpcuqXvdS5ekEZKbkZGSwTRsCJs2wdSpqm94YCAsXmzXParm4O8PTz+tngwItyKhZFBN\nmqgTrf/1L9XDqXZtWL3azcIpD/vgjh9XTzmF+UgoGZjFAqGhsGePmgT/8EM1knKbrWF5CKXNm1WI\nC/OROSUTyciAmBi1+PKJJ9QIyoGHgOiXkqJm/d9/X3clwokklEzIaoXZs9XDqSpVVP/wWrV0VyWE\nfcjtmwl5eanul4cOqcMMWrdWDef279ddmRB5J6FkYvnzQ9++ql3K889D06bQqZM6klwIs5JQcgEF\nC6pDDY4cgWrV1GT4O+/AsWO6K9Pj2DFpT2xmEkoupEgRGDJEtegNCFDzTH37qoWY7mThQvjmG91V\niNySUHJBvr5qEvzQIfDxgRo11Ejq/HndleXSypXw738/9NsPHlQtYoQ5SSi5sOLF1eLL/fvVE7vK\nldVI6vJl3ZXlkK8vfPfdQ7+9XDl1WpMwJ1kS4EZOnFBrmxYvhv791fKfokV1V/UQ0tJUwh4/Dn5+\nuqsRDiYjJTdSpgxERcEPP6hJ8fLl1Ujq2jXdlT2AtzfUr6+WaQuXJ6HkhsqXV4svY2Nh927VBXPS\nJEhN1V2fvyQqAAAEPElEQVTZfdj5PDhhXBJKbqxKFZg/X+0RW79e9XKKioL0dN2VZUNCyW3InJK4\nbccOGD5cNX0cORI6dzZQL6eMDNVbqUSJ+74tNhYef1yevpmZjJTEbfXqwdq1ag/s9OlqIeb8+ZCZ\nqbsyVDo+IJAAfv8dLl50Qj3CYWSkJLJls8G6daoL5s2batNvq1aqnYoQjiShJO7LZoMVK9RtXf78\naknBSy9JOAnHkVASDyUzU23fGDFC3UWNHg2NGumuSrgimVMSD8XDA/72N7U6vEcPdfJs8+Zqctyp\n0tLU0UvCZUkoiRzx8oKuXdW+uvbt1T+tW0N8vJMKmDFD9QXOxqZNamGoMDcJJZEr+fJBz56qI0Gz\nZhASokZSv/zi4As3bqzWK2Uz6/Dtt+pwT2FuEkoiTwoUUPvojhxRJ64EB6uR1NGjDrpgxYpqzVI2\nF5DuAK5BQknYReHCMHDg//bU1aunRlJ2P+bIYrnn6u7XX1drq4S5SSgJuypaVD2hO3wYHn0UgoLU\nSOrMGTte5B6h9MEHUKyYHa8jtJBQEg5RrBiMGaPmmLy81Ahm4EA7rbZu0kT1ABYuSdYpCadITISx\nY2HePOjXT3XC9PXVXZUwIhkpCacoXRq++EKd9nvqlGqXMnYsXL2quzJhNBJKwqmefFItNYqLgwMH\n1KT4Z5/BjRt5+9zJk9UkuzA/CSWhRcWKMHeu6uO0dasKpylT1Obf3ChRAgoVsm+NQg8JJaFVtWqq\nZ/jy5bBqlVpnNGOGOuggJzp0gFKl7n49MjKS8uXL4+HhwWXTnZjgniSUhCHUqqVCKToa5sxRXTGj\no9U6yXvauRPWrLnv5z7//PNs2LCBsmXL2rdg4TASSsJQGjRQS5CmToXISAgMVCOpbJ8Rnzqlmovf\nR82aNSWQTEZCSRhSkyZqMnz8eLXeqXZt1Us8SzgFB6sJKUM2FRe5JaEkDMtiURt9d+9WHTAHDoSG\nDf+3mDticgz7rnvS2Gc0vr5DiIiYordgYRdeugsQ4kEsFmjXTrVImT8feveGtLTVnDqVQJGMd2iY\nkY/YtH8yZkxvYAoREX11lyzyQEZKwjQ8PeGNNyAhAS5eXEJGRiQbaUIT1NDJap1KZOSWe369bF4w\nBwklYTpeXuDlpeaRttCICXxw+/es1gJZ3jtp0iSeeOIJEhMTqVGjBj179nRqrSLnZO+bMKXixTtw\n6VLMXa/7+3fk4sV5GioS9iIjJWFKYWHBeHn1zvKal1cvwsLkNAOzk5GSMK2IiClERm7Bai2Al1cq\nYWGNZJLbBUgoCSEMRW7fhBCGIqEkhDAUCSUhhKFIKAkhDEVCSQhhKBJKQghDkVASQhiKhJIQwlAk\nlIQQhiKhJIQwFAklIYShSCgJIQxFQkkIYSgSSkIIQ5FQEkIYioSSEMJQJJSEEIYioSSEMBQJJSGE\noUgoCSEMRUJJCGEo/w/P4a2OT1f6YgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 97 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# The other way to connect the two segments, giving the tour [1, 3, 4, 5, 2, 0]\n", + "plot_labeled_lines(cities, 'bo-', [1, 3, 4], 'ks-', [0, 2, 5],\n", + " 'b-.', [0, 1], [4, 5],\n", + " 'r--', [1, 4], [0, 5])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ngg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 98 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Clearly the first way is better than the second.\n", + "\n", + "Now we have a feel for what we have to do. Let's define the divide and conquer algorithm, which we will call `dq_tsp`. Like all `tsp` algorithms it gets a set of cities as input and returns a tour. If the size of the set of cities is 3 or less, then just listing the cities in any order produces an optimal tour. If there are more than 3 cities, then split the cities in half (using `split_cities`), find a tour for each half (using `dq_tsp` recursively), and join the two tours together (using `join_tours`): " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def dq_tsp(cities):\n", + " \"\"\"Find a tour by divide and conquer: if number of cities is below threshold,\n", + " find a tour with solver. Otherwise, split the cities in half, solve each\n", + " half recursively, then join those two tours together.\"\"\"\n", + " if len(cities) <= 3:\n", + " return Tour(cities)\n", + " else:\n", + " Cs1, Cs2 = split_cities(cities)\n", + " return join_tours(dq_tsp(Cs1), dq_tsp(Cs2))\n", + " \n", + "# TO DO: functions: split_cities, join_tours" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 99 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's verify that `dq_tsp` works for three cities:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(dq_tsp, Cities(3))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAQwAAAEACAYAAABGTkjoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE6dJREFUeJzt3XtwVdX5xvHnkECCCEGjgobIJSIaFapiEWkRysVailql\ndEQsYKm2KlDtaAdpLWOH3uxlBNpKTQut0NZOW34FowjjLco4CsUbSCtNuIlQKsgtkhDC+f3xQgN4\nSHYOOWftvfb3M+PUSQPn1TEP71rr3WsnkslkUgAQQCvXBQCIDgIDQGAEBoDACAwAgREYAAIjMAAE\nRmAACIzAABAYgQEgMAIDQGAEBoDACAwAgREYAAIjMAAERmAACIzAABAYgQEgMAIDQGAEBoDACAwA\ngREYAAIjMAAERmAACIzAABAYgQEgMAIDQGAEBoDACAwAgREYAAIjMAAERmAACIzAABBYrusC0lVe\nXqGZM5eqtjZXeXkHNXnycI0YMdB1WYDXIhkY5eUVmjLlGVVWzvjf1yorp0kSoQFkUCSXJDNnLj0m\nLCSpsnKGZs1a5qgiIB4iGRi1takboy1bclRfn+VigBiJZGDk5R1M+fXNm+vVrZv04IPShg1ZLQmI\nhUgGxuTJw1VSMu2Yr5WUPKAFC4apvFzavVvq21caPlz685+l2lpHhQKeSSSTyaTrItJRXl6h6dOX\nad26HF15Zb0mTRp2zIZnTY20cKFUVia99ZY0dqw0caJ00UUOiwYiLrKBIUlVVdLgwdLGjY1/X2Wl\n9NvfSnPnSl27WnB86UvSqadmp07AF5EOjLo6+6Hfu1dq06bp7z94UHr6aes6KiqkUaMsPD75SSmR\nyHy9QNRFcg/jiNatpS5dgm9w5uZKI0dKf/+7tGaN1KOHdMstUu/e0iOPSDt2ZLRcIPIiHRiS/dBX\nVTX/151zjjR1qvTuu9KsWdKKFVJJiXTzzdKzz0qHDrV8rUDUeREYlZXp//pWraRBg6T586X166UB\nA6R775XOO0+aMUPasqXFSgUiL/KBUVKSXoeRymmnSXffLb3xhh3Hbt4sXXJJwzKmrq5lPgeIqsgH\nRrpLksYkEjbH8eijFho33SQ9/LB07rm2jFm3rmU/D4iKyAdGScnJLUma0q6dNH689PLL0nPPWZcx\nYIAd5y5YIO3fn7nPBsIm0seqkk11FhXZ0Wq2jkYPHJAWLbLj2RUrpDFj7Hi2T5/sfD7gSuQ7jIIC\nKT9f2r49e5/Zpo3NcCxZIq1aJRUW2j7HFVdIc+ZIe/ZkrxYgmyIfGFJm9jGC6tpVmj7dTli+9z1p\n2TLb65gwQVq+XIp2/wYcy4vAyPQ+RhA5OdJnPyv95S8223HxxbZMKS2VfvrT7HZAQKZ4ERguO4xU\nzjpL+uY3pXfesX2O1aul88+XvvhFW8ZwZweiyovACEOHkUoiYScqc+faA3JDh0rf+Y7UvbstY5p6\naA4IGy8CI2wdRioFBdIdd9ipyqJF9tzKZZc1LGMOHHBdIdC0yB+rSjZc1a+f9P77ritpnv37pb/9\nzZYt77wj3Xqr9JWvSBde6LoyIDUvAqO+3gasdu6UTjnFdTXpWbfO7uyYN8+WWBMn2p5Hu3auKwMa\neBEYktSrl92wVVrqupKTU1cnPfWUdR3Ll0ujR1t4XH45d3bAPS/2MKTwbnw2V+vW0vXXS4sXS2+/\nLRUXW2hceqk0e7b04YeuK0SceRMYUdj4bK6iImnaNOnf/7ZZjuXL7YRl7FjphRcYCkP2eRMYvnQY\nqbRqJQ0ZIv3xj/bPeMUV0qRJNtvxwx9KW7e6rhBx4U1g+NhhpFJYKE2ZYjehz59v/8ylpdINN0hP\nPmn3lgKZ4s2m5+rVdqqwdq3rSrJv3z678KeszIbBJkyQbrvNQhRoSd4ERnW1dMYZ9r+tvOmbmm/N\nGuk3v5Eef9wuN/7qV637yM93XRl84E1gSNLZZ9skZZcuritxr7bWrhUsK5Nef73hzo5LLnFdGaLM\nqz+L47KPEURenh3HLl0qvfaajaZfe61NxD72mF04BDSXV4Hh80nJyejeXXroIdvf+O537WVO555r\nY+ivvMLxLILzKjDoMBqXkyN97nP2/MratTYdO26c3d3x859LH3zgukKEnXeBQYcRTOfO0v33S//6\nl/SrX9k+x3nn2Ttnly3jRU5IzavAaMl3lMRFIiENHCj9/vf2ysmrr7YgKSmxKwffe891hQgTrwKD\nJcnJ6dhRuvNO6zb++lebIO3dWxoxwh7s40VO8OpYNZm0t7lv2ya1b++6Gj989JFd8FNWZneVjhtn\nm6Xnn++6MrjgVYeRSNiJAF1GyznlFOnLX5YqKqQXX7SvDRxoS5fHH7dAQXx4FRgSR6uZ1KuX9KMf\nSZs22fMsf/qTPX5/1122jIH/vAsM9jEyr00b6cYbpfJye3F1587SF75gl/z88pfSrl2uK0SmeBcY\ndBjZVVxsN6FXVdmj9i++KHXrZsuYl15iKMw33gUGHYYbrVpJw4ZJTzxh95Neeqn0ta9JF1wg/fjH\n0n/+47pCtATvAoMOw70zz5TuuceuHJg3z4bDLrjAljFPPcWLnKLMq2NVyZ7S7NDBHnPPzXVdDY7Y\ns8e6j7Iyex3EkTs7unVzXRmaw7sOIy9P6tTJ3lWC8OjQwe7mePVV2yzdvVvq21caPtwu/6mtdV0h\ngvAuMCT2McKud2/pkUds7HzCBGnOHNs8vfdeuwAI4eVtYLCPEX75+dLNN0vPPmuP2bdtax3HVVfZ\nS5327XNdIY7nZWDwEFr0lJRIM2bYnR1Tp9ptYcXF0u232wVAfu20RZeXgcGSJLpyc6WRIy0w1qyx\nUf8xY6Q+faSZM+11mHDHy8DgaNUP55xj3ca771pYvPaa/WEwZoz03HPc2eGCd8eqkt0c1bMnrxX0\n0c6d0h/+YPeS7ttnT86OH2/hgszzssMoLLQ/fWhf/XP66dLdd9szLE88YQ/CXXyxdN11tozhzo7M\n8jIwEgn2MXyXSNgcx6OP2szNjTdKDz9slxtPnWrvo0XL8zIwJPYx4qRdO1uWvPyy7W3U1dnR7ODB\n0oIF0v79riv0h7eBQYcRTxdeKP3kJzYUdtdddslPly728uo333RdXfR5Gxh0GPHWpo00apS0ZIm0\napXta40caW++nzPHnm1B83kbGHQYOKJrV2n6dGn9ersJfdky2+uYMEFavpyhsObw8lhVsrAYPNgm\nB4Hjbd9ur1YoK7MN1IkT7dKfM890XVm4eRsYdXV2g/jevdaeAqkkk9ZllJXZsezQoRYeQ4fam+Jw\nLG8DQ7JlyZIlXImPYHbvtouNH3tM+u9/7b6OCRNs+QLj7R6GxENoaJ6CAumOO6SVK63b+OADu2rw\n2mvtxU4HDriu0D2vA4ONT6TrE5+QZs2y49mxY6XZs+3p2fvuk/75T9fVueN1YHC0ipPVtq10yy3S\n88/bYFhurm2mf+pTdl9pdbXrCrPL68Cgw0BL6tlT+sEP7PmV++6zZUpxsd2OvnJlPI5nvQ4MOgxk\nQuvW0vXXS4sXS2+/baExerTtd8ye7fdT0l6fkuzeLRUV2dFqIuG6Gvjs0CFbtpSVSU8/LX3+83Y8\ne/XVfv2353VgSNIZZ9jNTZ06ua4EcbFjhzR/voVHTY3d2TFunHT22a4rO3leL0kk9jGQfYWF9rLq\nt96y4KislEpLpRtukJ58Ujp40HWF6fM+MNjHgCuJhNSvnw2CbdpkD7/NmGHPtnz729H8g8z7wKDD\nQBi0b29Lk1dekZYulT76yMJk6FCbLq2pcV1hMN4HBh0Gwuaii6Sf/cyGwm6/3d7BUlwsfeMbduoS\nZt4HBh0Gwiovz45jly61G9E7dLAx9CuvtA3TvXtdV/hx3p+SbNok9e8vbdniuhKgafX10jPPWGA8\n/7x00012PNuvXziOZ70PjPp6u/Pxww9tzBeIim3bGu7saNPG9kBuvdVGBVzxPjAkqVcvaeFCO9oC\noiaZlF56yYJj0SLpmmus6xgyRHrotvHa8MJybdmyS8lkjhKJehUVdVS3QQM0fd68Fq8lt8V/xxA6\nsvFJYCCKEglp4ED7a9cue5HT/ffb3/f5cLn+b/dx71TY+IHGv5CZWrzf9JTY+IQ/OnaU7rxTev11\ne/htz55dKb9vy5bdGfn8WAQGR6vw0WWXSYlE6nsEk8nM/GjHIjDoMOCjtWulQ4fqU/5/iURm3lQd\ni8Cgw4BPDh2yt9l/+tPSaad1TPk9RUUFGfnsWGx6du8ubdhg/6JbxSIi4avNm+1i4upqGzNfMGOA\nxr9gexbJZCslEodUVFSgboMGZOTzY3GsKtmjxStW2GvzgKhJJu105J577EnYb33LrgvMtlh0GFLD\nPgaBgajZsUP6+tel1avtcp7LL3dXS2wadPYxEEVLlki9e9vNcf/4h9uwkGLYYQBRUF1tFw2Xl9sb\n6D/zGdcVmdh0GAQGouLVV+1C4b17pTffDE9YSDHqMFiSIOzq6uzt8nPmSL/4hTRqlOuKPi42gUGH\ngTBbu9aeRD3rLOmNN8J7YXBsliSdO9u6MIyXkiC+jh7CmjjR9izCGhZSjDqMRMIGuKqqpD59XFcD\nfHwIq2dP1xU1LTYdhsQ+BsIhmZQWLLAj0sGD7a6LKISFFKMOQ2IfA+6FaQgrHXQYQJaEbQgrHbHr\nMBYvdl0F4iasQ1jpoMMAMijMQ1jpiM3TqpJUW2vvfqiudvOkH+IjCkNY6YjVj01enr3FffNmO2IF\nMiEqQ1jpiNWSROKkBJkTtSGsdMSqw5AaAmPIENeVwCdRHMJKR+w6DDY+0ZKiPISVjlh2GAsXuq4C\nPoj6EFY66DCANPgwhJWOWHYYbHoiXT4NYaUjdh1GYaHtZu/c6boSRI1vQ1jpiF1gJBJ0GWieujrp\nwQel666Tvv996yw6pn5/kPditySRGvYx+vZ1XQnCzuchrHTErsOQ6DDQtDgMYaUjth3GihWuq0BY\nxWUIKx10GMBhcRvCSkdsOwwCA0eL4xBWOmLZYRQXS1u3SgcOuK4EYRDXIax0xLLDaN3a/uPYuJGW\nM87iPoSVjlh2GBIj4nHHEFZ6YtlhSGx8xpWvN2FlS2wDgw4jfhjCOnmxXZLQYcQHQ1gthw4DXmMI\nq2XFvsOIz53p8cIQVmbEtsMoKJDy86Xt2+0mcfiDIazMiW2HIbGP4SOGsDIrth2G1LCP0b+/60pw\nshjCyg46DDqMyGMIK3sIDAIjsrgJK/tiHRgcrUbX2rW2lFy50oawmNjMjlgHBh1G9DCE5VasNz2L\niuwIbv9+qW1b19WgKQxhuRfrDiMnR+raVVq/3nUlaAxDWOER6w5DatjHKC11XQlSYQgrXGLdYUjs\nY4QZQ1jhQ4fBSUnoMIQVXnQYdBihwhBWuNFh0GGEAjdhRUPsA6N7d2nDBjvfbxX7fssNbsKKjtj/\niLRrZ+PE77/vupL4YQgremLfYUgN+xhduriuJD4Ywoqm2HcYEhuf2cQQVrTRYYiNz2xhCCv66DBE\nh5ENDGH5gQ5DdBiZxBCWX+gwRIeRKQxh+SeRTHLRfjIpnXqqtG2b1L6962qijyEsf7EkkZRI2ABX\nVZXUp4/raqKNISy/sSQ5jH2Mk8MQVjzQYRzGPkb6GMKKDzqMw+gwmo8hrPihwzisRw9p8WLXVUQH\nQ1jxRIdxGB1GcAxhxRfHqofV1NgLmqurpVz6rpSOHsKaO5e5ijiiwzgsP9+OAt97z3Ul4cQQFiQC\n4xgsSz6O1xHiaATGUThaPRavI8TxCIyj0GEYhrBwImzvHaVHD2nhQtdVuMUQFhpDh3GUOHcYDGEh\nCDqMo8R1D4MhLARFh3GUwkJbv+/c6bqS7GEIC81Bh3GURKKhyzj9dNfVZBY3YSEddBjHicM+BkNY\nSBcdxnF83sfgJiycLALjOCUlNqjkG27CQktgSXKcHj38WpIwhIWWRIdxHJ+WJAxhoaXRYRzn3HOl\nrVulAwdcV5I+hrCQKXQYx2nd2mYSNm6M5g8ZQ1jIJDqMFKJ6tMoQFjKNDiOFqO1jMISFbKHDSCFK\nHQZDWMgmAiOFKHQY3IQFF1iSpBD2DoMhLLhCh5HCkQ4jbPepM4QF1+gwUigosFvEt2+XOnVyXY1h\nCAthQIdxAmHZx2AIC2FCh3ECJSUWGP37u6uBISyEDR3GCbh+CI0hLIQRHcYJ9Ohh7X+2MYSFMKPD\nOAEXR6sMYSHs6DBOIJubntyEhaggME6gqMg2Hffvl9q2zdznMISFKGFJcgI5OVLXrtL69Zn5/RnC\nQhTRYTTiyD5GaWnL/r4MYSGq6DAa0dL7GAxhIeroMBrRkiclDGHBB3QYjWipDoMhLPiCDqMRJ9th\nMIQF39BhNKJ7d2nDBjvRaC6GsOAjAqMR7drZLVZbtwb/NdyEBZ+xJGnCkYfQioqa/l6GsOA7Oowm\nBNn4ZAgLcUGH0YSmNj4ZwkKc0GE04UQdBkNYiCM6jCak6jAYwkJcERhNqKqq0KpVSzVoUK7y8g7q\nqquG69e/HqjRo6Xf/S6zT7ICYZNIJsN2mX54lJdXaMqUZ1RZOeN/X8vJmaaHHrpGDzww0GFlgBvs\nYTRi5sylx4SFJNXXz1BFxTJHFQFuERiNqK1NvWKrqcnJciVAOBAYjcjLO5jy6/n59VmuBAgHAqMR\nkycPV0nJtGO+VlLygCZNGuaoIsAtNj2bUF5eoVmzlqmmJkf5+fWaNGmYRoxgwxPxRGAACIwlCYDA\nCAwAgREYAAIjMAAERmAACIzAABAYgQEgMAIDQGAEBoDACAwAgREYAAIjMAAERmAACIzAABAYgQEg\nMAIDQGAEBoDACAwAgREYAAIjMAAERmAACIzAABDY/wMq9qOh+UrJSAAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "3 city tour with length 328.3 in 0.000 secs for dq_tsp\n" + ] + } + ], + "prompt_number": 100 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we have more than 3 cities, how do we split them? My approach is to imagine drawing an axis-aligned rectangle that is just big enough to contain all the cities. If the rectangle is wider than it is tall, then order all the cities by *x* coordiante and split that ordered list in half. If the rectangle is taller than it is wide, order and split the cities by *y* coordinate. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def split_cities(cities):\n", + " \"Split cities vertically if map is wider; horizontally if map is taller.\"\n", + " width, height = extent(map(X, cities)), extent(map(Y, cities))\n", + " key = X if (width > height) else Y\n", + " cities = sorted(cities, key=key)\n", + " mid = len(cities) // 2\n", + " return frozenset(cities[:mid]), frozenset(cities[mid:])\n", + "\n", + "def extent(numbers): return max(numbers) - min(numbers)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 101 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's show that split_cities is working:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "Cs1, Cs2 = split_cities(cities)\n", + "plot_tour(dq_tsp(Cs1))\n", + "plot_tour(dq_tsp(Cs2))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 102 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now for the tricky part: joining two tours together. First we consider all ways of deleting one edge from each of the two tours. If we delete a edge from a tour we get a segment. We are representing segments as lists of cities, the same surface representation as tours. But there is a difference in their interpretation. The tour `[0, 2, 5]` is a triangle of three edges, but the segment `[0, 2, 5]` consists of only two edges, from `0` to `2` and from `2` to `5`. The segments that result from deleting an edge from the tour `[0, 2, 5]` are:\n", + "\n", + "
\n",
+      "[0, 2, 5],    [2, 5, 0],    [5, 0, 2]\n",
+      "
\n", + "\n", + "You may recognize these as the *rotations* of the segment `[0, 2, 5]`. So any candidate combined tour consists of taking a rotation of the first tour, and appending to it a rotation of the second tour, with one caveat: when we go to append the two segments, there are two ways of doing it: either keep the second segment as is, or reverse the second segment.\n", + "\n", + "**Note:** In Python, `sequence[::-1]` means to reverse the sequence." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def join_tours(tour1, tour2):\n", + " \"Consider all ways of joining the two tours together, and pick the shortest.\"\n", + " segments1, segments2 = rotations(tour1), rotations(tour2)\n", + " tours = [s1 + s2\n", + " for s1 in segments1\n", + " for s in segments2\n", + " for s2 in (s, s[::-1])]\n", + " return shortest_tour(tours)\n", + "\n", + "def rotations(sequence):\n", + " \"All possible rotations of a sequence.\"\n", + " # A rotation is some suffix of the sequence followed by the rest of the sequence.\n", + " return [sequence[i:] + sequence[:i] for i in range(len(sequence))]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 103 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see if it works, first on the 6 city example:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(dq_tsp, Cities(6))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAEACAYAAAD1BmDyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGk1JREFUeJzt3Xuc1mP+x/HXHNLIktCGHGJGkvNqhdqypYOG2GVZ7KbF\naped2mVlNchSkVNrhlKtEJtDzpqkknZ0EEmodBpSKmxl0mmmOdy/Pz6/sbVuaWbu+76+1/f7fj4e\nHj3c7aP5bOU91/X5Xt/PlRaLxWKIiAREuusCRER2pFASkUBRKIlIoCiURCRQFEoiEigKJREJFIWS\niASKQklEAkWhJCKBolASkUBRKIlIoCiURCRQFEoiEiiZrgsQcamoqJiCgsmUl2fSsGElfft2JTe3\ng+uyIk2hJJFVVFRMv36vU1Iy+NvPSkryARRMDmn7JpFVUDB5p0ACKCkZTGHhFEcVCSiUJMLKy+Nv\nFMrKMlJciexIoSSRlZFRGffzFSuq2Lw5xcXItxRKEkmlpbBqVVf22Sd/p89btBjAkUd24dhj4eWX\nHRUXcWma0S1RU1oK3bpB27bQtWsxDz44hbKyDLKyqsjL60JubgemTYM//hGOOQYKC+HQQ11XHR0K\nJYmUHQPpgQcgLe37/7fl5XDXXRZK+fmQlweZel6ddAoliYzaBNKOli61VdOGDTByJJx6anLrjDr1\nlCQS6hpIAC1bwtSpcP31cN558Kc/wcaNyas16hRKEnr1CaQaaWnwm9/AwoWwfTu0bg3PPAPaZySe\ntm8SaokIpHhmzoQ//AEOOQQeegiOPDIxv65opSQhlqxAAmjXDubNgzPPtB7TkCG2gpL600pJQimZ\ngfS/Pv3U+kwrVlgjvH375H2tKFAoSeikMpBqxGLw/PPw5z9D9+4wdCjsv3/yv24YafsmoeIikMC+\nzoUXwqJF0KgRHHssjB2rRnhdaKUkoeEqkOKZOxf69IHGjWHECDj6aHe1+EYrJQmFIAUSQJs2MGeO\nnWtq1w4GDoSyMrc1+UKhJN4LWiDVyMyEfv1g/nxYsABOOAHeeMN1VcGn7Zt4LaiBFM+ECfaUrn17\nuO8+aNbMdUXBpJWSeMunQAI45xw7EX7wwXD88TBqFFRXu64qeLRSEi/5Fkj/68MPrRGeng4PP2wh\nJUYrJfGO74EE1l+aORN69YLOneHGG2HLFtdVBYNCSbwShkCqkZ5uq6WPPoLPP4fjjoOiItdVuaft\nm3gjTIEUz5QpcM01cOKJ9v+veXPXFbmhlZJ4IeyBBNCli/WaWre2YCoogKoq11WlnlZKEnhRCKT/\n9fHHNu1y82Z7yfeUU1xXlDpaKUmgRTGQwC4sePNNmwuem2sv+m7a5Lqq1FAoSWBFNZBqpKXB5Zfb\n2aZNm2xb98IL4X/JV9s3CaSoB1I8xcU27TI7225YadHCdUXJoZWSBI4CKb4OHew9utNPtxd+774b\nKipcV5V4WilJoCiQdk9JiR0fWLvWGuGnn+66osRRKElgKJBqJxazG1Wuuw7OPdcuzmzSxHVV9aft\nmwSCAqn20tLg17+2aZcZGdYIHzfO/0a4VkrinAIpMebMsddWmja1aZc5Oa4rqhutlMQpBVLitG1r\nY3i7d4fTToM77oDyctdV1Z5CSZxRICVeZqZdLz5vHrz3nr2uMn2666pqR9s3cUKBlBovvQR9+0Kn\nTnDvvXDAAa4r+mFaKUnKKZBS5/zz7UT4fvvZtU9jxgR/2qVWSpJSCiR33n/fGuFZWTbtsnVr1xXF\np5WSpIwCya2TT4bZs+Hii6FjR8jPh23bXFf1XVopSUookIJlzRr4y1/sad3w4VBZWUxBwWTKyzNp\n2LCSvn27kpvbwUltmU6+qkSKAil4Dj7YToNPmgS9ehWzZcvrbNky+NufLynJB3ASTNq+SVIpkIKt\ne3c4/vjJOwUSQEnJYAoLpzipSaEkSaNA8kNFRfwNU1lZRoorMQolSQoFkj+++KIy7udZWW4GhCuU\nJOEUSP546inYsKErhx+ev9Pn2dkDyMvr4qQmPX2ThFIg+ePNN+14wBtvwMqVxRQWTqGsLIOsrCry\n8ro4e/qmUJKEUSD5Y8ECu5n36afh5z93Xc3OtH2ThFAg+WP1arshZdiw4AUSKJQkARRI/ti4EXr0\ngGuvhUsvdV1NfNq+Sb0okPyxfbsFUqtWdhtKUP+sFEpSZwokf8Ri0KuX3R/3/PM2Pjeo9JqJ1IkC\nyS/5+bB8uT1pC3IggUJJ6kCB5JcRI+C552DWLGjUyHU1P0zbN6kVBZJfXnnFbtV96y27WdcHCiXZ\nbQokv8yZA+ecAxMnwk9/6rqa3adQkrhu692bFdNnsnp1KbFYBlBFevq+ZGS3Y+KixxRIAbd8Ofzs\nZzB6tAWTT9RTkrhWTJ/JY58t3/nDqnVcvlUrpKD7z3/g7LPhttv8CyTQ4Un5HqtXl8b9fM2ajSmu\nRGpj61YLoosvtnncPlIoSVy2ZYv3uf7KBFVlpV3j3aqVXUTpK/0Nk7hisfizdNLSAn4/T0TFYna/\nW1mZ9ZF83mKrpyQ7qayEm24C2BdY952fb968capLkt0wdKidQyouhj32cF1N/SiU5Fvr19vyH+Cn\nv2pH77dh9eqNxGLppKVV07x5Y1qc2c5tkfIdTz5p97jNmgX77OO6mvrTkQABYP58+MUv4Fe/giFD\n7E56Cb433rC3/adNsxtww0B/9YRx46BfP3jwQXtqI3748EO45BIYPz48gQQKpUirrIQbb4SXXrLv\nuCec4Loi2V2rVtmgtsJCu+02TBRKEfWf/1j/KDMT3n0X9tvPdUWyu0pL7XDkn/8czpWtjgRE0Lx5\n9i7Uqafae1EKJH+Ul1vvr3NnuO4619UkhxrdEfPkk3aH/PDh1tQWf1RXw2WX2QTJZ58N/lykutL2\nLSIqKqB/f5gwwa7WOe441xVJbd10E6xcCVOnhjeQQKEUCV99Zb2HPfeEd96BJk1cVyS19eCD8PLL\nMHOm/TmGmXpKITd3rvWPzjgDXn1VgeSjF1+EO++E116D/fd3XU3yqacUYmPHwvXX22nfCy5wXY3U\nxezZ0LMnTJoEp5ziuprU0PYthCoqLIwmTYLp08N1sC5Kli61J21jx0YnkEChFDpffgkXXQR77239\no333dV2R1MWXX9pZpMGD7ccoUU8pRN591/pHHTvawHgFkp+2bLFBbb/9LVx5petqUk89pZB49FF7\n5D9qlC35xU+VlXDeedCsGTzyiN9zkepK2zfPbd9uhyGnTrVZOscc47oiqatYDK65BqqqYOTIaAYS\nKJS89sUXdiq7SRPrHzXW/DWvDR5sRzj+/W9o0MB1Ne6op+SpOXOsf3TWWfaWvwLJb489Ztu1oiJ7\nSBFl6il56JFH7JWDf/7TzrCI3yZPtqb29OnafoO2b17Zvt2GsU2fbv2jVq1cVyT1NX8+/OY38MIL\nCqQaCiVPrF0LF14ITZva1i0Ms5ij7rPP7NH/8OHQvr3raoJDPSUPzJ5t/aPu3e07qgLJf19/bYci\nb7jBvtnIf6mnFHCjRsHNN8OYMX5ewSzfVVYG3bpBmzZw332uqwkehVJAlZdDXh7MmGFP11q2dF2R\nJEJ1tQ37B3jqKUjXXuU71FMKoDVr7K3+gw6y/lHUHxGHSf/+1h+cPFmB9H302xIwM2da/+jcc+G5\n5xRIYfLAAzYT/aWXICvLdTXBpZVSQMRi9mrBwIH2HluPHq4rkkR6/nm45x77pqOLGnZNoRQAZWXw\npz/B22/bX9qcHNcVSSLNmAF//CO8/jocfrjraoJP2zfHVq+2USOlpfboX4EULosXW3/wySfh5JNd\nV+MHhZJDb71l/aNf/MKuXlb/KFy++MLOIg0dCl27uq7GH9q+ORCL2Sne22+Hxx+3Q5ESLps22bXa\nV1wBvXu7rsYvOqeUYmVlNjNn7ly7pSI723VFkmgVFfai9CGH2OHXqM5Fqitt31Jo1Sr42c9s3Ons\n2QqkMIrF4A9/sDNII0YokOpCoZQixcXQtq0NZXv6adhrL9cVSTLcfjt88AE88wxkqjlSJ/ptS7JY\nzG43HTQInnhCDc8wGzPGrkOaNQt+9CPX1fhLoZRE27bZUn7+fNuuHXmk64okWSZNggEDbEXcrJnr\navym7VuSrFxp/aOKCvvOqUAKr3nzoFcvGyujF6frT6GUBNOnW//okkvgX/9S/yjMVqyw9xRHjoQz\nznBdTTho+5ZAsRgUFMCdd9oJ3rPOcl2RJNOGDXbG7KabdNdeIimUEmTrVujTBxYssHfYWrRwXZEk\n07ZtdhapZ097b1ESR9u3BFixwmYsx2L2Qq0CKdyqqmzY/6GHwl13ua4mfBRK9TRtGpx2ml2R88QT\n0KiR64okmWIxuO46WL/e7mrToLbE0/atjmIxGDbMZuSMGwedOrmuSFJh2DB44w0bR9Kwoetqwkmh\nVAdbt8JVV8GSJdY/0oycaHjmGQulmTNh331dVxNeWnzW0qef2qPfzEz7bqlAiobiYrvIYcIEOOww\n19WEm0KpFqZOhdNPt3EUjz8Oe+7puiJJhUWL7J3FcePgxBNdVxN+2r7thljM7ue67z5bwnfs6Loi\nSZU1a2xe+r336txZqiiUfsCWLXDllbB8uV13pKV7dHzzjQVSnz72dFVSQ9u3XfjkE9uuZWXZ6FoF\nUnRUVNh12qefDn/7m+tqokWh9D0mT7a/kH362JVH6h9FRywGv/+9fTMqLNSgtlTT9u1/xGJw9912\nceBzz9mb/hItAwfCxx/bwVgNaks9/ZbvYPNme7K2YgW8847NWJZoGTXKnrLNmqXpDq5o+/b/li+3\n7dqPfmRnUhRI0TNhgq2SJk2CH//YdTXRpVACXnsN2rWzW0YeeUT3vEfRu+/C734HL72kC0Fdi/T2\nLRaz2UcPPWR3vbdv77oiSZWiomIKCiZTXp5JVVUlCxd25bHHOtC2revKJLKhtGmTfWf8/HPrHzVv\n7roiSZWiomL69XudkpLB3352wAH5ZGQAdHBWl5hIbt+WLbNxI02awL//rUCKmoKCyTsFEsC6dYMp\nLJziqCLZUeRCqajI+kf9+sHo0Ro/EUXl5fE3CGVlGSmuROKJzPatuhqGDIGHH7Zmpoa8R1fDhpVx\nP8/KqkpxJRJPJFZKmzbZKwMTJ1r/SIEUbX37diU7O3+nz7KzB5CX18VRRbKjtFgsFnNdRDItWWI3\nTXToYDeN7LGH64okCIqKiundewrNmmVwyCFV5OV1ITdXTe4gCHUovfqqveE/eLC9yySyo+xsO6Om\nCySDJZShVF0NgwZZI3v8eHvSJrKjsjIbabtpEzRo4Loa2VHoGt3ffGNXKK9bZ6d0DzzQdUUSRMuW\nwRFHKJCCKFSN7sWL4dRT4eCD7Q1vBZJ8nyVLoFUr11VIPKEJpZdftmb2DTfA8OFqaMuuLV6sUAoq\n77dv1dXw97/bILYJE2ylJPJDliyBzp1dVyHxeB1KGzfa9ckbN1r/qFkz1xWJLxYvhmuvdV2FxOPt\n9m3RIlsVHXGE3ViqQJLdFYvZSunoo11XIvF4GUovvmjXHN10kx2I1BMUqY21a23mepMmriuReLza\nvlVVwW23wdixduitTRvXFYmPFi/WKinIvAml0lK47DK7h+3ddzWuVOpOxwGCzYvt28KF1j866iiY\nMkWBJPWj4wDBFvhQev55+PnP4ZZb4B//UP9I6k9N7mAL7PatqsqCaNw4u13iJz9xXZGEhVZKwRbI\nUPr6a7j0Uigvt/5R06auK5Kw2LoVvvwSWrRwXYl8H+ehtOOtEg0bVtKzZ1eGDetAz552U61uKJVE\nWrbMRpZkaPJtYDn9Tz7erRJTp+bzl7/Avfdq4JYknrZuwee00R3vVonq6sEsWKBbJSQ51OQOPqeh\npFslJNW0Ugo+p6H0fbdKrF9fRWX8nxKpF53mDj6noRTvVomDDx5ALNaF1q3hqadsNIlIIlRXw9Kl\nCqWgcz6ju6iomMLCKZSVZZCVZbdK9OjRgWnTID/fXiu5/XY4/3xIS3NZqfhu1Sp7M2DtWteVyK44\nD6VdicXsrrabb7ZHuHfcAd27K5ykbqZOtZtt3nzTdSWyK4F+zSQtDXJz4b33bEzJX/8K7dvrL5XU\njZrcfgh0KNVIT4cLLoAPP4RrrrE73Dp3htmzXVcmPlGT2w9ehFKNjAwbX/Lxx/Yayq9/bSupefNc\nVyY+0MgSP3gVSjUaNLCbb5cuhR494NxzbSW1YIHryiTItFLyg5ehVKNhQxv+vmwZnHGGbekuu8z+\nXWRHmzfD+vVw2GGuK5Ef4nUo1WjUCK6/HpYvh9atLaCuvBJWrHBdmQTF0qU2JFAv4gZfKEKpxt57\n29mmpUvtltxTTrGV1Jo1risT1/TOmz9CFUo1mjSxM02LF9sq6rjjbCX11VeuKxNXdBzAH6EMpRpN\nm8I999iM7+3b4ZhjbCX19deuK5NUU5PbH6EOpRoHHQSFhXZ04KuvrLdwxx3wzTeuK5NU0XEAf0Qi\nlGocfjiMHg1vv219p5wcW0lt3eq6MkmmmhdxW7Z0XYnsjkiFUo2cHHjiCXtd5Z137N8LC20muITP\nqlWw3372IESCL5KhVOPYY2H8eCgqgsmTbVs3ejRUVLiuTBJJTW6/RDqUapx8Mrz6Kjz7rP3TqpWt\npKqqXFcmiaAmt18USjs47TS7gfeRR2DkSDtKMH68Bs35Tk1uvyiU4jjzTHjrLbuR9+677SLMV1+1\n+U7iH62U/BLoIW9BEIvBK6/Ybb177gmDBsFZZ2nQnE+aN7cxN3rvzQ8Kpd1UXW1buYEDoVkzO+fU\nQVfTBd4339g5tU2bbC6XBJ/+mHZTejpcfLGNR7niCujdG7p1syMFElw155MUSP7QH1UtZWbC5Zdb\nn+KXv7Q5TuedBx984LoyiUfHAfyjUKqjPfaAPn1sdlOnTnahwUUX2VRMCQ41uf2jUKqnrCzo189m\nOZ1yCnTsCL16QUmJ68oEdBzARwqlBNlrL7jxRls5ZWdD27Zw9dWwcqXryqJNKyX/KJQSrHFje0K3\nZAnsvz+cdBL07QtffOG6suipqrIVrF7E9YtCKUn23x/uvNN6TBkZ9p5d//6wbp3ryqLjs8/gxz+2\nVaz4Q6GUZM2awbBh9nRu0ybbStx6K5SWuq4s/LR185NCKUUOOQRGjIC5c22UxlFHwZAhdsuGJIea\n3H5SKKXYEUfAo4/CjBnw0Uc2y+n++2HbNteVhY9WSn5SKDly9NHw1FM2x+mttyychg+3WeKSGFop\n+Umh5NgJJ8CLL8LLL9skgpYtYcwYqKx0XZn/tFLyk17IDZgZM+Dmm+2uuttus/ftdIFi7ZWWwqGH\n2gu5mujgF62UAqZ9e5sdPmKEzQ0/8UR44QXNcqqtmssnFUj+USgFUFoadO4Ms2bB0KE2w6lNG5g4\nUeG0u7R185dCKcDS0iA3144RDBgAN9wA7drBtGmuKws+Nbn9pVDyQHq6jUj58EO49lqbTtCpk62k\nJD6tlPylUPJIRgZcdhksWmQ/XnIJ9OgB773nurLg0UrJXwolDzVoAFdeaVMVc3OhZ08bOLdggevK\ngqGyEj75xE7Ni38USh5r2NC2c8uWWa+pc2e49FILqyj79FM48EC76EH8o1AKgUaN4PrrbUzHscfC\nGWfYHPEVK1xX5oa2bn5TKIXI3ntDfr6FU/PmNgnzmmtg9WrXlaWWmtx+UyiF0L772hVQixfbLKHj\nj4frroOvvnJdWWpopeQ3hVKINW0K99wDCxda8/eYY+y804YNritLLq2U/KZQioCDDoKCAnj/fZt8\n2bIl3H67vRcWRrpWyW8KpQg57DAYNQreftv6Tjk5cPfdsGWL68oSZ/16G/9y4IGuK5G6UihFUE4O\njB0L06fbKyw5ObaSKitzXVn96UVc/ymUIqx1a3j2WXjtNZg61bZ1o0ZBRYXryupOTW7/KZSEk06C\nV16B8ePhuefsP+qxY+2KIt+oye0/hZJ8q21bG887ZgyMHg3HHWcrqepq15XtPq2U/KdQku/o2BGK\ni+GBB+Dee+Hkk20l5cMsJ62U/KdxuLJLsZjNDr/lFnvXbtAg6NIlmI3kigo71V5aCllZrquRutJK\nSXYpLc2mELz/Pvz1r3YFec1KKmg++cTu11Mg+U2hJLslPR0uusjGo1x1FfTuDV27wpw5riv7L23d\nwkGhJLWSmQm9ellD+cIL7Z+ePWH+fNeVqckdFgolqZMGDeDqq22W01lnwdln20rq44/d1aSVUjgo\nlKResrKsz7R8ud240rGjraRKSlJfi955CweFkiTEXntB//7/faeubVtbSa1cmZqvH4splMJCoSQJ\ntc8+cOutNpL3gAPsjFPfvrB2bXK/7rp1FkxNmyb360jyKZQkKfbbD4YMsZtXMjNtTG///hYeyVDT\n5A7i+SmpHYWSJFWzZnD//fDRR7B5szWib73VDjgmkprc4aFQkpRo3hyGD7dRKZ9/btcfDRliQZUI\nOg4QHgolSakjjrAXfmfMsIOYOTm2ktq2rX6/rlZK4aFQEieOPhrGjYMpUyygcnJsJVVeXrdfT0/e\nwkMv5EogzJ1rvaZFi+zHXr2sQb47ysuhcWObOb7HHsmtU5JPKyUJhDZtYOJE+Ne/4Ikn7OaVceN2\nb9BcSYnNH1cghYNCSQKlXTt4800YORIefBBOPBFeeGHXs5zU5A4XhZIEUqdOMHOm3bYyaJDd9jtx\nYvxwUpM7XNRTksCLxeDFF63XtM8+FlKdOkFRUTEFBZOZPz+Tpk0rGTq0K7m5HVyXK/WkUBJvVFXB\nM8/AwIGw557FbNjwOqtXD/7257Oz83nggW4KJs8plMQ7lZVw0kk3s3DhoO/8XLdutzBp0h0OqpJE\nUU9JvJOZCQccEP+8QFlZRoqrkURTKImXGjasjPt5VpaHl9XJThRK4qW+fbuSnZ2/02fZ2QPIy+vi\nqCJJFPWUxFtFRcUUFk6hrCyDrKwq8vK6qMkdAgolEQkUbd9EJFAUSiISKAolEQkUhZKIBIpCSUQC\nRaEkIoGiUBKRQFEoiUigKJREJFAUSiISKAolEQkUhZKIBIpCSUQCRaEkIoGiUBKRQFEoiUigKJRE\nJFAUSiISKAolEQkUhZKIBIpCSUQC5f8A0SHTDtttSLYAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "6 city tour with length 1311.1 in 0.000 secs for dq_tsp\n" + ] + } + ], + "prompt_number": 104 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is indeed the optimal tour, achieved by deleting the two dashed red lines and adding the dotted blue lines.\n", + "\n", + "Now for the USA map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(dq_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 14883.2 in 0.199 secs for dq_tsp\n" + ] + } + ], + "prompt_number": 105 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def altered_dq_tsp(cities): return alter_tour(dq_tsp(cities))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 106 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_dq_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 14209.6 in 0.193 secs for altered_dq_tsp\n" + ] + } + ], + "prompt_number": 107 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's just remind ourselves how the algorithms behave on the USA map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "algorithms = [nn_tsp, greedy_tsp, dq_tsp, \n", + " altered_dq_tsp, altered_nn_tsp, altered_greedy_tsp, \n", + " repeated_altered_nn_tsp]\n", + "\n", + "benchmarks(algorithms, (USA_map,))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp |15695.3 \u00b1 0 (15695 to 15695) | 0.002 secs/map | 1 \u2a09 80-city maps\n", + " greedy_tsp |16087.5 \u00b1 0 (16088 to 16088) | 0.007 secs/map | 1 \u2a09 80-city maps\n", + " dq_tsp |14883.2 \u00b1 0 (14883 to 14883) | 0.175 secs/map | 1 \u2a09 80-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_dq_tsp |14209.6 \u00b1 0 (14210 to 14210) | 0.176 secs/map | 1 \u2a09 80-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_nn_tsp |13769.8 \u00b1 0 (13770 to 13770) | 0.027 secs/map | 1 \u2a09 80-city maps\n", + " altered_greedy_tsp |14220.1 \u00b1 0 (14220 to 14220) | 0.029 secs/map | 1 \u2a09 80-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp |13633.0 \u00b1 0 (13633 to 13633) | 0.454 secs/map | 1 \u2a09 80-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 108 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And on the standard test cases:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(algorithms)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " nn_tsp | 5689.8 \u00b1 487 ( 4536 to 6861) | 0.001 secs/map | 30 \u2a09 60-city maps\n", + " greedy_tsp | 5312.9 \u00b1 462 ( 4404 to 6262) | 0.003 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " dq_tsp | 5202.4 \u00b1 251 ( 4479 to 5574) | 0.067 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_dq_tsp | 4879.8 \u00b1 290 ( 4180 to 5409) | 0.077 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_nn_tsp | 4812.1 \u00b1 263 ( 4091 to 5320) | 0.012 secs/map | 30 \u2a09 60-city maps\n", + " altered_greedy_tsp | 4780.0 \u00b1 297 ( 3934 to 5383) | 0.013 secs/map | 30 \u2a09 60-city maps\n", + " repeated_altered_nn_tsp | 4628.8 \u00b1 233 ( 3925 to 5120) | 0.238 secs/map | 30 \u2a09 60-city maps\n" + ] + } + ], + "prompt_number": 109 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of the non-altered algorithms (the first three lines), divide and conquer (`dq_tsp`) does best. But interestingly, divide and conquer is helped less by `alter_tour` than is the greedy algorithm or nearest neighbor algorithm. Perhaps it is because divide and conquer constructs its tour by putting together pieces that are already good, so `alter_tour` is less able to improve it. ALso, `dq_tsp` has a standard deviation that is much smaller than the other two—this suggests that `dq_tsp` is not producing really bad tours that can be easily improved by `alter_tour`. In any event, `altered_dq_tsp` is the worst of the `altered` algorithms, both in average tour length and in run time. \n", + "\n", + "`repeated_altered_nn_tsp` remains the best in tour length, although the worst in run time." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">>> Shoulders of Giants: Minimum Spanning Tree Traversal Algorithm (`mst_tsp`)\n", + "===\n", + "\n", + "\n", + "\n", + "\n", + "
Kruskal (New York Times)
\n", + "\n", + "\n", + "I hope you now believe that you could have come up with some ideas for solving the TSP. But even if you can't come up with something all on your own, you can always [Google it](http://bit.ly/XNGt2y), in which case you'll no doubt find a giant of a mathematician, [Joseph Kruskal](http://en.wikipedia.org/wiki/Joseph_Kruskal), who, in 1956, \n", + "published [a paper](http://www.cmat.edu.uy/~marclan/TAG/Sellanes/Kruskal.pdf) that led to an algorithm that\n", + "most people would not have thought of on their own\n", + " (I know I wouldn't have):\n", + "> *Minimum Spanning Tree Traversal Algorithm: Construct a Minimum Spanning Tree, then do a pre-order traversal. That will give you a tour that is guaranteed to be no more than twice as long as the minimal tour.* \n", + "\n", + "What does all this jargon mean? It is part of *graph theory*, the study of vertexes and edges. Here is a glossary of terms:\n", + "\n", + "* A **graph** is a collection of vertexes and edges.\n", + "* A **vertex** is a point (such as a city).\n", + "* An **edge** is a link between two vertexes. Edges have lengths.\n", + "\n", + "* A **directed graph** is a graph where the edges have a direction. Think of them as arrows. We say that the edge goes from the **parent** vertex to the **child** vertex.\n", + "\n", + "* A **tree** is a directed graph in which there is one distinguished vertex called the **root** that has no parent; every other vertex has exactly one parent. \n", + "\n", + "* A **spanning tree** (of a set of vertexes) is a tree that contains all the vertexes. \n", + "\n", + "* A **minimum spanning tree** is a spanning tree with the smallest possible sum of edge lengths.\n", + "\n", + "* A **traversal** of a tree is a way of visiting all the vertexes in some order.\n", + "\n", + "* A **pre-order traversal** means that you visit the root first, then do a pre-order traversal of each of the children.\n", + "\n", + "* A **guarantee** means that, no matter what set of cities is selected, the tour found by the minimum spanning tree traversal algorithm will never be more than twice as long as the optimal algorithm. None of the other algorithms has any guarantee at all (except of course for `alltours_tsp`, which is guaranteed to find the optimal algorithm, if it has enough time to complete).\n", + "\n", + "We will implement a vertex as a Point, and a directed graph as a dict of `{parent: [child, ...]}` pairs. \n", + "\n", + "Visualizing Graphs and Trees\n", + "---\n", + "\n", + "I think we will need visualization right away, so before doing anything else I will define `plot_graph`. I will make it plot in red so that we can easily tell a tour (blue) from a graph (red)." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_graph(graph):\n", + " \"Given a graph of the form {parent: [child...]}, plot the vertexes and edges.\"\n", + " vertexes = {v for parent in graph for v in graph[parent]} | set(graph)\n", + " edges = {(parent, child) for parent in graph for child in graph[parent]}\n", + " for edge in edges:\n", + " plot_lines(edge, 'ro-')\n", + " total_length = sum(distance(p, c) for (p, c) in edges)\n", + " print('{} node Graph of total length: {:.1f}'.format(len(vertexes), total_length))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 110 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's try it out:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "P = [Point(0, 0.1), \n", + " Point(-2, -1), Point(0, -1), Point(2, -1), \n", + " Point(-2.9, -1.9), Point(-1, -1.9), Point(1, -1.9), Point(2.9, -1.9)]\n", + "\n", + "Ptree = {P[0]: P[1:4], P[1]: P[4:6], P[3]: P[6:8]}\n", + "\n", + "plot_graph(Ptree)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 node Graph of total length: 10.9\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRyYAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 111 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now our plan is:\n", + "\n", + "1. Implement an algorithm to create a minimum spanning tree.\n", + "2. Implement a tree traversal; that will give us our `mst_tsp` algorithm.\n", + "3. Understand the guarantee, \n", + "\n", + "Creating a Minimum Spanning Tree (`mst`)\n", + "---\n", + "\n", + "Now let's see how to create a minimum spanning tree (or MST). Kruskal has a very nice algorithm to find MSTs, but with what we have done so far, it will be a bit easier to implement another Giant's algorithm:\n", + "\n", + "> *[Prim's algorithm for creating a MST](http://en.wikipedia.org/wiki/Prim%27s_algorithm): List all the edges and sort them, shortest first. Initialize a tree to be a single root city (we'll arbitrarily shoose the first city). Now repeat the following until the tree contains all the cities: find the shortest edge that links a city (A) that is in the tree to a city (B) that is not yet in the tree, and add B to the list of A's children in the tree.*\n", + "\n", + "Here's the code. One tricky bit: In the first line inside the `while` loop, we define `(A, B)` to be an edge in which one of `A` or `B` is in the tree, using the exclusive-or operator, `^`. Then in the next line, we make sure that `A` is the one that is in the tree and B is not, by swapping if necessary." + ] + }, + { + "cell_type": "code", + "collapsed": true, + "input": [ + "def mst(vertexes):\n", + " \"\"\"Given a set of vertexes, build a minimum spanning tree: a dict of the form {parent: [child...]}, \n", + " where parent and children are vertexes, and the root of the tree is first(vertexes).\"\"\"\n", + " tree = {first(vertexes): []} # the first city is the root of the tree.\n", + " edges = shortest_edges_first(vertexes)\n", + " while len(tree) < len(vertexes):\n", + " (A, B) = shortest_usable_edge(edges, tree)\n", + " tree[A].append(B)\n", + " tree[B] = []\n", + " return tree\n", + "\n", + "def shortest_usable_edge(edges, tree):\n", + " \"Find the ehortest edge (A, B) where A is in tree and B is not.\"\n", + " (A, B) = first((A, B) for (A, B) in edges if (A in tree) ^ (B in tree)) # ^ is \"xor\" \n", + " return (A, B) if (A in tree) else (B, A)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 112 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what a minimum spanning tree looks like:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_graph(mst(USA_map))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 node Graph of total length: 11518.4\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 113 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This algorithm clearly produced a spanning tree. It looks pretty good, but how can we be sure the algorithm will *always* produce a minimum spanning tree? \n", + "\n", + "1. The output is a **tree** because (1) every city is connected by a path from the root, and (2) every city only gets one parent (we only add a B that is not in tree), so there can be no loops. \n", + "2. The output is a **spanning tree** because it contains all the cities.\n", + "3. The output is a **minimum spanning tree** because each city was added with the shortest possible edge. Suppose this algorithm produces the tree T. For another putative spanning tree to be shorter, it would have to contain at least one city C whose edge from the parent was shorter than the edge in T. But that is not possible, because the algorithm always chooses the shortest possible edge from C's parent to C.\n", + "\n", + "\n", + "\n", + "**Note:** There are refinements to Prim's algorithm to make it more efficient. I won't bother with them because they complicate the code, and because `mst` is already fast enough for our purposes.\n", + "\n", + "Turning a Minimum Spanning Tree into a Tour (`mst_tsp`)\n", + "---\n", + "\n", + "Given a minimum spanning tree, we can generate a tour by doing a pre-order traversal, which means the tour starts at the root, then visits all the cities in the pre-order traversal of the first child of the root, followed by the pre-order traversals of any other children." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def mst_tsp(cities):\n", + " \"Create a minimum spanning tree and walk it in pre-order, omitting duplicates.\"\n", + " return preorder_traversal(tree=mst(cities), root=first(cities))\n", + "\n", + "def preorder_traversal(tree, root):\n", + " \"Traverse tree in pre-order, starting at root of tree.\"\n", + " result = [root]\n", + " for child in tree.get(root, ()):\n", + " result.extend(preorder_traversal(tree, child))\n", + " return result" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 114 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To better understand pre-order traversal, let's go back to the `Ptree` example, and this time label the vertexes:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "P = [Point(0, 0.1), \n", + " Point(-2, -1), Point(0, -1), Point(2, -1), \n", + " Point(-2.9, -1.9), Point(-1, -1.9), Point(1, -1.9), Point(2.9, -1.9)]\n", + "\n", + "Ptree = {P[0]: P[1:4], P[1]: P[4:6], P[3]: P[6:8]}\n", + "\n", + "plot_graph(Ptree)\n", + "plot_labeled_lines(P)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "8 node Graph of total length: 10.9\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 115 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A pre-order traversal starting at 0 would go to the first child, 1, then to its children, 4 and 5, then since there are no children of 4 and 5, it would continue with the other children of 0, hitting 2, then 3, and finally the children of 3, namely 6 and 7. So the following should be true:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "preorder_traversal(Ptree, P[0]) == [P[0], P[1], P[4], P[5], P[2], P[3], P[6], P[7]]" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 116, + "text": [ + "True" + ] + } + ], + "prompt_number": 116 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And this is what the pre-order traversal looks like as a tour:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tour([P[0], P[1], P[4], P[5], P[2], P[3], P[6], P[7]])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 117 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can think of this as starting at the root (at the top) and going around the outside of the tree counterclockwise, as if you were walking with your left hand always touching an edge, but skipping cities you have already been to.\n", + "\n", + "We see that the result is a tour, but not an optimal one. \n", + "\n", + "Let's see what `mst_tsp` can do on the USA map:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(mst_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ngmEYhpHl/wCDXwmtYvzhawAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 17972.8 in 0.008 secs for mst_tsp\n" + ] + } + ], + "prompt_number": 118 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not so great. Can the alteration strategy help?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def altered_mst_tsp(cities): return alter_tour(mst_tsp(cities))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 119 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(altered_mst_tsp, USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n9imZCAQAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 13779.8 in 0.054 secs for altered_mst_tsp\n" + ] + } + ], + "prompt_number": 120 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Better. Let's go to the benchmarks:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks([mst_tsp, nn_tsp, greedy_tsp, dq_tsp])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " mst_tsp | 5952.8 \u00b1 394 ( 5097 to 6721) | 0.004 secs/map | 30 \u2a09 60-city maps\n", + " nn_tsp | 5689.8 \u00b1 487 ( 4536 to 6861) | 0.001 secs/map | 30 \u2a09 60-city maps\n", + " greedy_tsp | 5312.9 \u00b1 462 ( 4404 to 6262) | 0.003 secs/map | 30 \u2a09 60-city maps\n", + " dq_tsp | 5202.4 \u00b1 251 ( 4479 to 5574) | 0.067 secs/map | 30 \u2a09 60-city maps\n" + ] + } + ], + "prompt_number": 121 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not very encouraging: `mst_tsp` is the second slowest and has the longest tours. I'm sure I could make it faster (at the cost of making the code a bit more complicated), but there is no point if the tours are going to be longer. \n", + "\n", + "What happens when we add the alteration strategy?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks([altered_dq_tsp, altered_nn_tsp, altered_mst_tsp, altered_greedy_tsp, repeated_altered_nn_tsp])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_dq_tsp | 4879.8 \u00b1 290 ( 4180 to 5409) | 0.077 secs/map | 30 \u2a09 60-city maps\n", + " altered_nn_tsp | 4812.1 \u00b1 263 ( 4091 to 5320) | 0.012 secs/map | 30 \u2a09 60-city maps\n", + " altered_mst_tsp | 4793.8 \u00b1 310 ( 4135 to 5433) | 0.017 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_greedy_tsp | 4780.0 \u00b1 297 ( 3934 to 5383) | 0.013 secs/map | 30 \u2a09 60-city maps\n", + " repeated_altered_nn_tsp | 4628.8 \u00b1 233 ( 3925 to 5120) | 0.238 secs/map | 30 \u2a09 60-city maps\n" + ] + } + ], + "prompt_number": 122 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now `altered_mst_tsp` is in the middle of the pack, both in tour length and in run time.\n", + "\n", + "So why would we want to use the rather complicated minimum spanning tree algorithm, when the greedy algorithm is simpler to implement, runs faster, and produces shorter tours?\n", + "\n", + "Guaranteed Tour Length!\n", + "---\n", + "\n", + "The great thing about the minimum spanning tree algorithm is that it comes with a *guarantee*, which none of the other algorithms offer. You are guaranteed that the tour length it comes up with will be no worse than twice as long as the optimal tour. (And, with a bit more complication, you can modify it to give a guarantee of 1.5 times longer.) The guarantee works like this:\n", + "\n", + "1. The minimum spanning tree, by definition, connects all the tours with the shortest possible total length.\n", + "2. So if you could follow each edge in the spanning tree just once, and that formed a legal tour, then that would be guaranteed to be\n", + "a minimal tour. \n", + "3. But you can't do that in general; in general there will be places where you skip tp the next city without following the spanning tree. Any such skip, however, is a straight line, and thus will be less than you would take if you went to the next city by following along the spanning tree.\n", + "4. If you did follow along the spanning tree, you would follow some edges twice, and some edges once. hence the total length of the tour would be at most twice the spanning tree, and thus as most twice the minimal tour.\n", + "\n", + "A guarantee is great from a theoretical point of view, but in practice the greedy or nearest neighbor algorithms do just as well or better than the minimum spanning tree, on the maps that we actually see. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">>> Shoulders of Giants: Held-Karp Algorithm (`hk_tsp`)\n", + "===\n", + "\n", + "\n", + "
Held, Shareshian, Karp (Computer History Museum)
\n", + "\n", + "\n", + "\n", + "
xkcd 399\n", + "
\n", + "\n", + "Another algorithm that shows up with a literature search is the [Held-Karp Dynamic Programming Algorithm](http://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm), named after giants [Michael Held](http://www.computerhistory.org/collections/catalog/102650390) and [Richard Karp](http://en.wikipedia.org/wiki/Richard_M._Karp). It is an algorithm for finding optimal tours, not approximate ones, so it is not appropriate for large *n*. But even in its simplest form, without any programming tricks, it can go quite a bit further than `alltours_tsp`. That is because `alltours_tsp` was O(*n*!), while the Held-Karp algorithm is only O(*n*2 2*n*). \n", + "\n", + "How did Held and Karp achieve this speedup? They noticed that `alltours_tsp` wastes a lot of time with permutations that can't possibly be optimal tours. Consider the following 10-city problem, with a 6-city segment shown:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(cross, 'r-', [0, 4, 1, 3, 2, 9])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nbdu0Zs2aqJ7Hzji1tBleWSl9+KH04YeqmDBB/9Ozp/709tvSqFGtf25GOsBRGzdu1AMPPKCutV/u\n0U527jk1Hunq7ylJ0u9+p18OGqQHsrM1qi1hkpz5XjoAdd555x09/vjjUT+PVXdOoVCpCgqK9d97\n1mvLgDSNHrFND5093vDdtz/8Qb//6iv989IlrVq1qm0nYKQD2qX22qyo6KykpCoFg+nKzBzf5HFn\nzpzRnj17tGnTpqjPaU2cQqFSzZ37kcLhxVqr11V17i79POffdWboQPWut9H9xq9/rZKyMv1l3762\nn4SRDmizH6/NJXXHwuE8SWoSqA0bNigrK0vXX3991Oe1ZqwrKChWOLxEvXVGffStJmmr/qtqo2b0\ny2yw2f3Lw4f1zXffaezYsUpLS9PixYtbfxJGOqDNaq/N+sLhJSosLGny2PXr18dkpJMsunOqqKhZ\nyhn11s90VMf0M0nShMjHDR5XmZEhBYPSlCltOwEjHdAutddmY5FIpybHPv7442Ye2T7W3DklJVX9\n608JdWGSpOTk6ticgJEOaJcfr82GYnZttsCaOAWD6QoE8hocCwQWKDd3cmxOwEgHtIvj12YLrBnr\najfWCgsXKhLppOTkauXmPtjsOwJtxkgHtJuj1+ZVJBhjjKNniLUpU9q+57R8uXTokPTnPzu3rpaU\nl0uDB9f8DqDVrBnrHMVIB3iO/+PESAd4kv/jxLt0gCf5P06MdIAn+TtOjHSAZ/k7Tox0gGf5O06M\ndIBn+TdOjHSAp/k3Tox0gKf5N06MdICn+TNOjHSA5/kzTox0gOf5M06MdIDn+S9OjHSAL/gvTox0\ngC/4L06MdIAv+CtOjHSAb/grTox0gG/4K06MdIBv+CdOjHSAr/gnTox0gK/4J06MdICv+CNOjHSA\n7/gjTox0gO/4I06MdIDveD9OjHSAL3k/Tox0gC95P06MdIAveTtOjHSAb3k7Tox0gG95O06MdIBv\neTdOjHSAr3k3Ti2MdCtXrlRKSooSExN19uxZlxYH+NfSpUt1++23a+jQoSosLHTsPJ0de2anFRVJ\nixY1OXzPPfcoKytLEydOjP+aAJ/bvHmzdu3ape3bt6tfv3769ttvHTuXN+N0lZFu+PDhLiwI6Bg+\n+OADBYNB9evXT5J00003OXYub451vEsHuKKkpEQlJSUaMWKE5s2bpxMnTjh2Lk/FKRQq1Z49R1X9\nl63KO/CDQqFSt5cE+EYoVKqMjHxNnPiiMjLym72+Ll26pMTERO3atUspKSla1MzWSswYj9i8eYcJ\nBBaYLXrQlKun6azLJhBYYDZv3tHs42+77TZTXl4e51U248wZY3r1cnsVwFXVXl+SqfvV3PWVk5Nj\nDh06ZIwx5sKFC6Z///6Orckzd04FBcUKh5dIkt7TNFXpOoXDS1RYWNLizxhj4rU8wNPqX1+1mru+\nxo4dq82bN0uq2Ry///77HVuTZ+JUUVGzd/9/StVqPVF3PBLp1OBxBQUFuvXWW3Xy5EkNGzZMc+bM\nies6AS+qvb4aa3x9Pf3009qzZ4+GDh2q999/Xy+88IJja/LMu3VJSVWSpN9oeYPjycnVDf4eDAYV\nDAbjti7AD2qvr8YaX19dunRRUVFRPJbknTunYDBdgUBeg2OBwALl5k52aUWAf9h4fXnmzikzc7wk\nqbBwoSKRTkpOrlZu7oN1xwG0n43XV4Jh19hZ5eXS4ME1vwNoNc+MdQA6FuIEwErECYCViBMAKxEn\nAFYiTgCsRJwAWIk4AbAScQJgJeIEwErECYCViBMAKxEnAFYiTgCsRJwAWIk4AbAScQJgJeIEwErE\nCYCViBMAKxEnAFYiTgCsRJwAWIk4AbAScQJgJeIEwErECYCViBMAKxEnAFYiTgCsRJwAWIk4AbAS\ncQJgJeIEwErECYCViBMAKxEnAFYiTgCsRJwAWIk4AbAScXLZqVOnNGHCBA0YMECzZs1SdXW120tC\nnMycOVODBg1SWlqa0tLSdPDgQbeXZBXi5LKXXnpJmZmZOnz4sM6ePav33nvP7SUhThISEvTKK69o\n//792r9/v4YNG+b2kqxCnFz2+eefa86cOerSpYtmzJih3bt3u70kxJExxu0lWIs4uejSpUs6ffq0\nevToIUlKTU3VZ5995vKqEE/z58/Xvffeq5UrV6qqqsrt5ViFODkoFCpVTs4S/fP8JWVk5CsUKm3y\nGP7L6U+hUKkyMvI1ceKLLb72S5cu1dGjR7VhwwYVFxdr48aNLqzUXp3dXoBfhUKlmjv3I50L56lK\nb6q4eLHC4TxJUmbmeEnSDTfcoD59+ujcuXPq2bOnDh8+rNGjR7u5bMRA7WsfDi+pO9b4tZekvn37\nSpJuvvlmzZo1S+vXr1dOTk58F2sx7pwcUlBQ3OBfTkkKh5eosLCkwbHRo0fr9ddf18WLF7Vu3TqN\nGTMmnsuEA1r72p86dUpSzXi/fv16PfTQQ3FboxcQJ4dUVPx4U1pV7wY1EunU4HH5+fnasmWLUlNT\n1bNnT02bNi1ua4Qz6r/29TV+7WfMmKFhw4bpvvvu08CBA7lraoSxziFJSTWbm2d1o/rqm7rjyckN\nP8fUv39/7dixI65rg7NqX/vGGr/2W7dujcdyPIs7J4cEg+kKBPIaHAsEFig3d7JLK0K88NrHRoLh\n7SLHhEKlKiwsUSTSScnJ1crNndxgQxT+xWsfPeIEwEqMdQCsRJwAWIk4AbAScQJgJeIEwErECYCV\niBMAKxEnAFYiTgCsRJwAWIk4AbAScQJgJeIEwErECYCViBMAKxEnAFYiTgCsRJwAWIk4AbAScQJg\nJeIEwErECYCViBMAKxEnAFYiTgCsRJwAWIk4AbAScQJgJeIEwErECYCViBMAKxEnAFYiTgCsRJwA\nWIk4AbAScQJgJeIEwErECYCViBMAK/0/DZMwmWBuZRAAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 123 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `alltours_tsp` would generate 4! different tours that start with those 6 cities, and continue with all permutations of the other 4 cities. But that seems wasteful: there is no way that this segment could be part of an optimal tour, so why waste time on it? Now to make that claim, we have to prove that this segment can never be part of an optimal tour. That proof comes down to two things. First, we demonstrate another tour that also starts in city 0 and ends in city 9, and along the way goes through cities 1 through 4, and is shorter:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_labeled_lines(cross, [0, 1, 2, 3, 4, 9])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRiKcABjp/wHJ64o//47Q1gAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 124 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Second, we need this key property:\n", + "\n", + ">*Given a start city A, an end city C, and a set of middle cities Bs, then out of all the segments that start in A, end in C, and go through all and only the cities in Bs, only the shortest segment could ever be part of the optimal tour. \n", + "\n", + "Of course, we don't know that the optimal tour goes through exactlt those Bs cities before hitting C. But if it does, then we need only consider the permutation of Bs that leads to the shortest segment. So we can throw out the red zig-zag segment above, and keep the nice smooth blue segment.\n", + "\n", + "So far we have only been talking about segments. We know that the TSP is defined for tours, not segments. So even if we find the shortest possible segment, it might not be the shortest possible tour. But here's something we do know: a tour has to end somewhere. So just find the shortest segment from the start city, `A`, to every possible end city, `C`. That will give you *n*-2 segments. Out of those, don't choose the shortest *segment*, but rather choose the shortest *tour*.\n", + "\n", + "That gives us our algorithm:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def hk_tsp(cities):\n", + " \"\"\"The shortest tour of this set of cities, using the Held-Karp approach.\n", + " For each end city C, find the shortest segment from A (the start) to C.\n", + " Out of all these shortest segments, pick the one that is the shortest tour.\"\"\"\n", + " A = first(cities)\n", + " segments = [shortest_segment(A, cities - {A, C}, C)\n", + " for C in cities if C is not A]\n", + " return shortest_tour(segments)\n", + "\n", + "# TO DO: function: shortest_segment(A, Bs, C)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 125 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now for `shortest_segment(A, Bs, C)`. It is defined to produce the shortest segment that starts in city `A`, ends in `C`, and visits some permutation of `Bs` cities in the middle. If there are no `Bs` cities, then of course the shortest segment is to go directly from `A` to `C`. If there are `Bs` cities, then one of them has to be the last `B` city visited (just before visiting `C`). So for each `B`, find the shortest segment that first goes from `A`, through all the other `Bs` cities, then to `B`, and finally to `C`. Out of all these candidate segments, return the one with the minimum segment length.\n", + "\n", + "**Note:** the decorator `@memoize` makes this a **dynamic programming** algorithm, which is a fancy name meaning that we cache the results of sub-computations because we will re-use them multiple times." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "@memoize\n", + "def shortest_segment(A, Bs, C):\n", + " \"The shortest segment starting at A, going through all Bs, and ending at C.\"\n", + " if not Bs:\n", + " return [A, C]\n", + " else:\n", + " segments = [shortest_segment(A, Bs - {B}, B) + [C] \n", + " for B in Bs]\n", + " return min(segments, key=segment_length)\n", + " \n", + "def segment_length(segment):\n", + " \"The total of distances between each pair of consecutive cities in the segment.\"\n", + " # Same as tour_length, but without distance(tour[0], tour[-1])\n", + " return sum(distance(segment[i], segment[i-1]) \n", + " for i in range(1, len(segment)))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 126 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That's all there is to it. Let's compare `alltours_tsp` with `hk_tsp` on 10 city tours:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(alltours_tsp, Cities(10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 city tour with length 2492.2 in 2.595 secs for alltours_tsp\n" + ] + } + ], + "prompt_number": 127 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(hk_tsp, Cities(10))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "10 city tour with length 2492.2 in 0.096 secs for hk_tsp\n" + ] + } + ], + "prompt_number": 128 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that `hk_tsp` returns the optimal tour, and it is a lot faster. We can take `hk_tsp` into uncharted territory well beyond the reach of `alltours_tsp`:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(hk_tsp, Cities(14))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nJhj4REQ28f8eOk5vBpf6+wAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "14 city tour with length 2617.2 in 2.492 secs for hk_tsp\n" + ] + } + ], + "prompt_number": 129 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(hk_tsp, Cities(16))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAASUVORK5CYII=\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "16 city tour with length 2416.8 in 14.761 secs for hk_tsp\n" + ] + } + ], + "prompt_number": 130 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not bad! In 11 seconds, we did what `alltours_tsp` would have taken an estimated 200 days to complete! Let's repeat the table of expected times, comparing the All Tours algorithm with the Held-Karp algorithm:\n", + "\n", + "\n", + "
n `alltours_tsp(Cities(n))``hk_tsp(Cities(n))`\n", + "
expected time ≈ O(n!)expected time ≈ O(n2 2n)\n", + "
10 10! tours = 2 secs 0.1 secs \n", + "
112 secs × 11! / 10! ≈ 22 secs 0.2 secs\n", + "
122 secs × 12! / 10! ≈ 4 mins 0.4 secs\n", + "
142 secs × 14! / 10! ≈ 13 hours 3 secs\n", + "
162 secs × 16! / 10! ≈ 200 days 162 216 tours = 11 secs\n", + "
182 secs × 18! / 10! ≈ 112 years\n", + "11 secs × (18/16)2 2(18-16) ≈ 1 min\n", + "
252 secs × 25! / 10! ≈ 270 billion years\n", + " 11 secs × (25/16)2 2(25-16) ≈ 4 hours\n", + "
502 secs × 50! / 10! ≈ 5 × 1050 years11 secs × (50/16)2 2(50-16) ≈ 58,000 years\n", + "
\n", + "\n", + "So if we had some patience, we could find the optimal tour for a 25 city map, but we still can't handle the 50-city landmarks map.\n", + "(There are refinements to Held-Karp that can handle 50-city maps, and could do it even with 1960s-era computing power.)\n", + "\n", + "We're starting to run out of tricks, but we have one more general strategy to consider." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + ">>> Ensembles of Other Algorithms (`ensemble_tsp`)\n", + "====" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we have several optimization algorithms and we're not sure which is best, we can always try them all and take the best result. This increases the run time, but it means that we get to throw everything we have at the problem. We will define `ensemble_tsp`, which calls upon the other algorithms we have developed. First, if the set of inut cities is small enough, it solves the problem optimally with `hk_tsp`. If the set is too large it tries all the best algorithms, and takes the best result:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ensemble = [altered_dq_tsp, altered_greedy_tsp, altered_mst_tsp, repeated_altered_nn_tsp]\n", + "\n", + "def ensemble_tsp(cities, threshold=16, algorithms=ensemble): \n", + " \"Apply all algorithms to cities and take the shortest resulting tour.\"\n", + " if len(cities) <= threshold:\n", + " return hk_tsp(cities)\n", + " else:\n", + " return shortest_tour(tsp(cities) for tsp in algorithms)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 131 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's go to the benchmarks:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(ensemble + [ensemble_tsp])" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_dq_tsp | 4879.8 \u00b1 290 ( 4180 to 5409) | 0.077 secs/map | 30 \u2a09 60-city maps\n", + " altered_greedy_tsp | 4780.0 \u00b1 297 ( 3934 to 5383) | 0.013 secs/map | 30 \u2a09 60-city maps\n", + " altered_mst_tsp | 4793.8 \u00b1 310 ( 4135 to 5433) | 0.017 secs/map | 30 \u2a09 60-city maps\n", + " repeated_altered_nn_tsp | 4628.8 \u00b1 233 ( 3925 to 5120) | 0.238 secs/map | 30 \u2a09 60-city maps\n", + " ensemble_tsp | 4621.8 \u00b1 232 ( 3925 to 5120) | 0.347 secs/map | 30 \u2a09 60-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 132 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(ensemble + [ensemble_tsp], Maps(30, 120))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_dq_tsp | 6816.8 \u00b1 291 ( 6232 to 7363) | 0.564 secs/map | 30 \u2a09 120-city maps\n", + " altered_greedy_tsp | 6577.3 \u00b1 223 ( 6184 to 7091) | 0.060 secs/map | 30 \u2a09 120-city maps\n", + " altered_mst_tsp | 6683.2 \u00b1 224 ( 6156 to 7052) | 0.069 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp | 6441.1 \u00b1 215 ( 6000 to 6946) | 1.124 secs/map | 30 \u2a09 120-city maps\n", + " ensemble_tsp | 6431.1 \u00b1 217 ( 6000 to 6946) | 1.820 secs/map | 30 \u2a09 120-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 133 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(ensemble + [ensemble_tsp], Maps(10, 250))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_dq_tsp | 9726.9 \u00b1 172 ( 9495 to 10102) | 4.801 secs/map | 10 \u2a09 250-city maps\n", + " altered_greedy_tsp | 9062.8 \u00b1 157 ( 8767 to 9404) | 0.262 secs/map | 10 \u2a09 250-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " altered_mst_tsp | 9360.4 \u00b1 181 ( 9066 to 9658) | 0.317 secs/map | 10 \u2a09 250-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp | 9096.4 \u00b1 115 ( 8927 to 9283) | 5.362 secs/map | 10 \u2a09 250-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " ensemble_tsp | 9040.0 \u00b1 129 ( 8767 to 9283) | 10.770 secs/map | 10 \u2a09 250-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 134 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the `ensemble_tsp` is best (we knew before even trying the benchmarks that it must be at least tied for best), but only improves on `repeated_altered_nn_tsp` by less than 0.2%." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks(ensemble + [ensemble_tsp], (USA_map,))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_dq_tsp |14209.6 \u00b1 0 (14210 to 14210) | 0.176 secs/map | 1 \u2a09 80-city maps\n", + " altered_greedy_tsp |14220.1 \u00b1 0 (14220 to 14220) | 0.029 secs/map | 1 \u2a09 80-city maps\n", + " altered_mst_tsp |13779.8 \u00b1 0 (13780 to 13780) | 0.054 secs/map | 1 \u2a09 80-city maps\n", + " repeated_altered_nn_tsp |13633.0 \u00b1 0 (13633 to 13633) | 0.454 secs/map | 1 \u2a09 80-city maps\n", + " ensemble_tsp |13633.0 \u00b1 0 (13633 to 13633) | 0.716 secs/map | 1 \u2a09 80-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 135 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "plot_tsp(lambda cities: repeated_altered_nn_tsp(cities, 80), USA_map)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nEgafeQAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "80 city tour with length 13491.1 in 1.880 secs for \n" + ] + } + ], + "prompt_number": 136 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks([altered_greedy_tsp, altered_mst_tsp, repeated_altered_nn_tsp], (USA_big_map,))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_greedy_tsp |43716.7 \u00b1 0 (43717 to 43717) | 7.398 secs/map | 1 \u2a09 1089-city maps\n", + " altered_mst_tsp |45796.8 \u00b1 0 (45797 to 45797) | 10.370 secs/map | 1 \u2a09 1089-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + " repeated_altered_nn_tsp |44387.7 \u00b1 0 (44388 to 44388) |135.496 secs/map | 1 \u2a09 1089-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 137 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "benchmarks([altered_greedy_tsp, altered_mst_tsp, repeated_altered_nn_tsp], (USA_landmarks_map,))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " altered_greedy_tsp |10512.1 \u00b1 0 (10512 to 10512) | 0.012 secs/map | 1 \u2a09 50-city maps\n", + " altered_mst_tsp |10451.1 \u00b1 0 (10451 to 10451) | 0.022 secs/map | 1 \u2a09 50-city maps\n", + " repeated_altered_nn_tsp |10235.3 \u00b1 0 (10235 to 10235) | 0.209 secs/map | 1 \u2a09 50-city maps" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n" + ] + } + ], + "prompt_number": 138 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Further Explorations\n", + "===\n", + "\n", + "That's all I'm going to write for now. But there are still plenty of open questions for you to explore:\n", + "\n", + "* Branch and Cut: this is a technique to cut off a search early, when a partial solution is obviously not optimal. We saw how Held-Karp cuts off some permutations of cities when another permutation is better. A refinement on that is to keep track of, say, the best total length of the segment going through all the Bs cities. Then, any time you have a partial segment through some of the Bs cities that exceeds the best total, we can stop right there, before even finishing all the Bs. With this technique, you can find optimal tours for around 50 cities.\n", + "* Linear programming: Lookup the topic \"linear programming\" and see how it applies to TSP.\n", + "* Heuristic Algorithms: There are many approaches for using heurisitic estimates to find good (but not optimal) tours. For example, \"ant colony optimization algorithms\" make random choices of which edge to follow, and then the edges that occur in the best tours get reinforced with some virtual pheromones, and other ants tend to follow those pheromones.\n", + "* `altered` as a function: we defined a lot of one-line functions that just called another algorithm, and then calles `alter_tour` on the result. Can you write a function, `altered(func)`, which takes a TSP algorithm as argument, and returns a TSP algorithm that does the original algorithm and hen calls `alter_tour`?\n", + "* Why does `mst` produce an optimal result, while `greedy_tsp` does not, even though the two algorithms have similar structure in the way they iterate over `shortest_edges_first`?\n", + "* The code in this notebook was designed for clarity, not efficiency. Can you make the code faster?\n", + "* What else are you interested in?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 138 + } + ], + "metadata": {} + } + ] +}