def test_validate(self): crossover_operator = StringCrossover(Probability(1), Random(), 1) candidate1 = Candidate() candidate1.data = 'AAAA' candidate2 = Candidate() candidate2.data = 'BBBB' crossover_operator.validate_parents(candidate1, candidate2) candidate2.data = 'BBBBB' with self.assertRaises(ValidationException): crossover_operator.validate_parents(candidate1, candidate2)
def test_validate(self): crossover_operator = ListCrossover(Probability(1), Random(), 1) candidate1 = Candidate() candidate1.data = [1, 2, 3, 4] candidate2 = Candidate() candidate2.data = [5, 6, 7, 8] crossover_operator.validate_parents(candidate1, candidate2) candidate2.data = [1, 2, 3, 4, 5] with self.assertRaises(ValidationException): crossover_operator.validate_parents(candidate1, candidate2)
def _test_apply(self, strings, random, points): candidate1 = Candidate() candidate1.data = strings[0][0] candidate2 = Candidate() candidate2.data = strings[0][1] crossover_points = points crossover_operator = ListCrossover(Probability(1), random, crossover_points) result = crossover_operator.mate(candidate1, candidate2) self.assertEqual(len(result), 2) self.assertEqual(result[0].data, strings[1][0]) self.assertEqual(result[1].data, strings[1][1])
def test_apply(self): candidate1 = Candidate() candidate1.data = [1, 2, 3, 4, 5, 6, 7, 8, 9] candidate2 = Candidate() candidate2.data = [9, 3, 7, 8, 2, 6, 5, 1, 4] random = Random() random.int = MagicMock(side_effect=[3, 7]) crossover_operator = ListOrderCrossover(Probability(1), random) result = crossover_operator.mate(candidate1, candidate2) self.assertEqual(len(result), 2) self.assertEqual(result[0].data, [1, 7, 3, 8, 2, 6, 5, 4, 9]) self.assertEqual(result[1].data, [9, 3, 2, 4, 5, 6, 7, 1, 8])
def _test_get_fitness(self, target, inputs, score): candidate = Candidate() candidate.data = inputs population = Population() population.append(candidate) fitness_evaluator = StringFitnessEvaluator(target) result = fitness_evaluator.get_fitness(candidate, population) self.assertIsInstance(result, Fitness) self.assertEqual(result, score)
def test_apply(self): candidate = Candidate() candidate.data = [1, 2, 3, 4] population = Population([candidate]) probability = Probability(1) random = Random() random.int = MagicMock(side_effect=[1, 3]) crossover_operator = ListOrderMutation(probability, random, 1) result = crossover_operator.apply(population) self.assertEqual(len(result), len(population)) self.assertEqual(result[0].data, [1, 4, 3, 2])
def test_apply_zero(self): inputs, outputs = ('aaaa', 'aaaa') candidate = Candidate() candidate.data = inputs population = Population() population.append(candidate) probability = Probability(0) random = Random() mutation_operator = BitStringMutation(probability, random) result = mutation_operator.apply(population) self.assertEqual(len(result), len(population)) self.assertEqual(result[0].data, outputs)
def test_apply_zero(self): alphabet = 'abcd' inputs, outputs = ('aaaa', 'aaaa') candidate = Candidate() candidate.data = inputs population = Population() population.append(candidate) probability = Probability(0) random = Random() crossover_operator = StringMutation(probability, random, alphabet) result = crossover_operator.apply(population) self.assertEqual(len(result), len(population)) self.assertEqual(result[0].data, outputs)
def test_apply_one(self): inputs, outputs = ('0110', '1010') candidate = Candidate() candidate.data = inputs population = Population() population.append(candidate) probability = Probability(1) random = Random() random.float = MagicMock(side_effect=[0.6, 0.1, 0.9, 0.4]) mutation_operator = BitStringMutation(probability, random) result = mutation_operator.apply(population) self.assertEqual(len(result), len(population)) self.assertEqual(result[0].data, outputs)
def test_apply_one(self): alphabet = 'abcd' inputs, outputs = ('aaaa', 'abcd') candidate = Candidate() candidate.data = inputs population = Population() population.append(candidate) probability = Probability(1) random = Random() random.choice = MagicMock(side_effect=['a', 'b', 'c', 'd']) crossover_operator = StringMutation(probability, random, alphabet) result = crossover_operator.apply(population) self.assertEqual(len(result), len(population)) self.assertEqual(result[0].data, outputs)