public static void Start()
        {
            // Create and add our cities
            City city = new City(60, 200);

            TourManager.AddCity(city);
            City city2 = new City(180, 200);

            TourManager.AddCity(city2);
            City city3 = new City(80, 180);

            TourManager.AddCity(city3);
            City city4 = new City(140, 180);

            TourManager.AddCity(city4);
            City city5 = new City(20, 160);

            TourManager.AddCity(city5);
            City city6 = new City(100, 160);

            TourManager.AddCity(city6);
            City city7 = new City(200, 160);

            TourManager.AddCity(city7);
            City city8 = new City(140, 140);

            TourManager.AddCity(city8);
            City city9 = new City(40, 120);

            TourManager.AddCity(city9);
            City city10 = new City(100, 120);

            TourManager.AddCity(city10);
            City city11 = new City(180, 100);

            TourManager.AddCity(city11);
            City city12 = new City(60, 80);

            TourManager.AddCity(city12);
            City city13 = new City(120, 80);

            TourManager.AddCity(city13);
            City city14 = new City(180, 60);

            TourManager.AddCity(city14);
            City city15 = new City(20, 40);

            TourManager.AddCity(city15);
            City city16 = new City(100, 40);

            TourManager.AddCity(city16);
            City city17 = new City(200, 40);

            TourManager.AddCity(city17);
            City city18 = new City(20, 20);

            TourManager.AddCity(city18);
            City city19 = new City(60, 20);

            TourManager.AddCity(city19);
            City city20 = new City(160, 20);

            TourManager.AddCity(city20);

            // Set initial temp
            double temp = 10000;

            // Cooling rate
            double coolingRate = 0.003;

            // Initialize intial solution
            Tour currentSolution = new Tour();

            currentSolution.GenerateIndividual();

            Console.WriteLine("Initial solution distance: " + currentSolution.GetDistance());

            // Set as current best
            Tour best = new Tour(currentSolution.GetTour());

            Random rnd = new Random();

            // Loop until system has cooled
            while (temp > 1)
            {
                // Create new neighbour tour
                Tour newSolution = new Tour(currentSolution.GetTour());

                // Get a random positions in the tour
                int tourPos1 = (int)(newSolution.TourSize() * rnd.NextDouble());
                int tourPos2 = (int)(newSolution.TourSize() * rnd.NextDouble());

                // Get the cities at selected positions in the tour
                City citySwap1 = newSolution.GetCity(tourPos1);
                City citySwap2 = newSolution.GetCity(tourPos2);

                // Swap them
                newSolution.SetCity(tourPos2, citySwap1);
                newSolution.SetCity(tourPos1, citySwap2);

                // Get energy of solutions
                double currentEnergy   = currentSolution.GetDistance();
                double neighbourEnergy = newSolution.GetDistance();

                // Decide if we should accept the neighbour
                if (AcceptanceProbability(currentEnergy, neighbourEnergy, temp) > rnd.NextDouble())
                {
                    currentSolution = new Tour(newSolution.GetTour());
                }

                // Keep track of the best solution found
                if (currentSolution.GetDistance() < best.GetDistance())
                {
                    best = new Tour(currentSolution.GetTour());
                }

                // Cool system
                temp *= 1 - coolingRate;
            }

            Console.WriteLine("Final solution distance: " + best.GetDistance());
            Console.WriteLine("Tour: " + best);
        }