{ "cells": [ { "cell_type": "markdown", "id": "f2d7b3c9", "metadata": {}, "source": [ "# Sparse FBA" ] }, { "cell_type": "code", "execution_count": 1, "id": "a6747aa4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Set parameter Username\n", "Academic license - for non-commercial use only - expires 2024-11-12\n" ] }, { "data": { "text/plain": [ "(72, 95)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cobra.io import load_model\n", "\n", "model = load_model(\"textbook\")\n", "len(model.metabolites), len(model.reactions)" ] }, { "cell_type": "code", "execution_count": 2, "id": "a1684e94", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", " \n", "
Installed version:v0.9.2-beta.1 (latest: v0.9.1-alpha.6)
Available backends:CVXPY v1.4.1, PICOS v2.4.17
Default backend (corneto.K):CVXPY
Installed solvers:CBC, CLARABEL, COPT, CPLEX, CVXOPT, DIFFCP, ECOS, ECOS_BB, GLPK, GLPK_MI, GUROBI, MOSEK, OSQP, PROXQP, SCIP, SCIPY, SCS
Graphviz version:v0.20.1
Repository:https://github.com/saezlab/corneto
\n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import corneto as cn\n", "\n", "cn.info()" ] }, { "cell_type": "markdown", "id": "d5189703", "metadata": {}, "source": [ "## Manual implementation of sparse FBA" ] }, { "cell_type": "code", "execution_count": 3, "id": "7454c898", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'_flow': Variable((95,), _flow), 'flow': Variable((95,), _flow)}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from corneto.methods.metabolism.fba import fba_problem\n", "\n", "G = cn.Graph.from_cobra_model(model)\n", "P = fba_problem(G)\n", "P.expr" ] }, { "cell_type": "code", "execution_count": 4, "id": "e0b2542a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8739215069684304\n" ] } ], "source": [ "rid = list(G.get_edges_by_attr(\"id\", \"Biomass_Ecoli_core\"))[0]\n", "biomass = P.expr.flow[rid]\n", "P.add_objectives(biomass, weights=-1)\n", "P.solve()\n", "print(biomass.value)" ] }, { "cell_type": "code", "execution_count": 6, "id": "5aa68f5a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.5" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Add custom constraints to the problem\n", "P += biomass <= 0.5\n", "P.solve(solver=\"SCIPY\")\n", "biomass.value" ] }, { "cell_type": "code", "execution_count": 5, "id": "98608b05", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Warning: node 'acald_c', graph '%3' size too small for label\n", "Warning: node 'accoa_c', graph '%3' size too small for label\n", "Warning: node 'nadh_c', graph '%3' size too small for label\n", "Warning: node 'acald_e', graph '%3' size too small for label\n", "Warning: node 'acon_C_c', graph '%3' size too small for label\n", "Warning: node 'amp_c', graph '%3' size too small for label\n", "Warning: node 'succoa_c', graph '%3' size too small for label\n", "Warning: node 'etoh_c', graph '%3' size too small for label\n", "Warning: node 'nadph_c', graph '%3' size too small for label\n", "Warning: node 'glu__L_c', graph '%3' size too small for label\n", "Warning: node 'gln__L_c', graph '%3' size too small for label\n", "Warning: node 'nadp_c', graph '%3' size too small for label\n", "Warning: node 'q8h2_c', graph '%3' size too small for label\n", "Warning: node 'lac__D_e', graph '%3' size too small for label\n", "Warning: node 'lac__D_c', graph '%3' size too small for label\n", "Warning: node 'etoh_e', graph '%3' size too small for label\n", "Warning: node 'glc__D_e', graph '%3' size too small for label\n", "Warning: node 'gln__L_e', graph '%3' size too small for label\n", "Warning: node 'glu__L_e', graph '%3' size too small for label\n", "Warning: node 'mal__L_e', graph '%3' size too small for label\n", "Warning: node 'succ_e', graph '%3' size too small for label\n", "Warning: node 'dhap_c', graph '%3' size too small for label\n", "Warning: node 'succ_c', graph '%3' size too small for label\n", "Warning: node 'mal__L_c', graph '%3' size too small for label\n", "Warning: node '6pgl_c', graph '%3' size too small for label\n", "Warning: node '13dpg_c', graph '%3' size too small for label\n", "Warning: node '6pgc_c', graph '%3' size too small for label\n", "Warning: node 'ru5p__D_c', graph '%3' size too small for label\n", "Warning: node 'xu5p__D_c', graph '%3' size too small for label\n" ] }, { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "coa_c\n", "\n", "coa_c\n", "\n", "\n", "\n", "e_0_center\n", "\n", "\n", "\n", "\n", "coa_c->e_0_center\n", "\n", "\n", "\n", "\n", "\n", "e_7_center\n", "\n", "\n", "\n", "\n", "coa_c->e_7_center\n", "\n", "\n", "\n", "\n", "\n", "e_70_center\n", "\n", "\n", "\n", "\n", "coa_c->e_70_center\n", "\n", "\n", "\n", "\n", "\n", "e_72_center\n", "\n", "\n", "\n", "\n", "coa_c->e_72_center\n", "\n", "\n", "\n", "\n", "\n", "e_89_center\n", "\n", "\n", "\n", "\n", "coa_c->e_89_center\n", "\n", "\n", "\n", "\n", "\n", "nad_c\n", "\n", "nad_c\n", "\n", "\n", "\n", "nad_c->e_0_center\n", "\n", "\n", "\n", "\n", "\n", "nad_c->e_7_center\n", "\n", "\n", "\n", "\n", "\n", "e_9_center\n", "\n", "\n", "\n", "\n", "nad_c->e_9_center\n", "\n", "\n", "\n", "\n", "\n", "e_12_center\n", "\n", "\n", "\n", "\n", "nad_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_48_center\n", "\n", "\n", "\n", "\n", "nad_c->e_48_center\n", "\n", "\n", "\n", "\n", "\n", "e_60_center\n", "\n", "\n", "\n", "\n", "nad_c->e_60_center\n", "\n", "\n", "\n", "\n", "\n", "e_63_center\n", "\n", "\n", "\n", "\n", "nad_c->e_63_center\n", "\n", "\n", "\n", "\n", "\n", "e_64_center\n", "\n", "\n", "\n", "\n", "nad_c->e_64_center\n", "\n", "\n", "\n", "\n", "\n", "e_67_center\n", "\n", "\n", "\n", "\n", "nad_c->e_67_center\n", "\n", "\n", "\n", "\n", "\n", "nad_c->e_70_center\n", "\n", "\n", "\n", "\n", "\n", "acald_c\n", "\n", "acald_c\n", "\n", "\n", "\n", "acald_c->e_0_center\n", "\n", "\n", "\n", "\n", "\n", "h_c\n", "\n", "h_c\n", "\n", "\n", "\n", "e_15_center\n", "\n", "\n", "\n", "\n", "h_c->e_15_center\n", "\n", "\n", "\n", "\n", "\n", "e_54_center\n", "\n", "\n", "\n", "\n", "h_c->e_54_center\n", "\n", "\n", "\n", "\n", "\n", "e_66_center\n", "\n", "\n", "\n", "\n", "h_c->e_66_center\n", "\n", "\n", "\n", "\n", "\n", "e_82_center\n", "\n", "\n", "\n", "\n", "h_c->e_82_center\n", "\n", "\n", "\n", "\n", "\n", "accoa_c\n", "\n", "accoa_c\n", "\n", "\n", "\n", "accoa_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_14_center\n", "\n", "\n", "\n", "\n", "accoa_c->e_14_center\n", "\n", "\n", "\n", "\n", "\n", "e_61_center\n", "\n", "\n", "\n", "\n", "accoa_c->e_61_center\n", "\n", "\n", "\n", "\n", "\n", "e_81_center\n", "\n", "\n", "\n", "\n", "accoa_c->e_81_center\n", "\n", "\n", "\n", "\n", "\n", "nadh_c\n", "\n", "nadh_c\n", "\n", "\n", "\n", "nadh_c->e_66_center\n", "\n", "\n", "\n", "\n", "\n", "e_91_center\n", "\n", "\n", "\n", "\n", "nadh_c->e_91_center\n", "\n", "\n", "\n", "\n", "\n", "e_0_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_0_center->accoa_c\n", "\n", "\n", "\n", "\n", "\n", "e_0_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "acald_e\n", "\n", "acald_e\n", "\n", "\n", "\n", "acald_e->acald_c\n", "\n", "\n", "\n", "\n", "\n", "e_20_target\n", "\n", "\n", "\n", "\n", "acald_e->e_20_target\n", "\n", "\n", "\n", "\n", "\n", "ac_c\n", "\n", "ac_c\n", "\n", "\n", "\n", "e_2_center\n", "\n", "\n", "\n", "\n", "ac_c->e_2_center\n", "\n", "\n", "\n", "\n", "\n", "atp_c\n", "\n", "atp_c\n", "\n", "\n", "\n", "atp_c->e_2_center\n", "\n", "\n", "\n", "\n", "\n", "e_6_center\n", "\n", "\n", "\n", "\n", "atp_c->e_6_center\n", "\n", "\n", "\n", "\n", "\n", "e_10_center\n", "\n", "\n", "\n", "\n", "atp_c->e_10_center\n", "\n", "\n", "\n", "\n", "\n", "atp_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_50_center\n", "\n", "\n", "\n", "\n", "atp_c->e_50_center\n", "\n", "\n", "\n", "\n", "\n", "e_51_center\n", "\n", "\n", "\n", "\n", "atp_c->e_51_center\n", "\n", "\n", "\n", "\n", "\n", "e_71_center\n", "\n", "\n", "\n", "\n", "atp_c->e_71_center\n", "\n", "\n", "\n", "\n", "\n", "e_74_center\n", "\n", "\n", "\n", "\n", "atp_c->e_74_center\n", "\n", "\n", "\n", "\n", "\n", "e_79_center\n", "\n", "\n", "\n", "\n", "atp_c->e_79_center\n", "\n", "\n", "\n", "\n", "\n", "e_80_center\n", "\n", "\n", "\n", "\n", "atp_c->e_80_center\n", "\n", "\n", "\n", "\n", "\n", "atp_c->e_89_center\n", "\n", "\n", "\n", "\n", "\n", "adp_c\n", "\n", "adp_c\n", "\n", "\n", "\n", "e_11_center\n", "\n", "\n", "\n", "\n", "adp_c->e_11_center\n", "\n", "\n", "\n", "\n", "\n", "adp_c->e_82_center\n", "\n", "\n", "\n", "\n", "\n", "actp_c\n", "\n", "actp_c\n", "\n", "\n", "\n", "e_2_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_2_center->actp_c\n", "\n", "\n", "\n", "\n", "\n", "cit_c\n", "\n", "cit_c\n", "\n", "\n", "\n", "e_3_center\n", "\n", "\n", "\n", "\n", "cit_c->e_3_center\n", "\n", "\n", "\n", "\n", "\n", "acon_C_c\n", "\n", "acon_C_c\n", "\n", "\n", "\n", "e_4_center\n", "\n", "\n", "\n", "\n", "acon_C_c->e_4_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c\n", "\n", "h2o_c\n", "\n", "\n", "\n", "h2o_c->e_4_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_10_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_14_center\n", "\n", "\n", "\n", "\n", "\n", "e_40_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_40_center\n", "\n", "\n", "\n", "\n", "\n", "e_45_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_45_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_51_center\n", "\n", "\n", "\n", "\n", "\n", "e_52_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_52_center\n", "\n", "\n", "\n", "\n", "\n", "e_53_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_53_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_61_center\n", "\n", "\n", "\n", "\n", "\n", "e_75_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_75_center\n", "\n", "\n", "\n", "\n", "\n", "e_78_center\n", "\n", "\n", "\n", "\n", "h2o_c->e_78_center\n", "\n", "\n", "\n", "\n", "\n", "h2o_c->e_80_center\n", "\n", "\n", "\n", "\n", "\n", "e_3_center->acon_C_c\n", "\n", "\n", "\n", "\n", "\n", "e_3_center->h2o_c\n", "\n", "\n", "\n", "\n", "\n", "icit_c\n", "\n", "icit_c\n", "\n", "\n", "\n", "e_58_center\n", "\n", "\n", "\n", "\n", "icit_c->e_58_center\n", "\n", "\n", "\n", "\n", "\n", "e_59_center\n", "\n", "\n", "\n", "\n", "icit_c->e_59_center\n", "\n", "\n", "\n", "\n", "\n", "e_4_center->icit_c\n", "\n", "\n", "\n", "\n", "\n", "h_e\n", "\n", "h_e\n", "\n", "\n", "\n", "e_5_center\n", "\n", "\n", "\n", "\n", "h_e->e_5_center\n", "\n", "\n", "\n", "\n", "\n", "e_8_center\n", "\n", "\n", "\n", "\n", "h_e->e_8_center\n", "\n", "\n", "\n", "\n", "\n", "h_e->e_11_center\n", "\n", "\n", "\n", "\n", "\n", "e_16_center\n", "\n", "\n", "\n", "\n", "h_e->e_16_center\n", "\n", "\n", "\n", "\n", "\n", "e_18_center\n", "\n", "\n", "\n", "\n", "h_e->e_18_center\n", "\n", "\n", "\n", "\n", "\n", "e_30_target\n", "\n", "\n", "\n", "\n", "h_e->e_30_target\n", "\n", "\n", "\n", "\n", "\n", "e_41_center\n", "\n", "\n", "\n", "\n", "h_e->e_41_center\n", "\n", "\n", "\n", "\n", "\n", "e_46_center\n", "\n", "\n", "\n", "\n", "h_e->e_46_center\n", "\n", "\n", "\n", "\n", "\n", "e_55_center\n", "\n", "\n", "\n", "\n", "h_e->e_55_center\n", "\n", "\n", "\n", "\n", "\n", "e_62_center\n", "\n", "\n", "\n", "\n", "h_e->e_62_center\n", "\n", "\n", "\n", "\n", "\n", "e_77_center\n", "\n", "\n", "\n", "\n", "h_e->e_77_center\n", "\n", "\n", "\n", "\n", "\n", "e_83_center\n", "\n", "\n", "\n", "\n", "h_e->e_83_center\n", "\n", "\n", "\n", "\n", "\n", "e_86_center\n", "\n", "\n", "\n", "\n", "h_e->e_86_center\n", "\n", "\n", "\n", "\n", "\n", "e_87_center\n", "\n", "\n", "\n", "\n", "h_e->e_87_center\n", "\n", "\n", "\n", "\n", "\n", "h_e->e_91_center\n", "\n", "\n", "\n", "\n", "\n", "ac_e\n", "\n", "ac_e\n", "\n", "\n", "\n", "ac_e->e_5_center\n", "\n", "\n", "\n", "\n", "\n", "e_19_target\n", "\n", "\n", "\n", "\n", "ac_e->e_19_target\n", "\n", "\n", "\n", "\n", "\n", "e_5_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_5_center->ac_c\n", "\n", "\n", "\n", "\n", "\n", "amp_c\n", "\n", "amp_c\n", "\n", "\n", "\n", "amp_c->e_6_center\n", "\n", "\n", "\n", "\n", "\n", "e_6_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "akg_c\n", "\n", "akg_c\n", "\n", "\n", "\n", "akg_c->e_7_center\n", "\n", "\n", "\n", "\n", "\n", "akg_c->e_54_center\n", "\n", "\n", "\n", "\n", "\n", "succoa_c\n", "\n", "succoa_c\n", "\n", "\n", "\n", "co2_c\n", "\n", "co2_c\n", "\n", "\n", "\n", "co2_c->e_78_center\n", "\n", "\n", "\n", "\n", "\n", "e_7_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_7_center->succoa_c\n", "\n", "\n", "\n", "\n", "\n", "e_7_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "akg_e\n", "\n", "akg_e\n", "\n", "\n", "\n", "akg_e->e_8_center\n", "\n", "\n", "\n", "\n", "\n", "e_21_target\n", "\n", "\n", "\n", "\n", "akg_e->e_21_target\n", "\n", "\n", "\n", "\n", "\n", "e_8_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_8_center->akg_c\n", "\n", "\n", "\n", "\n", "\n", "etoh_c\n", "\n", "etoh_c\n", "\n", "\n", "\n", "etoh_c->e_9_center\n", "\n", "\n", "\n", "\n", "\n", "e_9_center->acald_c\n", "\n", "\n", "\n", "\n", "\n", "e_9_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_9_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "pi_c\n", "\n", "pi_c\n", "\n", "\n", "\n", "pi_c->e_11_center\n", "\n", "\n", "\n", "\n", "\n", "pi_c->e_48_center\n", "\n", "\n", "\n", "\n", "\n", "pi_c->e_81_center\n", "\n", "\n", "\n", "\n", "\n", "e_10_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_10_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_10_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_11_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_11_center->atp_c\n", "\n", "\n", "\n", "\n", "\n", "e_11_center->h2o_c\n", "\n", "\n", "\n", "\n", "\n", "pyr_c\n", "\n", "pyr_c\n", "\n", "\n", "\n", "pyr_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "pyr_c->e_70_center\n", "\n", "\n", "\n", "\n", "\n", "pyr_c->e_72_center\n", "\n", "\n", "\n", "\n", "\n", "pyr_c->e_80_center\n", "\n", "\n", "\n", "\n", "\n", "g6p_c\n", "\n", "g6p_c\n", "\n", "\n", "\n", "f6p_c\n", "\n", "f6p_c\n", "\n", "\n", "\n", "g6p_c->f6p_c\n", "\n", "\n", "\n", "\n", "\n", "g6p_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_47_center\n", "\n", "\n", "\n", "\n", "g6p_c->e_47_center\n", "\n", "\n", "\n", "\n", "\n", "nadph_c\n", "\n", "nadph_c\n", "\n", "\n", "\n", "nadph_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "nadph_c->e_54_center\n", "\n", "\n", "\n", "\n", "\n", "nadph_c->e_67_center\n", "\n", "\n", "\n", "\n", "\n", "pep_c\n", "\n", "pep_c\n", "\n", "\n", "\n", "pep_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_44_center\n", "\n", "\n", "\n", "\n", "pep_c->e_44_center\n", "\n", "\n", "\n", "\n", "\n", "e_49_center\n", "\n", "\n", "\n", "\n", "pep_c->e_49_center\n", "\n", "\n", "\n", "\n", "\n", "pep_c->e_78_center\n", "\n", "\n", "\n", "\n", "\n", "pep_c->e_82_center\n", "\n", "\n", "\n", "\n", "\n", "oaa_c\n", "\n", "oaa_c\n", "\n", "\n", "\n", "oaa_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "oaa_c->e_14_center\n", "\n", "\n", "\n", "\n", "\n", "oaa_c->e_79_center\n", "\n", "\n", "\n", "\n", "\n", "f6p_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "f6p_c->e_71_center\n", "\n", "\n", "\n", "\n", "\n", "glu__L_c\n", "\n", "glu__L_c\n", "\n", "\n", "\n", "glu__L_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "glu__L_c->e_50_center\n", "\n", "\n", "\n", "\n", "\n", "glu__L_c->e_52_center\n", "\n", "\n", "\n", "\n", "\n", "e4p_c\n", "\n", "e4p_c\n", "\n", "\n", "\n", "e4p_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "e_93_center\n", "\n", "\n", "\n", "\n", "e4p_c->e_93_center\n", "\n", "\n", "\n", "\n", "\n", "g3p_c\n", "\n", "g3p_c\n", "\n", "\n", "\n", "g3p_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "g3p_c->e_48_center\n", "\n", "\n", "\n", "\n", "\n", "e_90_center\n", "\n", "\n", "\n", "\n", "g3p_c->e_90_center\n", "\n", "\n", "\n", "\n", "\n", "3pg_c\n", "\n", "3pg_c\n", "\n", "\n", "\n", "3pg_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "3pg_c->e_74_center\n", "\n", "\n", "\n", "\n", "\n", "r5p_c\n", "\n", "r5p_c\n", "\n", "\n", "\n", "r5p_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "ru5p__D_c\n", "\n", "ru5p__D_c\n", "\n", "\n", "\n", "r5p_c->ru5p__D_c\n", "\n", "\n", "\n", "\n", "\n", "e_92_center\n", "\n", "\n", "\n", "\n", "r5p_c->e_92_center\n", "\n", "\n", "\n", "\n", "\n", "gln__L_c\n", "\n", "gln__L_c\n", "\n", "\n", "\n", "gln__L_c->e_12_center\n", "\n", "\n", "\n", "\n", "\n", "gln__L_c->e_53_center\n", "\n", "\n", "\n", "\n", "\n", "gln__L_c->e_54_center\n", "\n", "\n", "\n", "\n", "\n", "nadp_c\n", "\n", "nadp_c\n", "\n", "\n", "\n", "nadp_c->e_47_center\n", "\n", "\n", "\n", "\n", "\n", "nadp_c->e_52_center\n", "\n", "\n", "\n", "\n", "\n", "e_56_center\n", "\n", "\n", "\n", "\n", "nadp_c->e_56_center\n", "\n", "\n", "\n", "\n", "\n", "nadp_c->e_58_center\n", "\n", "\n", "\n", "\n", "\n", "e_65_center\n", "\n", "\n", "\n", "\n", "nadp_c->e_65_center\n", "\n", "\n", "\n", "\n", "\n", "nadp_c->e_91_center\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->coa_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->akg_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_12_center->nadp_c\n", "\n", "\n", "\n", "\n", "\n", "co2_e\n", "\n", "co2_e\n", "\n", "\n", "\n", "co2_e->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_22_target\n", "\n", "\n", "\n", "\n", "co2_e->e_22_target\n", "\n", "\n", "\n", "\n", "\n", "e_14_center->coa_c\n", "\n", "\n", "\n", "\n", "\n", "e_14_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_14_center->cit_c\n", "\n", "\n", "\n", "\n", "\n", "q8h2_c\n", "\n", "q8h2_c\n", "\n", "\n", "\n", "q8h2_c->e_15_center\n", "\n", "\n", "\n", "\n", "\n", "e_43_center\n", "\n", "\n", "\n", "\n", "q8h2_c->e_43_center\n", "\n", "\n", "\n", "\n", "\n", "o2_c\n", "\n", "o2_c\n", "\n", "\n", "\n", "o2_c->e_15_center\n", "\n", "\n", "\n", "\n", "\n", "q8_c\n", "\n", "q8_c\n", "\n", "\n", "\n", "q8_c->e_66_center\n", "\n", "\n", "\n", "\n", "\n", "e_88_center\n", "\n", "\n", "\n", "\n", "q8_c->e_88_center\n", "\n", "\n", "\n", "\n", "\n", "e_15_center->h2o_c\n", "\n", "\n", "\n", "\n", "\n", "e_15_center->h_e\n", "\n", "\n", "\n", "\n", "\n", "e_15_center->q8_c\n", "\n", "\n", "\n", "\n", "\n", "lac__D_e\n", "\n", "lac__D_e\n", "\n", "\n", "\n", "lac__D_e->e_16_center\n", "\n", "\n", "\n", "\n", "\n", "e_32_target\n", "\n", "\n", "\n", "\n", "lac__D_e->e_32_target\n", "\n", "\n", "\n", "\n", "\n", "lac__D_c\n", "\n", "lac__D_c\n", "\n", "\n", "\n", "lac__D_c->e_60_center\n", "\n", "\n", "\n", "\n", "\n", "e_16_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_16_center->lac__D_c\n", "\n", "\n", "\n", "\n", "\n", "2pg_c\n", "\n", "2pg_c\n", "\n", "\n", "\n", "2pg_c->3pg_c\n", "\n", "\n", "\n", "\n", "\n", "e_17_center\n", "\n", "\n", "\n", "\n", "2pg_c->e_17_center\n", "\n", "\n", "\n", "\n", "\n", "e_17_center->h2o_c\n", "\n", "\n", "\n", "\n", "\n", "e_17_center->pep_c\n", "\n", "\n", "\n", "\n", "\n", "etoh_e\n", "\n", "etoh_e\n", "\n", "\n", "\n", "etoh_e->e_18_center\n", "\n", "\n", "\n", "\n", "\n", "e_23_target\n", "\n", "\n", "\n", "\n", "etoh_e->e_23_target\n", "\n", "\n", "\n", "\n", "\n", "e_18_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_18_center->etoh_c\n", "\n", "\n", "\n", "\n", "\n", "e_24_target\n", "\n", "\n", "\n", "\n", "for_e\n", "\n", "for_e\n", "\n", "\n", "\n", "for_e->e_24_target\n", "\n", "\n", "\n", "\n", "\n", "for_e->e_41_center\n", "\n", "\n", "\n", "\n", "\n", "e_25_target\n", "\n", "\n", "\n", "\n", "fru_e\n", "\n", "fru_e\n", "\n", "\n", "\n", "fru_e->e_25_target\n", "\n", "\n", "\n", "\n", "\n", "fru_e->e_44_center\n", "\n", "\n", "\n", "\n", "\n", "e_26_target\n", "\n", "\n", "\n", "\n", "fum_e\n", "\n", "fum_e\n", "\n", "\n", "\n", "fum_e->e_26_target\n", "\n", "\n", "\n", "\n", "\n", "fum_e->e_46_center\n", "\n", "\n", "\n", "\n", "\n", "e_27_target\n", "\n", "\n", "\n", "\n", "glc__D_e\n", "\n", "glc__D_e\n", "\n", "\n", "\n", "glc__D_e->e_27_target\n", "\n", "\n", "\n", "\n", "\n", "glc__D_e->e_49_center\n", "\n", "\n", "\n", "\n", "\n", "e_28_target\n", "\n", "\n", "\n", "\n", "gln__L_e\n", "\n", "gln__L_e\n", "\n", "\n", "\n", "gln__L_e->e_28_target\n", "\n", "\n", "\n", "\n", "\n", "gln__L_e->e_51_center\n", "\n", "\n", "\n", "\n", "\n", "e_29_target\n", "\n", "\n", "\n", "\n", "glu__L_e\n", "\n", "glu__L_e\n", "\n", "\n", "\n", "glu__L_e->e_29_target\n", "\n", "\n", "\n", "\n", "\n", "glu__L_e->e_55_center\n", "\n", "\n", "\n", "\n", "\n", "e_31_target\n", "\n", "\n", "\n", "\n", "h2o_e\n", "\n", "h2o_e\n", "\n", "\n", "\n", "h2o_e->h2o_c\n", "\n", "\n", "\n", "\n", "\n", "h2o_e->e_31_target\n", "\n", "\n", "\n", "\n", "\n", "e_33_target\n", "\n", "\n", "\n", "\n", "mal__L_e\n", "\n", "mal__L_e\n", "\n", "\n", "\n", "mal__L_e->e_33_target\n", "\n", "\n", "\n", "\n", "\n", "mal__L_e->e_62_center\n", "\n", "\n", "\n", "\n", "\n", "e_34_target\n", "\n", "\n", "\n", "\n", "nh4_e\n", "\n", "nh4_e\n", "\n", "\n", "\n", "nh4_e->e_34_target\n", "\n", "\n", "\n", "\n", "\n", "nh4_c\n", "\n", "nh4_c\n", "\n", "\n", "\n", "nh4_e->nh4_c\n", "\n", "\n", "\n", "\n", "\n", "e_35_target\n", "\n", "\n", "\n", "\n", "o2_e\n", "\n", "o2_e\n", "\n", "\n", "\n", "o2_e->o2_c\n", "\n", "\n", "\n", "\n", "\n", "o2_e->e_35_target\n", "\n", "\n", "\n", "\n", "\n", "e_36_target\n", "\n", "\n", "\n", "\n", "pi_e\n", "\n", "pi_e\n", "\n", "\n", "\n", "pi_e->e_36_target\n", "\n", "\n", "\n", "\n", "\n", "pi_e->e_77_center\n", "\n", "\n", "\n", "\n", "\n", "e_37_target\n", "\n", "\n", "\n", "\n", "pyr_e\n", "\n", "pyr_e\n", "\n", "\n", "\n", "pyr_e->e_37_target\n", "\n", "\n", "\n", "\n", "\n", "pyr_e->e_83_center\n", "\n", "\n", "\n", "\n", "\n", "e_38_target\n", "\n", "\n", "\n", "\n", "succ_e\n", "\n", "succ_e\n", "\n", "\n", "\n", "succ_e->e_38_target\n", "\n", "\n", "\n", "\n", "\n", "succ_e->e_86_center\n", "\n", "\n", "\n", "\n", "\n", "fdp_c\n", "\n", "fdp_c\n", "\n", "\n", "\n", "e_39_center\n", "\n", "\n", "\n", "\n", "fdp_c->e_39_center\n", "\n", "\n", "\n", "\n", "\n", "fdp_c->e_40_center\n", "\n", "\n", "\n", "\n", "\n", "dhap_c\n", "\n", "dhap_c\n", "\n", "\n", "\n", "dhap_c->g3p_c\n", "\n", "\n", "\n", "\n", "\n", "e_39_center->g3p_c\n", "\n", "\n", "\n", "\n", "\n", "e_39_center->dhap_c\n", "\n", "\n", "\n", "\n", "\n", "e_40_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_40_center->f6p_c\n", "\n", "\n", "\n", "\n", "\n", "for_c\n", "\n", "for_c\n", "\n", "\n", "\n", "for_c->for_e\n", "\n", "\n", "\n", "\n", "\n", "e_41_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_41_center->for_c\n", "\n", "\n", "\n", "\n", "\n", "fum_c\n", "\n", "fum_c\n", "\n", "\n", "\n", "fum_c->e_43_center\n", "\n", "\n", "\n", "\n", "\n", "fum_c->e_45_center\n", "\n", "\n", "\n", "\n", "\n", "succ_c\n", "\n", "succ_c\n", "\n", "\n", "\n", "succ_c->e_87_center\n", "\n", "\n", "\n", "\n", "\n", "succ_c->e_88_center\n", "\n", "\n", "\n", "\n", "\n", "succ_c->e_89_center\n", "\n", "\n", "\n", "\n", "\n", "e_43_center->q8_c\n", "\n", "\n", "\n", "\n", "\n", "e_43_center->succ_c\n", "\n", "\n", "\n", "\n", "\n", "e_44_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_44_center->f6p_c\n", "\n", "\n", "\n", "\n", "\n", "mal__L_c\n", "\n", "mal__L_c\n", "\n", "\n", "\n", "mal__L_c->e_63_center\n", "\n", "\n", "\n", "\n", "\n", "mal__L_c->e_64_center\n", "\n", "\n", "\n", "\n", "\n", "mal__L_c->e_65_center\n", "\n", "\n", "\n", "\n", "\n", "e_45_center->mal__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_46_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_46_center->fum_c\n", "\n", "\n", "\n", "\n", "\n", "6pgl_c\n", "\n", "6pgl_c\n", "\n", "\n", "\n", "6pgl_c->e_75_center\n", "\n", "\n", "\n", "\n", "\n", "e_47_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_47_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "e_47_center->6pgl_c\n", "\n", "\n", "\n", "\n", "\n", "13dpg_c\n", "\n", "13dpg_c\n", "\n", "\n", "\n", "e_48_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_48_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_48_center->13dpg_c\n", "\n", "\n", "\n", "\n", "\n", "e_49_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_49_center->g6p_c\n", "\n", "\n", "\n", "\n", "\n", "nh4_c->e_50_center\n", "\n", "\n", "\n", "\n", "\n", "e_50_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_50_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_50_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_50_center->gln__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_51_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_51_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_51_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_51_center->gln__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_52_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_52_center->akg_c\n", "\n", "\n", "\n", "\n", "\n", "e_52_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "e_52_center->nh4_c\n", "\n", "\n", "\n", "\n", "\n", "e_53_center->glu__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_53_center->nh4_c\n", "\n", "\n", "\n", "\n", "\n", "e_54_center->glu__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_54_center->nadp_c\n", "\n", "\n", "\n", "\n", "\n", "e_55_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_55_center->glu__L_c\n", "\n", "\n", "\n", "\n", "\n", "6pgc_c\n", "\n", "6pgc_c\n", "\n", "\n", "\n", "6pgc_c->e_56_center\n", "\n", "\n", "\n", "\n", "\n", "xu5p__D_c\n", "\n", "xu5p__D_c\n", "\n", "\n", "\n", "ru5p__D_c->xu5p__D_c\n", "\n", "\n", "\n", "\n", "\n", "e_56_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_56_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "e_56_center->ru5p__D_c\n", "\n", "\n", "\n", "\n", "\n", "e_58_center->akg_c\n", "\n", "\n", "\n", "\n", "\n", "e_58_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_58_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "glx_c\n", "\n", "glx_c\n", "\n", "\n", "\n", "glx_c->e_61_center\n", "\n", "\n", "\n", "\n", "\n", "e_59_center->succ_c\n", "\n", "\n", "\n", "\n", "\n", "e_59_center->glx_c\n", "\n", "\n", "\n", "\n", "\n", "e_60_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_60_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_60_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_61_center->coa_c\n", "\n", "\n", "\n", "\n", "\n", "e_61_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_61_center->mal__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_62_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_62_center->mal__L_c\n", "\n", "\n", "\n", "\n", "\n", "e_63_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_63_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_63_center->oaa_c\n", "\n", "\n", "\n", "\n", "\n", "e_64_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_64_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_64_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_65_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_65_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_65_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "e_66_center->nad_c\n", "\n", "\n", "\n", "\n", "\n", "e_66_center->h_e\n", "\n", "\n", "\n", "\n", "\n", "e_66_center->q8h2_c\n", "\n", "\n", "\n", "\n", "\n", "e_67_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_67_center->nadp_c\n", "\n", "\n", "\n", "\n", "\n", "e_70_center->accoa_c\n", "\n", "\n", "\n", "\n", "\n", "e_70_center->nadh_c\n", "\n", "\n", "\n", "\n", "\n", "e_70_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_71_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_71_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_71_center->fdp_c\n", "\n", "\n", "\n", "\n", "\n", "e_72_center->accoa_c\n", "\n", "\n", "\n", "\n", "\n", "e_72_center->for_c\n", "\n", "\n", "\n", "\n", "\n", "e_74_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_74_center->13dpg_c\n", "\n", "\n", "\n", "\n", "\n", "e_75_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_75_center->6pgc_c\n", "\n", "\n", "\n", "\n", "\n", "e_77_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_77_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_78_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_78_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_78_center->oaa_c\n", "\n", "\n", "\n", "\n", "\n", "e_79_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_79_center->co2_c\n", "\n", "\n", "\n", "\n", "\n", "e_79_center->pep_c\n", "\n", "\n", "\n", "\n", "\n", "e_80_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_80_center->amp_c\n", "\n", "\n", "\n", "\n", "\n", "e_80_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "e_80_center->pep_c\n", "\n", "\n", "\n", "\n", "\n", "e_81_center->coa_c\n", "\n", "\n", "\n", "\n", "\n", "e_81_center->actp_c\n", "\n", "\n", "\n", "\n", "\n", "e_82_center->atp_c\n", "\n", "\n", "\n", "\n", "\n", "e_82_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "e_83_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_83_center->pyr_c\n", "\n", "\n", "\n", "\n", "\n", "xu5p__D_c->e_92_center\n", "\n", "\n", "\n", "\n", "\n", "xu5p__D_c->e_93_center\n", "\n", "\n", "\n", "\n", "\n", "e_86_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_86_center->succ_c\n", "\n", "\n", "\n", "\n", "\n", "e_87_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_87_center->succ_e\n", "\n", "\n", "\n", "\n", "\n", "e_88_center->q8h2_c\n", "\n", "\n", "\n", "\n", "\n", "e_88_center->fum_c\n", "\n", "\n", "\n", "\n", "\n", "e_89_center->adp_c\n", "\n", "\n", "\n", "\n", "\n", "e_89_center->succoa_c\n", "\n", "\n", "\n", "\n", "\n", "e_89_center->pi_c\n", "\n", "\n", "\n", "\n", "\n", "s7p_c\n", "\n", "s7p_c\n", "\n", "\n", "\n", "s7p_c->e_90_center\n", "\n", "\n", "\n", "\n", "\n", "e_90_center->f6p_c\n", "\n", "\n", "\n", "\n", "\n", "e_90_center->e4p_c\n", "\n", "\n", "\n", "\n", "\n", "e_91_center->nad_c\n", "\n", "\n", "\n", "\n", "\n", "e_91_center->h_c\n", "\n", "\n", "\n", "\n", "\n", "e_91_center->nadph_c\n", "\n", "\n", "\n", "\n", "\n", "e_92_center->g3p_c\n", "\n", "\n", "\n", "\n", "\n", "e_92_center->s7p_c\n", "\n", "\n", "\n", "\n", "\n", "e_93_center->f6p_c\n", "\n", "\n", "\n", "\n", "\n", "e_93_center->g3p_c\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G.plot(custom_edge_attr=cn.pl.flow_style(P), layout=\"fdp\")" ] }, { "cell_type": "markdown", "id": "81c714ae", "metadata": {}, "source": [ "Now we are going to see how to use specialized building blocks from CORNETO to automatically add indicators for the presence of reactions in a model. Indicators are binary variables associated to a continuous variable: when the indicator is 0, the continuous variable is 0; and when the indicator is 1, the continuous variable is unconstrained. \n", "\n", "By creating indicators for flow, we can try for example to minimize the number of reactions with flux in the model, by minimizing the total number of ones in the indicator vector." ] }, { "cell_type": "code", "execution_count": null, "id": "e0c07efb", "metadata": {}, "outputs": [], "source": [ "from corneto.backend._base import Indicator\n", "\n", "# Automatically create a new indicator variable for the flow\n", "# If the indicator is 0, the flow is blocked, if it is 1, the flow is unblocked (can take any value within bounds, including 0)\n", "P += Indicator(\"unblocked_flow\")\n", "P.expr" ] }, { "cell_type": "code", "execution_count": null, "id": "03c7efa4", "metadata": {}, "outputs": [], "source": [ "# We try to minimize the number of 1s (i.e., maximize reactions with blocked flux)\n", "P.add_objectives(sum(P.expr.unblocked_flow))\n", "P.solve()\n", "print(biomass.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "fb5e3254", "metadata": {}, "outputs": [], "source": [ "# How many reactions are unblocked?\n", "sum(P.expr.unblocked_flow.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "294c77d5", "metadata": {}, "outputs": [], "source": [ "G.plot(custom_edge_attr=cn.pl.flow_style(P), layout=\"fdp\")" ] }, { "cell_type": "markdown", "id": "432c7910", "metadata": {}, "source": [ "## Sparse FBA with min. flux" ] }, { "cell_type": "code", "execution_count": null, "id": "2cbe27ec", "metadata": {}, "outputs": [], "source": [ "P = fba_problem(G)\n", "P += P.expr.flow[rid] >= 0.2\n", "P += Indicator(\"unblocked_flow\")\n", "P.add_objectives(sum(P.expr.unblocked_flow))\n", "P.solve(solver=\"SCIPY\")" ] }, { "cell_type": "markdown", "id": "2a846d74", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, "id": "601a7432", "metadata": {}, "outputs": [], "source": [ "sum(P.expr.unblocked_flow.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "55060e52", "metadata": {}, "outputs": [], "source": [ "sum(abs(P.expr.flow.value) >= 1e-6)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }