def test_loopless(self): try: solver = get_solver_name(mip=True) except: self.skip("no MILP solver found") test_model = Model() test_model.add_metabolites(Metabolite("A")) test_model.add_metabolites(Metabolite("B")) test_model.add_metabolites(Metabolite("C")) EX_A = Reaction("EX_A") EX_A.add_metabolites({test_model.metabolites.A: 1}) DM_C = Reaction("DM_C") DM_C.add_metabolites({test_model.metabolites.C: -1}) v1 = Reaction("v1") v1.add_metabolites({test_model.metabolites.A: -1, test_model.metabolites.B: 1}) v2 = Reaction("v2") v2.add_metabolites({test_model.metabolites.B: -1, test_model.metabolites.C: 1}) v3 = Reaction("v3") v3.add_metabolites({test_model.metabolites.C: -1, test_model.metabolites.A: 1}) DM_C.objective_coefficient = 1 test_model.add_reactions([EX_A, DM_C, v1, v2, v3]) feasible_sol = construct_loopless_model(test_model).optimize() v3.lower_bound = 1 infeasible_sol = construct_loopless_model(test_model).optimize() self.assertEqual(feasible_sol.status, "optimal") self.assertEqual(infeasible_sol.status, "infeasible")
def generate_fva_data(self, cobra_model, fraction_of_optimum=0.9, objective_sense='maximize', reaction_list=None, allow_loops=True, solver='glpk'): print('FVA...') #add in loop law constrain if not allow_loops: cobra_model=construct_loopless_model(cobra_model); # calculate the reaction bounds using FVA self.fva_data = flux_variability_analysis(cobra_model, fraction_of_optimum=0.9, objective_sense='maximize', solver=solver, reaction_list=reaction_list, );
def generate_fva_data(self, cobra_model, fraction_of_optimum=0.9, objective_sense='maximize', reaction_list=None, allow_loops=True, solver='glpk', verbose_I=True): if verbose_I: print('FVA...') #add in loop law constrain if not allow_loops: cobra_model=construct_loopless_model(cobra_model) # calculate the reaction bounds using FVA cobra_model.solver = solver fva_data = flux_variability_analysis(cobra_model, fraction_of_optimum=0.9, objective_sense='maximize', reaction_list=reaction_list, ) self.fva_data = dict(zip(list(fva_data.index),fva_data.to_dict('records')))
def generate_fba_data(self,cobra_model,allow_loops=True, method_I='fba',solver='glpk'): """perform FBA simulation on the model """ #add in loop law constrain if not allow_loops: cobra_model=construct_loopless_model(cobra_model) #check for the optimization method: cobra_model.solver = solver if method_I=='fba' or method_I=='loopless-fba': sol = cobra_model.optimize() elif method_I =='pfba' or method_I=='loopless-pfba': sol = optimize_minimal_flux(model=cobra_model,solver=solver) else: print('method not recognized.') return self.fba_primal_data={} for k,v in sol.x_dict.items(): self.fba_primal_data[k] = v self.fba_dual_data={} for k,v in sol.y_dict.items(): self.fba_dual_data[k] = v
model.metabolites.adp_c: -1, model.metabolites.pi_c: -1, model.metabolites.atp_c: 1, model.metabolites.h2o_c: 1}) symporter1_reaction.lower_bound = -1000 symporter2_reaction.lower_bound = -1000 symporter3_reaction.lower_bound = -1000 atpase_reaction.lower_bound = -1000 model.add_reactions([symporter1_reaction, symporter2_reaction, symporter3_reaction, atpase_reaction]) # Try to find the EGC that we just added to the model sol = stFBA.find_egc(model) print("Adding STFBA constraints...") stfba_model = stFBA(model) print("Calculating anaerobic yield with updated %s model" % model_name) fba_sol = model.optimize(solver=settings.LP_SOLVER) print("FBA max yield: %.3f" % fba_sol.f) loopless_model = construct_loopless_model(model) llfba_sol = loopless_model.optimize(solver=settings.LP_SOLVER) print("ll-FBA max yield: %.3f" % llfba_sol.f) stfba_sol = stfba_model.optimize() if stfba_sol: print("st-FBA max yield: %.3f" % stfba_sol.f)
DM_C = Reaction("DM_C") DM_C.add_metabolites({test_model.metabolites.C: -1}) v1 = Reaction("v1") v1.add_metabolites({test_model.metabolites.A: -1, test_model.metabolites.B: 1}) v2 = Reaction("v2") v2.add_metabolites({test_model.metabolites.B: -1, test_model.metabolites.C: 1}) v3 = Reaction("v3") v3.add_metabolites({test_model.metabolites.C: -1, test_model.metabolites.A: 1}) DM_C.objective_coefficient = 1 test_model.add_reactions([EX_A, DM_C, v1, v2, v3]) # While this model contains a loop, a flux state exists which has no flux # through reaction v3, and is identified by loopless FBA. construct_loopless_model(test_model).optimize() # Output: # <Solution 1000.00 at 0x62cd250> # However, if flux is forced through v3, then there is no longer a feasible # loopless solution. v3.lower_bound = 1 construct_loopless_model(test_model).optimize() # Output: # <Solution 'infeasible' at 0x62cd5d0> # Loopless FBA is also possible on genome scale models, but it requires a # capable MILP solver. salmonella = cobra.test.create_test_model()
EX_A.add_metabolites({test_model.metabolites.A: 1}) DM_C = Reaction("DM_C") DM_C.add_metabolites({test_model.metabolites.C: -1}) v1 = Reaction("v1") v1.add_metabolites({test_model.metabolites.A: -1, test_model.metabolites.B: 1}) v2 = Reaction("v2") v2.add_metabolites({test_model.metabolites.B: -1, test_model.metabolites.C: 1}) v3 = Reaction("v3") v3.add_metabolites({test_model.metabolites.C: -1, test_model.metabolites.A: 1}) DM_C.objective_coefficient = 1 test_model.add_reactions([EX_A, DM_C, v1, v2, v3]) # While this model contains a loop, a flux state exists which has no flux # through reaction v3, and is identified by loopless FBA. construct_loopless_model(test_model).optimize() # Output: # <Solution 1000.00 at 0x62cd250> # However, if flux is forced through v3, then there is no longer a feasible # loopless solution. v3.lower_bound = 1 construct_loopless_model(test_model).optimize() # Output: # <Solution 'infeasible' at 0x62cd5d0> # Loopless FBA is also possible on genome scale models, but it requires a # capable MILP solver. salmonella = cobra.test.create_test_model()