Deterministic knockout prediction

cameo also contains state-of-the-art deterministic methods for knockout prediction:

Burgard, A.P., Pharkya, P., Maranas, C.D. (2003), "OptKnock: A Bilevel Programming Framework for Identifying Gene Knockout Strategies for Microbial Strain Optimization," Biotechnology and Bioengineering, 84(6), 647-657.

OptKnock uses the following bi-level formulation:

$$ \begin{matrix} maximize & \mathit{v_{chemical}} & & (\mathbf{OptKnock}) \\ \mathit{y_j} & & & \\ subject~to & maximize & \mathit{v_{biomass}} & (\mathbf{Primal}) \\ & \mathit{v_j} & & & & \\ \end{matrix}\\ \begin{bmatrix} subject~to & \sum_{j=1}^{M}S_{ij}v_{j} = 0,\\ & v_{carbon\_uptake} = v_{carbon~target}\\ & v_{apt} \ge v_{apt\_main}\\ & v_{biomass} \ge v_{target_biomass}\\ & v_{j}^{min} \cdot y_j \le v_j \le v_{j}^{max} \cdot y_j, \forall j \in \boldsymbol{M} \\ \end{bmatrix}\\ \begin{align} & y_j = {0, 1}, & & \forall j \in \boldsymbol{M} & \\ & \sum_{j \in M} (1 - y_j) \le K& & & \\ \end{align} $$

In [5]:
from cameo import models
from cameo.strain_design.deterministic.linear_programming import OptKnock

In [6]:
model = models.bigg.iJO1366

On initialization, OptKnock will compute essential reaction, blocked reaction (via FVA, it is optional). All of those preprocessing conditions allow OptKnock to run faster by reducing the search space (the number of variables).

Exchange reactions are also removed from the formulation.


In [3]:
optknock = OptKnock(model)

Running OptKnock requires at least two parameters:

  • Target - the flux to maximize - e.g. Exchange of Succinate, EX_succ_e_
  • Number of knockouts - K

OptKnockout will return one solution by default, but max_results can be set to another number. It will try to find up to max_results unless the problem becomes infeasible, meaning that all solutions have been found.


In [4]:
%time result = optknock.run(2, "EX_succ_e", max_results=2)


CPU times: user 13min 50s, sys: 5.44 s, total: 13min 56s
Wall time: 4min 47s

In [ ]:
result

In [ ]: