{ "cells": [ { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import matplotlib.image as mpimg\n", "import random\n", "import math\n", "\n", "class TSP():\n", " cities = 0\n", " distances = []\n", " locations = []\n", " \n", " def distance(self, c1, c2):\n", " loc1, loc2 = self.locations[c1], self.locations[c2]\n", " return math.sqrt((loc1[0]-loc2[0])**2 + (loc1[1]-loc2[1])**2)\n", " \n", " def __init__(self, cities, seed=1):\n", " random.seed(seed)\n", " self.cities = cities\n", " \n", " self.locations = []\n", " for i in range(cities):\n", " self.locations.append((random.random(), random.random()))\n", " \n", " self.distances = []\n", " for i in range(cities):\n", " self.distances.append([])\n", " for j in range(cities):\n", " self.distances[i].append(self.distance(i, j))\n", " \n", " def random_solution(self):\n", " s = [i for i in range(self.cities)]\n", " random.shuffle(s)\n", " return s\n", " \n", " def evaluate(self, s):\n", " fit = 0\n", " for i in range(len(s)):\n", " fit += self.distances[s[i]][s[i+1 if i+1