Example #1
0
class TestKnockoutOptimizationResult(unittest.TestCase):
    def setUp(self):
        self.model = TEST_MODEL
        self.representation = [r.id for r in self.model.reactions]
        random = Random(SEED)
        args = {"representation": self.representation}
        self.solutions = BestSolutionArchiver()
        for _ in range(10000):
            self.solutions.add(set_generator(random, args), random.random(), 100)
        self.decoder = ReactionKnockoutDecoder(self.representation, self.model)

    def test_result(self):
        result = KnockoutOptimizationResult(
            model=self.model,
            heuristic_method=None,
            simulation_method=fba,
            solutions=self.solutions,
            objective_function=None,
            ko_type="reaction",
            decoder=self.decoder,
            product="EX_ac_LPAREN_e_RPAREN_",
            biomass="Biomass_Ecoli_core_N_LPAREN_w_FSLASH_GAM_RPAREN__Nmet2",
            seed=SEED,
            reference=None)

        self.assertEqual(result.ko_type, "reaction")

        individuals = []
        for index, row in result.solutions.iterrows():
            individual = SolutionTuple(set(self.representation.index(r) for r in row["Knockouts"]), row["Fitness"])
            self.assertNotIn(individual, individuals, msg="%s is repeated on result")
            individuals.append(individual)
            self.assertIn(individual, self.solutions.archive)
            self.assertEqual(len(row["Knockouts"]), row["Size"])
            self.assertEqual(self.solutions.archive.count(individual), 1, msg="%s is unique in archive" % individual)
Example #2
0
    def test_uniqueness_of_solutions(self):
        size = 2
        pool = BestSolutionArchiver()
        pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
        pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)

        self.assertEqual(pool.length(), 1, "Added repeated solution")
Example #3
0
 def setUp(self):
     self.model = TEST_MODEL
     self.representation = [r.id for r in self.model.reactions]
     random = Random(SEED)
     args = {"representation": self.representation}
     self.solutions = BestSolutionArchiver()
     for _ in range(10000):
         self.solutions.add(set_generator(random, args), random.random(), 100)
     self.decoder = ReactionKnockoutDecoder(self.representation, self.model)
Example #4
0
    def test_callable_pool(self):
        pool = BestSolutionArchiver()
        size = 3
        args = {}
        args.setdefault('max_archive_size', size)
        population = [SolutionTuple(SOLUTIONS[0][0], SOLUTIONS[0][1]),
                      SolutionTuple(SOLUTIONS[1][0], SOLUTIONS[1][1]),
                      SolutionTuple(SOLUTIONS[2][0], SOLUTIONS[2][1]),
                      SolutionTuple(SOLUTIONS[3][0], SOLUTIONS[3][1]),
                      SolutionTuple(SOLUTIONS[4][0], SOLUTIONS[4][1]),
                      SolutionTuple(SOLUTIONS[5][0], SOLUTIONS[5][1]),
                      SolutionTuple(SOLUTIONS[6][0], SOLUTIONS[6][1])]
        archive = pool(None, population, [], args)
        self.assertEqual(pool.length(), size)

        for sol in pool:
            self.assertTrue(sol in archive)
Example #5
0
 def test_add_smaller_solution_with_same_fitness(self):
     size = 1
     pool = BestSolutionArchiver()
     pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
     pool.add(SOLUTIONS[0][0], SOLUTIONS[0][1], size)
     self.assertEqual(pool.length(), 1, msg="Pool must keep one solution (length=%s)" % pool.length())
     solution = set(SOLUTIONS[0][0])
     fitness = SOLUTIONS[0][1]
     sol = pool.get(0)
     self.assertEqual(sol.candidate, solution, msg="Best solution must be the first (%s)" % sol.candidate)
     self.assertEqual(sol.fitness, fitness, msg="Best fitness must be the first (%s)" % sol.fitness)
