public void TSPTaskTest() { TSPTask task = new TSPTask(); Debug.WriteLine("Точки:"); HashSet <double> seriesSet = new HashSet <double>(); int temp = 1; foreach (var p in task.Points) { Debug.WriteLine("{0}\t{1}", p.X, p.Y); seriesSet.Add(temp++); } Trace.WriteLine(""); seriesSet.Remove(1); var series = new UniqueSeriesGenerator(seriesSet).Generate(CHROMOSOMES); GeneticAlgorithm alg = DefaultGeneticAlgorithmFactory.Create(TOWNS - 1, CHROMOSOMES); alg.Config.AllowFloat = false; alg.Config.RandomInit = false; alg.Config.MinGen = 2; alg.Config.MaxGen = TOWNS; alg.Cancellation.FitnessNoChange = 5; alg.Config.Mutation.MutationPercent = 0.05; alg.Config.CrossesNumber = 100; alg.Algorithm.Crossing = new OnePointCross(true); alg.Algorithm.Casting = new Unification(seriesSet); alg.Algorithm.Mutation = new SwapMutation(); alg.Algorithm.Task = task; for (int i = 0; i < series.Length; i++) { alg.CurrentGeneration.Chromosome[i] = new Chromosome(TOWNS - 1) { Gen = series[i] }; } alg.OnIterate += Alg_OnIterate; alg.Start(); Trace.WriteLine(""); for (int i = 0; i < task.Dimension.GetLength(0); i++) { for (int j = 0; j < task.Dimension.GetLength(1); j++) { Trace.Write(task.Dimension[i, j] + "\t"); } Trace.WriteLine(""); } Trace.WriteLine(""); for (int i = 0; i < alg.Result.Data[0].Chromosome[0].Gen.Length; i++) { int num = (int)alg.Result.Data[0].Chromosome[0].Gen[i]; Trace.WriteLine($"{task.Points[num-1].X}\t{task.Points[num-1].Y}"); } Trace.WriteLine(""); for (int i = 0; i < alg.CurrentGeneration.Chromosome[0].Gen.Length; i++) { int num = (int)alg.CurrentGeneration.Chromosome[0].Gen[i]; Trace.WriteLine($"{task.Points[num - 1].X}\t{task.Points[num - 1].Y}"); } Trace.WriteLine(""); }