StrainDesign
A COBRApy[1]-based package for computational design of metabolic networks
The comprehensive StrainDesign package for MILP-based strain design computation with the COBRApy toolbox supports MCS, MCS with nested optimization, OptKnock [2], RobustKnock [3] and OptCouple [4], GPR-rule integration, gene and reaction knockouts and additions as well as regulatory interventions. The automatic lossless network and GPR compression allows strain design computations from genome-scale metabolic networks. Supported solvers are GLPK (available from COBRApy), CPLEX, Gurobi and SCIP [5].
Download Jupyter notebook examples ...
The default compression uses a pure Python sparse RREF implementation. A legacy Java-based compression via EFMTool [6] is optionally available (see Legacy Methods). Note that the Java backend (via JPype) is known to conflict with CPLEX’s native library when both are loaded in the same Python session. If you use CPLEX, we recommend the default Python compression backend.
Installation:
The StrainDesign package is available on pip and Anaconda. To install the latest release, run:
pip install straindesign
or
conda install -c cnapy straindesign
Developer Installation:
Download the repository and run
pip install -e .
in the main folder. Through the installation with -e, updates from a ‘git pull’ are at once available in your Python environment without the need for a reinstallation.
Apple Silicon (ARM64) note:
On macOS with Apple Silicon (M1/M2/M3), the default GLPK solver (shipped with COBRApy) may produce inaccurate results for larger metabolic models due to numerical precision differences on the ARM64 architecture. If you encounter unexpected infeasibility or incorrect flux values, we recommend installing an alternative solver:
Gurobi (free academic license):
pip install gurobipySCIP (open source):
pip install pyscipopt
Then specify the solver explicitly when calling StrainDesign functions, e.g.
sd_setup = {..., 'solver': 'gurobi'} or sd_setup = {..., 'solver': 'scip'}.
For standalone analysis functions: fba(model, solver='gurobi') or fva(model, solver='scip').
Examples:
Computation examples are provided in the different chapters of this documentation. The original Jupyer notebook files are located in the StrainDesign package at docs/source/examples.
How to cite:
Schneider P., Bekiaris P. S., von Kamp A., Klamt S. - StrainDesign: a comprehensive Python package for computational design of metabolic networks. Bioinformatics, btac632 (2022)
Contents:
- Solvers
- Network Analysis
- Plotting the flux space
- Computational strain design: Growth-coupled production (GCP)
- Minimal Cut Sets (MCS)
- Prerequisites
- Example 1: Strain designs with a minimum product (1,4-butanediol) yield (SUCP strain design)
- Example 2: Enforce product (1,4-BDO) synthesis at all growth states (dGCP strain design)
- Example 3: Suppress flux states that are optimal with respect to a pre-defined objective function (wGCP strain design)
- Example 4: Protect flux states that are optimal with respect to a pre-defined objective function (pGCP strain design)
- Example 5: All single gene knockouts that prohibit growth (synthetic lethals).
- Example 6: Genome-scale strain designs with a minimum product (1,4-butanediol) yield (SUCP strain design)
- Example 7: Suppress flux states in a toy network
- Example 8: Suppress and protect flux states in a toy network
- Theoretical background
- Multi-level strain optimization approaches
- Standalone network compression
- CNApy interface
- StrainDesign API
- straindesign
- Submodules
- straindesign.compression
- straindesign.compute_strain_designs
- straindesign.cplex_interface
- straindesign.efmtool_cmp_interface
- straindesign.glpk_interface
- straindesign.gurobi_interface
- straindesign.indicatorConstraints
- straindesign.lptools
- straindesign.names
- straindesign.networktools
- straindesign.parse_constr
- straindesign.pool
- straindesign.scip_interface
- straindesign.solver_interface
- straindesign.speedy_fva
- straindesign.strainDesignMILP
- straindesign.strainDesignModule
- straindesign.strainDesignProblem
- straindesign.strainDesignSolutions
- Package Contents
- Submodules
- straindesign
- Legacy Methods
- StrainDesign Developer’s Guide
- Table of Contents
- 1. Architecture Overview
- 2. Repository Structure
- 3. Public API & Entry Points
- 4. Preprocessing Pipeline
- 5. MILP Construction
- 5.1 Overview & z-map Matrices
- 5.2 Primal LP from COBRApy Model
- 5.3 SUPPRESS Module — Farkas’ Lemma Dual
- 5.4 PROTECT Module
- 5.5 OPTKNOCK — LP Duality for Bilevel Optimization
- 5.6 ROBUSTKNOCK — Three-Level Duality
- 5.7 OPTCOUPLE — Growth Coupling Potential
- 5.8 Linking Binary Variables:
link_z - 5.9 Big-M Bounding
- 5.10 Indicator Constraints vs. Big-M
- 6. Solver Backends
- 7. Computation Approaches — SDMILP
- 8. Post-processing & Result Container
- 9. Constraint & Expression Parsing
- 10. Supporting Utilities
- 11. Known Issues, Urgent Actions & Future Work
- 12. MILP Performance Notes
- 13. Testing
- Quick Reference: Data Flow Through Key Functions
References:
[1] Ebrahim, A., Lerman, J.A., Palsson, B.O. et al. - COBRApy: COnstraints-Based Reconstruction and Analysis for Python. BMC Syst Biol 7, 74 (2013)
[2] Burgard, A. P., Pharkya, P., & Maranas, C. D. - Optknock: a bilevel programming framework for identifying gene knockout strategies for microbial strain optimization. Biotechnology and bioengineering, 84(6), 647–657 (2003)
[3] Tepper N., Shlomi T. - Predicting metabolic engineering knockout strategies for chemical production: accounting for competing pathways, Bioinformatics. Volume 26, Issue 4, Pages 536–543 (2010)
[4] Jensen K., Broeken V., Lærke Hansen A.S., et al. - OptCouple: Joint simulation of gene knockouts, insertions and medium modifications for prediction of growth-coupled strain designs. Metabolic Engineering Communications, Volume 8 (2019)
[5] Bestuzheva K., Besançon M., Chen W.K. et al. - The SCIP Optimization Suite 8.0. Available at Optimization Online and as ZIB-Report 21-41, (2021)
[6] Marco Terzer, Jörg Stelling, Large-scale computation of elementary flux modes with bit pattern trees, Bioinformatics, Volume 24, Issue 19, (2008), Pages 2229–2235,
