/// <summary> /// Generates a random individual. /// </summary> /// <param name="solver"></param> /// <returns></returns> public Individual<List<int>, GeneticProblem, Fitness> Generate( Solver<List<int>, GeneticProblem, Fitness> solver) { ISolver lk_solver = new HillClimbing3OptSolver(true, true); IRoute route = lk_solver.Solve(solver.Problem.BaseProblem); List<int> new_genome = new List<int>(); bool first_found = false; foreach (int customer in route) { if (first_found) { new_genome.Add(customer); } if (customer == 0) { first_found = true; } } foreach (int customer in route) { if (customer == 0) { break; } new_genome.Add(customer); } Individual individual = new Individual(new_genome); individual.CalculateFitness(solver.Problem, solver.FitnessCalculator); return individual; }
public void TestSolutions5NotClosedNotFixed() { RandomGeneratorExtensions.GetGetNewRandom = () => new RandomGenerator(4541247); // create problem. var problem = TSPHelper.CreateDirectedTSP(0, 5, 10, 1); problem.Weights.SetWeight(0, 1, 1); problem.Weights.SetWeight(1, 2, 1); problem.Weights.SetWeight(2, 3, 1); problem.Weights.SetWeight(3, 4, 1); problem.Weights.SetWeight(4, 0, 1); // create the solver. var solver = new HillClimbing3OptSolver(); for (int i = 0; i < 10; i++) { // generate solution. float fitness; var solution = solver.Solve(problem, new TSPObjective(), out fitness); // test contents. Assert.IsTrue(fitness <= 7); var solutionList = new List <int>(solution); Assert.AreEqual(0, DirectedHelper.ExtractId(solutionList[0])); Assert.AreEqual(5, solutionList.Count); } }
public void Test5Closed() { RandomGeneratorExtensions.GetGetNewRandom = () => new RandomGenerator(4541247); // create problem. var objective = new TSPObjective(); var problem = TSPHelper.CreateTSP(0, 0, 5, 10); problem.Weights[0][1] = 1; problem.Weights[1][2] = 1; problem.Weights[2][3] = 1; problem.Weights[3][4] = 1; problem.Weights[4][0] = 1; // solve problem. var solver = new HillClimbing3OptSolver(); var solution = solver.Solve(problem, objective); // check result. var last = solution.Last(); Assert.AreEqual(0, solution.Last); }
public void TestSolution1() { RandomGeneratorExtensions.GetGetNewRandom = () => new RandomGenerator(4541247); // create problem. var problem = TSPHelper.CreateDirectedTSP(0, 0, 1, 0, 1); // create the solver. var solver = new HillClimbing3OptSolver(); for (int i = 0; i < 10; i++) { // generate solution. float fitness; var solution = solver.Solve(problem, new TSPObjective(), out fitness); // test contents. Assert.AreEqual(0, fitness); var solutionList = new List <int>(solution); Assert.AreEqual(0, DirectedHelper.ExtractId(solutionList[0])); Assert.AreEqual(1, solutionList.Count); } }