{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tailored constraints, variables and objectives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thanks to the use of symbolic expressions via the optlang mathematical modeling package, it is relatively straight-forward to add new variables, constraints and advanced objectives that cannot be easily formulated as a combination of different reaction and their corresponding upper and lower bounds. Here we demonstrate this optlang functionality which is exposed via the `model.solver.interface`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constraints" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we want to ensure that two reactions have the same flux in our model. We can add this criteria as constraint to our model using the optlang solver interface by simply defining the relevant expression as follows." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from cobra.io import load_model\n", "model = load_model('textbook')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "same_flux = model.problem.Constraint(\n", " model.reactions.FBA.flux_expression - model.reactions.NH4t.flux_expression,\n", " lb=0,\n", " ub=0)\n", "model.add_cons_vars(same_flux)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The flux for our reaction of interest is obtained by the `model.reactions.FBA.flux_expression` which is simply the sum of the forward and reverse flux, i.e.," ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0*FBA - 1.0*FBA_reverse_84806" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.reactions.FBA.flux_expression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now I can maximize growth rate whilst the fluxes of reactions 'FBA' and 'NH4t' are constrained to be (near) identical." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.662749047738151 4.662749047738149 0.855110960926157\n" ] } ], "source": [ "solution = model.optimize()\n", "print(solution.fluxes['FBA'], solution.fluxes['NH4t'],\n", " solution.objective_value)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to add many constraints at once. For large models, with constraints involving many reactions, the efficient way to do this is to first build a dictionary of the linear coefficients for every flux, and then add the constraint at once. For example, suppose we want to add a constrain on the sum of the absolute values of every flux in the network to be less than 100:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "coefficients = dict()\n", "for rxn in model.reactions:\n", " coefficients[rxn.forward_variable] = 1.\n", " coefficients[rxn.reverse_variable] = 1.\n", "constraint = model.problem.Constraint(0, lb=0, ub=100)\n", "model.add_cons_vars(constraint)\n", "model.solver.update()\n", "constraint.set_linear_coefficients(coefficients=coefficients)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Objectives\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple objective such as the maximization of the flux through one or more reactions can conveniently be done by simply \n", "assigning to the `model.objective` property as we have seen in previous chapters, e.g.," ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8739215069684307\n" ] } ], "source": [ "model = load_model('textbook')\n", "with model:\n", " model.objective = {model.reactions.Biomass_Ecoli_core: 1}\n", " model.optimize()\n", " print(model.reactions.Biomass_Ecoli_core.flux)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The objectives mathematical expression is seen by" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.0*Biomass_Ecoli_core - 1.0*Biomass_Ecoli_core_reverse_2cdba" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.objective.expression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But suppose we need a more complicated objective, such as minimizing the Euclidean distance of the solution to the origin minus another variable, while subject to additional linear constraints. This is an objective function with both linear and quadratic components. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the example problem:\n", "\n", "> **min** $\\frac{1}{2}\\left(x^2 + y^2 \\right) - y$\n", "\n", "> *subject to*\n", "\n", "> $x + y = 2$\n", "\n", "> $x \\ge 0$\n", "\n", "> $y \\ge 0$\n", "\n", "This (admittedly very artificial) problem can be visualized graphically where the optimum is indicated by the blue dot on the line of feasible solutions." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "application/pdf": "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PgplbmRvYmoKMTMgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTYgMCBvYmoKPDwgL29uZSAxNyAwIFIgL3BlcmlvZCAxOCAwIFIgL3R3byAxOSAwIFIgL3plcm8gMjAgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNSAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9DQSAwIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KL0EyIDw8IC9DQSAxIC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL0NvdW50IDEgL0tpZHMgWyAxMSAwIFIgXSAvVHlwZSAvUGFnZXMgPj4KZW5kb2JqCjIxIDAgb2JqCjw8IC9DcmVhdGlvbkRhdGUgKEQ6MjAyMjA0MDQyMDQwNDYtMDQnMDAnKQovQ3JlYXRvciAoTWF0cGxvdGxpYiB2My41LjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My41LjEpID4+CmVuZG9iagp4cmVmCjAgMjIKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTAzMzAgMDAwMDAgbiAKMDAwMDAxMDEzNiAwMDAwMCBuIAowMDAwMDEwMTY4IDAwMDAwIG4gCjAwMDAwMTAyNjcgMDAwMDAgbiAKMDAwMDAxMDI4OCAwMDAwMCBuIAowMDAwMDEwMzA5IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM1MiAwMDAwMCBuIAowMDAwMDA3NTU1IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwNzUzNCAwMDAwMCBuIAowMDAwMDA5MDA5IDAwMDAwIG4gCjAwMDAwMDg4MDIgMDAwMDAgbiAKMDAwMDAwODQ2NSAwMDAwMCBuIAowMDAwMDEwMDYyIDAwMDAwIG4gCjAwMDAwMDc1NzUgMDAwMDAgbiAKMDAwMDAwNzczMCAwMDAwMCBuIAowMDAwMDA3ODUzIDAwMDAwIG4gCjAwMDAwMDgxNzcgMDAwMDAgbiAKMDAwMDAxMDM5MCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9JbmZvIDIxIDAgUiAvUm9vdCAxIDAgUiAvU2l6ZSAyMiA+PgpzdGFydHhyZWYKMTA1NDcKJSVFT0YK\n", "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import plot_helper\n", "\n", "plot_helper.plot_qp2()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We return to the textbook model and set the solver to one that can handle quadratic objectives such as cplex. We then add the linear constraint that the sum of our x and y reactions, that we set to FBA and NH4t, must equal 2." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "model.solver = 'cplex'\n", "sum_two = model.problem.Constraint(\n", " model.reactions.FBA.flux_expression + model.reactions.NH4t.flux_expression,\n", " lb=2,\n", " ub=2)\n", "model.add_cons_vars(sum_two)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we add the quadratic objective" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "quadratic_objective = model.problem.Objective(\n", " 0.5 * model.reactions.NH4t.flux_expression**2 + 0.5 *\n", " model.reactions.FBA.flux_expression**2 -\n", " model.reactions.FBA.flux_expression,\n", " direction='min')\n", "model.objective = quadratic_objective\n", "solution = model.optimize(objective_sense=None)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5 1.5\n" ] } ], "source": [ "print(solution.fluxes['NH4t'], solution.fluxes['FBA'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also create additional variables to facilitate studying the effects of new constraints and variables. Suppose we want to study the difference in flux between nitrogen and carbon uptake whilst we block other reactions. For this it will may help to add another variable representing this difference." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "model = load_model('textbook')\n", "difference = model.problem.Variable('difference')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use constraints to define what values this variable shall take" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "constraint = model.problem.Constraint(\n", " model.reactions.EX_glc__D_e.flux_expression -\n", " model.reactions.EX_nh4_e.flux_expression - difference,\n", " lb=0,\n", " ub=0)\n", "model.add_cons_vars([difference, constraint])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can access that difference directly during our knock-out exploration by looking at its primal value." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-5.234680806802513\n", "-5.234680806802513\n", "-5.234680806802513\n", "-0.9322222222222226\n", "-0.9322222222222231\n" ] } ], "source": [ "for reaction in model.reactions[:5]:\n", " with model:\n", " reaction.knock_out()\n", " model.optimize()\n", " print(model.solver.variables.difference.primal)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 1 }