def __init__(self): self.mock_population = [] genome_one = StorageGenome() genome_one._id = ObjectId("000000000000000000000000") genome_one.fitness = 0.5 genome_one.genes = [ (1, True, 0.5), (2, True, 0.5), (3, True, 0.5), (4, True, 0.5) ] genome_two = StorageGenome() genome_two._id = ObjectId("000000000000000000000001") genome_two.fitness = 0.7 genome_two.genes = [ (1, True, 0.5), (3, True, 1), (4, True, 0), (5, True, 0.5) ] self.mock_population.append(genome_one) self.mock_population.append(genome_two)
def test_updateGenomeFitness(self): genome = StorageGenome() genome.fitness = 1.0 self.genome_repository.get_genome_by_id = lambda x: genome self.genome_repository.update_genome = lambda x: x self.assertEqual(2.0, self.genome_repository.update_genome_fitness(genome._id, 2.0).fitness)
def test_updateGenomesFitness(self): genomes = [] for i in range(0, 10): g = StorageGenome() g.fitness = float(1 / (i + 2)) genomes.append((g, 4.7)) self.genome_repository.get_genome_by_id = lambda x: x self.genome_repository.update_genomes = lambda x: x for i in self.genome_repository.update_genomes_fitness(genomes): self.assertEqual(4.7, i.fitness)
def test_getGenomesInCluster(self): genomes = [] genomes_in_tuple = [] for g in range(1, 10): genome = StorageGenome() genome.fitness = float(1/g) genomes.append(genome) genomes_in_tuple.append((genome, genome.fitness)) self.mock_genome_repository.get_genomes_in_cluster = MagicMock(return_value=genomes) self.assertListEqual(genomes_in_tuple, self.genome_selector.get_genomes_in_cluster(0))
def test_selectGenomesForDiscarding(self): """ checks if 20% of worst cluster or genomes were selected :return: """ cluster = [] genome = [] for i in range(0, 4): c = Cluster() c.offspring = i cluster.append(c) for i in range(0, 10): g = StorageGenome() g.fitness = float(1/(i+1)) genome.append(g) self.mock_cluster_repository.get_current_clusters = MagicMock(return_value=cluster) self.mock_genome_repository.get_genomes_in_cluster = MagicMock(return_value=genome) self.assertEqual(8, len(self.genome_selector.select_genomes_for_discarding()))
def test_selectGenomesForBreeding_and_selectGenomesForMutation(self): offspring = [10, 10, 10, 10] cluster = [] genome = [] for i in offspring: c = Cluster() c.offspring = i cluster.append(c) for i in range(0, 8): g = StorageGenome() g.fitness = float(1/(i+1)) genome.append(g) g = StorageGenome() self.mock_cluster_repository.get_current_clusters = MagicMock(return_value=cluster) self.mock_genome_repository.get_genomes_in_cluster = MagicMock(return_value=genome) self.assertEqual(8, len(self.genome_selector.select_genomes_for_breeding(0.2))) self.assertEqual(type(g), type(self.genome_selector.select_genomes_for_breeding(0.2)[0][0])) self.assertEqual(type(g), type(self.genome_selector.select_genomes_for_mutation(0.2)[0])) self.assertEqual(8, len(self.genome_selector.select_genomes_for_mutation(0.2)))
def test_selectClusterCombination(self): offspring = [10, 10] cluster = [] genome = [] for i in offspring: c = Cluster() c.offspring = i cluster.append(c) for i in range(0, 8): g = StorageGenome() g.fitness = float(1/(i+1)) genome.append(g) self.mock_genome_repository.get_genomes_in_cluster = MagicMock(return_value=genome) test_comb = self.genome_selector.select_cluster_combinations(cluster[0], cluster[1], 2) g = StorageGenome() g_type = (g, g) g_list = [g_type] self.assertEqual(2, len(test_comb)) self.assertEqual(type(g_list), type(test_comb)) self.assertEqual(2, len(test_comb[0])) self.assertEqual(type(g_type), type(test_comb[0]))
def test_breed_genomes(self): fitter_genome = StorageGenome() fitter_genome.fitness = 22.74 fitter_genome.genes = { 0: (True, 0.21), 1: (True, -0.56), 2: (True, 0.354), 3: (True, 0.98), 7: (True, 0.47), 8: (True, -0.13) } other_genome = StorageGenome() other_genome.fitness = 19.233 other_genome.genes = { 0: (True, 0.1), 1: (True, 0.1), 2: (True, 0.1), 4: (True, 0.1), 5: (True, -0.1), 6: (True, -0.1) } similar_genome = StorageGenome() similar_genome.fitness = 21.83 similar_genome.genes = { 0: (True, 0.1), 1: (True, 0.1), 2: (True, 0.1), 4: (True, 0.1), 5: (True, -0.1), 6: (True, -0.1) } new_genome = self.breeder.breed_genomes( fitter_genome, other_genome ) new_genome_two = self.breeder.breed_genomes( fitter_genome, similar_genome ) # print(new_genome.genes) # TODO: proper testing # self.fail("Not implemented.") self.assertListEqual( list(new_genome.genes.keys()), [0, 1, 2, 3, 7, 8], "The wrong genes were inherited by breed_genomes()." ) self.assertEqual( new_genome.genes[3][1], 0.98, "The differing gene with id 3 wasn't inherited correctly by breed_genomes()." ) self.assertEqual( new_genome.genes[7][1], 0.47, "The differing gene with id 3 wasn't inherited correctly by breed_genomes()." ) self.assertEqual( new_genome.genes[8][1], -0.13, "The differing gene with id 3 wasn't inherited correctly by breed_genomes()." ) in_set = [(g in new_genome_two.genes.keys()) for g in [0, 1, 2]] self.assertTrue( lambda : not False in in_set ) differing_genes = [g for g in new_genome_two.genes.keys() if (g not in [0, 1, 2])] for gene_id in differing_genes: weight = new_genome_two.genes[gene_id][1] parent_genome = fitter_genome \ if gene_id in fitter_genome.genes.keys() \ else similar_genome original_weight = parent_genome.genes[gene_id][1] self.assertEqual( weight, original_weight )