/// <summary> /// Starts the TSP algorithm. /// To stop before all generations are calculated, set <see cref="Halt"/> to true. /// </summary> /// <param name="populationSize">Number of random tours to create before starting the algorithm.</param> /// <param name="maxGenerations">Number of times to perform the crossover operation before stopping.</param> /// <param name="groupSize">Number of tours to examine in each generation. Top 2 are chosen as the parent tours whose children replace the worst 2 tours in the group.</param> /// <param name="mutation">Odds that a child tour will be mutated..</param> /// <param name="seed">Seed for the random number generator.</param> /// <param name="chanceToUseCloseCity">The odds (out of 100) that a city that is known to be close will be used in any given link.</param> /// <param name="cityList">List of cities in the tour.</param> public void Begin(int populationSize, int maxGenerations, int groupSize, int mutation, int seed, int chanceToUseCloseCity, List <City> cityList) { Rand = new Random(seed); CityList = cityList; Population1 = RouteHelper.CreateRandomPopulation(populationSize, cityList, Rand, chanceToUseCloseCity); DisplayRoute(RouteHelper.BestRoute, 0, false); int generation; for (generation = 0; generation < maxGenerations; generation++) { if (Halt) { break; // GUI has requested we exit. } var foundNewBestTour = MakeChildren(groupSize, mutation); if (foundNewBestTour) { DisplayRoute(RouteHelper.BestRoute, generation, false); } } DisplayRoute(RouteHelper.BestRoute, generation, true); }