Example #6
0
 def test_pool_size_limit(self):
     size = 1
     pool = BestSolutionArchiver()
     pool.add(SOLUTIONS[0][0], SOLUTIONS[0][1], size)
     pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
     pool.add(SOLUTIONS[2][0], SOLUTIONS[2][1], size)
     pool.add(SOLUTIONS[3][0], SOLUTIONS[3][1], size)
     pool.add(SOLUTIONS[4][0], SOLUTIONS[4][1], size)
     pool.add(SOLUTIONS[5][0], SOLUTIONS[5][1], size)
     pool.add(SOLUTIONS[6][0], SOLUTIONS[6][1], size)
     pool.add(SOLUTIONS[7][0], SOLUTIONS[7][1], size)
     pool.add(SOLUTIONS[8][0], SOLUTIONS[8][1], size)
     pool.add(SOLUTIONS[9][0], SOLUTIONS[9][1], size)
     self.assertLessEqual(pool.length(), 1, msg="Pool must keep one solution (length=%s)" % pool.length())
     size = 2
     pool = BestSolutionArchiver()
     pool.add(SOLUTIONS[0][0], SOLUTIONS[0][1], size)
     pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
     pool.add(SOLUTIONS[2][0], SOLUTIONS[2][1], size)
     pool.add(SOLUTIONS[3][0], SOLUTIONS[3][1], size)
     pool.add(SOLUTIONS[4][0], SOLUTIONS[4][1], size)
     pool.add(SOLUTIONS[5][0], SOLUTIONS[5][1], size)
     pool.add(SOLUTIONS[6][0], SOLUTIONS[6][1], size)
     pool.add(SOLUTIONS[7][0], SOLUTIONS[7][1], size)
     pool.add(SOLUTIONS[8][0], SOLUTIONS[8][1], size)
     pool.add(SOLUTIONS[9][0], SOLUTIONS[9][1], size)
     self.assertLessEqual(pool.length(), 2, msg="Pool must keep one solution (length=%s)" % pool.length())
     size = 3
     pool = BestSolutionArchiver()
     pool.add(SOLUTIONS[0][0], SOLUTIONS[0][1], size)
     pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
     pool.add(SOLUTIONS[2][0], SOLUTIONS[2][1], size)
     pool.add(SOLUTIONS[3][0], SOLUTIONS[3][1], size)
     pool.add(SOLUTIONS[4][0], SOLUTIONS[4][1], size)
     pool.add(SOLUTIONS[5][0], SOLUTIONS[5][1], size)
     pool.add(SOLUTIONS[6][0], SOLUTIONS[6][1], size)
     pool.add(SOLUTIONS[7][0], SOLUTIONS[7][1], size)
     pool.add(SOLUTIONS[8][0], SOLUTIONS[8][1], size)
     pool.add(SOLUTIONS[9][0], SOLUTIONS[9][1], size)
     self.assertLessEqual(pool.length(), 3, msg="Pool must keep one solution (length=%s)" % pool.length())
     size = 4
     pool = BestSolutionArchiver()
     pool.add(SOLUTIONS[0][0], SOLUTIONS[0][1], size)
     pool.add(SOLUTIONS[1][0], SOLUTIONS[1][1], size)
     pool.add(SOLUTIONS[2][0], SOLUTIONS[2][1], size)
     pool.add(SOLUTIONS[3][0], SOLUTIONS[3][1], size)
     pool.add(SOLUTIONS[4][0], SOLUTIONS[4][1], size)
     pool.add(SOLUTIONS[5][0], SOLUTIONS[5][1], size)
     pool.add(SOLUTIONS[6][0], SOLUTIONS[6][1], size)
     pool.add(SOLUTIONS[7][0], SOLUTIONS[7][1], size)
     pool.add(SOLUTIONS[8][0], SOLUTIONS[8][1], size)
     pool.add(SOLUTIONS[9][0], SOLUTIONS[9][1], size)
     self.assertLessEqual(pool.length(), 4, msg="Pool must keep one solution (length=%s)" % pool.length())