{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Minimal Cut Sets (MCS)\n",
"\n",
"The minimal cut set approach aims to find a minimum set of network intervetions that enforce some pre-definde behavior in a metabolic network. It may be used to suppress growth, suppress or enforce the synthesis of a certain product or to couple or decouple metabolic fluxes. For a better conceptional understanding of the MCS approach, please refer to examples 7 and 8. Examples 1-5 treat strain design applications in a small network, while example 6 presents a genome-scale strain design computation."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prerequisites\n",
"\n",
"For the shown examples, we again load the COBRApy and the StrainDesign packages as well as the small E. coli textbook-network \"e_coli_core\" and the example network \"SmallExample\". \n",
"For CNApy users a special project (e_coli_core_14bdo) is available that contains the modified metabolic network together with strain design files for the various examples which can be loaded from the strain design dialog."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following steps show how the function ``compute_strain_designs`` is employed to find MCS strain designs:\n",
"1) The production pathways, i.e., their metabolites and reactions are added to the model.\n",
"2) Analysis tools are used to identify adequate strain design goals.\n",
"3) Set up the according strain design problem by specifying two strain design *modules*\n",
"4) The strain design function is called, passing the model and the strain design module(s) as function arguments.\n",
"5) The results are analyzed.\n",
"\n",
"Step (1) is required for all examples shown hereafter. Steps (2)-(4) are example-dependent. We do step (5) for all examples to verify the computed strain designs.\n",
"\n",
"### \n",
"\n",
"#### \n",
"\n",
"##### 1) Add and verify production pathway"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Maximum possible 1,4-BDO synthesis rate: 10.252923076923619.\n"
]
}
],
"source": [
"import straindesign as sd\n",
"import cobra\n",
"cobra.Configuration().solver = 'cplex'\n",
"\n",
"ecc = cobra.io.load_model('e_coli_core')\n",
"model = cobra.io.read_sbml_model('../../../tests/model_small_example.xml')\n",
"\n",
"# Create copy of model to which pathway will be added\n",
"ecc_14bdo = ecc.copy()\n",
"\n",
"# Add metabolites to model\n",
"ecc_14bdo.add_metabolites([ cobra.Metabolite('sucsal_c'),# Succinic semialdehyde\n",
" cobra.Metabolite('4hb_c'), # 4-Hydroxybutanoate\n",
" cobra.Metabolite('4hbcoa_c'),# 4-Hydroxybutyryl-CoA\n",
" cobra.Metabolite('4hbal_c'), # 4-Hydroxybutanal\n",
" cobra.Metabolite('14bdo_c'), # Butane-1,4-diol (cytopl.)\n",
" cobra.Metabolite('14bdo_p'), # Butane-1,4-diol (peripl.)\n",
" cobra.Metabolite('14bdo_e') # Butane-1,4-diol (extrac.)\n",
" ])\n",
"\n",
"# Create reactions\n",
"SSCOARx = cobra.Reaction('SSCOARx')\n",
"AKGDC = cobra.Reaction('AKGDC')\n",
"HBD = cobra.Reaction('4HBD')\n",
"HBCT = cobra.Reaction('4HBCT')\n",
"HBDH = cobra.Reaction('4HBDH')\n",
"HBDx = cobra.Reaction('4HBDx')\n",
"BDOtpp = cobra.Reaction('14BDOtpp')\n",
"BDOtex = cobra.Reaction('14BDOtex')\n",
"EX_14bdo_e = cobra.Reaction('EX_14bdo_e')\n",
"\n",
"# Add reactions to model\n",
"ecc_14bdo.add_reactions([SSCOARx,\n",
" AKGDC,\n",
" HBD,\n",
" HBCT,\n",
" HBDH,\n",
" HBDx,\n",
" BDOtpp,\n",
" BDOtex,\n",
" EX_14bdo_e])\n",
"\n",
"# Define reaction equations\n",
"SSCOARx.reaction = '1 h_c + 1 nadph_c + 1 succoa_c -> 1 coa_c + 1 nadp_c + 1 sucsal_c'\n",
"AKGDC.reaction = '1 akg_c + 1 h_c -> 1 co2_c + 1 sucsal_c'\n",
"HBD.reaction = '1 h_c + 1 nadh_c + 1 sucsal_c -> 1 4hb_c + 1 nad_c'\n",
"HBCT.reaction = '1 4hb_c + 1 accoa_c -> 1 4hbcoa_c + 1 ac_c'\n",
"HBDH.reaction = '1 4hbcoa_c + 1 h_c + 1 nadh_c -> 1 4hbal_c + 1 coa_c + 1 nad_c'\n",
"HBDx.reaction = '1 4hbal_c + 1 h_c + 1 nadh_c -> 1 14bdo_c + 1 nad_c'\n",
"BDOtpp.reaction = '1 14bdo_c -> 1 14bdo_p'\n",
"BDOtex.reaction = '1 14bdo_p -> 1 14bdo_e'\n",
"EX_14bdo_e.reaction = '1 14bdo_e ->'\n",
"\n",
"# Verify that pathway is operational\n",
"sol = sd.fba(ecc_14bdo,obj='EX_14bdo_e',obj_sense='max')\n",
"print(f\"Maximum possible 1,4-BDO synthesis rate: {sol.objective_value}.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 1: Strain designs with a minimum product (1,4-butanediol) yield (SUCP strain design)\n",
"\n",
"We may use the MCS approach to generate strain designs with a guaranteed minimum yield of 1,4-butanediol (1,4-BDO) on glucose, i.e. [substrate-uptake-coupled production (SUCP)](JN_04_strain_design_introduction.ipynb#SUCP:-substrate-uptake-coupled-production).\n",
"\n",
"### Example 1a: Reaction-KO-based strain designs with 1,4-butanediol SUCP\n",
"\n",
"#### 2) Analyze model and outline realistic strain design goals\n",
"\n",
"We may plot the relationship between growth and product yield to get a feel for the production potential."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sd.plot_flux_space(ecc_14bdo, ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bacterial growth seems to compete with 1,4-BDO production. The maximum theoretical 1,4-BDO yield, is slightly above 1. We may now try to set realistic strain design goals. Assuming that knockout sets can be found the force a product yield above 0.3, while a growth rate of 0.2 is still attainable, we can specify according flux subspaces for protection or deletion through inequalities.\n",
"\n",
"Since we decided to enforce a yield above 0.3, we aim to suppress all flux states with a yied inferior to this. Hence, we can describe the subspace of undesired fluxes with the inequality:\n",
"$$\\frac{v_{1,4-BDO}}{v_{Glc,up}} \\le 0.3$$\n",
"which can be linearized unter the assumption that $v_{Glc_up}>0$ to:\n",
"$$v_{1,4-BDO} - 0.3\\, v_{Glc,up} \\le 0$$\n",
"\n",
"The flux states, which we aim to protect (at least partically) can be described by:\n",
"$$v_{growth} \\ge 0.2$$\n",
"\n",
"We can use the plotting function to visualize the flux subspaces that we would like to suppress (orange) or protect (green)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.2',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints='EX_14bdo_e + 0.3 EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# adjust axes limits and show plot\n",
"plot3.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot3.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 3) Set up the strain design problem\n",
"\n",
"The StrainDesign package uses so-called \"strain design modules\" to specify strain design goals. In the case of MCS, the goal is to suppress and protect flux spaces denoted by (sets of) linear inequalities. In the following we specify these modules."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"module_suppress = sd.SDModule(ecc_14bdo,sd.SUPPRESS,constraints='EX_14bdo_e + 0.3 EX_glc__D_e <= 0')\n",
"module_protect = sd.SDModule(ecc_14bdo,sd.PROTECT, constraints='BIOMASS_Ecoli_core_w_GAM>=0.2')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It must be noted that suppressed or protected flux spaces are not only denoted by single inequalities, but are always subspaces of the original model. For instance, the set of flux vectors in the \"suppressed\" flux space is constrained by the specified inequality\n",
"$$v_{1,4-BDO}^{supp} - 0.3\\, v_{Glc,up}^{supp} \\le 0$$\n",
"**but also** by the model constraints\n",
"$$\\mathbf{S\\cdot v^{supp} = 0}$$\n",
"$$\\mathbf{lb \\le v^{supp} \\le ub}$$\n",
"\n",
"We must pay close attention when specifying *protect* and *suppress' modules, as, in either case, we avoid to include the zero flux vector $\\mathbf{v = 0}$ in the according subspace. If the zero vector were contained in the *suppressed* flux space, the subspace could not be suppressed, since the zero vector can always be attained, even if all reactions were to be blocked. If the zero vector is part of the *protected* flux space, the module will be ineffective, since reactions knockouts can never disrupt this vector. \n",
"\n",
"In the case of the e_coli_core, it is unnecessary to exclude the zero vector explicitly, since it is already excluded by default due to the minimum ATP maintenance demand. If this was not the case, one would need a auxiliary constraint, e.g., $ v_{Glc,up} \\ge 0.1$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 4) Compute strain designs\n",
"\n",
"We can now proceed with the strain design computation. Since we normally don't know if solutions to our strain design problems exist, we will start the computation with the most relaxed settings possible. This means, we compute only one single solution, within a given MILP timelimit of 5 minutes (for genome-scale setups, this should be increased to an hour), while omitting the minimality demand in the solutions and allow up to 30 knockouts. For this initial approach, we also activate logging to follow the progress of the computation."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 62859\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Compressing Network (104 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 61 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (61 reactions).\n",
"INFO:root: Network compression completed. (1 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 61 reactions, 36 metabolites\n",
"INFO:root: 50 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding (also non-optimal) strain designs ...\n",
"INFO:root:Searching in full search space.\n",
"INFO:root:Minimizing number of interventions in subspace with 10 possible targets.\n",
"INFO:root:Strain design with cost 9.0: {'ACALD': -1, 'ATPS4r': -1, 'CO2t*EX_co2_e': -1, 'D_LACt2*EX_lac__D_e*LDH_D': -1, 'SUCCt3': -1, 'EX_h2o_e*H2Ot': -1, 'FORt2': -1, 'NADTRHD': -1, 'PDH': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root:12 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 9.0 found and expanded to 12 solutions in the uncompressed netork.\n",
"Example knockout set: ['ACALD', 'ATPS4r', 'SUCCt3', 'FORt2', 'NADTRHD', 'PDH', 'CO2t', 'D_LACt2', 'EX_h2o_e']\n"
]
}
],
"source": [
"import logging\n",
"logging.basicConfig(level=logging.INFO)\n",
"# Compute strain designs\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = [module_suppress, module_protect],\n",
" time_limit = 300,\n",
" max_solutions = 1,\n",
" max_cost = 10,\n",
" solution_approach = sd.ANY)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.reaction_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example knockout set: {[s for s in sols.reaction_sd[0]]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5) Analyze strain designs\n",
"\n",
"We may plot the computed strain design (yellow) on top of the wild type model (blue), the suppressed fluxes (orange) and the protected fluxes (green). The designed strain is forced to produce 1,4-butanediol but is still able to grow at a rate higher than 0.2 1/h. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.2',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints='EX_14bdo_e + 0.3 EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# plotting designed strain\n",
"knockouts = [[{s:1.0},'=',0.0] for s in sols.reaction_sd[0]]\n",
"_, _, plot4 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=knockouts,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example 1b: gene-KO-based strain designs with 1,4-butanediol SUCP\n",
"\n",
"#### 4) Compute strain designs\n",
"\n",
"An easy way to compute gene-based MCS is to set the ``gene_kos`` parameter to True. All genes then are regarded as knockout candidates."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 21836\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 113 genes and 56 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (307 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 164 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 142 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 135 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 134 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 133 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (133 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 133 reactions, 78 metabolites\n",
"INFO:root: 47 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding (also non-optimal) strain designs ...\n",
"INFO:root:Searching in full search space.\n",
"INFO:root:Minimizing number of interventions in subspace with 10 possible targets.\n",
"INFO:root:Strain design with cost 11.0: {'PYK*pykF*R0_g_b1676_or_g_b1854*pykA*R1_g_b1676_or_g_b1854': -1, 'ME1*maeA': -1, 'ME2*maeB': -1, 'pgi': -1, 'kgtP': -1, 'lpd': -1, 'fumC*R0_g_b1611_or_g_b1612_or_g_b4122*fumA*R1_g_b1611_or_g_b1612_or_g_b4122*fumB*R2_g_b1611_or_g_b1612_or_g_b4122': -1, 'gltP': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:1 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 11.0 found and expanded to 1 solutions in the uncompressed netork.\n",
"Example knockout set: ['pgi', 'kgtP', 'lpd', 'gltP', 'maeA', 'maeB', 'pykF', 'pykA', 'fumC', 'fumA', 'fumB']\n"
]
}
],
"source": [
"import logging\n",
"logging.basicConfig(level=logging.INFO)\n",
"# Compute strain designs\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = [module_suppress, module_protect],\n",
" time_limit = 300,\n",
" max_solutions = 1,\n",
" max_cost = 30,\n",
" solution_approach = sd.ANY,\n",
" gene_kos = True)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.gene_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example knockout set: {[s for s in sols.gene_sd[0]]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5) Analyze (gene-KO-based) strain designs\n",
"\n",
"We may now analyze the resulting strain designs stored in ``sols.gene_sd``. When strain designs were computed with genetic interventions, such interventions need to be translated back to the reaction level in order to enable network analysis tools. This is done automatically at the end of each computation. The reaction-intervention equivalent can be accessed through the field ``sols.reaction_sd``."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.2',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints='EX_14bdo_e + 0.3 EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# plotting designed strain\n",
"knockouts = [[{s:1.0},'=',0.0] for s in sols.reaction_sd[0]]\n",
"_, _, plot4 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=knockouts,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As before, the designed strain complies with the specified MCS strain design goals."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Example 1c: gene-KO, regulatory and reactions-addition-based strain designs with 1,4-butanediol SUCP\n",
"\n",
"#### 4) Compute strain designs with different intervention types\n",
"\n",
"In step (1), we added two pathways that can be used to produce the intermediate succinic semialdehyde branching from alpha-ketoglutarate. In fact, only one reaction, AKGDC or SSCOARx, is needed for producing 1,4-BDO. If we want to save experimental effort, we may want to consider the addition of only one of the two respective enzymes.\n",
"\n",
"For the MCS computation, we will therefore mark the reactions AKGDC and SSCOARx as \"addition candidates\". The algorithm will now combine a knockout strategy with the addition of one of the two reactions. For this computation example we will:\n",
"- relax the strain design demands.\n",
"- allow the knockout of all genes (apart from the pseudogene for spontanous reactions)\n",
"- allow the knockout of O2, thereby simulating anaerobic conditions\n",
"- allow the limitation of O2 uptake down to a rate of below 1\n",
"- treat AKGDC and SSCOARx as addition candidates (Instead of reaction additions, one could also use gene-additions. Since the gene-reaction-association is 1:1, the computation results would be identical.). We associate different intervention costs to the addition of these reactions. AKGDC addition has the cost 1, SSCOARx addition has the cost 5."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 22847\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 111 genes and 52 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (301 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 155 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 133 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 126 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 125 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 124 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (124 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 124 reactions, 73 metabolites\n",
"INFO:root: 48 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Enumerating strain designs ...\n",
"INFO:root:Strain designs with cost 7.0: [{'CYTBD*EX_o2_e*O2t*cbdA*cbdB*R_g_b0978_and_g_b0979*R0_g_b0733_and_g_b0734_or_g_b0978_and_g_b0979*cydA*cydB*R_g_b0733_and_g_b0734*R1_g_b0733_and_g_b0734_or_g_b0978_and_g_b0979': -1.0, 'SSCOARx': 1.0, 'pgi': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'SSCOARx': 1.0, 'pgi': -1.0, 'focA*R0_g_b0904_or_g_b2492*focB*R1_g_b0904_or_g_b2492': -1.0, 'n-1.0_EX_o2_e_le_1p0': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'SSCOARx': 1.0, 'pgi': -1.0, 'mhpF*R0_g_b0351_or_g_b1241': -1.0, 'adhE': -1.0, 'n-1.0_EX_o2_e_le_1p0': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'PYK*pykF*R0_g_b1676_or_g_b1854*pykA*R1_g_b1676_or_g_b1854': -1.0, 'ICL*MALS*aceA*glcB*R0_g_b2976_or_g_b4014*aceB*R1_g_b2976_or_g_b4014': -1.0, 'AKGDC': 1.0, 'pgi': -1.0, 'kgtP': -1.0, 'sucC*sucD*R_g_b0728_and_g_b0729': -1.0, 'gltP': -1.0, 'mdh': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'PYK*pykF*R0_g_b1676_or_g_b1854*pykA*R1_g_b1676_or_g_b1854': -1.0, 'ICL*MALS*aceA*glcB*R0_g_b2976_or_g_b4014*aceB*R1_g_b2976_or_g_b4014': -1.0, 'AKGDC': 1.0, 'pgi': -1.0, 'kgtP': -1.0, 'lpd': -1.0, 'gltP': -1.0, 'mdh': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'AKGDH*sucA*sucB*R_g_b0116_and_g_b0726_and_g_b0727': -1.0, 'PYK*pykF*R0_g_b1676_or_g_b1854*pykA*R1_g_b1676_or_g_b1854': -1.0, 'ICL*MALS*aceA*glcB*R0_g_b2976_or_g_b4014*aceB*R1_g_b2976_or_g_b4014': -1.0, 'AKGDC': 1.0, 'pgi': -1.0, 'kgtP': -1.0, 'gltP': -1.0, 'mdh': -1.0}]\n",
"INFO:root:Strain designs with cost 9.0: [{'PFL*EX_for_e*pflA*pflB*R_g_b0902_and_g_b0903*R0_g_b0902_and_g_b0903_or_g_b0902_and_g_b3114_or_g_b3951_and_g_b3952*tdcE*R_g_b0902_and_g_b3114*R1_g_b0902_and_g_b0903_or_g_b0902_and_g_b3114_or_g_b3951_and_g_b3952...': -1.0, 'SSCOARx': 1.0, 'pgi': -1.0, 'n-1.0_EX_o2_e_le_1p0': -1.0}]\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:7 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:14 solutions found.\n"
]
}
],
"source": [
"module_suppress = sd.SDModule(ecc_14bdo,sd.SUPPRESS,constraints='EX_14bdo_e + 0.05 EX_glc__D_e <= 0')\n",
"module_protect = sd.SDModule(ecc_14bdo,sd.PROTECT, constraints='BIOMASS_Ecoli_core_w_GAM>=0.02')\n",
"\n",
"# allow all gene knockouts except for spontanuos \n",
"gko_cost = {g.name:1 for g in ecc_14bdo.genes} \n",
"gko_cost.pop('s0001')\n",
"# possible knockout of O2\n",
"ko_cost = {'EX_o2_e': 1}\n",
"# possible throttling of O2 uptake\n",
"reg_cost = {'-EX_o2_e <= 1' : 1}\n",
"# addition candidates\n",
"ki_cost = {'AKGDC':1, 'SSCOARx':5}\n",
"\n",
"# compute strain designs\n",
"import logging\n",
"logging.basicConfig(level=logging.INFO)\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = [module_suppress, module_protect],\n",
" max_cost = 9,\n",
" solution_approach = sd.POPULATE,\n",
" ko_cost = ko_cost,\n",
" gko_cost = gko_cost,\n",
" reg_cost = reg_cost,\n",
" ki_cost = ki_cost)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"solution 1: +SSCOARx, -pgi, -EX_o2_e\n",
"solution 2: +SSCOARx, -pgi, -cbdB, -cydA\n",
"solution 3: +SSCOARx, -pgi, -cbdB, -cydB\n",
"solution 4: +AKGDC, -pgi, -kgtP, -gltP, -mdh, -aceA, -pykF, -pykA, -sucC\n",
"solution 5: +AKGDC, -pgi, -kgtP, -gltP, -mdh, -aceA, -pykF, -pykA, -sucD\n",
"solution 6: +SSCOARx, -pgi, -pflA, -pflD, +-EX_o2_e <= 1\n",
"solution 7: +SSCOARx, -pgi, -pflA, -pflC, +-EX_o2_e <= 1\n",
"solution 8: +AKGDC, -pgi, -kgtP, -gltP, -mdh, -sucA, -aceA, -pykF, -pykA\n",
"solution 9: +AKGDC, -pgi, -kgtP, -gltP, -mdh, -sucB, -aceA, -pykF, -pykA\n",
"solution 10: +SSCOARx, -pgi, -cbdA, -cydA\n",
"solution 11: +SSCOARx, -pgi, -cbdA, -cydB\n",
"solution 12: +SSCOARx, -pgi, -focA, -focB, +-EX_o2_e <= 1\n",
"solution 13: +SSCOARx, -pgi, -adhE, -mhpF, +-EX_o2_e <= 1\n",
"solution 14: +AKGDC, -pgi, -kgtP, -lpd, -gltP, -mdh, -aceA, -pykF, -pykA\n"
]
}
],
"source": [
"for i,s in enumerate(sols.gene_sd):\n",
" st = [['+'+t if v>0 else '-'+t][0] for t,v in s.items() if v != 0]\n",
" print('solution '+str(i+1)+': '+', '.join(st))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 2: Enforce product (1,4-BDO) synthesis at all growth states (dGCP strain design)\n",
"\n",
"For computing dGCP strain designs with MCS, we follow the identical steps from Example 1:\n",
"\n",
"1) The production pathways, i.e., their metabolites and reactions are added to the model.\n",
"2) Analysis tools are used to identify adequate strain design goals. \n",
"3) Set up the according strain design problem by specifying two strain design *modules*, one that demand the suppression of flux states with low product yields, the other one protecting the functions that are essential for bacterial growth.\n",
"4) The strain design function is called, passing the model and the strain design module(s) as function arguments.\n",
"5) The results are analyzed.\n",
"\n",
"#### 1) Add and verify production pathway (skipped, since identical to Example 1)\n",
"\n",
"#### 2) Analyze model with production envelope "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot production envelope\n",
"sd.plot_flux_space(ecc_14bdo, ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 3) Set up the dGCP strain design modules\n",
"\n",
"For dGCP, we demand that all flux states of microbial growth carry production. Ideally, we want to (a) ensure a minimum ratio of product synthesis rate and growth rate $\\frac{v_{product}}{v_{growth}} > Y_{P/BM}^{min}$ (2) ensure that growth is still possible. Hence, we define one suppression and one protection module.\n",
"\n",
"Suppress module (removing flux states, where $\\frac{v_{product}}{v_{growth}} \\le Y_{P/BM}^{min}$):\n",
"$$v_{product} - Y_{P/BM}^{min} v_{growth} \\le 0$$\n",
"$$v_{growth} \\ge 0.01~h^{-1}$$\n",
"The latter constraint is used to explicitly exclude the $\\mathbf{v=0}$ vector from the suppressed flux states. Here, we use an arbitrary threshold of $Y_{P/BM}^{min} = 5$ that we inferred from the production envelope.\n",
"\n",
"Protect module:\n",
"$$v_{growth} \\ge 0.2~h^{-1}$$"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"module_suppress = sd.SDModule(ecc_14bdo,sd.SUPPRESS,constraints=['EX_14bdo_e - 5 BIOMASS_Ecoli_core_w_GAM <= 0', \n",
" 'BIOMASS_Ecoli_core_w_GAM >= 0.01'])\n",
"module_protect = sd.SDModule(ecc_14bdo,sd.PROTECT, constraints='BIOMASS_Ecoli_core_w_GAM>=0.2')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plotting the flux spaces in the production envelope returns:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.2',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=['EX_14bdo_e - 5 BIOMASS_Ecoli_core_w_GAM <= 0', \n",
" 'BIOMASS_Ecoli_core_w_GAM >= 0.01'],\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# adjust axes limits and show plot\n",
"plot3.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot3.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 4) Compute strain designs"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 47779\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 111 genes and 52 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (299 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 153 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 131 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 124 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 123 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 122 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (122 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 122 reactions, 72 metabolites\n",
"INFO:root: 47 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding optimal strain designs ...\n",
"INFO:root:Strain design with cost 6.0: {'ME2*maeB': -1, 'AKGDC': 1, 'kgtP': -1, 'sucC*sucD*R_g_b0728_and_g_b0729': -1, 'pntB*pntA*R_g_b1602_and_g_b1603': -1, 'zwf': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:4 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 6.0 found and expanded to 4 solutions in the uncompressed netork.\n",
"Example intervention set: ['+AKGDC', '-kgtP', '-zwf', '-maeB', '-sucC', '-pntB']\n",
"Knockout set on the reaction level: ['THD2', 'AKGt2r', 'ME2', 'SUCOAS', 'G6PDH2r', 'AKGDC', 'SSCOARx']\n"
]
}
],
"source": [
"import logging\n",
"logging.basicConfig(level=logging.ERROR)\n",
"# allow all gene knockouts except for spontanuos \n",
"gko_cost = {g.name:1 for g in ecc_14bdo.genes} \n",
"gko_cost.pop('s0001')\n",
"# possible knockout of O2\n",
"ko_cost = {'EX_o2_e': 1}\n",
"ki_cost = {'AKGDC':1, 'SSCOARx':1} # AKGDC was added in example 1.c)\n",
"\n",
"# compute strain designs\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = [module_suppress, module_protect],\n",
" max_solutions = 1,\n",
" max_cost = 30,\n",
" solution_approach = sd.BEST,\n",
" ko_cost = ko_cost,\n",
" gko_cost = gko_cost,\n",
" ki_cost = ki_cost)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.reaction_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example intervention set: {['+'+s if v>0 else '-'+s for s,v in sols.gene_sd[0].items() if v!=0]}\")\n",
"print(f\"Knockout set on the reaction level: {[s for s in sols.reaction_sd[0]]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5) Analyze the results"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.2',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=['EX_14bdo_e - 4 BIOMASS_Ecoli_core_w_GAM <= 0', \n",
" 'BIOMASS_Ecoli_core_w_GAM >= 0.01'],\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# plotting designed strain\n",
"interventions = [[{s:1.0},'=',0.0] for s,v in sols.reaction_sd[0].items() if v < 1]\n",
"_, _, plot4 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM','EX_14bdo_e'),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=interventions,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The resulting strain design shows a linear increase of ensured production with increasing growth."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 3: Suppress flux states that are optimal with respect to a pre-defined objective function (wGCP strain design)\n",
"\n",
"The MCS approach also allows the suppression (or protection) of flux vectors that are optimal regarding a pre-defined objective function. With an inner objective function, the SUPPRESS module can be used to disrupt any growth-maximal flux states that don't carry production and thereby enforce - *at least* - weakly growth-coupled production. To avoid lethal knockouts and ensure that growth is still possible at reasonable growth rates, we additionally use a PROTECT region."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Preparing plot of wild type and strain design setup.\n",
"Computing MCS.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 63305\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 111 genes and 52 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (299 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 153 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 131 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 124 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 123 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 122 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (122 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 122 reactions, 72 metabolites\n",
"INFO:root: 47 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding optimal strain designs ...\n",
"INFO:root:Strain design with cost 4.0: {'CYTBD*EX_o2_e*O2t*cbdA*cbdB*R_g_b0978_and_g_b0979*R0_g_b0733_and_g_b0734_or_g_b0978_and_g_b0979*cydA*cydB*R_g_b0733_and_g_b0734*R1_g_b0733_and_g_b0734_or_g_b0978_and_g_b0979': -1, 'SSCOARx': 1, 'mhpF*R0_g_b0351_or_g_b1241': -1, 'adhE': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:5 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 4.0 found and expanded to 5 solutions in the uncompressed netork.\n",
"Example intervention set: ['+SSCOARx', '-adhE', '-EX_o2_e', '-mhpF']\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Wild-type plot\n",
"print('Preparing plot of wild type and strain design setup.')\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"# wGCP protect plot\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints='BIOMASS_Ecoli_core_w_GAM>=0.15',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# wGCP suppress plot\n",
"_, _, plot3 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints='EX_14bdo_e + 0.25 EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"\n",
"\n",
"print('Computing MCS.')\n",
"module_wgcp = sd.SDModule( ecc_14bdo,sd.SUPPRESS,\n",
" inner_objective='BIOMASS_Ecoli_core_w_GAM',\n",
" constraints='EX_14bdo_e + 0.25 EX_glc__D_e <= 0')\n",
"module_protect = sd.SDModule( ecc_14bdo,sd.PROTECT,\n",
" constraints='BIOMASS_Ecoli_core_w_GAM >= 0.15')\n",
"\n",
"# allow all gene knockouts except for spontanuos \n",
"gko_cost = {g.name:1 for g in ecc_14bdo.genes} \n",
"gko_cost.pop('s0001')\n",
"# possible knockout of O2\n",
"ko_cost = {'EX_o2_e': 1}\n",
"# addition candidates\n",
"ki_cost = {'AKGDC':1, 'SSCOARx':1} # AKGDC was added in example 1.c)\n",
"\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = [module_wgcp,module_protect],\n",
" time_limit = 300,\n",
" max_solutions = 1,\n",
" max_cost = 30,\n",
" gko_cost = gko_cost,\n",
" ko_cost = ko_cost,\n",
" ki_cost = ki_cost,\n",
" solution_approach = sd.BEST)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.gene_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example intervention set: {['+'+s if v>0 else '-'+s for s,v in sols.gene_sd[0].items() if v!=0]}\")\n",
"\n",
"# wGCP design plot\n",
"interventions = [[{s:1.0},'=',0.0] for s,v in sols.reaction_sd[0].items() if v < 1]\n",
"_, _, plot4 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=interventions,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As specified by the additional *inner objective function*, product yields inferior to 0.25 (orange) are supressed at growth-maximal flux states, only. At lower growth rates, the strain design *is allowed to have lower product yields*. The protected region, marking healthy growth rates (green), has to be intersected."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 4: Protect flux states that are optimal with respect to a pre-defined objective function (pGCP strain design)\n",
"\n",
"The following setup shows how this function can be used to generate strain designs with at least potentially growth-coupled production. We specify a PROTECT module to ensure that there are growth-maximal flux states with a growth rate of at least 0.4 and a product yield of at least $0.4~\\frac{mol_{1,4{\\text -}BDO}}{mol_{D{\\text -}Glucose}}$."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Preparing plot of wild type and strain design setup.\n",
"Computing MCS.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 59309\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 86 genes and 49 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (267 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 149 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 128 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 122 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 121 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 120 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (120 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 120 reactions, 71 metabolites\n",
"INFO:root: 44 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding optimal strain designs ...\n",
"INFO:root:Strain design with cost 6.0: {'PPS*ppsA': -1, 'ME2*maeB': -1, 'AKGDC': 1, 'pntB*pntA*R_g_b1602_and_g_b1603': -1, 'zwf': -1, 'mdh': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:2 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 6.0 found and expanded to 2 solutions in the uncompressed netork.\n",
"Example intervention set: ['+AKGDC', '-zwf', '-mdh', '-ppsA', '-maeB', '-pntB']\n"
]
},
{
"data": {
"image/png": "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EHK5XBw9evSR13nY5yYuLk6kpKSIxMRE8f333wtHR0cxevRoXbt/j5a6evWqcHFxET179hQnT54USUlJ4pdffhFeXl6iefPmJfqh/HvU0YMHD0qMgvlnn5vPP/9c1KtXr9RoGCGEeP3118Wrr74qhBBiwoQJYtGiRSIkJEQkJiaKsLAw0b9/f1G3bl2Rnp6uu25gYKA4f/68SEhIEIcPHxYtW7YUzz33XDm/+n/nHjt2rEhJSSnxycjIEEL8NfqnRYsWomfPniIkJETcuHFD/PDDD+LUqVNCCCH2798vbGxsxMaNG8XVq1fFqlWrhFwuF3/88YfuGqhgn5v09HRRp04d8corr4hz586Jq1eviq+//lrExsbqfh2dnJzE7t27RWxsrJg1a5awsbERV69efey1Nm/eLOzs7MSaNWtEXFycuHTpkti6datYtWqVXr9mkZGRQiaTCaVSqevz8vnnnwu5XC6efvppvc4hhBDXr18Xbm5uolWrVmL37t0iOjpaxMbGim+++Ua4ubmJGTNmCCH+GpHl4+NT5jm6desm3n//fSFEyT43QgiRn5+v+33yMCP73JAxsbghKsPDouPfH39/f10bf39/0bt371LHdejQQSgUCtGkSRPd8F59r2NtbS0aN24s3n///RIFyL+LGyGESExMFP7+/sLNzU3Y2NgIT09PMWXKlBJ/aQhR/pDqfxY37dq103V6/bc9e/YIhUIh7t27J3744QfRr18/Ua9ePaFQKISHh4cYPHiwuHTpkq59QECA8PX1FbVr1xa2traiSZMm4t133y2V71F69+5d5j3459D6xMREMXjwYOHk5CTs7e1Fly5dxJkzZ3T7TTkU/OLFi+K///2vsLe3F46OjqJnz57ixo0bQoi/OmV//PHHon79+sLGxuaRQ8HLutbOnTt1v4dq1aolevXqVapz76NoNBpRq1atEgXHwwJ99uzZep3joTt37ojJkyeLxo0bCxsbG1GjRg3RrVs38emnn4q8vDxRVFQk6tSpU2LKgn/65JNPhKurq1CpVKWKm39jcUPGJhPCwF6JRERERGaMfW6IiIjIorC4IaJKFxwcXGK4878/UpswYcIjs5lqbavyBAQEPDLTCy+8oPd5kpKSHvtrn5SUZMJvQVQ5+FqKiCpdQUEBbt++/cj9jxr+XVnu3r2L7OzsMvc5OTnB1dW1khP9NTP1o0aG2dnZoX79+nqdR61WIzEx8ZH7GzVqxOHZVOWxuCEiIiKLwtdSREREZFFY3BAREZFFYXFDREREFoXFDREREVkUFjdERERkUVjcEBERkUVhcUNEREQWhcUNERERWZT/A+ylResYjw/WAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Wild-type plot\n",
"print('Preparing plot of wild type and strain design setup.')\n",
"datapoints, triang, plot1 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"# wGCP protect plot\n",
"_, _, plot2 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints=['BIOMASS_Ecoli_core_w_GAM>=0.4','EX_14bdo_e + 0.4 EX_glc__D_e >= 0'],\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"\n",
"print('Computing MCS.')\n",
"module_pgcp = sd.SDModule( ecc_14bdo,sd.PROTECT,\n",
" inner_objective='BIOMASS_Ecoli_core_w_GAM',\n",
" constraints=[ 'BIOMASS_Ecoli_core_w_GAM >= 0.4',\n",
" 'EX_14bdo_e + 0.4 EX_glc__D_e >= 0'])\n",
"\n",
"# allow all gene knockouts except for spontanuos \n",
"gko_cost = {g.name:1 for g in ecc_14bdo.genes} \n",
"gko_cost.pop('s0001')\n",
"# possible knockout of O2\n",
"ko_cost = {'EX_o2_e': 1}\n",
"# addition candidates\n",
"ki_cost = {'AKGDC':1, 'SSCOARx':1} # AKGDC was added in example 1.c)\n",
"\n",
"sols = sd.compute_strain_designs(ecc_14bdo,\n",
" sd_modules = module_pgcp,\n",
" time_limit = 300,\n",
" max_solutions = 1,\n",
" max_cost = 30,\n",
" gko_cost = gko_cost,\n",
" ko_cost = ko_cost,\n",
" ki_cost = ki_cost,\n",
" solution_approach = sd.BEST)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.gene_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example intervention set: {['+'+s if v>0 else '-'+s for s,v in sols.gene_sd[0].items() if v!=0]}\")\n",
"\n",
"# wGCP design plot\n",
"interventions = [[{s:1.0},'=',0.0] for s,v in sols.reaction_sd[0].items() if v < 1]\n",
"_, _, plot4 = sd.plot_flux_space(ecc_14bdo,\n",
" ('BIOMASS_Ecoli_core_w_GAM',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=interventions,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The designed strain has potentially growth coupled production. It must be noted that *only one PROTECT region* (green) was used in this computation. Without the *inner objective function*, the wild type strain already fulfills the modules demands, because flux states with simultanous growth and production already exist in the wildtype. In this strain design computation, we enforce that *growth-maximal* flux states exist with growth and product synthesis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 5: All single gene knockouts that prohibit growth (synthetic lethals).\n",
"\n",
"The MCS approach can be used to identify essential genes. For this type of computation we may use the MCS approach with a single suppress-module that targets flux states of microbial growth, i.e. flux states in which the inequality\n",
"$$ v_{Biomass} > 0$$\n",
"approximated as\n",
"$$ v_{Biomass} \\ge 0.001$$\n",
"holds. We construct the corresponding module and launch an exhaustive computation of all solutions of the size 1."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 2364\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (137 genes, 69 gpr rules).\n",
"INFO:root: Simplifyied to 135 genes and 69 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (348 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 198 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 169 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 160 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 158 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 156 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (156 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 156 reactions, 91 metabolites\n",
"INFO:root: 60 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Enumerating strain designs ...\n",
"INFO:root:Strain designs with cost 1.0: [{'eno': -1.0}]\n",
"INFO:root:Strain designs with cost 1.0: [{'gapA': -1.0}]\n",
"INFO:root:Strain designs with cost 1.0: [{'CS*gltA': -1.0}]\n",
"INFO:root:Strain designs with cost 1.0: [{'icd': -1.0}]\n",
"INFO:root:Strain designs with cost 1.0: [{'EX_glc__D_e*GLCpts*ptsH*ptsI*manX*manY*manZ*R_g_b1817_and_g_b1818_and_g_b1819_and_g_b2415_and_g_b2416...': -1.0}]\n",
"INFO:root:Strain designs with cost 1.0: [{'pgk': -1.0}]\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:6 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:7 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"7 lethal single gene knockouts were found.\n",
"Solution 1: eno\n",
"Solution 2: gapA\n",
"Solution 3: icd\n",
"Solution 4: pgk\n",
"Solution 5: gltA\n",
"Solution 6: ptsH\n",
"Solution 7: ptsI\n"
]
}
],
"source": [
"# Construct module\n",
"module_suppress = sd.SDModule(ecc,sd.SUPPRESS, constraints='BIOMASS_Ecoli_core_w_GAM>=0.001')\n",
"# Compute strain designs\n",
"sols = sd.compute_strain_designs(ecc,\n",
" sd_modules = module_suppress,\n",
" max_cost = 1,\n",
" solution_approach = sd.POPULATE,\n",
" gene_kos = True)\n",
"# Print solutions\n",
"print(f\"{len(sols.gene_sd)} lethal single gene knockouts were found.\")\n",
"for i,sol in enumerate(sols.gene_sd):\n",
" print(f\"Solution {i+1}: {[s for s in sol][0]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"## Example 6: Genome-scale strain designs with a minimum product (1,4-butanediol) yield (SUCP strain design)\n",
"\n",
"Supplementary preparation steps are necessary for computing strain designs in a genome-scale setup. Here, we again use the example of enforcing substrat-uptake-coupled production of 1,4-butanediol. \n",
"1) Add production pathways, i.e., metabolites and reactions, to the model.\n",
"2) Ensure that only relevant exchange reactions are kept open in the model.\n",
"3) Analyze production capacities.\n",
"3) Set up the strain design problem through modules.\n",
"4) Launch the strain design computation.\n",
"5) Analyze the results.\n",
"\n",
"#### 1) Add and verify production pathway"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Maximum possible 1,4-BDO synthesis rate: 10.489195402311951.\n"
]
}
],
"source": [
"import straindesign as sd\n",
"import cobra\n",
"\n",
"cobra.Configuration().solver = 'cplex'\n",
"iml = cobra.io.load_model('iML1515')\n",
"\n",
"# Create copy of model to which pathway will be added\n",
"iml_14bdo = iml.copy()\n",
"# If available, set the solver to cplex or gurobi. This will increase the chances\n",
"# of sucess enormously\n",
"iml_14bdo.solver = 'cplex'\n",
"\n",
"# Add metabolites to model\n",
"iml_14bdo.add_metabolites([ cobra.Metabolite('4hb_c'), # 4-Hydroxybutanoate\n",
" cobra.Metabolite('4hbcoa_c'),# 4-Hydroxybutyryl-CoA\n",
" cobra.Metabolite('4hbal_c'), # 4-Hydroxybutanal\n",
" cobra.Metabolite('14bdo_c'), # Butane-1,4-diol (cytopl.)\n",
" cobra.Metabolite('14bdo_p'), # Butane-1,4-diol (peripl.)\n",
" cobra.Metabolite('14bdo_e') # Butane-1,4-diol (extrac.)\n",
" ])\n",
"\n",
"# Create reactions\n",
"AKGDC = cobra.Reaction('AKGDC')\n",
"SSCOARx = cobra.Reaction('SSCOARx')\n",
"HBD = cobra.Reaction('4HBD')\n",
"HBCT = cobra.Reaction('4HBCT')\n",
"HBDH = cobra.Reaction('4HBDH')\n",
"HBDx = cobra.Reaction('4HBDx')\n",
"BDOtpp = cobra.Reaction('14BDOtpp')\n",
"BDOtex = cobra.Reaction('14BDOtex')\n",
"EX_14bdo_e = cobra.Reaction('EX_14bdo_e')\n",
"\n",
"# Add reactions to model\n",
"iml_14bdo.add_reactions([SSCOARx,\n",
" AKGDC,\n",
" HBD,\n",
" HBCT,\n",
" HBDH,\n",
" HBDx,\n",
" BDOtpp,\n",
" BDOtex,\n",
" EX_14bdo_e])\n",
"\n",
"# Define reaction equations\n",
"SSCOARx.reaction = '1 h_c + 1 nadph_c + 1 succoa_c -> 1 coa_c + 1 nadp_c + 1 sucsal_c'\n",
"AKGDC.reaction = '1 akg_c + 1 h_c -> 1 co2_c + 1 sucsal_c'\n",
"HBD.reaction = '1 h_c + 1 nadh_c + 1 sucsal_c -> 1 4hb_c + 1 nad_c'\n",
"HBCT.reaction = '1 4hb_c + 1 accoa_c -> 1 4hbcoa_c + 1 ac_c'\n",
"HBDH.reaction = '1 4hbcoa_c + 1 h_c + 1 nadh_c -> 1 4hbal_c + 1 coa_c + 1 nad_c'\n",
"HBDx.reaction = '1 4hbal_c + 1 h_c + 1 nadh_c -> 1 14bdo_c + 1 nad_c'\n",
"BDOtpp.reaction = '1 14bdo_c -> 1 14bdo_p'\n",
"BDOtex.reaction = '1 14bdo_p -> 1 14bdo_e'\n",
"EX_14bdo_e.reaction = '1 14bdo_e ->'\n",
"\n",
"# define GPR rules for knock-inable genes\n",
"SSCOARx.gene_reaction_rule = 'gsscoar'\n",
"AKGDC.gene_reaction_rule = 'gakgdc'\n",
"iml_14bdo.genes.gsscoar.name = 'sscoar'\n",
"iml_14bdo.genes.gakgdc.name = 'akgdc'\n",
"\n",
"# Verify that pathway is operational\n",
"sol = sd.fba(iml_14bdo,obj='EX_14bdo_e',obj_sense='max')\n",
"print(f\"Maximum possible 1,4-BDO synthesis rate: {sol.objective_value}.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 2) Close irrelevant exchange reactions and simplify GPR rules\n",
"\n",
"The iML1515 model contains metabolite exchange capacities that are usually not observed in experiments such as exchanges of CoA-associated or phosphorylated metabolites. While unrealistic, these exchanges are still represented in the model and stoichiometrically possible, hence the MCS approach would have to target many of them in order to enforce SUCP of 1,4-BDO. Closing unrealistic exchanges ahead of the computation reduces the computation effort and aviods the excessive introduction of interventions.\n",
"\n",
"We block the import of all carbon-containing metabolites apart from D-glucose.\n",
"\n",
"We here opt to block the export of all metabolites apart from CO2, Ethanol, Acetate, Formate, D-Lactate, Succinate, Methanol, O2, H+, H2, H2O2 and tungsten. We furthermore allow a number of exchange reactions with the prefix DM_ that are required for the iML biomass synthesis pseudoreaction. \n",
"\n",
"We replace long and complex GPR rules with shorter ones. The integrated compression routine would compresses GPR rules, which would allow a fast computation. However decompression of computed strain designs can result in countless equivalent strain designs. For instance, the simultanous knockouts of CYTBO3_4pp (cyoA & cyoB & cyoC & cyoD) and FRD2 (frdA & frdB & frdC & frdD) can be achieved by any KO combination of the subunits and hence by permutations (cyoA, frdA) or (cyoA, frdB) or (cyoB, frdA) and so on ... This is an effect we try to minimize by substituting GPR rules."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"exchange_reacs = [r for r in iml_14bdo.reactions if all(s<0 for s in r.metabolites.values())]\n",
"# shut all exchange fluxes\n",
"for r in exchange_reacs:\n",
" r.upper_bound = 0.0\n",
"\n",
"# shut CO2 uptake\n",
"iml_14bdo.reactions.EX_co2_e.lower_bound = 0.0\n",
"\n",
"# keep main fermentation products open\n",
"iml_14bdo.reactions.EX_14bdo_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_ac_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_co2_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_etoh_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_for_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_h2_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_h2o2_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_h2o_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_h_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_lac__D_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_meoh_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_o2_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_succ_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.EX_tungs_e.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_4crsol_c.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_5drib_c.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_aacald_c.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_amob_c.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_mththf_c.upper_bound = 1000.0\n",
"iml_14bdo.reactions.DM_oxam_c.upper_bound = 1000.0\n",
"\n",
"# substitute GPR rule in ATPS4rpp (all genes occur only in ATPS)\n",
"atps_genes = [g for g in iml_14bdo.reactions.ATPS4rpp.genes]\n",
"iml_14bdo.reactions.ATPS4rpp.gene_reaction_rule = str(atps_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,atps_genes[1:])\n",
"atps_genes[0].name = 'atpX'\n",
"\n",
"# substitute GPR rules in NADH16pp, NADH17pp, NADH18pp (all genes occur only in NADHxxpp and GPR rules are identical)\n",
"nuo_genes = [g for g in iml_14bdo.reactions.NADH16pp.genes]\n",
"iml_14bdo.reactions.NADH16pp.gene_reaction_rule = str(nuo_genes[0])\n",
"iml_14bdo.reactions.NADH17pp.gene_reaction_rule = str(nuo_genes[0])\n",
"iml_14bdo.reactions.NADH18pp.gene_reaction_rule = str(nuo_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,nuo_genes[1:])\n",
"nuo_genes[0].name = 'nuoX'\n",
"\n",
"# substitute GPR rules in FRD2, FRD3 (genes occur only in FRD2 and FRD3 and GPR rules are identical)\n",
"frd_genes = [g for g in iml_14bdo.reactions.FRD2.genes]\n",
"iml_14bdo.reactions.FRD2.gene_reaction_rule = str(frd_genes[0])\n",
"iml_14bdo.reactions.FRD3.gene_reaction_rule = str(frd_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,frd_genes[1:])\n",
"frd_genes[0].name = 'frdX'\n",
"\n",
"# substitute GPR rule in CYTBO3_4pp\n",
"cyo_genes = [g for g in iml_14bdo.reactions.CYTBO3_4pp.genes]\n",
"iml_14bdo.reactions.CYTBO3_4pp.gene_reaction_rule = str(cyo_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,cyo_genes[1:])\n",
"cyo_genes[0].name = 'cyoX'\n",
"\n",
"# substitute GPR rule in THD2pp\n",
"pnt_genes = [g for g in iml_14bdo.reactions.THD2pp.genes]\n",
"iml_14bdo.reactions.THD2pp.gene_reaction_rule = str(pnt_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,pnt_genes[1:])\n",
"pnt_genes[0].name = 'pntX'\n",
"\n",
"# substitute GPR rule in PDH and AKGDH\n",
"ace_genes = [g for g in iml_14bdo.genes if g.name in ['aceE', 'aceF']]\n",
"sucAB_genes = [g for g in iml_14bdo.genes if g.name in ['sucA', 'sucB']]\n",
"lpd = [g for g in iml_14bdo.genes if g.name == 'lpd'][0]\n",
"iml_14bdo.reactions.PDH.gene_reaction_rule = str(ace_genes[0])+' and '+str(lpd)\n",
"iml_14bdo.reactions.AKGDH.gene_reaction_rule = str(sucAB_genes[0])+' and '+str(lpd)\n",
"cobra.manipulation.remove_genes(iml_14bdo,ace_genes[1:])\n",
"cobra.manipulation.remove_genes(iml_14bdo,sucAB_genes[1:])\n",
"ace_genes[0].name = 'aceEF'\n",
"sucAB_genes[0].name = 'sucAB'\n",
"\n",
"# substitute GPR rule in SUCOAS\n",
"sucCD_genes = [g for g in iml_14bdo.reactions.SUCOAS.genes]\n",
"iml_14bdo.reactions.SUCOAS.gene_reaction_rule = str(sucCD_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,sucCD_genes[1:])\n",
"sucCD_genes[0].name = 'sucCD'\n",
"\n",
"# substitute GPR rule in SUCDi\n",
"sdh_genes = [g for g in iml_14bdo.reactions.SUCDi.genes]\n",
"iml_14bdo.reactions.SUCDi.gene_reaction_rule = str(sdh_genes[0])\n",
"cobra.manipulation.remove_genes(iml_14bdo,sdh_genes[1:])\n",
"sdh_genes[0].name = 'sdhX'"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sd.plot_flux_space(iml_14bdo, ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')));"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 3) Set up the strain design problem\n",
"\n",
"As in the small-scale setup, we set up again the SUPRESS and PROTECT modules to enforce substrate-uptake-coupled production of 1,4-BDO. The genome-scale model contains many more secondary pathways that can be used to disrupt SUCP. We therefore start with a conservative setup of demanding a minimum product yield of $0.1~\\frac{{mol}_{1,4{\\text -}BDO}}{{mol_{D{\\text -}Glucose}}}$. At the same time we ensure that growth is still possible at rates of $0.05~h^{-1}$ and above."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"min_14bdo_yield = 0.25\n",
"min_growth = 0.1\n",
"module_suppress = sd.SDModule(iml_14bdo,sd.SUPPRESS,constraints=f'EX_14bdo_e + {min_14bdo_yield} EX_glc__D_e <= 0')\n",
"module_protect = sd.SDModule(iml_14bdo,sd.PROTECT, constraints=f'BIOMASS_Ec_iML1515_core_75p37M>={min_growth}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plotted:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(iml_14bdo,\n",
" (f'BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints=f'BIOMASS_Ec_iML1515_core_75p37M >= {min_growth}',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=f'EX_14bdo_e + {min_14bdo_yield} EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# adjust axes limits and show plot\n",
"plot3.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot3.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the genome-case setup using iML1515, it is still unnecessary to exclude the 0-vector explicitly, since it is already excluded by default due to the minimum ATP maintenance demand."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 4) Compute strain designs\n",
"\n",
"We can now proceed with the strain design computation. Since we normally don't know if solutions to our strain design problems exist, and even more so in genome-scale setups, we will start the computation with the most relaxed settings possible. This means, we compute only one single solution, without a time limit, while omitting the minimality demand in the solutions and allow up to 25 knockouts. We also activate logging to follow the progress of the computation.\n",
"If this computation is not successful on the first run, we should retry. The success of genome-scale computations often depends on the MILP search tree, whose construction varies with different computation seeds. A repeated computation may therefore conclude in a different (but also valid) strain design solution. Generally, it is possible that a computation completes in a couple of minutes, while the repetitions runs into timeout."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 3183\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Preprocessing GPR rules (1485 genes, 2268 gpr rules).\n",
"INFO:root: Simplifyied to 1229 genes and 1853 gpr rules.\n",
"INFO:root: Extending metabolic network with gpr associations.\n",
"INFO:root:Compressing Network (5252 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 2450 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Reduced to 2341 reactions.\n",
"INFO:root: Compression 3: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 2298 reactions.\n",
"INFO:root: Compression 4: Lumping parallel reactions.\n",
"INFO:root: Reduced to 2292 reactions.\n",
"INFO:root: Compression 5: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 2288 reactions.\n",
"INFO:root: Compression 6: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (2288 reactions).\n",
"INFO:root: Network compression completed. (5 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 2288 reactions, 968 metabolites\n",
"INFO:root: 569 targetable reactions\n",
"WARNING:root: Removing reaction bounds when larger than the cobra-threshold of 1000.\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding (also non-optimal) strain designs ...\n",
"INFO:root:Searching in full search space.\n",
"INFO:root:Minimizing number of interventions in subspace with 30 possible targets.\n",
"INFO:root:Strain design with cost 13.0: {'THD2pp*pntX': -1, 'EX_o2_e': -1, 'SSCOARx*sscoar': 1, 'adhE': -1, 'adhP*R1_g_b1241_or_g_b1478': -1, 'ybbO*R0_g_b0493_or_g_b3003_or_g_b3011_or_g_b3588_or_g_b4269*yghA*R1_g_b0493_or_g_b3003_or_g_b3011_or_g_b3588_or_g_b4269': -1, 'yqhD': -1, 'aldB': -1, 'ahr': -1, 'mdh': -1, 'glcA*R0_g_b2975_or_g_b3603*lldP*R1_g_b2975_or_g_b3603': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:1 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root: Preparing (reaction-)phenotype prediction of gene intervention strategies.\n",
"INFO:root:1 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"One compressed solution with cost 13.0 found and expanded to 1 solutions in the uncompressed netork.\n",
"Example intervention set: ['-EX_o2_e', '-adhE', '-yqhD', '-aldB', '-ahr', '-mdh', '-pntX', '+sscoar', '-adhP', '-ybbO', '-yghA', '-glcA', '-lldP']\n"
]
}
],
"source": [
"import logging\n",
"logging.basicConfig(level=logging.INFO)\n",
"\n",
"# allow all gene knockouts except for spontanuos \n",
"gko_cost = {g.name:1 for g in iml_14bdo.genes} \n",
"gko_cost.pop('s0001')\n",
"gko_cost.pop('akgdc')\n",
"gko_cost.pop('sscoar')\n",
"# allow knock-in of akgdc and sscoar\n",
"gki_cost = {'akgdc':1, 'sscoar':1}\n",
"# possible knockout of O2\n",
"ko_cost = {'EX_o2_e': 1}\n",
"# Compute strain designs\n",
"sols = sd.compute_strain_designs(iml_14bdo,\n",
" sd_modules = [module_suppress, module_protect],\n",
" max_solutions = 1,\n",
" max_cost = 40,\n",
" ko_cost = ko_cost,\n",
" gko_cost = gko_cost,\n",
" gki_cost = gki_cost,\n",
" solution_approach = sd.ANY)\n",
"# Print solutions\n",
"print(f\"One compressed solution with cost {sols.sd_cost[0]} found and \"+\\\n",
" f\"expanded to {len(sols.reaction_sd)} solutions in the uncompressed netork.\")\n",
"print(f\"Example intervention set: {['+'+s if v>0 else '-'+s for s,v in sols.gene_sd[0].items() if v!=0]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 5) Analyze strain designs\n",
"\n",
"We may plot the computed strain design (yellow) on top of the wild type model (blue), the suppressed fluxes (orange) and the protected fluxes (green). The designed strain is forced to produce 1,4-butanediol but is still able to grow at a relatively high rate. "
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"# Wild-type plot\n",
"datapoints, triang, plot1 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" show=False);\n",
"_, _, plot2 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" constraints=f'BIOMASS_Ec_iML1515_core_75p37M>={min_growth}',\n",
" show=False);\n",
"plot2.set_facecolor('#70AD47')\n",
"plot2.set_edgecolor('#70AD47')\n",
"# pGCP design plot\n",
"_, _, plot3 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=f'EX_14bdo_e + {min_14bdo_yield} EX_glc__D_e <= 0',\n",
" show=False);\n",
"plot3.set_facecolor('#ED7D31')\n",
"plot3.set_edgecolor('#ED7D31')\n",
"# plotting designed strain\n",
"interventions = [[{s:1.0},'=',0.0] for s,v in sols.reaction_sd[0].items() if v < 1]\n",
"_, _, plot4 = sd.plot_flux_space(iml_14bdo,\n",
" ('BIOMASS_Ec_iML1515_core_75p37M',('EX_14bdo_e','-EX_glc__D_e')),\n",
" # The sign of the glucose exchange reaction is flipped since \n",
" # reaction is defined in the direction of secretion.\n",
" constraints=interventions,\n",
" show=False);\n",
"plot4.set_facecolor('#FFC000')\n",
"plot4.set_edgecolor('#FFC000')\n",
"# adjust axes limits and show plot\n",
"plot4.axes.set_xlim(0, 1.05*max([a[0] for a in datapoints]))\n",
"plot4.axes.set_ylim(0, 1.05*max([a[1] for a in datapoints]))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"MCS suggests the addition of only one of the two enzymes SSCOAR or AKGDC and suggests the knockout of plenty of other genes. The knockout suggestions proposed by MCS are often overly conservative. In practice, a subset of knockouts is sufficient, in particular, knockouts may be unnecessary when the affected pathway does not carry a large flux in the first place."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"## Example 7: Suppress flux states in a toy network\n",
"\n",
"The MCS concept can be showcased in a small example network:\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Suppose, we want block all metabolic flux through **R4** to avoid the production of metabolite **E**. One can now identify irreducible sets of reaction knockouts to achieve this. Each of these set is called a minimal cut set, short MCS. This figure shows all possible MCS for blocking reaction R4.\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set up the according strain design problem by specifying a *module* that demands the suppression of flux states with $R4 > 0$. \n",
"\n",
"Since strict inequalities are not allowed in mixed integer linear programming (MILP), we need to approximate it by an inclusive inequality and a sufficiently small value $\\varepsilon>0$. Here we pick $\\varepsilon=1$, such that the flux states that we aim to delete are those that fulfill the inequality:\n",
"\n",
"$$R4 >= 1$$"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 4983\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Compressing Network (10 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 8 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (8 reactions).\n",
"INFO:root: Network compression completed. (1 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 8 reactions, 4 metabolites\n",
"INFO:root: 8 targetable reactions\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding optimal strain designs ...\n",
"INFO:root:Strain design with cost 1.0: {'R4*R7*R10': -1}\n",
"INFO:root:Strain design with cost 1.0: {'R1': -1}\n",
"INFO:root:Strain design with cost 1.0: {'R3': -1}\n",
"INFO:root:Strain design with cost 2.0: {'R6': -1, 'R8': -1}\n",
"INFO:root:Strain design with cost 3.0: {'R2': -1, 'R5': -1, 'R6': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:5 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root:7 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'R1': -1.0}\n",
"{'R3': -1.0}\n",
"{'R4': -1.0}\n",
"{'R7': -1.0}\n",
"{'R10': -1.0}\n",
"{'R6': -1.0, 'R8': -1.0}\n",
"{'R2': -1.0, 'R5': -1.0, 'R6': -1.0}\n"
]
}
],
"source": [
"modules = [sd.SDModule(model,sd.SUPPRESS,constraints='R4 >= 1')]\n",
"# modules += [sd.SDModule(model,sd.PROTECT, constraints='R3 >= 1')]\n",
"\n",
"\n",
"sols = sd.compute_strain_designs(model,sd_modules = modules)\n",
"for s in sols.reaction_sd:\n",
" print(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An adequate value for $\\varepsilon$ can inferred from the model, i.e., the coefficients of the stoichiometric matrix and the flux boundaries. In the shown example values of 1e-7 up to 50 will yield the same results. However, too small values may result in longer runtimes or numerical issues. While large values may not approximate the strict inequality well enough."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"## Example 8: Suppress and protect flux states in a toy network\n",
"\n",
"It may sometimes be required to protect certain flux states, for instance, to guarantee that the model stays feasible despite the deletion, or to guarantee that microbial growth is still possible despite the introduced where **R4** must be deleted and additionally demand that **R3** must still be able to carry flux."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:root:Preparing strain design computation.\n",
"INFO:root: Using random seed 47615\n",
"INFO:root: Using cplex for solving LPs during preprocessing.\n",
"INFO:root: FVA to identify blocked reactions and irreversibilities.\n",
"INFO:root: FVA(s) to identify essential reactions.\n",
"INFO:root:Compressing Network (10 reactions).\n",
"INFO:root: Removing blocked reactions.\n",
"INFO:root: Translating stoichiometric coefficients to rationals.\n",
"INFO:root: Removing conservation relations.\n",
"INFO:root: Compression 1: Applying compression from EFM-tool module.\n",
"INFO:root: Reduced to 8 reactions.\n",
"INFO:root: Compression 2: Lumping parallel reactions.\n",
"INFO:root: Last step could not reduce size further (8 reactions).\n",
"INFO:root: Network compression completed. (1 compression iterations)\n",
"INFO:root: Translating stoichiometric coefficients back to float.\n",
"INFO:root: FVA(s) in compressed model to identify essential reactions.\n",
"INFO:root:Finished preprocessing:\n",
"INFO:root: Model size: 8 reactions, 4 metabolites\n",
"INFO:root: 7 targetable reactions\n",
"INFO:root:Constructing strain design MILP for solver: cplex.\n",
"INFO:root: Bounding MILP.\n",
"INFO:root:Finding optimal strain designs ...\n",
"INFO:root:Strain design with cost 1.0: {'R4*R7*R10': -1}\n",
"INFO:root:Strain design with cost 1.0: {'R1': -1}\n",
"INFO:root:Strain design with cost 2.0: {'R6': -1, 'R8': -1}\n",
"INFO:root:Finished solving strain design MILP. \n",
"INFO:root:3 solutions to MILP found.\n",
"INFO:root: Decompressing.\n",
"INFO:root:5 solutions found.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'R1': -1.0}\n",
"{'R4': -1.0}\n",
"{'R7': -1.0}\n",
"{'R10': -1.0}\n",
"{'R6': -1.0, 'R8': -1.0}\n"
]
}
],
"source": [
"import straindesign as sd\n",
"import cobra\n",
"\n",
"model = cobra.io.read_sbml_model('../../../tests/model_small_example.xml')\n",
"\n",
"modules = [sd.SDModule(model,sd.SUPPRESS,constraints='R4 >= 1')]\n",
"modules += [sd.SDModule(model,sd.PROTECT, constraints='R3 >= 1')]\n",
"\n",
"sols = sd.compute_strain_designs(model,sd_modules = modules)\n",
"for s in sols.reaction_sd:\n",
" print(s)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As can be seen, the computation returns the 5 out of 7 MCS that block R4 but not R3. The set of theses *constrained* MCS (cMCS) is a subset of the former MCS solution pool.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Theoretical background\n",
"\n",
"In the simplest case, the Minimal Cut Set approach seeks to identify the smallest set of knockouts that render undesired flux states, such as flux states with poor productivity or yield, unattainable. In reference to the space of steady-state flux vectors: one introduces *knockouts that exclude a certain flux-subspace from the space of feasible flux states*. \n",
"\n",
"(Mixed integer) linear programming operates on *feasible* problem spaces and, *per se*, does not allow sub-problems to be infeasible. To express the infeasibility of a certain sub-problem, one needs to formulate an equivalent but \"mirrored\" problem whose feasibility under any conditions coincides with the infeasibility of the original problem. Farkas' Lemma is a theorem that will serve for exactly that purpose. It states that, to a system of linear inequalities, a second system of linear inequalities can be defined such that *one and only one* of the two problems is feasible. We call the original system the primary and secondary system the Farkas-dual. The feasibility of one problem is a *certificate for the infeasibility* of the other one.\n",
"\n",
"$$\n",
"\\begin{gathered}\n",
" \\text{Exactly one of the following is true:\\hspace{7em}} ~\\\\~\n",
" \\mathbf{A \\, x\\le b} \\qquad \\qquad \\text{or} \\qquad \\qquad \\mathbf{A^\\intercal y=0,\\quad y\\ge0, \\quad y^\\intercal b<}\\,0.\n",
"\\end{gathered}\n",
"$$\n",
"\n",
"Farkas-duality is closely related to Lagrange-duality in Linear Progamming and variables in one problem correspond to constraints in the other. When we introduce interventions (i.e., we force certain flux variables to take the value 0), we need to adapt the Farkas-dual that we use in the MCS-MILP accordingly. When a variable is more constrained in one problem (or fixed to zero), the other problem relaxes in the corresponding constraint (up to the complete lifting of the constraint).\n",
"\n",
"In the following we show how Farkas' Lemma can be used to construct the MCS-MILP. We start with the original MCS-system simplified as $\\mathbf{A_T\\cdot x=0\\le b_T}$ that is rendered infeasible through the introduction of knockouts as additional constraints. \n",
"\n",
"$$\n",
"\\begin{gathered}\n",
" \\begin{bmatrix}\n",
" \\mathbf{A_T} \\\\\n",
" \\mathbf{I_{KO}}\n",
" \\end{bmatrix} \n",
" \\mathbf{x} ~\n",
" \\begin{matrix}\n",
" \\le \\\\ =\n",
" \\end{matrix}\n",
" \\begin{bmatrix}\\mathbf{b_T} \\\\ \\mathbf{0}\\end{bmatrix}\\hskip -0.2em.\n",
"\\end{gathered}\n",
"$$\n",
"\n",
"The introduced permanent knockouts will later be controlled through binary decision variables. It must be noted that the constraints only render the primal system infeasible when they *contradict* the primal system. As was mentioned above, it is therefore not possible to use undesired systems that have the zero vector $\\mathbf{x=0}$ as a feasible solution because then even the knockout of all reactions would not make the primal system infeasible. \n",
"\n",
"Using Farkas-dualization, the dual system is given by:\n",
"\n",
"$$\n",
"\\begin{gathered}\n",
" \\begin{bmatrix}\n",
" \\mathbf{A_T^\\intercal} & \\mathbf{I_{KO}} \\\\\n",
" \\mathbf{b_T^\\intercal} & \\mathbf{0}\n",
" \\end{bmatrix} \n",
" \\begin{bmatrix}\n",
" \\mathbf{y} \\\\ \\mathbf{v}\n",
" \\end{bmatrix}\n",
" \\begin{matrix}\n",
" = \\\\ \\le\n",
" \\end{matrix}\n",
" \\begin{bmatrix}\\mathbf{0} \\\\ -1 \\end{bmatrix}\\\\\n",
" \\mathbf{y\\ge 0},\n",
"\\end{gathered}\n",
"$$\n",
"\n",
"which is, per definition, feasible. The single inequality in the last row corresponds to $\\mathbf{b^\\intercal y<}0$ of the Farkas-dual system. The latter needs to be replaced with $\\mathbf{b_T^\\intercal y\\le}-1$ because the system will later be used in a MILP that cannot handle strict inequalities. The replacement is allowed because any found solution of the Farkas-dual can be scaled to also fulfill $\\mathbf{b_T^\\intercal y\\le}-1$ without affecting the support of the solution (which makes up the MCS).\n",
"\n",
"As can be seen, the variable knockouts in the primal ($\\mathbf{I_{KO}\\, x=0}$) translate to the variables $\\mathbf{v}$ in the Farkas-dual system that mime the knockout of all dual constraints by allowing for arbitrary large slack. This system can now be used to identify MCS, since a minimal subset of constraint relaxations (indicated by $v_i\\ne 0$) that solves the Farkas-dual system corresponds directly to a minimal subset of primal knockout-constraints within $\\mathbf{I_{KO}\\, x=0}$ that keeps the primal system infeasible. Hence, every solution of the problem with a support-minimal vector $\\mathbf{v}$ represents one MCS.\n",
"\n",
"A constraint can be switched on or off by controlling its slack variable $v_i$ by a corresponding binary variable $z_i$ either via indicator constraints, \n",
"$$\n",
"\tz_i = 0 \\rightarrow v_i = 0,\n",
"$$\n",
"\n",
"or with the big-M method (with M being a sufficiently large number) \n",
"\n",
"$$\n",
"\t-M\\cdot z_i \\le v_i \\le M\\cdot z_i.\n",
"$$\n",
"\n",
"In this case, there is a 1:1 association of metabolic knockouts, indicated by $z_i$ and slack variables $v_i$. With the binary variables $z_i$ at hand, we may now finally pose a MILP problem with an objective function that minimizes the number of interventions to block the target system (we use here the version with indicator constraints): \n",
"$$\n",
"\\begin{array}{l c}\n",
"\t\\text{minimize} \\; & \\sum z_i \\\\\n",
"\t\\text{subject to} &\n",
"\t\\begin{gathered}\n",
"\t\t\\begin{bmatrix}\n",
"\t\t\t\\mathbf{A_T^\\intercal} & \\mathbf{I_{KO}} \\\\\n",
"\t\t\t\\mathbf{b_T^\\intercal} & \\mathbf{0}\n",
"\t\t\\end{bmatrix} \n",
"\t\t\\begin{bmatrix}\n",
"\t\t\t\\mathbf{y} \\\\ \\mathbf{v}\n",
"\t\t\\end{bmatrix}\n",
"\t\t\\begin{matrix}\n",
"\t\t\t= \\\\ \\le\n",
"\t\t\\end{matrix}\n",
"\t\t\\begin{bmatrix}\\mathbf{0} \\\\ -1 \\end{bmatrix}\\\\\n",
"\t\t\\forall i: z_i = 0 \\rightarrow v_i = 0 \\\\\n",
"\t\t\\mathbf{y\\ge 0}, \\, \\hskip 1em z_i \\in \\{0,1\\}.\n",
"\t\\end{gathered} \n",
"\\end{array}\n",
"$$\n",
"\n",
"This MILP finds the smallest irreducible set of interventions (support-minimal in $\\mathbf{v}$) that blocks the target system, hence an MCS with the smallest possible cardinality.\n",
"\n",
"We note that an even more concise formulation can be constructed by omitting the slack-variables $v_i$ and linking the removal of constraints directly to $z_i$:\n",
"\n",
"$$\n",
"\t\\begin{array}{l c}\n",
"\t\t\\text{minimize} \\; & \\sum z_i \\\\\n",
"\t\t\\text{subject to} &\n",
"\t\t\\begin{gathered}[t]\n",
"\t\t\t\\begin{bmatrix}\n",
"\t\t\t\t\\mathbf{b_T^\\intercal} & \\mathbf{0} \\\\\n",
"\t\t\t\t\\mathbf{0} \t\t\t & \\mathbf{A_D} \n",
"\t\t\t\\end{bmatrix} \n",
"\t\t\t\\begin{bmatrix}\n",
"\t\t\t\t\\mathbf{y} \\\\ \\mathbf{x}\n",
"\t\t\t\\end{bmatrix}\n",
"\t\t\t\\begin{matrix}\n",
"\t\t\t\t\\le \\\\ \\le\n",
"\t\t\t\\end{matrix}\n",
"\t\t\t\\begin{bmatrix} -1 \\\\ \\mathbf{b_D} \\end{bmatrix}\\\\\n",
"\t\t\t\\forall i: z_i = 0 \\rightarrow \\mathbf{A_{T\\mathnormal{,i}}^\\intercal y} = 0 \\\\\n",
"\t\t\t\\forall i: z_i = 1 \\rightarrow x_i = 0 \\\\\n",
"\t\t\t\\mathbf{y\\ge 0}, \\, \\hskip 1em z_i \\in \\{0,1\\}.\n",
"\t\t\\end{gathered} \n",
"\t\\end{array}\n",
"$$\n",
"\n",
"The MCS $S$ (containing the indices of the knocked-out reactions), computed by the MILP, is given by $S=\\{i|z_i=1\\}$. Multiple MCS solutions (with increasing cardinality) can be found by excluding previously found solutions and their supersets through integer cut constraints and solving the MILP repeatedly."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "cnapy-1.2.4",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.18"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}