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)
示例#2
0
 def setUp(self):
     self.chromosome_manager = ChromosomeManager(42)
示例#3
0
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()