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.iJO1366
wt_solution = model.optimize()
growth = wt_solution.fluxes["BIOMASS_Ec_iJO1366_core_53p95M"]
acetate_production = wt_solution.fluxes["EX_ac_e"]
from cameo import phenotypic_phase_plane
p = phenotypic_phase_plane(model, variables=['BIOMASS_Ec_iJO1366_core_53p95M'], objective='EX_ac_e')
p.plot(points=[(growth, acetate_production)])
OptGene is an approach to search for gene or reaction knockouts that relies on evolutionary algorithms[1]. The following image from the authors summarizes OptGene workflow.
At every iteration, we keep the best 50 individuals found overall so we can generate a library of targets.
from cameo.strain_design import OptGene
optgene = OptGene(model)
result = optgene.run(target=model.reactions.EX_ac_e,
biomass=model.reactions.BIOMASS_Ec_iJO1366_core_53p95M,
substrate=model.metabolites.glc__D_e,
max_evaluations=5000,
plot=False)
Starting optimization at Mon, 22 Jan 2018 13:41:01
Failed to display Jupyter Widget of type HBox
.
If you're reading this message in Jupyter Notebook or JupyterLab, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another notebook frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
Finished after 05:13:14
result
Failed to display Jupyter Widget of type HBox
.
If you're reading this message in Jupyter Notebook or JupyterLab, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another notebook frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
reactions | genes | size | fva_min | fva_max | target_flux | biomass_flux | yield | fitness | |
---|---|---|---|---|---|---|---|---|---|
0 | (ATPS4rpp,) | ((b3734,), (b3737,)) | 1 | 0.0 | 14.187819 | -0.000000 | 0.402478 | -0.000000 | -0.000000 |
1 | (SUCTARTtpp, ATPS4rpp, TARTt2_3pp) | ((b3733, b4123),) | 2 | 0.0 | 14.187819 | 13.731688 | 0.402478 | 1.373169 | 0.552670 |
2 | (RHAT1, ATPS4rpp) | ((b3629, b3733),) | 2 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
3 | (PSP_L, ATPS4rpp) | ((b3733, b4388),) | 2 | 0.0 | 14.976296 | 14.801391 | 0.388365 | 1.480139 | 0.574834 |
4 | (PHEMEabcpp, ATPS4rpp) | ((b3733, b2199), (b3733, b2198)) | 2 | 0.0 | 14.187819 | 13.731688 | 0.402478 | 1.373169 | 0.552670 |
5 | (EDTXS4, EDTXS2, ATPS4rpp) | ((b1855, b3733),) | 2 | 0.0 | 14.187819 | 0.234472 | 0.402478 | 0.023447 | 0.009437 |
6 | (SULFACabcpp, ETHSO3abcpp, ATPS4rpp, MSO3abcpp) | ((b0933, b3733),) | 2 | 0.0 | 14.187819 | 13.731688 | 0.402478 | 1.373169 | 0.552670 |
7 | (CITL, ATPS4rpp) | ((b0614, b3733),) | 2 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
8 | (ATPS4rpp, NMNPtpp) | ((b3733, b0751),) | 2 | 0.0 | 14.187819 | 13.731688 | 0.402478 | 1.373169 | 0.552670 |
9 | (ATPS4rpp, GHMT2r, THFAT) | ((b3733, b2551),) | 2 | 0.0 | 14.644674 | 14.260853 | 0.393362 | 1.426085 | 0.560968 |
10 | (ATPS4rpp, G6PDA) | ((b3733, b0678),) | 2 | 0.0 | 14.187819 | 13.731688 | 0.402478 | 1.373169 | 0.552670 |
11 | (ATPS4rpp,) | ((b3386, b3733), (b0186, b3733)) | 2 | 0.0 | 14.187819 | 12.751857 | 0.402478 | 1.275186 | 0.513234 |
12 | (COLIPAKpp, ATPS4rpp) | ((b2174, b3733),) | 2 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
13 | (SUCTARTtpp, ATPS4rpp, TARTt2_3pp) | ((b4123, b3733, b4219),) | 3 | 0.0 | 14.187819 | 12.751857 | 0.402478 | 1.275186 | 0.513234 |
14 | (PPCSCT, ATPS4rpp) | ((b2920, b3733, b4219),) | 3 | 0.0 | 14.187819 | 12.751857 | 0.402478 | 1.275186 | 0.513234 |
15 | (PSP_L, ATPS4rpp) | ((b3733, b4388, b4219),) | 3 | 0.0 | 14.976296 | 12.802175 | 0.388365 | 1.280218 | 0.497192 |
16 | (FEENTERabcpp, ATPS4rpp, FE3DHBZSabcpp) | ((b0592, b2224, b3733),) | 3 | 0.0 | 14.187819 | -0.000000 | 0.402478 | -0.000000 | -0.000000 |
17 | (NMNPtpp, ATPS4rpp, MTRPOX, SARCOX) | ((b2291, b0751, b3733, b1059),) | 4 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
result.plot(0)
result.display_on_map(0, "iJO1366.Central 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 import OptKnock
optknock = OptKnock(model, fraction_of_optimum=0.1)
Running multiple knockouts with OptKnock can take a few hours or days...
result = optknock.run(max_knockouts=1, target="EX_ac_e", biomass="BIOMASS_Ec_iJO1366_core_53p95M")
result
Failed to display Jupyter Widget of type HBox
.
If you're reading this message in Jupyter Notebook or JupyterLab, it may mean that the widgets JavaScript is still loading. If this message persists, it likely means that the widgets JavaScript library is either not installed or not enabled. See the Jupyter Widgets Documentation for setup instructions.
If you're reading this message in another notebook frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets.
reactions | size | EX_ac_e | biomass | fva_min | fva_max | |
---|---|---|---|---|---|---|
0 | {ATPS4rpp} | 1 | 13.94293 | 0.402477 | 0.0 | 14.187819 |
result.plot(0)
result.display_on_map(0, "iJO1366.Central 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.