In [1]:
from cobra.io import read_sbml_model

In [2]:
from optlang.symbolics import Zero, One, add, mul, Add, Mul, Real

In [3]:
one = Real(1.0)

In [4]:
model = read_sbml_model("/home/moritz/Projects/memote/Models/iJO1366.xml.gz")

In [5]:
import cobra.util.solver as sutil

In [6]:
from itertools import chain

In [7]:
model.solver = "glpk"

In [8]:
reaction_variables = ((rxn.forward_variable, rxn.reverse_variable)
                      for rxn in model.reactions)
variables = list(chain(*reaction_variables))

In [9]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        Zero, direction='min', sloppy=True,
        name="_pfba_objective")
    model.objective.set_linear_coefficients({v: 1.0 for v in variables})


146 ms ± 3.94 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [10]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        add([mul(one, v) for v in variables]),
        direction='min', sloppy=True, name="_pfba_objective")


149 ms ± 2.13 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [11]:
model.solver = "gurobi"

In [12]:
reaction_variables = ((rxn.forward_variable, rxn.reverse_variable)
                      for rxn in model.reactions)
variables = list(chain(*reaction_variables))

In [13]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        Zero, direction='min', sloppy=True,
        name="_pfba_objective")
    model.objective.set_linear_coefficients({v: 1.0 for v in variables})


13.7 ms ± 269 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [14]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        add([mul(one, v) for v in variables]),
        direction='min', sloppy=True, name="_pfba_objective")


218 ms ± 2.55 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [15]:
model.solver = "cplex"

In [16]:
reaction_variables = ((rxn.forward_variable, rxn.reverse_variable)
                      for rxn in model.reactions)
variables = list(chain(*reaction_variables))

In [17]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        Zero, direction='min', sloppy=True,
        name="_pfba_objective")
    model.objective.set_linear_coefficients({v: 1.0 for v in variables})


2.04 s ± 32.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [18]:
%%timeit
with model:
    model.objective = model.problem.Objective(
        add([mul(one, v) for v in variables]),
        direction='min', sloppy=True, name="_pfba_objective")


183 ms ± 5.28 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)