class ChromosomeManagerTestCase(unittest.TestCase): def setUp(self): self.chromosome_manager = ChromosomeManager(42) def test_generate_first_generation(self): self.chromosome_manager.generate_first_generation() self.assertEqual(len(self.chromosome_manager.chromosomes), 10) def test_get_index(self): probabilities = [0.1, 0.05, 0.1, 0.2, 0.5, 0.05] self.assertEqual(self.chromosome_manager.get_index(0.07, probabilities), 0) self.assertEqual(self.chromosome_manager.get_index(0.1, probabilities), 0) self.assertEqual(self.chromosome_manager.get_index(0.11, probabilities), 1) self.assertEqual(self.chromosome_manager.get_index(0.25, probabilities), 2) self.assertEqual(self.chromosome_manager.get_index(0.38, probabilities), 3) self.assertEqual(self.chromosome_manager.get_index(0.73, probabilities), 4) self.assertEqual(self.chromosome_manager.get_index(0.96, probabilities), 5) self.assertEqual(self.chromosome_manager.get_index(1, probabilities), 5) def test_roulette_wheel(self): self.chromosome_manager.generate_first_generation() for chromosome in self.chromosome_manager.chromosomes: chromosome.evaluate(self.chromosome_manager.target_value) chromosome1, chromosome2 = self.chromosome_manager.do_roulette_wheel() self.assertNotEqual(chromosome1, chromosome2) self.assertIn(chromosome1, self.chromosome_manager.chromosomes) self.assertIn(chromosome2, self.chromosome_manager.chromosomes) def test_crossover(self): self.chromosome_manager.generate_first_generation() for chromosome in self.chromosome_manager.chromosomes: chromosome.evaluate(self.chromosome_manager.target_value) chromosome1, chromosome2 = self.chromosome_manager.do_roulette_wheel() self.chromosome_manager.crossover(chromosome1, chromosome2) was_matched = False for position in range(0, len(chromosome1.binary_string) + 1): binary_string1 = chromosome1.binary_string[:position] + chromosome2.binary_string[position:] binary_string2 = chromosome2.binary_string[:position] + chromosome1.binary_string[position:] if binary_string1 == chromosome1.binary_string and binary_string2 == chromosome2.binary_string: was_matched = True self.assertTrue(was_matched) def test_solve(self): chromosome, generation = self.chromosome_manager.solve() if chromosome.score == self.chromosome_manager.max_score: self.assertEqual(chromosome.result, self.chromosome_manager.target_value) else: self.assertEqual(generation, self.chromosome_manager.max_generations - 1) if __name__ == '__main__': unittest.main()
def run(self): chromosome_manager = ChromosomeManager(42) chromosome, generation = chromosome_manager.solve() if chromosome.score == chromosome_manager.max_score: print('Solution was found') print('Chromosome: %s' % chromosome) print('Generation: %s' % generation) else: print('Solution was not found') print('Below is nearest solution') print('Chromosome: %s' % chromosome) print('Result: %s' % chromosome.result) print('Score: %s' % chromosome.score) print('Generation: %s' % generation)