def test_should_the_operator_work_with_permutation_at_the_beginning(self, random_call): operator = PMXCrossover(1.0) solution1 = PermutationSolution(number_of_variables=10, number_of_objectives=1) solution1.variables = [i for i in range(10)] solution2 = PermutationSolution(number_of_variables=10, number_of_objectives=1) solution2.variables = [i for i in range(10, 20)] random_call.side_effect = (0, 5) offspring = operator.execute([solution1, solution2]) self.assertEqual([10, 11, 12, 13, 14, 5, 6, 7, 8, 9], offspring[0].variables) self.assertEqual([0, 1, 2, 3, 4, 15, 16, 17, 18, 19], offspring[1].variables)
def create_solution(self) -> PermutationSolution: new_solution = PermutationSolution( number_of_variables=self.number_of_variables, number_of_objectives=self.number_of_objectives) new_solution.variables = random.sample( range(1, self.number_of_variables + 1), self.number_of_variables) return new_solution
def load_initial_solutions(self, warm_startup_info: Mapping, problem: Problem) -> None: self.warm_startup_info = warm_startup_info if warm_startup_info and 'paths' in self.warm_startup_info.keys( ) and len(self.warm_startup_info['paths']) > 0: from jmetal.util.generator import InjectorGenerator one_sol_variables = self.warm_startup_info['paths'][0] solution = PermutationSolution( number_of_variables=problem.number_of_variables, number_of_objectives=problem.number_of_objectives) solution.variables = one_sol_variables self._initial_solutions.append(problem.evaluate(solution)) for one_sol_variables in self.warm_startup_info['paths'][1:]: solution = copy(solution) solution.variables = one_sol_variables self._initial_solutions.append(problem.evaluate(solution)) generator = InjectorGenerator(solutions=self._initial_solutions) else: from jmetal.util.generator import RandomGenerator generator = RandomGenerator() self._solution_generator = generator