public static void main(String[] args) throws Exception {
		// loadFile(new File("Towns.csv"));
		// loadFile(new File("Tuesday2013.csv"));
		// loadFile(new File("Friday2013.csv"));
		// loadFile(new File("Tuesday2014.csv"));
		loadFile(new File("Friday2014.csv"));

		// Convert input to correct format
		arrayListToDouble();

		// Declare Infinity because it's awesome
		final double INFINITY = Double.POSITIVE_INFINITY;

		// Add input into initial Tour
		for (int i = 0; i < size; i++) {
			City city = new City((int) coords[i][0], coords[i][1], coords[i][2]);
			TourManager.addCity(city);
		}

		// Initialise population(s)
		int popSize = size / 10;
		Population[] popArray = new Population[popSize];

		for (int i = 0; i < popSize; i++) {
			popArray[i] = new Population(size, true);
			popArray[i] = GA.evolvePopulation(popArray[i]);
		}

		// For use in finding shortest route
		double sh, shortest = INFINITY;
		double[] dist = new double[popSize];
		int pos = 0;

		// Evolve population for X generations
		for (int i = 0; true; i++) {
			sh = INFINITY;

			for (int j = 0; j < popSize; j++) {
				popArray[j] = GA.evolvePopulation(popArray[j]);
				dist[j] = popArray[j].getFittest().getDistance();

				if (dist[j] < sh) {
					sh = dist[j];
					pos = j;
				}
			}

			// If new shortest route is found, print and update
			if (sh < shortest) {
				shortest = sh;
				printShortest(i, shortest, popArray[pos]);
			}

			// Print a generation count to show program is still running
			if (i % 5000 == 0) {
				System.out
				.println(new StringBuilder("Generation:\t").append(i));
			}
		}
	}