In cameo we have two ways of predicting gene knockout targets: using evolutionary algorithms (OptGene) or linear programming (OptKnock)
from cameo import models
model = models.bigg.e_coli_core.copy()
model.solver = "cplex"
from cameo import phenotypic_phase_plane
ppp = phenotypic_phase_plane(model, variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM], objective=model.reactions.EX_ac_e)
ppp.plot()
OptGene is an approach to search for gene or reaction knockouts that relies on evolutionary algorithms[1]. The following image from authors summarizes the OptGene workflow.
Every iteration we keep the best 50 individuals so we can generate a library of targets.
from cameo.strain_design.heuristic.evolutionary_based import OptGene
optgene = OptGene(model)
result = optgene.run(target="EX_ac_e",
biomass=model.reactions.BIOMASS_Ecoli_core_w_GAM,
substrate=model.metabolites.glc__D_e,
max_evaluations=5000,
plot=False)
Starting optimization at Fri, 10 Jun 2016 06:38:55
/opt/conda/envs/python3.4/lib/python3.4/site-packages/ipywidgets/widgets/widget_string.py:55: UserWarning: The Latex widget is deprecated. Use Label instead
Finished after 00:00:11
result
/opt/conda/envs/python3.4/lib/python3.4/site-packages/ipywidgets/widgets/widget_string.py:55: UserWarning: The Latex widget is deprecated. Use Label instead
reactions | genes | size | fva_min | fva_max | target_flux | biomass_flux | yield | fitness | |
---|---|---|---|---|---|---|---|---|---|
0 | (SUCDi, GND) | ((b4090, b2296, b0723, b2029, b0724),) | 5.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
1 | (SUCDi, GND, GLUt2r) | ((b0721, b3962, b4077, b2029, b2133),) | 5.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
2 | (FRD7, SUCDi, PGL, ADK1) | ((b0474, b0767, b0118, b4154, b0721),) | 5.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
3 | (SUCDi, PGL, ADK1) | ((b0767, b2492, b0903, b2464, b0474, b0721),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
4 | (FRD7, SUCDi, GND) | ((b0903, b4152, b4232, b0724, b0723, b2029),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
5 | (SUCDi, GND, PPS) | ((b1702, b2464, b0902, b0733, b0721, b2029), (... | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
6 | (SUCDi, GND, ADK1) | ((b2464, b0474, b4395, b0721, b2935, b2029),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
7 | (FRD7, SUCDi, SUCOAS, GND) | ((b0729, b4152, b1621, b1241, b0723, b2029),) | 6.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
8 | (SUCDi, GND, ME1) | ((b1479, b1812, b0724, b1297, b0723, b2029),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
9 | (GLUSy, SUCDi, GND) | ((b3952, b3212, b3925, b2464, b0721, b2029),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
10 | (GLUt2r, SUCDi, GND) | ((b3386, b2464, b2133, b0721, b4077, b2029), (... | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
11 | (SUCDi, PGL, GND) | ((b0767, b0722, b2464, b0118, b2935, b2029),) | 6.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
12 | (SUCDi, PGL) | ((b0767, b0734, b0903, b2464, b0118, b0721, b4... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
13 | (SUCDi, GND, PPS) | ((b1702, b3603, b2458, b0721, b0979, b0875, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
14 | (SUCDi, GND, PGL, ADK1) | ((b0767, b0903, b2464, b0118, b0474, b0721, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
15 | (SUCDi, GND, FRUpts2) | ((b1818, b0733, b4395, b0721, b0723, b2935, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
16 | (SUCDi, GND, AKGDH, ME2) | ((b0727, b2463, b0724, b0721, b4090, b0723, b2... | 7.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
17 | (SUCDi, PGL, ADK1) | ((b0767, b0903, b2464, b0118, b0474, b0721, b3... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
18 | (SUCDi, GND, AKGDH) | ((b0727, b0451, b0724, b0721, b4090, b0723, b2... | 7.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
19 | (AKGDH, G6PDH2r, SUCDi, GND, PPS) | ((b1702, b0727, b1852, b0721, b0875, b2029, b0... | 7.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
20 | (SUCDi, GND, ADK1) | ((b3952, b0903, b2464, b0118, b0474, b0721, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
21 | (PGL, SUCDi) | ((b0767, b0903, b2464, b0118, b1241, b0721, b4... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
22 | (ME1, SUCDi, GND, FRUpts2) | ((b3925, b1818, b1479, b4395, b0723, b3115, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
23 | (GLUSy, ME1, SUCDi, GND) | ((b3212, b1479, b0721, b1297, b0723, b3115, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
24 | (FRD7, SUCDi, GND, ME1) | ((b0903, b4152, b1479, b0724, b0721, b0723, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
25 | (FRD7, SUCDi, GND, AKGDH) | ((b4152, b0727, b0724, b0721, b4090, b0723, b2... | 7.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
26 | (FRD7, SUCDi, GND) | ((b3603, b2133, b0451, b0721, b2417, b2029, b4... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
27 | (FRD7, ME1, SUCDi, GND) | ((b4152, b1479, b1241, b0724, b0721, b0723, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
28 | (FRD7, GLUSy, ME1, SUCDi, GND) | ((b3212, b4152, b1479, b0721, b1297, b0723, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
29 | (AKGDH, SUCDi, GND, PPS) | ((b1702, b3603, b0727, b0721, b0875, b2029, b0... | 7.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
30 | (SUCDi, PGL, GND, ADK1) | ((b0767, b2464, b0118, b0474, b0721, b2935, b2... | 7.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
31 | (SUCDi, PGL, GND) | ((b0351, b0767, b0903, b2464, b0118, b0721, b2... | 8.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
32 | (FRD7, AKGDH, SUCDi, GND, ADK1) | ((b0903, b4152, b2464, b0727, b0118, b0474, b0... | 8.0 | 9.627604 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
33 | (SUCDi, GND, ADK1) | ((b0903, b2464, b0474, b0978, b0721, b4090, b3... | 8.0 | 9.083537 | 10.715737 | 10.621957 | 0.617037 | 1.062196 | 0.655414 |
result.plot(0)
result.display_on_map(0, "e_coli_core.Core metabolism")
OptKnock uses a bi-level mixed integer linear programming approach to identify reaction knockouts[2]:
$$ \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} $$from cameo.strain_design.deterministic.linear_programming import OptKnock
optknock = OptKnock(model, fraction_of_optimum=0.1)
Warning: File contains basis. Basis is loaded.
Running multiple knockouts with OptKnock can take a few hours or days...
result = optknock.run(max_knockouts=1, target="EX_ac_e", biomass="BIOMASS_Ecoli_core_w_GAM")
result
/opt/conda/envs/python3.4/lib/python3.4/site-packages/ipywidgets/widgets/widget_string.py:55: UserWarning: The Latex widget is deprecated. Use Label instead
reactions | size | EX_ac_e | biomass | fva_min | fva_max | |
---|---|---|---|---|---|---|
0 | {ATPS4r} | 1.0 | 14.312267 | 0.37423 | 0.0 | 14.369145 |
result.plot(0)
result.display_on_map(0, "e_coli_core.Core metabolism")
[1]Patil, K. R., Rocha, I., Förster, J., & Nielsen, J. (2005). Evolutionary programming as a platform for in silico metabolic engineering. BMC Bioinformatics, 6, 308. doi:10.1186/1471-2105-6-308
[2]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.