Predict gene knockout strategies¶
In cameo we have two ways of predicting gene knockout targets: using evolutionary algorithms (OptGene) or linear programming (OptKnock)
If you’re running this notebook on try.cameo.bio, things might run very slow due to our inability to provide access to the proprietary CPLEX solver on a public webserver. Furthermore, Jupyter kernels might crash and restart due to memory limitations on the server.
from cameo import models
from cameo.visualization.plotting.with_plotly import PlotlyPlotter
model = models.bigg.iJO1366
plotter = PlotlyPlotter()
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(plotter, points=[(growth, acetate_production)])
OptGene¶
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, 01 Mar 2021 16:38:37
HBox()
Finished after 00:45:58
result
HBox()
OptGene Result
- Simulation: fba
- Objective Function: $$bpcy = \frac{(BIOMASS\_Ec\_iJO1366\_core\_53p95M * EX\_ac\_e)}{EX\_glc\_\_D\_e}$$
reactions | genes | size | fva_min | fva_max | target_flux | biomass_flux | yield | fitness | |
---|---|---|---|---|---|---|---|---|---|
0 | (ATPS4rpp,) | ((b3732,), (b3738,), (b3734,), (b3733,), (b373... | 1 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
1 | (3HPPPNH, 3HCINNMH, ATPS4rpp) | ((b3735, b0347),) | 2 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
2 | (ATPS4rpp,) | ((b3735, b3942), (b3735, b2683)) | 2 | 0.0 | 14.187817 | 13.297966 | 0.402477 | 1.329797 | 0.535213 |
3 | (G3PD7, G3PD6, ATPS4rpp) | ((b3735, b2241),) | 2 | 0.0 | 14.187819 | 0.234472 | 0.402478 | 0.023447 | 0.009437 |
4 | (NADH16pp, NADH17pp, NADH18pp, ATPS4rpp) | ((b3735, b2286),) | 2 | 0.0 | 14.187817 | 13.709215 | 0.402477 | 1.370922 | 0.551764 |
5 | (PGCD, ATPS4rpp) | ((b2913, b3738),) | 2 | 0.0 | 14.976296 | 8.512895 | 0.388364 | 0.851289 | 0.330610 |
6 | (ATPS4rpp,) | ((b3735, b2095, b2486),) | 3 | 0.0 | 14.187819 | 13.942932 | 0.402478 | 1.394293 | 0.561172 |
result.plot(plotter, 0)
result.display_on_map(0, "iJO1366.Central metabolism")
Downloading Map from https://escher.github.io/1-0-0/6/maps/Escherichia%20coli/iJO1366.Central%20metabolism.json
Builder(reaction_data={'EX_co2_e': 15.638742, 'EX_cobalt2_e': -1e-05, 'DM_4crsol_c': 9e-05, 'DM_5drib_c': 9e-0…
OptKnock¶
OptKnock uses a bi-level mixed integer linear programming approach to identify reaction knockouts[2]:
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")
<IPython.core.display.Javascript object>
result
HBox()
OptKnock:
- Target: EX_ac_e
reactions | size | EX_ac_e | biomass | fva_min | fva_max | |
---|---|---|---|---|---|---|
0 | {EX_o2_e} | 1 | 8.207632 | 0.241502 | 7.613753 | 8.662553 |
1 | {O2tex} | 1 | 8.207632 | 0.241502 | 7.613756 | 8.662556 |
result.plot(plotter, 0)
result.display_on_map(0, "iJO1366.Central metabolism")
Downloading Map from https://escher.github.io/1-0-0/6/maps/Escherichia%20coli/iJO1366.Central%20metabolism.json
Builder(reaction_data={'EX_co2_e': -0.088228, 'EX_cobalt2_e': -6e-06, 'DM_4crsol_c': 5.4e-05, 'DM_5drib_c': 0.…
References¶
[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.