model2 = Model('Attempt_2')
model2.solver = 'glpk'
# Setting up reactions
# Setting up reactions
def get_rxn(reaction):
rxn = Reaction(reaction)
rxn.lower_bound = 0.
rxn.upper_bound = 1000.
return rxn
r0 = get_rxn('Glucose')
r1 = get_rxn('Biomass')
r2 = get_rxn('DHAP')
r3 = get_rxn('Glycerol')
r4 = get_rxn('Pyruvate')
r5 = get_rxn('Lactate')
r6 = get_rxn('Formate')
r7 = get_rxn('AcCoA')
r8 = get_rxn('Acetane')
r9 = get_rxn('Pyr_rxn_2') # This intermediate reaction is troublesome
# Adding reactions to model
model2.add_reactions([r0])
model2.add_reactions([r1])
model2.add_reactions([r2])
model2.add_reactions([r3])
model2.add_reactions([r4])
model2.add_reactions([r5])
model2.add_reactions([r6])
model2.add_reactions([r7])
model2.add_reactions([r8])
model2.add_reactions([r9])
# Adding constraints:
# Glucose == 1.1*Biomass + DHAP
eq1 = model2.problem.Constraint(
model2.reactions.Glucose.flux_expression - 1.1*model2.reactions.Biomass.flux_expression - model2.reactions.DHAP.flux_expression,
lb=0,
ub=0)
# DHAP == Glycerol + Pyruvate
eq2 = model2.problem.Constraint(
model2.reactions.DHAP.flux_expression - model2.reactions.Glycerol.flux_expression - model2.reactions.Pyruvate.flux_expression,
lb=0,
ub=0)
# Pyruvate == Lactate + Pyruvate_for_rxn_2
eq3 = model2.problem.Constraint(
model2.reactions.Pyruvate.flux_expression - model2.reactions.Lactate.flux_expression - model2.reactions.Pyr_rxn_2.flux_expression,
lb=0,
ub=0)
#Formate = (1/3)Pyruvate
eq4 = model2.problem.Constraint(
model2.reactions.Formate.flux_expression - (1/3)*model2.reactions.Pyruvate.flux_expression,
lb=0,
ub=0)
# Pyruvate_for_rxn_2 == Formate + AcCoA
eq5 = model2.problem.Constraint(
model2.reactions.Pyr_rxn_2.flux_expression - model2.reactions.Formate.flux_expression - model2.reactions.AcCoA.flux_expression,
lb=0,
ub=0)
# Let Acetane == AcCoA
eq6 = model2.problem.Constraint(
model2.reactions.Acetane.flux_expression - model2.reactions.AcCoA.flux_expression,
lb=0,
ub=0)
# β*Biomass - (1/3)*Glycerol + (1/3)*Pyruvate - (1/3)*Lactate == 0 # NADH
eq7 = model2.problem.Constraint(
0.1*model2.reactions.Biomass.flux_expression - (1/3)*model2.reactions.Glycerol.flux_expression + (1/3)*model2.reactions.Pyruvate.flux_expression - (1/3)*model2.reactions.Lactate.flux_expression,
lb=0,
ub=0)
# -1.8*Biomass - (1/3)*DHAP + (2/3)*Pyruvate + (1/2)*Acetane == 0.02 #ATP
eq8 = model2.problem.Constraint(
-1.8*model2.reactions.Biomass.flux_expression - (1/3)*model2.reactions.DHAP.flux_expression + (2/3)*model2.reactions.Pyruvate.flux_expression + (1/2)*model2.reactions.Acetane.flux_expression,
lb=0.02,
ub=0.02)
# Biomass == 0.3
eq9 = model2.problem.Constraint(
model2.reactions.Biomass.flux_expression,
lb=0.3,
ub=0.3)
# Lactate == 0.4
eq10 = model2.problem.Constraint(
model2.reactions.Lactate.flux_expression,
lb=0.4,
ub=0.4)
model2.add_cons_vars(eq1)
model2.add_cons_vars(eq2)
model2.add_cons_vars(eq3)
model2.add_cons_vars(eq4)
model2.add_cons_vars(eq5)
model2.add_cons_vars(eq6)
model2.add_cons_vars(eq7)
model2.add_cons_vars(eq8)
model2.add_cons_vars(eq9)
model2.add_cons_vars(eq10)
model2.objective = 'Biomass'
# print('Answers I was hoping for: Glucose 3.56, Biomass 0.3 DHAP 3.23 Glycerol 1.46 Pyruvate 1.77 Lactate 0.4 Formate 1.37 0.45666667 AcCoA 0.91333333')
model2.optimize()
"""
>>>
| Glucose | 3.960000 | 0.0 |
|---|
| Biomass | 0.300000 | 0.0 |
|---|
| DHAP | 3.630000 | 0.0 |
|---|
| Glycerol | 1.660000 | 0.0 |
|---|
| Pyruvate | 1.970000 | 0.0 |
|---|
| Lactate | 0.400000 | 0.0 |
|---|
| Formate | 0.656667 | 0.0 |
|---|
| AcCoA | 0.913333 | 0.0 |
|---|
| Acetane | 0.913333 | 0.0 |
|---|
| Pyr_rxn_2 | 1.570000 | 0.0 |
|---|