diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e49d9b6ac..6d2ae5de87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ## Unreleased ### Added +- [#1417](https://github.com/pints-team/pints/pull/1417) Added a module `toy.stochastic` for stochastic models. In particular, `toy.stochastic.MarkovJumpModel` implements Gillespie's algorithm for easier future implementation of stochastic models. - [#1420](https://github.com/pints-team/pints/pull/1420) The `Optimiser` class now distinguishes between a best-visited point (`x_best`, with score `f_best`) and a best-guessed point (`x_guessed`, with approximate score `f_guessed`). For most optimisers, the two values are equivalent. The `OptimisationController` still tracks `x_best` and `f_best` by default, but this can be modified using the methods `set_f_guessed_tracking` and `f_guessed_tracking`. ### Changed diff --git a/LICENSE.md b/LICENSE.md index 46162e5d2e..f8bc744d67 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2017-2021, University of Oxford (University of Oxford means the +Copyright (c) 2017-2022, University of Oxford (University of Oxford means the Chancellor, Masters and Scholars of the University of Oxford, having an administrative office at Wellington Square, Oxford OX1 2JD, UK). All rights reserved. diff --git a/docs/source/index.rst b/docs/source/index.rst index 38d9e9e23b..543eb98bac 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -39,6 +39,7 @@ Contents optimisers/index noise_model_diagnostics toy/index + toy/stochastic/index transformations utilities diff --git a/docs/source/toy/index.rst b/docs/source/toy/index.rst index 69a63255b2..36e0e9ca92 100644 --- a/docs/source/toy/index.rst +++ b/docs/source/toy/index.rst @@ -37,6 +37,5 @@ Some toy classes provide extra functionality defined in the simple_egg_box_logpdf simple_harmonic_oscillator_model sir_model - stochastic_degradation_model stochastic_logistic_model twisted_gaussian_logpdf diff --git a/docs/source/toy/stochastic/index.rst b/docs/source/toy/stochastic/index.rst new file mode 100644 index 0000000000..586945bd24 --- /dev/null +++ b/docs/source/toy/stochastic/index.rst @@ -0,0 +1,15 @@ +*********************** +Stochastic Toy Problems +*********************** + +The `stochastic` module provides toy :class:`models`, +:class:`distributions` and +:class:`error measures` that can be used for tests and in +examples. + + +.. toctree:: + + markov_jump_model + stochastic_degradation_model + stochastic_michaelis_menten_model diff --git a/docs/source/toy/stochastic/markov_jump_model.rst b/docs/source/toy/stochastic/markov_jump_model.rst new file mode 100644 index 0000000000..c7d2f0e373 --- /dev/null +++ b/docs/source/toy/stochastic/markov_jump_model.rst @@ -0,0 +1,7 @@ +***************** +Markov Jump Model +***************** + +.. currentmodule:: pints.toy.stochastic + +.. autoclass:: MarkovJumpModel diff --git a/docs/source/toy/stochastic_degradation_model.rst b/docs/source/toy/stochastic/stochastic_degradation_model.rst similarity index 55% rename from docs/source/toy/stochastic_degradation_model.rst rename to docs/source/toy/stochastic/stochastic_degradation_model.rst index 048613ed64..b493e7b624 100644 --- a/docs/source/toy/stochastic_degradation_model.rst +++ b/docs/source/toy/stochastic/stochastic_degradation_model.rst @@ -2,6 +2,6 @@ Stochastic degradation model **************************** -.. currentmodule:: pints.toy +.. currentmodule:: pints.toy.stochastic -.. autoclass:: StochasticDegradationModel +.. autoclass:: DegradationModel diff --git a/docs/source/toy/stochastic/stochastic_michaelis_menten_model.rst b/docs/source/toy/stochastic/stochastic_michaelis_menten_model.rst new file mode 100644 index 0000000000..b3f43353e5 --- /dev/null +++ b/docs/source/toy/stochastic/stochastic_michaelis_menten_model.rst @@ -0,0 +1,7 @@ +********************************* +Stochastic Michaelis Menten model +********************************* + +.. currentmodule:: pints.toy.stochastic + +.. autoclass:: MichaelisMentenModel diff --git a/examples/README.md b/examples/README.md index dcd063b8a6..1a3961d2be 100644 --- a/examples/README.md +++ b/examples/README.md @@ -103,7 +103,7 @@ relevant code. ## Toy problems -### Models +### Deterministic Models - [Beeler-Reuter action potential model](./toy/model-beeler-reuter-ap.ipynb) - [Constant model](./toy/model-constant.ipynb) - [Fitzhugh-Nagumo model](./toy/model-fitzhugh-nagumo.ipynb) @@ -115,8 +115,11 @@ relevant code. - [Repressilator model](./toy/model-repressilator.ipynb) - [Simple Harmonic Oscillator model](./toy/model-simple-harmonic-oscillator.ipynb) - [SIR Epidemiology model](./toy/model-sir.ipynb) + +### Stochastic Models - [Stochastic Degradation model](./toy/model-stochastic-degradation.ipynb) - [Stochastic Logistic model](./toy/model-stochastic-logistic-growth.ipynb) +- [Stochastic Michaelis Menten model](./toy/model-stochastic-michaelis-menten.ipynb) ### Distributions - [Annulus](./toy/distribution-annulus.ipynb) diff --git a/examples/toy/model-stochastic-degradation.ipynb b/examples/toy/model-stochastic-degradation.ipynb index 3b1aab2d4c..30d94eaaf7 100644 --- a/examples/toy/model-stochastic-degradation.ipynb +++ b/examples/toy/model-stochastic-degradation.ipynb @@ -4,20 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stochastic degradation model\n", + "# Stochastic Degradation model\n", "\n", "This example shows how the stochastic degradation model can be used.\n", "This model describes the stochastic process of a single chemical reaction, in which the concentration of a substance degrades over time as particles react.\n", "The substance degrades starting from an initial concentration, $n_0$, to 0 following a rate constant, $k$, according to the following model ([Erban et al., 2007](https://arxiv.org/abs/0704.1908)):\n", " $$A \\xrightarrow{\\text{k}} \\emptyset$$\n", "\n", - "The model is simulated according to the Gillespie stochastic simulation algorithm (Gillespie, 1976)\n", - " 1. Sample a random value $r$ from a uniform distribution: $r \\sim \\text{uniform}(0,1)$\n", - " 2. Calculate the time ($\\tau$) until the next single reaction as follows (Erban et al., 2007):\n", - " $$ \\tau = \\frac{1}{A(t)k} \\ln{\\big[\\frac{1}{r}\\big]} $$\n", - " 3. Update the molecule count at time t + $\\tau$ as: $ A(t + \\tau) = A(t) - 1 $\n", - " 4. Return to step (1) until molecule count reaches zero.\n", - " " + "The model is simulated according to the Gillespie stochastic simulation algorithm (Gillespie, 1976)." ] }, { @@ -29,7 +23,7 @@ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pints\n", - "import pints.toy" + "import pints.toy.stochastic" ] }, { @@ -46,7 +40,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -59,7 +53,7 @@ ], "source": [ "n_0 = 20\n", - "model = pints.toy.StochasticDegradationModel(n_0)\n", + "model = pints.toy.stochastic.DegradationModel(n_0)\n", "\n", "times = np.linspace(0, 100, 100)\n", "k = [0.1]\n", @@ -76,7 +70,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Given the stochastic nature of this model, every iteration returns a different result. However, averaging the concentration values at each time step, produces a reproducible result which tends towards a deterministic function as the the number of iterations tends to infinity (Erban et al., 2007): $ n_0e^{-kt} $\n" + "Given the stochastic nature of this model, every iteration returns a different result. However, averaging the concentration values at each time step, has a mean which tends towards the following deterministic function as the number of iterations tends to infinity (Erban et al., 2007): $ n_0e^{-kt} $.\n" ] }, { @@ -86,7 +80,7 @@ "outputs": [ { "data": { - "image/png": "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KrrPAu6LVKwxSQEObvexp7CuEUSNOXIPvrucFdvCPbEOz8AuqTxw/nF1lnn44Yd5+eWX6datG1lZWYwcORKA9evXc8cdd5CXl0diYiJ///vf2bt3LzNnzuS///0vv//973nrrbcAapTr378/N9xwA+3atWPRokWMGDGClJQUNm7cyPbt21mzZg1PPvkkX3/9Ne+//z5du3bl3XffJSYmhnHjxvH4448zatQokpOTueuuu3jvvfdISEjgnXfeoWPHjkyaNInk5GR+/vOf89e//pVnnnkGn8/HwIEDmTx5Ms888wxer5dXXnmFp556io8//riq/Lp167jtttvIy8vD6/Xy5ptvHvYFnJOTw/jx4xkzZgxff/01Q4cO5cYbb+SBBx5g165dvPrqq4wePZqDBw/y4x//mKVLl1JRUcGkSZO48MILycnJ4dprr+XgwYMAPP3005x00knMnTuXSZMmkZmZybJlyxg5ciSvvPJKjQrmxYsXc9ttt1FUVETv3r158cUX+eqrr/jzn/+M1+vl008/5ZNPDh+MUlX517/+xZw5cxg7diwlJSXEx8cD8Oqrr1YliXvvvZeVK1cybNgwrr/+eu6++27OP/98Xn/9dX75y18exSetpkj+rD4ZZ9zh00VksfuYgJMozhSRtcCZ7jQiMkpEngdwK7t/B8xzHw9VVoBHQkxSAIB1uwojtQtjmsyCBQt4/fXXWbRoEW+//Tbz5s2rWnbLLbfw1FNPsWDBAh5//HFuv/12TjrpJC644AIee+wxFi9eTO/evUOWq7RmzRo++ugjnnjiCcBJQrNmzeKdd97hmmuu4bTTTmPp0qUkJCQwa9asGvEdPHiQE044ge+++45TTjmFv//97zXKTJ48mUWLFrFkyRKeeeYZevTowW233cbdd9/N4sWLGTt27GHlr776au644w6+++47vvzySzp37lxjm+vWreOuu+5iyZIlrFq1itdee43PP/+cxx9/nEceeQRwEu3pp5/OvHnz+OSTT/jFL37BwYMH6dChA3PmzGHhwoW88cYb/OQnP6na7qJFi/jzn//MihUr2LBhA198UXNo9Ouuu45HH32UJUuWMHjwYB588EEmTJhQ9ZqqJwuAL774gp49e9K7d2/GjRvH7NmzASgrK2PDhg1U9sw9efJkxo4dy+LFi7n77rsBGDVqFJ999lmNbR6tSN4l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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -101,14 +95,10 @@ "for i in range(10):\n", " values = model.simulate(k, times)\n", " plt.step(times, values)\n", - "\n", - "mean = model.mean(k, times)\n", " \n", - "plt.plot(times, mean, label = 'deterministic mean of A(t)')\n", "plt.title('stochastic degradation across different iterations')\n", "plt.xlabel('time')\n", "plt.ylabel('concentration (A(t))')\n", - "plt.legend(loc = 'upper right')\n", "plt.show()" ] }, @@ -116,7 +106,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The deterministic mean (from above) is plotted with the deterministic standard deviation. \n", + "We now plot the analytic mean and standard deviation of this process.\n", "The deterministic variance of this model is given by: $e^{-2kt}(-1 + e^{kt})n_0$" ] }, @@ -127,7 +117,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEKCAYAAAAB0GKPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VVXW+PHvSgikEJJAQg0lQKhJCKFKRxARLBRRUEcQHay/mdGxjwXH8qJjG51RXgtFXntDFFABQUCU3ovUAAGEEGogCSnr98e9uSTkJrmkJ6zP89wnuefsc85KCFk5Z++9tqgqxhhjTGG8yjsAY4wxlYMlDGOMMR6xhGGMMcYjljCMMcZ4xBKGMcYYj1jCMMYY4xFLGMYYYzxiCcMYY4xHLGEYY4zxSLXyDqAkhYaGarNmzco7DGOMqTRWr159VFXDPGlbpRJGs2bNWLVqVXmHYYwxlYaI7PW0rT2SMsYY4xFLGMYYYzxiCcMYY4xHqlQfhjE5paenk5CQQGpqanmHYky58/X1JTw8HB8fnyKfwxKGqbISEhIIDAykWbNmiEh5h2NMuVFVkpKSSEhIICIiosjnKbVHUiLSWEQWishWEdksIn91bq8tIvNEZIfzY0g+x491ttkhImNLK05TdaWmplKnTh1LFuaSJyLUqVOn2HfbpdmHkQH8XVXbAt2Be0WkHfAosEBVI4EFzve5iEht4GmgG9AVeDq/xGJMQSxZGONQEv8XSi1hqOohVV3j/Pw0sBVoBFwHTHc2mw4Mc3P4lcA8VT2mqseBecDg0ogzIzOLtxbtZPG2Q6VxemOMqTLKZJSUiDQDOgLLgXqqeggcSQWo6+aQRsD+HO8TnNvcnXuCiKwSkVWJiYkXHZu3l/DjlttYvuA6sPXNTSmaOHEiL7/8coFtZs6cyZYtW0othjvuuKPQ80+ePJkPPvgg3/2LFi1i2bJlHrevDLZt20ZsbCwdO3Zk165defavXbsWEeGHH37ItT0lJYW+ffuSmZlJfHw8H330kWvfxo0bGTduXGmHXqZKPWGISE3gS+BvqnrK08PcbHP721xV31HVzqraOSzMo9ntF8ZHkm8GhyQJdvx40ccbU5KKkjAyMjI8bvvee+/Rrl27Atvcdddd3HrrrfnuvzBhFNa+Mpg5cybXXXcda9eupUWLFnn2f/zxx/Tq1YuPP/441/YpU6YwYsQIvL298ySM6OhoEhIS2LdvX6nHX1ZKNWGIiA+OZPGhqn7l3HxYRBo49zcAjrg5NAFonON9OHCwtOL0rt6YA96+8NOzkJVVWpcxl6Dnn3+e1q1bM3DgQH7//XfX9l27djF48GA6depE79692bZtG8uWLWPWrFk89NBDxMbGsmvXLrftAMaNG8cDDzxA//79eeSRR5g4cSJjx45l0KBBNGvWjK+++oqHH36Y6OhoBg8eTHp6OgD9+vVzlc+pWbMm//jHP+jQoQPdu3fn8OHDQO47oTfeeIN27doRExPD6NGjiY+PZ/Lkybz22mvExsayZMmSXO137tzJwIED6dChA3FxcXn+Wo+Pj6dNmzbccccdREVFcfPNNzN//nx69uxJZGQkK1asAODMmTOMHz+eLl260LFjR7755hvX8b179yYuLo64uDhX4lq0aBH9+vXj+uuvp02bNtx8882omycG69ato3v37sTExDB8+HCOHz/OnDlzeP3113nvvffo379/nmNUlS+++IJp06bx448/5uo4/vDDD7nuuusAePTRR1myZAmxsbG89tprAFxzzTV88sknnv/AVHClNqxWHD0s7wNbVfXVHLtmAWOBSc6P37g5/AfghRwd3YOAx0or1lC/MHan1IQDG2HLTIgaUVqXMuXkmW83s+Wgpze4nmnXsBZPX9M+3/2rV6/mk08+Ye3atWRkZBAXF0enTp0AmDBhApMnTyYyMpLly5dzzz338NNPP3Httddy9dVXc/311wMwYMAAt+0Atm/fzvz58/H29mbixIns2rWLhQsXsmXLFi677DK+/PJLXnrpJYYPH87s2bMZNix3d+GZM2fo3r07zz//PA8//DDvvvsuTzzxRK42kyZNYs+ePdSoUYMTJ04QHBzMXXfdRc2aNXnwwQcBWLBggav9zTffzKOPPsrw4cNJTU0ly80fYDt37uTzzz/nnXfeoUuXLnz00UcsXbqUWbNm8cILLzBz5kyef/55Lr/8cqZMmcKJEyfo2rUrAwcOpG7dusybNw9fX1927NjBmDFjXAlw7dq1bN68mYYNG9KzZ09++eUXevXqlevat956K2+++SZ9+/blqaee4plnnuH111/P8zXl9MsvvxAREUGLFi3o168fc+bMYcSIEZw7d47du3eTXfB00qRJvPzyy3z3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Oe/47rvvPqZNm+b6Pl7sz0SJUtUq8+rUqZMW1dakrRo1LUpbv/CiPvfdZtWMc6rP1Ved/WCRz2nK15YtW3JvmDIk72v5O459aWfc71/zf479yUfz7ivEF198oXfccYfr/YkTJ1RVtWnTppqYmOjanpSUpKqqGRkZ2rdvX12/fr2r3RtvvKGqqv/973/19ttvV1XV//f//p8+88wzqqr63XffKeA6X/a5zp49q+3bt9ejR4+qqiqgn376qaqqpqSkaHh4uG7fvl2zsrJ01KhROnTo0Dzxv/LKK3rbbbepqur69evV29tbV65cqYmJidq7d29NTk5WVdVJkybpM888o+np6dq4cWPX9rvuuktnzJiR52vOL8aAgIBc189+/8UXX+jAgQM1IyND//jjD23cuLEePHhQFy5cqLVq1dL9+/drZmamdu/eXZcsWZLn6+jbt6+uXLlSVVUTExO1adOmqqo6depUrV+/vh49etQVy8qVK3XPnj0K6NKlS1VV9bbbbtN//etfeu7cOb3sssv0yJEjqqr6ySefuL4/ffv21bvvvjvPtVVVn376aY2JidGzZ89qYmKihoeH64EDBwr8unL+e9x77706depU1/fxYn8mcsrzf0JVgVXq4e9Yu8NwCvULBSAs+By/H04Gbx8I72IT+EyRRUdHM3/+fB555BGWLFlCUFCQ23afffYZcXFxdOzYkc2bN+dacW/ECMfaLJ06dXKV/l68eDG33HILAEOHDiUkJMTV/o033nAtiLR//3527NgBOKq3jhw5EnAsRxoREUFkZCQi4jrXhXJeJyYmhpiYGAB+++03tmzZQs+ePYmNjWX69Ons3buXatWqMXjwYL799lsyMjKYPXu2a3GhnPKLMT9Lly5lzJgxeHt7U69ePfr27cvKlY6VD7JLmnt5eblKml+MK664gjp16uDn58eIESNcdaEaN25Mz56OPsxbbrmFpUuX8vvvv7Np0yauuOIKYmNjee6550hISHCd68Ybb8z3Otdddx1+fn6EhobSv39/VqxYUeDXVZCL/ZkoSVVnznoxhdQIwUu8CKmVyrZ450I7HW+BE/sco6Ws5Hnld9vs/PdV9y94f0Cdgve70apVK1avXs2cOXN47LHHGDRoUJ5id3v27OHll19m5cqVhISEMG7cuFwls7NLdl9Yrttd2fRFixYxf/58fv31V/z9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\n", + "image/png": "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zp07s2nTJr755hseffRRxo4dW2IJyoMHD/L000+zfv16goODmTVrVrH8RQUZSiuSnXTZsmX89NNPrF69Gj8/P0aPHl14LB8fn2KpwatDVZk5cyb//e9/S5RdffXVfPTRR3Tt2pXp06cjZ/3fef/990lISGDjxo14enoSERFR5XxNULEMrh4eHoVdRGef6+z2FTx3t11VGT9+fIlV5QqcnV23Iudxp2h7z26zp6dn4b5nv96yjlkVtXYFISLviEi8iGwrsm2hiGx2PWKLLCR09r6xIrLVVa/yyZWqwG6zc3WXq+kW0pX4tByS0nOg15Uw8n4THIwqO3bsGH5+flx33XU88MADbNq0CSie9TM1NRV/f38CAwM5efIk3377bbnHHTlyJB988AEA3377LadPWzd1pqSkEBwcjJ+fH7t27WLNmjVu9x80aBC//PILSUlJ5OXlue0zL+s8Y8eOZdGiRcTHWysGnzp1qvAv6enTp/PFF1+wYMECrr766hLHTElJoUWLFnh6erJ06dLC/UrLEAswYsSIwlXe9uzZw+HDh+nSpUu5P6cCERERbNy4EaBwcaECX3zxBdnZ2SQlJbFs2bLCu5/XrVvHwYMHcTqdLFy4kOHDhzN48GB+/fXXwuR8GRkZ5f7FX+Djjz/G6XSyf/9+Dhw4QJcuXUp9XREREWzevBmn08mRI0cKr2rKMmzYMD788EOAEiviVVVtdjHNAyYW3aCqV6lqH1Xtg7VW9adu9iswxlXXbRKp2vDwoIeZFmU1edcJ1y9qdgok7S9jL8Mo3datWwsHcv/5z38WDh7edtttTJw4kTFjxtC7d2/69u1L165dueaaa0p0ybgze/Zsli9fTo8ePfj0009p185ax2TixIk4HA66devGQw89xODBg93u37p1a+bMmcOQIUMYNmxYqQkNSztP9+7defzxx5kwYQK9evVi/PjxHD9+HIDg4GC6devGoUOHGDhwYIljXnvttWzYsIHo6GjeffddunbtCkCzZs0YNmwYPXv2LDbQDXDnnXfidDqJjo7mqquuYt68ecWuHCry87rnnnuIiYkpcRXVq1cvxowZw+DBg/n73/9OmzZtACtNxt133023bt2IjIxk+vTphIaGMm/ePGbMmEGvXr0YMmRI4cSB8rRr146BAwcyadIkXn/9dXx8fEp9XcOGDSMyMpLu3bvzpz/9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", "text/plain": [ "
" ] @@ -154,8 +144,11 @@ } ], "metadata": { + "interpreter": { + "hash": "62b8c3045b77e73a8aab814fbf01ae024ab075fc3f7014742f3a4c5a8ac43e7b" + }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3.8.0 32-bit", "language": "python", "name": "python3" }, @@ -169,8 +162,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" - } + "version": "3.8.0" + }, + "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/examples/toy/model-stochastic-michaelis-menten.ipynb b/examples/toy/model-stochastic-michaelis-menten.ipynb new file mode 100644 index 0000000000..ce1c2732cc --- /dev/null +++ b/examples/toy/model-stochastic-michaelis-menten.ipynb @@ -0,0 +1,308 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Michaelis Menten" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This example shows how the the Michaelis Menten model can be used.\n", + "The Michaelis Menten model is a stochastic model, and more details about the determinstic analogue can be found [here](https://en.wikipedia.org/wiki/Michaelis-Menten_kinetics).\n", + "\n", + "Its reactions are:\n", + "$$X_1 + X_2 \\xrightarrow{} X_3$$\n", + "$$X_3 \\xrightarrow{} X_1 + X_2$$\n", + "$$X_3 \\xrightarrow{} X_2 + X_4$$\n", + "\n", + "The model is simulated according to the Gillespie stochastic simulation algorithm (Gillespie, 1976)." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "import pints\n", + "import pints.toy.stochastic\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Specify initial concentration, time points at which to record concentration values, and rate constant value (k)." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "x_0 = [1e4, 2e3, 2e4, 0]\n", + "model = pints.toy.stochastic.MichaelisMentenModel(x_0)\n", + "\n", + "times = np.linspace(0, 24, 100)\n", + "k = [1e-5, 0.2, 0.2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The main option is to use the model's ```simulate``` function. This function, given a set of parameters and times, computes the appropriate times and counts of molecules using Gillespie's algorithm and then uses interpolation to find the values at the exact times requested. Since Gillespie's algorithm returns only the times at which the molecule count is changed, these times may not correspond to the times at which we requested the molecule count. Therefore, the interpolation is used by the ```simulate``` function to extend the molecule counts to the times requested." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "first_values = model.simulate(k, times)\n", + "\n", + "plt.step(times, first_values[:,0], label = 'X1')\n", + "plt.step(times, first_values[:,1], label = 'X2')\n", + "plt.step(times, first_values[:,2], label = 'X3')\n", + "plt.step(times, first_values[:,3], label = 'X4')\n", + "plt.legend()\n", + "plt.xlabel('time')\n", + "plt.ylabel('concentration (A(t))'),\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another option for simulating the model is by using the ```simulate_raw``` function. This gives the pure Gillespie's algorithm simulations of molecule counts, without interpolating them. Although more precise, these simulations are similar to the ones given by ```simulate```." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "times, values = model.simulate_raw(k, 24)\n", + "values = np.array(values)\n", + "\n", + "plt.step(times, values[:,0], label = 'X1')\n", + "plt.step(times, values[:,1], label = 'X2')\n", + "plt.step(times, values[:,2], label = 'X3')\n", + "plt.step(times, values[:,3], label = 'X4')\n", + "plt.legend()\n", + "plt.xlabel('time')\n", + "plt.ylabel('concentration (A(t))'),\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given the stochastic nature of this model we can use multiple simulations to make sure that the runs are covering the same model with the same parameters. Our simulations are close, suggesting that there is not a large amount of stochasticity in these models for these initial values." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEGCAYAAACtqQjWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAA2mklEQVR4nO3deXyU9d3v/9dnJnsCBEJCAiRsgjsFDaK3eEtt6w24Ve/i1lq13rWn1db7nPa+q7U9eqpW7ame+rtPF+ldrfirG1WPFLDWurcgEpADsillCWDYsgcCSSaf88d1JVxZJjNJZjLb5/l45EFyzTUz32kqb77fz3cRVcUYY4yJBF+sG2CMMSZ5WKgYY4yJGAsVY4wxEWOhYowxJmIsVIwxxkRMWqwbMNRGjx6tEydOjHUzjDEmoaxdu/awqhaGui/lQmXixIlUVFTEuhnGGJNQRGR3OPfZ8JcxxpiIsVAxxhgTMRYqxhhjIsZCxRhjTMRYqBhjjImYqIWKiJSKyFsisllENonIHe71e0Vkn4isd78WeJ5zl4hsF5FtIvJPnuvz3GvbReROz/VJIrLavf68iGRE6/MYY4wJLZo9lTbgu6p6GnAucJuInOY+9r9UdYb7tQLAfexa4HRgHvBLEfGLiB/4BTAfOA24zvM6D7uvdRJQC9wSxc9jjDEmhKitU1HVKqDK/b5RRLYA4/p4yhXAc6p6HNgpItuBc9zHtqvqDgAReQ64wn29i4Dr3XueAu4FfhXpz2KMMYmmoqKCjRs3dv5cXFzM/Pnzo/6+Q7L4UUQmAjOB1cD5wO0i8lWgAqc3U4sTOO97nraXEyG0p9v12UABUKeqbb3c3/39bwVuBSgrK4vAJzLGmPjjDZLdu521isXNzQAc3bMHkiFURCQPeBH4V1VtEJFfAfcB6v75CPC1aLZBVRcBiwDKy8vtVDJjTELzhkfboUMEqqsB2J+dDThBcmHrOqazldz0dAACTAT+e9TbFtVQEZF0nED5vaq+BKCqBzyP/wZY5v64Dyj1PH28e40g16uBfBFJc3sr3vuNMSapBOuFBBobAfAPG8ZnW9ZyJlvJIUDWcCdomDDH+bP4zCFpZ9RCRUQE+C2wRVUf9VwvcestAFcCH7nfLwWeEZFHgbHAVOADQICpIjIJJzSuBa5XVRWRt4AvAc8BNwKvROvzGGPMUAsWJF16IcPAX1BAemER7P6r88SOIDnzS1B+85C2OZo9lfOBG4CNIrLevfYDnNlbM3CGv3YB3wBQ1U0i8gKwGWfm2G2qGgAQkduB1wA/8ISqbnJf7/vAcyJyP/AhTogZY0zCevfXj7N55w4g+HBWj15IhwlzYhIkXqKaWiWG8vJytV2KjTHxJFiQnOrf7AxnBQJkZXcLkiEODxFZq6rloe5Lua3vjTEmHniDZFz2J8zL3kZGIAAByMnKJn/C2LgYzuovCxVjjBkiwYJkLG6ZeXL8DWf1l4WKMcZEiTdEoK8gmZJw4RGMhYoxxgxS9/Do0GVYC5I2SLwsVIwxZgB6FNezszuL61P9nwDdQwSSNUi8LFSMMSZMtc+/QMMyZ732xmF51OXnUxAI8NmWtXwmd28vxfXkD5HuLFSMMaYP3iCp92+ioLQB8fu51Ocj3e9nbGmZEyStAGMTsrgeSRYqxhjTTbAgme53hrOqMqeQAeTl5jlPSPEg8bJQMcYYutZITm5dx7TSXT2CpIopHJ92ORP/+d4YtjS+WagYY1JWsGL7ybl7KPDXU5M53oKknyxUjDEpJViQdCm27z8KxbMouXl5jFubeCxUjDFJL6wg8Rbbi890aiSm3yxUjDFJqd9BYsX2iLBQMcYkDQuS2LNQMcYkjc07d1CdlkZBW5sFSYxYqBhjEkqw89kBytK3crlsY+wpUyxIYsRCxRiTUD58800ONTYyqqXFWU+S5awnARjr7zipfIoFSYxYqBhj4p63VlKWvpUF7ZspINDLsbqpt9dWvLFQMcbEpaAHWnX0RhLoNMRUYqFijIkbwWZvnR3YTFFaLWmTy7HeSHyzUDHGxFT4K9zLwVa4xz0LFWPMkLMV7snLQsUYMyRsYWJqsFAxxkRN2CclWpAkDQsVY0zUrHnnHbbnj8CXk8OkzI+ZkfaenZSY5CxUjDER1WWYq6gQgAkTJjBz/+sUBqqBMguSJGahYowZtJD1EsYCh2HcTJvBleQsVIwxA9LveonN4EoJFirGmAGxeonpjYWKMSZsXbZOKapiAdvIzMyk5PjfoR2sXmIsVIwxfQq6BxfuHlzFc4ASCxIDRDFURKQUWAyMARRYpKqPicgo4HlgIrALuFpVa0VEgMeABcBR4CZVXee+1o3AD92Xvl9Vn3Kvnw38DsgGVgB3qKpG6zMZkwq8IQK2B5fpn2j2VNqA76rqOhEZBqwVkdeBm4A3VPUhEbkTuBP4PjAfmOp+zQZ+Bcx2Q+geoBwnnNaKyFJVrXXv+TqwGidU5gGvRvEzGZP0vKcnArYHVxza8Jc/seVvb/d5z8r80awtntz580ktdfzuhq9FuWVRDBVVrQKnf6yqjSKyBRgHXAHMdW97CngbJ1SuABa7PY33RSRfRErce19X1RoAN5jmicjbwHBVfd+9vhj4IlEKlX958GUA/vOuK6Px8sbEVPfzSjpPTwSbwRVD3vBYWTyFtUUTADh+tBlOmk1mWvCBme1FTqCcdHBH0HuiYUhqKiIyEZiJ06MY4wYOwH6c4TFwAmeP52l73Wt9Xd/by/Xe3v9W4FaAsrKyAX2GvU3+AT3PmHgV8rwS3FCxwntUPPjGOyxvON7zgUCL8wUcb5PO8PCGRKYvQE5aC7l52UFfv/DYDq4akcYN11wVlfYHE/VQEZE84EXgX1W1wSmdOFRVRSTqNRBVXQQsAigvL7eai0lZ3vPdd++vslpJPwUbdvL2IrrwBER324smQ34vPYn2gPOnz09mmpKTAblZbkg0beCGo2ucx8/8EpR/eeAfJkqiGioiko4TKL9X1ZfcywdEpERVq9zhrYPu9X1Aqefp491r+zgxXNZx/W33+vhe7jfGBOE9331uYD3TM3Yw6pRpVivppr/DTkGHmjwB0d1JB3dwSf0G7kpf07MBQUN9aHsdAxHN2V8C/BbYoqqPeh5aCtwIPOT++Yrn+u0i8hxOob7eDZ7XgJ+IyEj3vouBu1S1RkQaRORcnGG1rwL/Ea3PY0yiCnq+e557vjvTkr5W0t/Cdn+HnXr0Irz67PXFf0j0VzR7KucDNwAbRWS9e+0HOGHygojcAuwGrnYfW4EznXg7zpTimwHc8LgP6Pht/bijaA98ixNTil/FZn4ZA6TO+e7hhAXA3s0fATB+pLJy8izWTpje454u4TGgYafkC4iBiObsr78CEuThz/VyvwK3BXmtJ4AnerleAZwxiGYak5S804KToV7SJTwa90PTIQD21jp/xYwf2bNU2iU8pp3d2cNYleWEx3nHug5V9V3YtsAIl62oNyZJBJ0WnED1kg2//RFb1qzrcd0bHivLzmDt2Zd01ik6ehTddQ0PP+SWwbBizgOuGjOSG8bOiNKnSG0WKsYksLCmBcdLvaTiSdj4BwA27IEtn/a8xQkP6XWYqiM8OsMiP7fPt7PwiA0LFWMSjHda8Oj9r/Xci2vyHIZ6mCvY8FQXx+udPzNHBB22qjy7nC1nnE9uyURW1R0BeobHibAYHcmPYCLEQsWYBOOdFnxW2kcU+WtInzybaAVJOMXw5ZrFlqnuVNs+ptHiz3C+gJwR+eSOHNnl4c4gwQkTC4/EY6FiTAIINi04w1dPIG/yoOslffU0gvUqvMNTHTOnTtQvCmFYcb/bYUGS+CxUjEkAWrmM+ZnbSVftMS3Y1496SbBeR5cpt90K4dB7MdxbCO+cOfVZmyWV6kKGiohkAZcCFwBjgWbgI2C5qm6KbvOMSV3e3sn8zO0Uy2EyJ51DOMNcYYVHqCm3Vgg3A9BnqIjI/8AJlLdxVq0fBLKAacBDbuB8V1U3RLmdcWFPwM+8u5cCcO4EH/feemmMW2SSTbAifIFU05wxnsxuw1zhrN8Ib71Gb1NubQjK9F+onsoHqnpPkMceFZEiYGDb/iaYcyf4YLdTgNwT8Hd+b0wkBSvCN+338clBHzv+yyVd7l9ePCtogbzHFFxbr2GGQJ+hoqp9Vv9U9SAnNoRMat5eSUdvxZhIePcn/8bmQ80AjM/dw8VsJTNwhOFZx9mYM5nv5NzC8TKBMoJuZNhXgdzCwwylcGoq44HrgDl0q6kAr6pqe1RbaEwS8A5T1TY30eDL6HxsRGEj5WM3gSrlRzcD8GHRyexIz+alImdHo8w0JWfYMHJLJnZ53UIsMEx8CVVTeRLn4KtlwMN0ranMA+4WkTtV9d1oN9SYeBVsaxEv7zDVMX827b40xB2u+o89DzL12G52ZJXxYe5pvDP2Yt457SuAExg/s9qGSSCheiqPqOpHvVz/CHhJRDJIkZqKMcHCY3nxLLZc8C9hHe064XAVX6x9k/m175Guzv2Tj1fSkDORmd9bBThHpP5rxFtvzNAIVVP5CEBE7lDVx7yPea5tj2L7jBly3vDwzpw6nnUWXHBW8LpGH1NwL6lYxBUH3yD/2NGe288zmrx42JvLmAgId/HjjcBj3a7d1Ms1YxJGl9P9vAc0ecKjxxkbfdY1ug5TdV1nssxZZzI5vHUmxiSqUDWV64DrgUki4p3yNAyo6f1ZxsSvB194guWaD/Rxup8nPDoD47Mzwnr9/q4zMSbZhOqprASqgNHAI57rjUBKLHg0iSlY/eOlC/6FgwXFlNZX9TzdL+gBTeHra7PHTBviMikgVKhUqupunKnuvRIRcU9tNGZI9TXrKljx/HB+MScHmvjzIMPDK9qbPRqTSEKFylsi8iLwiqpWdlx0Z33Nwam1vIVzTrwxUecNkr5mXQUrnjvDWVMj2qZIbfZoTDIIFSrzgK8Bz4rIJKAOyAZ8wJ+Bn6vqh1FtYZyyfcCiK5wZWH3NugpWPI+UwWz2aEwyCzWl+BjwS+CXIpKOU1tpVtW6IWhb3LJ9wCIn2IaI3l5IyCL6EC0ODHZ0rxXhjTkh7PNUVLUVqBKRXBH5CnCdql4S6nnJyPYBG5weQ1i9bIjo7YX0dwZWtGzeuYPqtDQK2to4O7CZorRa0iaXY0V4Y04IK1TcGsolONOL/wl4Efh1FNtlkkyXqby9DWF12xBxqHshwXQvwl8u2xh7yhTYfxSKy60Ib0w3odapXIyzmeTFOAX5xcAsVbUBYxOSN0i2F50F9DWENSNm7eyLt3cyQ7ZRlFbrPFB8plM7McZ0Eaqn8ifgPWCOqu4EEBFbRW+6qngSNv4BgAdbZ7F8RMe55SeC5KSDO7hE6rjrmq/FrJnhst6JMQMXKlTOAq4F/iIiO4DnAH/fTzGp5umdu3lp1LWQkdt5IFSiBYlXr1OEmWK9E2PCEGr213pgPXCniPwDzlBYuoi8Crysqoui3kITnzy9k6eH3cAnWRMYd7SRsrrdnNdwkMe+8fUYN7B/bIqwMZHRn9lfK4GVInIH8HmcHoyFSqrwhAjAg7UTWF5yE/j87Mkroejwfr69fTUAp54/NzZt7Kfa51+gYdkyAAKFVczP20u6qk0RNmYQQhXqJ6rqLu8196THPwN/FhEBxqnq3ug10cRKlwWIZWewdtJNneefb5/oDnPVHaS0uZFLikdxzZcfilVTB2TNO++wPX8Evpwc5mdVUCzVZE6YhU0RNmbgQvVU/qeI+IBXgLXAIZyTH08C5uL0WO4BLFSS0G+r/ay64BYy0k5se3JS3cHOPy8ZnsldV14cyyb2W5cFjEVVLGAbmZmZjGqppmXkKdY7MWaQQtVUForIacCXcbZrKQGOAluAFcBP3FX3PYjIE8ClwEFVPcO9di/wdZxwAviBqq5wH7sLuAUIAN9R1dfc6/Nwzm3xA/+pqg+51yfhTBwowAm8G1S1ZQD/GwzanoCfq+79CwCXnTKGm689MxbNGLBg54psn/VFoNsCxDid+huuXhcwFpcDJdY7MSYCQtZUVHUzcPcAXvt3wP/GWdvi9b9U9WfeC25wXQucDozFmW02zX34F8AXcHpDa0Rkqdumh93Xek5Efo0TSL8aQDsHpaygivbDRRxtDbAn4Kd10x5uJrFC5bebPmLV1HPI8NNlS5TO2VufTazZW93ZFGFjhk7Yhfr+UtV3RWRimLdfATynqseBnSKyHTjHfWy7qu4AEJHngCtEZAtwEc4Kf4CngHuJQah84dJRrNjhbNXS/u7ltLYnxoxrb71k1QW3cKigmBnt+yN2rkg8sQWMxgydqIVKH24Xka8CFcB3VbUWGAe877lnr3sNYE+367NxhrzqVLWtl/t7EJFbgVsBysrKIvEZOi2ctpCF0xYCMO+9+N4HzDvMtVyzOjdsPJRfwtRAEy8vSJ4gsd6JMbHhG+L3+xUwBZiBc6LkI33eHSGqukhVy1W1vLCwcCjeMi5t+dNzHPp4I1RtZMfJZ1BTVEzhtDOZUTSaG2bMjHXzIqqjdwJY78SYIRR2T0VExgETvM9R1Xf782aqesDzer8Blrk/7gNKPbeOd68R5Ho1kC8iaW5vxXu/8fD2Tl4bPpGPz76UwnwfBzNKmJ7exsszI3tgVax4eyZgvRNjYiXcXYofBq4BNuPMzgJQoF+hIiIlqtqx78WVwEfu90uBZ0TkUZxC/VTgA0CAqe5Mr304xfzrVVVF5C3gSzgzwG7EmfZsuumtCF+Yn8vpOLO5koW3bgLWOzEmVsLtqXwRONktpIdFRJ7FWcsyWkT24qxnmSsiM3ACaRfwDQBV3SQiL+CEVhtwm6oG3Ne5HXgNZ0rxE6q6yX2L7wPPicj9wIfAb8NtW7ILWYSfeXmMWxgZQesmYL0TY2Ik3FDZAaQDYYeKql7Xy+Wgf/Gr6gPAA71cX4GzJqb79R2cmCFmPLyLFpOxCN8h6KwusN6JMTESbqgcBdaLyBt4gkVVvxOVViWwjEAaBx/fAEDOjELyZpcMyfv26J2MLmFG0Wh30WJy1E3AZnUZE+/CDZWl7pfpw5GMZnY35/DVyl1kBNL4x+oqvtePUNm371n2H/hjv96zeMxljBt3Xe+9k5nn9fcjxD1bc2JMfAsrVFT1KfdI4Y5V7tvcM+uNxzkz03ljUzX7geP1BbQcaeN7fdzfPUTq6pxdftsaT6M10E5rQPt8v+EF26irW80HK5/mw+lf5VB6MRPaDzCB/VyQ2R6BTxQfrHdiTOIId/bXXJxV67twZmSVisiN/Z1SnOweufwqcGvg8+7uvWPnDRJviAC0NE+jvnI2uw/OpaHZyezh2elB36+s8AlGjP8IP/sBpbS1kjsaFzO8YBu0w8tLnBJWq+8irv7nvuItvlnvxJjEEe7w1yPAxaq6DcDdl+tZ4OxoNSxZ7T/wR5qaNpOXdxrNdadQs2MWe/bPBaChuZUtGQGyT8kEMrlixjiunx18B4A7fvo2q/giGWmwV0ooaqrluZofMbvuL0zKXwU4vRnYxstL3gQSJ2Csd2JMYgo3VNI7AgVAVT8WkeD/hDZdeHsnNTUbaaot5a9LbyWrKcBBfzu7pme6d2ZybYgg8Vo7YTqH8j0F+TOncsPY0cCJWsoLL/6M9HYnUDoC5rVX3gFgVP4CZl34zQh9ysiy3okxiSncUKkQkf8E/n/35y/j7N1lwrB+w7Ok+XZwtKGMtMB4jlQ6M6GP5fk5ZXoRD381/F2NH3zhCZZrPgB7RpRQWlfFy/8UvCDv9Eqcnsmjv7mPsuEr8fsCDC/YRkNgM2vXvQecKPjHkvVOjEl84YbKN4HbgI4pxO8Bv4xKi5JQS1MbbYFSNlf8OwBjpxdw978PbHv85ZrvhEl9FaX1VVwidWE/t3j6jSxZ/3kAzt/9KhPGr6Ghuq6z4N/Rm4pVwFjvxJjEF+7sr+PAo+6XCYOmN0B6E2vXXU/O8EqONpRx98/mRuS1S+ur+OsAtqa/fnZZ59Dak4vz+KjiIgAmFL3NiLLVMQmYiooKNm7cCEBZ5sdcrlusd2JMAgt1Rv0Lqnq1iGzE2VqlC1WdHrWWJbr0I1Q2j+YHKy5EmMt0/zGuHOBL9Rjyqq/q+wlhuNkz5Pbk4gI2VMwFYFzRW+ROWM2nR+spyKzkYMOxqIbKh2++yaHGRka1tPCZtE0U+muAKdY7MSZBheqp3OH+eWm0G5Jszh65DdFT8DWWshtFfH2vOenLYIa8wuENmMfvzaD+3QtpyvaRNeshcvM/5ulllwCQl7+AK+fcNuj38/ZOxjWtYkH7JgpoI8NXTyBvsvVOjElgoc6o7/gn8bdU9fvex9ydi7/f81mpyzvL68IpG5hVuJUrF65g3t1Le3bz+mmgQ179NedzE/j4A+eEgiO7zyVLV5PnV2fmWMtW1q77W+e9Ax0a6947KfLXkH7SbAB81jsxJqGFW6j/Aj0DZH4v11Kad5aXL1DK4QOzB/xaT396mJcOOIXqffkljKsb/JBXOE6/YBynX+AcornpvTF8/IGzmnPf7qXklDrDYsCghsam1b3HAtlmvRNjklComso3gW8Bk0Vkg+ehYcDfen9W6uptltdAPb3+Qz7x5zGurorCNjh73wZgaHca9gbM4/ceo/bdf6Qp2zkstL9DY97pwvMztzNaask8yZlabb0TY5JHqJ7KM8CrwIPAnZ7rjapaE7VWJbB2v0RkltfRxkYK2xr59nvOViunzjpr0K85GN5hMeh9aOzpZc4JBb0FjFYuY37mdtJVKZBqmjPGk2m9E2OSTqiaSj1QD1wHICJFQBaQJyJ5qloZ/SbGN28dpWPqcKRkpME1v46Pv3i9vRboOjRWtXMpI8p61l4aGxs5eHAiR5rO4qL0v1PMYTInnQNMIdN6J8YkpXA3lLwMZ43KWOAgzln1W4DTo9e0xBBuHWVPwN+5yeS5E3zce2tiT6gLVnvpCJiG6jqmNX/E6QcqaG14nQI5zJG2kdY7MSbJhVuovx84F/iLqs4Ukc8CX4lesxJHOHWUcyf4YHcAcMKl4/vuorEeZSh4A+bJxemda17mFF1P/vFmGnMCHMFHVc5ERsWwncaY6As3VFpVtVpEfCLiU9W3ROTn0WxYIglVR/H2SoJtiQ/RX48yFKYcXclxv1OQb23NpC4T/jpphruZ5Q6OrbseiI+9xowxkRduqNSJSB7wLvB7ETkIHIles1LXUK1HiZYuBfmWI1QfL4XK+7sMi8XLXmPGmMgLN1SuAJqB/4qzQ/EI4MfRalS8W/POr6ipc2Y65Q6r5Ehj5Irziaj7dOFiOVGQH3vml7iy/Kwuw2LevcZyhley/0CThYoxSSJkqIiIH1imqp8F2nFOgExpB6qXkZGzmyONZQSOlVLZkHxnwfdHONOFg+01Nr38YTLzd/DaK5cB8X3GizEmtJChoqoBEWkXkRHuFOOU1xpQjtWXsqTuRwBcMWNciGd01TETrC7NT8sYPzkFR53rCVSc76t3Emq6sDdgHv3Ne5RJ/J7xYozpn3CHv5qAjSLyOp5aiqp+J/hTkpvfJzz/jf73ULwzwQ62Ce0NPnLcCWOJVJz3nn2Srkpz5sAWM8b7GS/GmP4JN1Recr+8BrtHYkryzgQ75f4/QVt7QhbmT/VvZqrvE8/ZJ1MG9DrBzngZV/QWIyatIT8fmpo2sx8sVIxJAOGGSr6qPua9ICJ3BLvZJB/vcBc4Q14FUk0kzz7xDos98D2o2fmPbF7t57TZP6WlZSNrbTqyMXEv3FC5EXis27WbermWtF548Wekt78JpOaML28xHoj6/l1jpxfw6YZqAI7sPIe0gFJZa8NixsS7ULsUXwdcD0wSEe+qvWFASm0omd7+ZmeYHGkso9V30YBe5+mVS3mpvg2AY2l5ZLW1R7KZERW8GA/R3r8r2GyxjunIbY2N+LN3caT+uIWKMXEkVE9lJVAFjAYe8VxvBDb0+owkdqSxjCsXrhjUazx9oI1PcpzzUbLb2gkcCXRZZR9P+4JFqhg/WN6AueMBP3l/m0NOZhpnznqY9pEf27CYMXEk1C7Fu4HdQGovxIigoy1Q2FzFtz/5gA+PTub/+sagCND3vmCxEKlifCTN/vwEXlm/D4Bhe2YxQaGyvuewGFjIGBML4e5SfBXwMFAEiPulqjo8im1LWhl+uOaeh7im2/W+9gUbKt2HvCJdjB+sYLPFvMNigA2NGRMj4Rbqfwpcpqpbwn1hEXkCuBQ4qKpnuNdGAc8DE4FdwNWqWisiglP0XwAcBW5S1XXuc24Efui+7P2q+pR7/Wzgd0A2sAK4Q1VtmvMgJdJhWsGGxQAbGjMmRsINlQP9CRTX74D/DSz2XLsTeENVHxKRO92fv49z3v1U92s28CtgthtC9wDlOOti1orIUlWtde/5OrAaJ1Tm4ZxSafqpoqKCjRs3AiTsYVreYTHoe2jMAsaY6Ak3VCpE5Hng/wDHOy6qavcFkXgee1dEJna7fAUw1/3+KeBtnFC5Aljs9jTeF5F8ESlx73294+hid0X/PBF5Gxiuqu+71xcDXyROQ6U/56TE4jCvD998k0ONjYxqaSEtrY0jmh+3vZNgvMNiEHxoLG3YZgsYY6Io3FAZjjMsdbHnmtJzlX0oY1S142/U/cAY9/txwB7PfXvda31d39vL9V6JyK3ArQBlZQNbX3KsddKAngfhn5MS7mFekTat7j0WyDYKaCPDV09g2OQhed9oCjY0ZgFjTHSFFSqqenOk31hVVUSGpAaiqouARQDl5eUDes/rrv/FoNoQzjkp4R7mFQndC/KjpZbMk5w1KL4EGfIKl3dobPXWczl19/kMz063NS/GREG4s7+m4dQwxqjqGSIyHbhcVe/v5/sdEJESVa1yh7cOutf3AaWe+8a71/ZxYris4/rb7vXxvdxvwhQva1CGgndo7JnVlb0GjBX2jYmMcIe/fgP8G/A4gKpuEJFncM6u74+lOFu+POT++Yrn+u0i8hxOob7eDZ7XgJ+IyEj3vouBu1S1RkQaRORcnEL9V4H/6Gdb4l6k6yvegnxZ5sdcrlviag3KUAgWMFbYNyYywg2VHFX9wJn526mtryeIyLM4vYzRIrIXZxbXQ8ALInILzqLKq93bV+BMJ96OU7u5GcANj/uANe59P+4o2gPf4sSU4leJ0yL9QEWjvuItyH8mbROF/hriaQ3KUAu15sW24Dem/8INlcMiMgV3u3sR+RLO9i1BqWqw//I+18u9CtwW5HWeAJ7o5XoFcEbfzU5c0aiv9CjI502GJB3y6q9Qe43Z0cfGhCfcULkNp9B9iojsA3YCX4laq5JBxZOw8Q/O91k3g883qJdr1wA3/8mZL7Fg8gIWTlsYXjO6rUEZTfIW5CMlWMCc4R59/PSySwDIy1/AlXN6/beQMSkr3NlfO4DPi0gu4FPVxug2K/E9uG43y4c5YbJnRAmlTdUDfq10Xxo7Wv343ruSdg3w+uaDLPxv4T03GdagxJI3YJ799V8R+Rt5PmV4wTZo2cradX8DbFjMmA7hzv76CfBTVa1zfx4JfFdVf9jnE1PY8hHTnTBpbqS0uZFLRg4b8GtddXopf9x6AIBtx47jqy4J+7nJuAYlVqaffjMff7AAgKqdS21YzJheSDjbZYnIh6o6s9u1dap6VtRaFiXl5eVaUVER9feZ87yzLjTSRwV31Ff+9MDlQe/pugZlqXMOykT3HJQzvwTlEV92lHKeXLyx8xCx6eUPk5m/p/PgtlbfRVz9z9+LZfOMiTgRWauq5aHuC7em4heRTFU97r54NpA5mAaagQs11TiV1qDEindY7IUXK2hrdE4FHV6wDdjGy0ucny1gTKoJN1R+D7whIk+6P9+Ms3eXGWLhTDWOx3NQkpkTGk5w9Dx2+s3Ox4xJBWENfwGIyHxOTAd+XVVfi1qroijRh7+85t29lMqAjzMnFVD/aRUTj+1mBvttyCtOvLxkQecR1GC9FpPYIj38haom3QLDRHdeRhsZzVnUVx5iZyCNeilmhu63Ia840eq7yO2p2LCYSR128mMCmzszg4s2NQGwquldvuBfzcxJRTbkFSeCDYt1DxiwkDHJI2onP6aip1cu5aV6Z/eaffkljKvrc9OBQZNP97Gpzpnl9fnM1UyRvVRUtgOF7NQphLc80gyFYAED1osxySWaJz+mnKcPtPFJjhMmhYEqzj60I6rv553llUsbO7WMH7bcze6AMHrPUQuVOOUNGOi9F/P0srcAW7VvEk/UTn5MRUdboLC5im9/8gEAp54/N6rv553lpfsO0eqbwuKCifzLzr1sb87lmsdXAXDFjHFdTkU08cUbMs/++n5yR3Zdtf/0shWABYxJDEN98mPSy/DDNfc8NCTvNdX/CQW+amAKMu4zZJz5JYrKp3P2/9gObgF/a8DP6p01nVu8W8DEt95W7ef5lexhlRz49I9c87iz3th+jyZexezkRzMwXVfLC9XtBYztNsvLW8Bf0zCMV+UY22q20dQ0gkPNh+wvozh2+gXjOP0C52TsTe+N4eMPnJ0TWsfdTUn+Hq6V+wi0K4FPhbXr8gHbd8zEl3Bnf43HOQTrfPfSe8Adqro3+LNMNGjlMuZnbiddlQKppjlzfI97Lrz8UnB3cRn18ze47FA6+2nlPoXdB7FhsQThDZg171xOTd0KcjKgpbkNjiuVf7fzXkz8CXf460ngGeis/X7FvfaFaDTKBDfV/wkFUk3mpHOAKWSG2L5+wnmncXT9IUZQxIKGKlbIUeu1JKBZF34T+CbQdd8xO+/FxJtwN5Rcr6ozQl1LBNFcUR+tVfTdN4hMV2XsfVv7/Tqbfv4GGYeU/Xk1/LgxnV0q5A6vA+Bzpw/nkcujt/rfRIdtbGmGSqRX1FeLyFeAZ92frwMGfkCI6ZdwhrzC4e21fLH+EK/TyrGmUWwN+HlxJeytsmGxRGMbW5p4E25PZQJOTeU8nFlfK4HvqGpldJsXeZHuqXgXPK73OWtUIt1T+fRHp1Dgq47oXl5Nq6s4uv4QAEt2ugHjb6Ey4KNsOPzpB5eGeAUTz3qufYGG6pMBCxgzMOH2VMLeUDJZRDpULn75pc4Fjy0BOO/QDh67Y/D/wdY+/wINy5YBkFb2PuLzDWjIKxzvLF2Gb9NRAB6pH852Aoz3O7sf97a1vkksfQVMRl4axWPyACvym75FNFRE5Cmc2V517s8jgUdU9WuDbehQi3SozHn+JVoC8F3Pgsfpn5836Nfd9N8uJj97F+LzMcpXTY2/mLH/feOgXzeUexct4/3d7QBsDfgBOCvLOTrnslPGcPO1ZwZ9rol/3oBJCzj/7bf5pTNs2hpPA2BU/gJ3coAxjkiHSm8nP/a4lgiiESoQ+eL8pz86hVG+amqzSgE4Pu1yJv7zvRF9j1BuffRxdh0uwif+HgEDFjKJzlvkH1b8JiWlH5Dm8/XozYANmZnIF+p9IjJSVWvdFx/Vj+eaAappL2DsXeti9v5fuHQUK3Y4J0zmrptKQ9OpHG11hsW2BvysW1/JH7ceACxgEpG3yP/M6sn8Yf18AGbX/YVJ+as6H+so+r/2yjuA9WJM38INhkeAVSKyxP15IfBAdJqUurqvlk+Pcb1r4bSFLJzmLE1aMnlJZ8BA15CxgEl8188u88z4O6/LY4/+5j7Khq/E7wswvGAbDYHNvPaKsx9Z9vAMckc4vVeryRgIf5uWxSJSAVzkXrpKVTdHr1mpKVJTh6PBGzDQNWQsYJJb8fQbWbL+8wBM2bucmWMrSPMFSAsoLc1tNDe0kDZss63sN4DN/hq0SNZUojF1eCgs+XgJK3Y4/3JtcAPG76nDzJ40CrD1L8ngmdWVnZuTNm+t59QWP8Oz0ztX9mdkp5E2zPn3Zn7+bMACJlnYlOIg4j1UgKhNHR4K3oApWfkFNraMoNUfsIBJQqECxjurzAIm8VmoBBFPoeKtocDgtmCJR971LxvqCzoXWFrAJB9vwBQfbqOo1pnQYQGTPCxUgoinUHnnB5cxMW17Z0G+wFdNc8Z48u/+MGLtixehAiZ/hLO6f1T2KAqzCwELm2TQ2+aXti4mMUV6SrGJgq47DkM4uw4nKu92/O1LlzG9e8A0jSKgAWgMUC92uFiy8E5bfnJxARsq5gLedTEnZpS9vMQp8tuamMQWk56KiOwCGoEA0Kaq5e7al+eBicAu4GpVrRURAR4DFuCcPnmTqq5zX+dG4Ifuy96vqk+Feu9I9FQefOEJlms+AHtGlFBaP7D9vpKhhjJY3j3IDjUfoqbZ+Vdtb72ZU9ytY8j1MaKgALCwSVTe4bLZvhPrYrovvDxW/Q9kHXFOwpx2zpjO82XM0Ivr4S83VMpV9bDn2k+BGlV9SETuBEaq6vdFZAHwbZxQmQ08pqqz3RCqAMpxNrlcC5zdsUAzmEiEypznX+oME4BLpI67rg5vx5qh3NMrkXmHy95sSWNVi9OpzgpkAPQ6dNadbeefeILtU9axpUxGtvP/AxsuG3qJGCrbgLmqWiUiJcDbqnqyiDzufv+s976OL1X9hnu9y33BRCpUYGB1lFjt6ZUsgtVmurNaTeJ7+a+/oKnOmUnYfjRAjtLrNjLpfiHd7+t8ngVOdMR7TUWBP4uIAo+r6iJgjKpWuY/vB8a4348D9nieu9e9Fux6DyJyK3ArQFlZbP8yGZlbyShfLbVZpdSSQ8u0y2PankTjrc3MXF3FwvW991I6t/PvVqupDPj4dH8lr9feA8CCyQu6LOo08ePKObcBtwHOcNkfOobLPNvItLW309YOrW5PpvuKfwuYoRerUJmjqvtEpAh4XUS6jP+oqrqBExFuaC0Cp6cSqdcdqFjv6ZUs8maXkDe7pNfHbvQEzolaTauztX9zHlXvXUlAAyx6F34rzs4Ats1//Aq2jYy3NgNdV/zbljKxEZNQUdV97p8HReRl4BzggIiUeIa/Drq37wNKPU8f717bhzME5r3+dpSbbhKEN3CKPNe3P7excwuZ1kALre3OAWtbA3627oD373b3N/NMBvCyobP40jVs4JnV4/jD+kuA3reUqT7czPCCbdTVreajimcA681E2pDXVEQkF/CpaqP7/evAj4HPAdWeQv0oVf13EbkEuJ0Thfr/T1XPcQv1a4Gz3Jdeh1Oor+nr/WNRU4nUGfMmerznyHgnA3h1X7TpZWETf4ItyOxtm/+O9TLWmwkunmsqY4CXnZnCpAHPqOqfRGQN8IKI3ALsBq5271+BEyjbcaYU3wygqjUich+wxr3vx6ECJVbieaNI4/AOe3knA3h1TAyor+xax+lYU7N46XrngvVy4kL3XkwH7zb/oTbItN5M/9mK+gHob08lUTeKNF0FC5tgU569+lprAxY4sRJs/7Ki0ncYPXY1gPVmXHE9pTiWYhUqkNqLHFPFQIInVOD0xkIo8roX/TtMOdrRm/F1WS/TsRtzqoRNPA9/pYSuixzbEZ8vxDNMMvBOefa6wPN99+DpETgNUH+kl6nSbtis3lljW9hEQfDhshPF/957M3a2jJf1VAYgnJ7Kn791G9v9Pnw5OczP+iPpfr8tcjQhBevpTKp3ZrLtHFHVJYT6WuQZjIXQwAXrzYR7tkx3iRQ4NvwVxEBDpb/7fb3zg8uYmP53MrKyGNWyj5aRJzPsO+8OtNkmxYWaPHDM3+Is8gT84gTNkYxmGjOau9xfV+8Ejs1gi6xwzpbp0LEDQF+BE49hY6ESxEBDpb/7fVlx3gyFYBtyens2Xq82t/G6ttKa0/W/+77CBixw+iPYVGaAhuZWgF4DJyMvjeIxedTVORME4i1sLFSCGEyogBXnTWLwho1Xy856oPewWdOW3dnL8U4WWL3Tmalv+6gNXrDAyW9y1kjV5fm6zDyD+AkbC5UgLFRMKgsWNn31cry9m8bWRgCGpQ/r7N10hI3tCj1w3sPMvOIpbCxUgohmqNjKeZMMutdvOkImY9KILuHT24SB/kyLDsZ6PydEMmyG5Z3KtGk/GnBbbEpxDNjKeZMMuk+L9vZuCrMLO4e+TgY61pgvrq7iL0eOAyGmRXv1Ejzdp0t7pWLYeE/O9PKGzcE9F3Jwz4XAibBZn+ejqPRkRo9dTUN1HQDHWvczbVr022yhEkFdjwdO3qOBTWrpazfoDt9jOh0HAAebqeY1qb4EGmCn7Oly/bTsNCrasmitOgKALy8d/7AMW5vTTX/DBiBzdNaQtM1CJcKq2wsYe/PyWDfDmJgJtgDUK1jwzJJaZqU7NZtJ9SVwDHa27uG07DT+Qivbag5RV1/I6p01/PTNN3t97VSeSBAsbIaShYoxZsgFC54lHy9hxQ7n/JPyT09m+oHJANzSXMgtwM6MKt7MPu7Ucpp6Tn8OaIC6o7XU5NT0CJ9gC0NTLXiizUJlkGw7FmMiZ+G0hb2exNlR1zmZEV1qOd217KyH9tHspGv4eMPGq3vwjBlTydixOwE7FXSgLFQG6dPV/0l+WceZ87XU+Itj3SRjkk44dR0IHj7esPHyBs/WgJ+6+kLk7zN6nArq3Z3AgqdvFiqDZGfOGxM/goWPN2y8vMHzckMTrx1x6jzeU0GzAhlkNWeQ25LdI3h++rcGHsj5XZ9tSrX1OxYqEWBnzhsT38Lp6XzD/erOO6XaGzztx9rIbc/mWFNLL89ybA34eXElbFq9tNfHk7EHZKFijDF98AaSN3iC7U7g5V2/011fPaBgQ29e8doDslAxxpgB6O/6ne6C9YCCDb15de8BBQse74y308YO557LTg/78w2UhUqYTmqpi3UTjDFJJFgPyCtYb6j7Dga9BU9AA9AYoF6c5++p2Q8WKvHjdzec2Ob+40dvJq92FQCjfNXUtA9sjyNjjOlLsN6QtwcUepNQZ7v946OHZp9HC5UByKtd1RkmNe0FNI08L9ZNMsakqGDBUxSDtoCFyoDVtBfYDsTGGNONLf82xhgTMRYqxhhjIsZCxRhjTMRYqBhjjIkYK9SHyaYRG2NMaNZTCVPHNGLAphEbY0wQ1lPpB5tGbIwxfbOeijHGmIixUDHGGBMxCR8qIjJPRLaJyHYRuTPW7THGmFSW0KEiIn7gF8B84DTgOhE5LbatMsaY1JXQoQKcA2xX1R2q2gI8B1wR4zYZY0zKSvRQGQfs8fy8173WhYjcKiIVIlJx6FDfJ7UFc8RfwhF/3wfyGGNMqkuJKcWqughYBFBeXj6gQwWm3vtWRNtkjDHJKNF7KvuAUs/P491rxhhjYiDRQ2UNMFVEJolIBnAtsDTGbTLGmJSV0MNfqtomIrcDrwF+4AlV3RTjZhljTMpK6FABUNUVwIpYt8MYY0ziD38ZY4yJIxYqxhhjIsZCxRhjTMRYqBhjjIkYUR3QWsCEJSKHgN0DfPpo4HAEm5NIUvmzQ2p//lT+7JDan9/72SeoamGoJ6RcqAyGiFSoanms2xELqfzZIbU/fyp/dkjtzz+Qz27DX8YYYyLGQsUYY0zEWKj0z6JYNyCGUvmzQ2p//lT+7JDan7/fn91qKsYYYyLGeirGGGMixkLFGGNMxFiohEFE5onINhHZLiJ3xro9Q01EdonIRhFZLyIVsW5PtInIEyJyUEQ+8lwbJSKvi8gn7p8jY9nGaAny2e8VkX3u73+9iCyIZRujRURKReQtEdksIptE5A73etL/7vv47P3+3VtNJQQR8QMfA1/AOa54DXCdqm6OacOGkIjsAspVNSUWgInIPwJNwGJVPcO99lOgRlUfcv9hMVJVvx/LdkZDkM9+L9Ckqj+LZduiTURKgBJVXSciw4C1wBeBm0jy330fn/1q+vm7t55KaOcA21V1h6q2AM8BV8S4TSaKVPVdoKbb5SuAp9zvn8L5Dy7pBPnsKUFVq1R1nft9I7AFGEcK/O77+Oz9ZqES2jhgj+fnvQzwf+wEpsCfRWStiNwa68bEyBhVrXK/3w+MiWVjYuB2EdngDo8l3fBPdyIyEZgJrCbFfvfdPjv083dvoWLCMUdVzwLmA7e5QyQpS50x41QaN/4VMAWYAVQBj8S0NVEmInnAi8C/qmqD97Fk/9338tn7/bu3UAltH1Dq+Xm8ey1lqOo+98+DwMs4Q4Kp5oA77twx/nwwxu0ZMqp6QFUDqtoO/IYk/v2LSDrOX6q/V9WX3Msp8bvv7bMP5HdvoRLaGmCqiEwSkQzgWmBpjNs0ZEQk1y3cISK5wMXAR30/KyktBW50v78ReCWGbRlSHX+huq4kSX//IiLAb4Etqvqo56Gk/90H++wD+d3b7K8wuNPofg74gSdU9YHYtmjoiMhknN4JQBrwTLJ/fhF5FpiLs+33AeAe4P8ALwBlOEcnXK2qSVfQDvLZ5+IMfyiwC/iGp8aQNERkDvAesBFody//AKe2kNS/+z4++3X083dvoWKMMSZibPjLGGNMxFioGGOMiRgLFWOMMRFjoWKMMSZiLFSMMcZEjIWKMVEkIvki8i33+7Ei8odYt8mYaLIpxcZEkbuP0rKOHX+NSXZpsW6AMUnuIWCKiKwHPgFOVdUzROQmnN1uc4GpwM+ADOAG4DiwQFVrRGQK8AugEDgKfF1Vtw71hzAmXDb8ZUx03Qn8XVVnAP/W7bEzgKuAWcADwFFVnQmsAr7q3rMI+Laqng18D/jlUDTamIGynooxsfOWe3ZFo4jUA390r28Eprs7xv4DsMTZmgmAzKFvpjHhs1AxJnaOe75v9/zcjvPfpg+oc3s5xiQEG/4yJroagWEDeaJ7nsVOEVkIzk6yIvKZSDbOmEizUDEmilS1GvibiHwE/M8BvMSXgVtE5P8Cm7CjrE2csynFxhhjIsZ6KsYYYyLGQsUYY0zEWKgYY4yJGAsVY4wxEWOhYowxJmIsVIwxxkSMhYoxxpiI+X844dExNMnBagAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "times = np.linspace(0, 24, 100)\n", + "\n", + "for i in range(3):\n", + " values = model.simulate(k, times)\n", + " plt.step(times, values[:,0])\n", + " plt.step(times, values[:,1])\n", + " plt.step(times, values[:,2])\n", + " plt.step(times, values[:,3])\n", + "\n", + "plt.xlabel('time')\n", + "plt.ylabel('concentration (A(t))'),\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To obtain higher stochasticity, we can use a model with smaller initial molecule counts to get more stochasticity, as in the example below." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEGCAYAAABo25JHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAbsUlEQVR4nO3de5RV5Znn8e+PggKhQEBKChEEb0GMBhOiycSxjSYG8RZdXmIS2xBnyHQubWb1JSSZGc1KutWkzWVmJd2aKKIrRo2tLYoajaOdRI1JkdCgeEtQVKa4KLcqSigonvnj7NJjUVVnn6L2OdTZv89aZ9XZ79777GdzFvXUe9nvq4jAzMzya0i1AzAzs+pyIjAzyzknAjOznHMiMDPLOScCM7OcG1rtANKYMGFCTJs2rdphmJkNKkuXLn09IhpLHTcoEsG0adNobm6udhhmZoOKpNVpjnPTkJlZzjkRmJnlnBOBmVnOORGYmeWcE4GZWc45EZiZ5ZwTgZlZzg2K5wgGuzVrfsbadfdWOwwzG2RGNxzFkUf+z8yv4xpBBaxddy9tbSurHYaZWY9cI6iQhoaZvO+9t1Y7DDOzPbhGYGaWc64R9EO5bf5tbStpaJiZYUS14danXuGeZWuqHYbZPmPmQWO44qyjM7+OawT9UG6bf0PDTJomnpVhRLXhnmVrWNmytdphmOWOawT95Db/bMycNIbbP/fBaodhlitOBL34/b//Mxs339/jvrr9XqbzzWnc/egfWN+6ndfbOiocXW06fMcuRg4fyt3X/qHaoZjtEyZMaeA/X3hk5tdx01AvNm6+H414qcd9nW9OY+emEwF4va2D9h27KhlazRo5fCgTGuqrHYZZ7rhG0IfYPp2PndN3p/Bt1z0JDHdzhpkNWq4RmJnlXC5rBH21/3fRiJeI7dN73Fc8zHFly1ZmThoz4DGamVVKLmsEfbX/d4nt0xk/dm6P+4qHOc6cNIZzZk0e8BjNzCollzUCSNf+3xcPczSzWpHLGoGZmb2tpmsEz/x6DS/8bh0A20fdz4gDngBg1OhX2NY6lYuue7Jfn+t+ATOrJZnWCCS9LGmFpGWSmpOy8ZIelvRi8nNcVtd/4XfreP21NgBGHPAE+41+BYBtrVN5aXP/m3XcL2BmtaQSNYIPR8TrRdsLgEci4mpJC5Ltr2R18QkHN3Du37yXW+4TbbsO4ZILlmR1KTOzQakaTUPnACcn7xcBj5FRIug44HrqR73CLfeJcfWr2dRxSBaXMTMb1LLuLA7gIUlLJc1PyiZGREvyfi0wsacTJc2X1CypecOGDf26+O76OjqTO9zUcQgNvQwHNTPLM0VEdh8uTY6INZIOBB4GvgQsjoixRcdsiog++wlmz54dzc3NmcVpZlaLJC2NiNmljsu0RhARa5Kf64G7geOBdZImJUFOAtZnGYOZmfUts0QgaZSk0V3vgdOAp4HFwKXJYZcC92QVg5mZlZZlZ/FE4G5JXde5NSIelPR74A5JlwGrgQszjMHMzErILBFExCrgPT2UvwGcmtV1zcysPJ5iwsws55wIzMxyzonAzCznnAjMzHLOicDMLOecCMzMcs6JwMws55wIzMxyzonAzCznnAjMzHLOicDMLOecCMzMcs6JwMws55wIzMxyzonAzCznnAjMzHLOicDMLOecCMzMcs6JwMws55wIzMxyzonAzCznnAjMzHLOicDMLOecCMzMcs6JwMws55wIzMxyzonAzCznMk8Ekuok/VHSfcn2dElPSfqTpNsl1Wcdg5mZ9a5kIpA0QtL5kn4g6eeSbpb095KOTnmNy4Fni7avAb4XEYcDm4DLyg/bzMwGSp+JQNI3gMeBDwJPAdcBdwC7gKslPSzp2D7OPxg4A/hJsi3gFODO5JBFwMf37hbMzGxvDC2x/3cRcUUv+74r6UBgah/nfx/4e2B0sn0AsDkidiXbrwGTezpR0nxgPsDUqX1dwszM9kafNYKIWFJi//qIaO5pn6QzgfURsbQ/gUXE9RExOyJmNzY29ucjzMwshVI1gq7mnYuBE4GDgDeBp4ElwAMRsbuXUz8EnC1pLjACGAP8ABgraWhSKzgYWLPXd2FmZv1Wqo9gIXAjsINCJ+/FwOeBXwJzgN9IOqmncyPiqxFxcERMAz4B/N+I+BTwKHB+ctilwD0DcB9mZtZPpWoE10bE0z2UPw3clQz9LLcB/yvAbZK+BfwRuKHM883MbACV6iN4GkDS5d33Sbo8Ijoi4k+lLhIRj0XEmcn7VRFxfEQcHhEXRMSO/gZvZmZ7L+0DZZf2UPaZAYzDzMyqpM+mIUkXA58EpktaXLRrNLAxy8DMzKwySvURPAG0ABOAa4vKW4HlWQVlZmaVUyoRvBIRqyk8WdwjSYqIGNiwzMysUkr1ETwq6UuS3jEySFK9pFMkLaLn/gMzMxskStUI5gCfBX4maTqwGdiPQgJ5CPh+RPwx0wjNzCxTfSaCiNgO/Aj4kaRhFPoK3oyIzRWIzczMKiD1egQRsTMiWoCdkj4tqc95iMzMbHBIlQiSPoFzJf2cwiiiU4F/yTQyMzOriFLPEZxGYX6h0yjMEXQz8P6ImFeB2MzMrAJK1QgeBA4FToyIT0fEvUBvs42amdkgVGrU0HspzBz6S0mrgNuAusyjMjOziik16dyyiFgQEYcBVwCzgGGSHkhWEDMzs0GunFFDT0TElygsJvM94AOZRWVmZhVTamGaad3LImJ3RDwUEZ9VwcGZRWdmZpkr1UfwHUlDKKwithTYQGHZycOBk4GPUGgyei3DGM3MLEOlniy+QNJM4FMUppqYBLQDzwL3A/+YPH1sZmaDVMnF6yNiJfD1CsRiZmZVkLqz2MzMapMTgZlZzjkRmJnlXMk+gi6SJgOHFJ8TEb/KIigzM6ucVIlA0jXARcBKoDMpDsCJwMxskEtbI/g48K6I2JFhLGZmVgVp+whWAcOyDMTMzKojbY2gHVgm6RHgrVpBRPx1JlGZmVnFpE0Ei5OXmZnVmFSJICIWSaoHjkyKno+InX2dI2kEhc7k4cl17oyIKyRNp7CuwQEU5i+6JCI6+nsDZma2d9KuWXwy8CLwQ+BHwAuSTipx2g7glIh4D4V1DOZI+gBwDfC9iDgc2ARc1q/IzcxsQKTtLL4WOC0i/iIiTgI+RmFNgl5FQVuyOSx5BXAKcGdSvojCiCQzM6uStIlgWEQ837URES+QYhSRpDpJy4D1wMPAn4HNEbErOeQ1YHIv586X1CypecOGDSnDNDOzcqVNBM2SfiLp5OT1Y6C51EkR0RkRsyisanY8MCNtYBFxfUTMjojZjY2NaU8zM7MypR019FfAF4Cu4aK/ptBXkEpEbJb0KPBBYKykoUmt4GBgTRnxmpnZAEs7amgH8N3klYqkRmBnkgT2Az5KoaP4UeB8CiOHLqWw+pmZmVVJn4lA0h0RcaGkFRQ6et8hIo7t4/RJwCJJdRSaoO6IiPskrQRuk/Qt4I/ADf0P38zM9lapGsHlyc8zy/3giFgOHNdD+SoK/QVmZrYP6LOzOCJakrefj4jVxS/g89mHZ2ZmWUs7auijPZSdPpCBmJlZdZTqI/grCn/5HyppedGu0cDjWQZmZmaVUaqP4FbgAeAqYEFReWtEbMwsKjMzq5g+E0FEbAG2ABcDSDoQGAE0SGqIiFeyD9HMzLKUdtK5syS9CLwE/DvwMoWagpmZDXJpO4u/BXwAeCEipgOnAr/NLCozM6uYtIlgZ0S8AQyRNCQiHgVmZxiXmZlVSNq5hjZLaqCw0MxPJa0HtmUXlpmZVUraGsE5FNYt/u/AgxSmkz4rq6DMzKxyStYIkrmC7ouIDwO7KSwmY2ZmNaJkjSAiOoHdkvavQDxmZlZhafsI2oAVkh6mqG8gIv6691PMzGwwSJsI7kpexfaYltrMzAaftIlgbET8oLhA0uW9HWxmZoNH2lFDl/ZQ9pkBjMPMzKqk1OyjFwOfBKZLWly0azTgSefMzGpAqaahJ4AWYAJwbVF5K7C8xzPMzGxQKTX76GpgNfDByoRjZmaVlnb20fMkvShpi6Stklolbc06ODMzy17aUUPfBs6KiGezDMbMzCov7aihdU4CZma1KW2NoFnS7cC/ATu6CiOi+0NmZmY2yKRNBGMozD56WlFZsOfTxmZmNsikSgQRMS/rQMzMrDrSjho6UtIjkp5Oto+V9D+yDc3MzCohbWfxj4GvAjsBImI58ImsgjIzs8pJmwhGRsTvupXt6usESVMkPSpppaRnuiapkzRe0sPJcwkPSxrXn8DNzGxgpE0Er0s6jGTqaUnnU5h6oi+7gL+JiJnAB4AvSJoJLAAeiYgjgEeSbTMzq5K0o4a+AFwPzJC0BngJ+HRfJ0REC0myiIhWSc8Ckymsf3xyctgi4DHgK+UGbmZmAyPtqKFVwEckjQKGRERrOReRNA04DngKmJgkCYC1wMRezpkPzAeYOnVqOZczM7MypB019I+SxkbEtuSv+3GSvpXy3AbgX4EvR8Q75ieKiKCXlc4i4vqImB0RsxsbG9NcyszM+iFtH8HpEbG5ayMiNgFzS50kaRiFJPDToqeQ10malOyfBKwvK2IzMxtQaRNBnaThXRuS9gOG93E8kgTcADwbEd8t2rWYt1c8uxS4J324ZmY20NJ2Fv8UeETSwmR7HoWO3r58CLgEWCFpWVL2NeBq4A5Jl1FY6+DCsiI2M7MBlbaz+BpJy4FTk6JvRsQvSpzzG0C97D61l3IzM6uwtDUCIuIB4IEMYzEzsyrwCmVmZjnnFcrMzHLOK5SZmeWcVygzM8s5r1BmZpZzXqHMzCznUiUCSQcD/4fCQ2IAvwYuj4jXsgrM+u+W//c6d63blPr4bZs20b5lc3YBDaTOjsLLLAcO79jMTZd8NvPrpO0sXkhhaoiDkte9SZntg+5at4ln2t5MfXz7ls10bE9/fFV1dsDu3dWOwqympO0jaIyI4l/8N0n6cgbx2AA5umE/7j7uiFTH3r74BgAuuuLqLEMaGAvPKPyct6S6cZjVkLQ1gjckfVpSXfL6NPBGloGZmVllpK0RfJZCH8H3KIwWeoLCxHOWQpo2+4Fsp1/TMJbJbZvf+ku/lA0vv0TjtOkDcu290rwQVtzZ9zFrV0DTMZWJxywn0o4aWg2cnXEsNaurzf7ohv16Paarnb5+RO/HpDW5bTPvW7869fGN06Zz1IdO3uvr7rUVd5b+Rd90DBxzfuViMsuBtKOGFlEYJbQ52R4HXBsR2Xdn14hSbfaDqp0+S03HuP3frMLS9hEc28MKZcdlEpGZmVVU2j6CIZLGJQkASePLOLe29dKufdXO97Nk/2MBWDN2EpM3t3D7dV/u9WM2tELjaN4eFZNHbv83q4q0NYJrgSclfVPSNyl0Fn87u7AGka527W6W7H8sr+4/CYDJm1t43+rlfX5M42g46qBMIhw83P5vVhVpO4tvltQMnJIUnRcRK7MLa5DpqV377oeY8mYrv7novKTgvD1OMzPbF5SzQtlKwL/8gavuuJElMbawMWIeDBkCdz/0jmNeHTmGKe1eu8fM9n1pm4asyJIY+1azD0OGQF39HsdMad/KGWOGVzgyM7PyucO3n6ZsaSlq9jEzG7xcIzAzyznXCFIM/+zu1f0nMWVLS9aRmZlVhGsEKYZ/djdlSwtnaHPGgZmZVYZrBJBy+KeZWW3KZSK45YnF3LVlFwDbRl9Ce2e9h3+aWW7lsmnori27eGbogQC0d9bT0bnnP4OHf5pZXmRWI5B0I3AmsD4i3p2UjQduB6YBLwMXds1fVGlH71rP3aefx+3fWAB41k8zy68sawQ3AXO6lS0AHomII4BHkm0zM6uizGoEEfErSdO6FZ8DnJy8XwQ8BnwlqxiKFfcLLK9rYtKmtdz+jQX7zupcZmZVUuk+gokR0TUAfy0wsbcDJc2X1CypecOGDXt94eJ+gUmb1nLki88A+9DqXGZmVVK1UUMREZKij/3XA9cDzJ49u9fjyuF+ATOzPVW6RrBO0iSA5Of6Cl/fzMy6qXSNYDFwKXB18vOeLC+2/JcP8uzjjwGwYcbxAO4XMDPrJrMagaSfAU8C75L0mqTLKCSAj0p6EfhIsp2ZZx9/jA0vv7RHufsFzMzeluWooYt72XVqVtfsSeO06Vx0xdXc9sBdgPsFzMy6q+kpJv738BN5fVcdX71qMZ0aybjG9mqHZGa2z6npRFCnoUiF92rdxfbdO6obkJnZPqim5xq6c+xB/GrCQaz66tmMbXidEXIiMDPrrqYTgZmZlVbTTUMAO1vaWH/dcpraxgOw/rrlAIyc1UjDCT0vPGNmlic1nQhGzmqkp+7hnS1ttIMTgZkZNZ4IGk6Y9NYv+7VX/QGAAz939lu1AjMzq/FE0N2W1tHMuuommtrGcwYjucjNRGZm+eksPvXoMew/uhWAP+/ezZKk0WhnSxvty/Z+dlMzs8EqNzWCa88+D84uvJ911U2sxc1EZmaQoxqBmZn1LDc1gu6K+wuG7x5G3ZV7zoh91oyJzPvEMVWIrrKam5tZsWJFtcMws26ampo4/fTTM79OLmsExf0Fm+q2sGPIzj2OeWF7B/c+t67SoVXFihUrWLt2bbXDMLMqyWWNoLi/YN6D8wBYOGfhO44578pfVjqsqmpqamLevHnVDsPMqiCXNQIzM3tbLmsE3T2/8fm3agZd2neey6uddcz5+uIez/nAIUO4cv6ZAxZDNdvp165dS1NTU1WuXa5Nt9/B1vvuq3YYZhUx/KgZNH3ta5lfJ/c1grmHzuVd49+1R/nUA1qYUtfZ4zmvdtbx29W7BzSOarbTNzU1ccwxg6NTfOt997H9ueeqHYZZTcl9jeCCIy/ggiMv2HPHnN7P6a2WsLfcTp/OiBkzOOSWm6sdhlnNyH0i6E9TQ33Tufx5SD1n/93dAAghvbNy1a6dHKq1zIpXUn3mxvp6xnd0sPqSvywrlp40jH6ZUaNf2+vP2Rc1jm1nyMiRsPCMaodilr2mY+D07JfXzX3TUH+aGk7atprDdncAEAFB7HHMag3jP3RA6s8c39HBoa1tZcXRm1GjX6O+fsuAfNa+ZsjIkdQdkP7f1cxKy32NAMpvavjb5AW9Dz896et3AkP5b1ddMzBBliP5a3nEvCWVv7aZDTq5rxGYmeVdLmsExf0C2597jhEzZpR1fvFQz4kbJ9K+q50Fzyx4xzGns5VT6pay/H99B4AxQ4Kx2rMJqdi2+u201ve0lE55prZv4ZWR+3PNg4Ov43nuoXN77rw3s8zkskZQ3C8wYsYMxpxZ3vMAxUM9x+83npFDR+5xzMeHPcHRWg3AdsTW3erzM+s7hzGqY0RZcfTmlZH789sJUwbksyrp+Y3Pc/+q+6sdhlnu5LJGAHs/BLHkUM+FK4DJHDtvCRdd9yQAt3/ug70e3jUd9ozPHdvvmIrNAD4zIJ9UOd0f6jOzyshNItj2L1+k7qXCX5vFQxBbW1tp21beaJ1TOjqor6+HhXf2ftDaFYWhX4mVLVvfSgg92dmyjdjRiXqYBbU/PjZqJOeOaUh9/L6ySltPT3l35+Yjs4GVm0RQ99L9DBu6iZ27xr1jCGLbtjY6un6xp1RfX0/DqBK/ZJuOgWPOB+CcWZNLfuaQhmEM1LPKL3QUhramTQQ7W9poh6ongrmHzi15zPMbnwdwIjAbQFVJBJLmAD8A6oCfRET2T0wAO3eNY8Q1q95R9uDCwrDPLJ/o/eQJU/nkCVMz+/zuumoeB6ZsZtpXVmnr9SnvIm4+Mht4Fe8sllQH/BA4HZgJXCxpZqXjMDOzgmrUCI4H/hQRqwAk3QacA6wc6Au9eOWHGdXZAsABw7fyRkzgFwvf+eDXYJp5sxyl+iSKDXT/RJbad57L7uhkzq+zme/JbF9ycEMnP/nquZlfpxqJYDLwatH2a8AJ3Q+SNB+YDzB16t43q7wRE/jzfrP2KB9MM2+mlaZPothA9k9kbdiQoewcLMGaDRKK6PshpwG/oHQ+MCci/kuyfQlwQkR8sbdzZs+eHc3NzZUK0cysJkhaGhGzSx1XjQfK1gDFTzsdnJSZmVkVVCMR/B44QtJ0SfXAJwA3+JqZVUnF+wgiYpekLwK/oDB89MaIeKbScZiZWUFVniOIiPsBTypjZrYPyOWkc2Zm9jYnAjOznHMiMDPLOScCM7Ocq/gDZf0haQOwup+nTwBeH8BwBpM83zvk+/7zfO+Q7/svvvdDIqKx1AmDIhHsDUnNaZ6sq0V5vnfI9/3n+d4h3/ffn3t305CZWc45EZiZ5VweEsH11Q6givJ875Dv+8/zvUO+77/se6/5PgIzM+tbHmoEZmbWBycCM7Ocq+lEIGmOpOcl/UnSgmrHU0mSXpa0QtIySTW/qo+kGyWtl/R0Udl4SQ9LejH5Oa6aMWall3u/UtKa5PtfJmluNWPMiqQpkh6VtFLSM5IuT8pr/rvv497L/u5rto9AUh3wAvBRCsth/h64OCIGfG3kfZGkl4HZEZGLh2oknQS0ATdHxLuTsm8DGyPi6uQPgXER8ZVqxpmFXu79SqAtIv6pmrFlTdIkYFJE/EHSaGAp8HHgM9T4d9/HvV9Imd99LdcIjgf+FBGrIqIDuA04p8oxWUYi4lfAxm7F5wCLkveLKPwnqTm93HsuRERLRPwhed8KPEthXfSa/+77uPey1XIimAy8WrT9Gv38RxqkAnhI0lJJ86sdTJVMjIiW5P1aYGI1g6mCL0panjQd1VzTSHeSpgHHAU+Rs+++271Dmd99LSeCvDsxIt4LnA58IWk+yK0otIHWZjtoz/4ZOAyYBbQA11Y1moxJagD+FfhyRGwt3lfr330P9172d1/LiWANMKVo++CkLBciYk3ycz1wN4WmsrxZl7SjdrWnrq9yPBUTEesiojMidgM/poa/f0nDKPwi/GlE3JUU5+K77+ne+/Pd13Ii+D1whKTpkuqBTwCLqxxTRUgalXQeIWkUcBrwdN9n1aTFwKXJ+0uBe6oYS0V1/RJMnEuNfv+SBNwAPBsR3y3aVfPffW/33p/vvmZHDQEkw6a+D9QBN0bEP1Q3osqQdCiFWgAU1qW+tdbvXdLPgJMpTMG7DrgC+DfgDmAqhWnML4yImutU7eXeT6bQNBDAy8DnitrMa4akE4FfAyuA3Unx1yi0ldf0d9/HvV9Mmd99TScCMzMrrZabhszMLAUnAjOznHMiMDPLOScCM7OccyIwM8s5JwKzbiSNlfT55P1Bku6sdkxmWfLwUbNuknlb7uuaydOs1g2tdgBm+6CrgcMkLQNeBI6KiHdL+gyFWSxHAUcA/wTUA5cAO4C5EbFR0mHAD4FGoB34rxHxXKVvwiwtNw2Z7WkB8OeImAX8Xbd97wbOA94P/APQHhHHAU8Cf5kccz3wpYh4H/C3wI8qEbRZf7lGYFaeR5O531slbQHuTcpXAMcmM0H+J+DnhalgABhe+TDN0nMiMCvPjqL3u4u2d1P4/zQE2JzUJswGBTcNme2pFRjdnxOT+eBfknQBFGaIlPSegQzObKA5EZh1ExFvAI8ni8F/px8f8SngMkn/ATyDl0i1fZyHj5qZ5ZxrBGZmOedEYGaWc04EZmY550RgZpZzTgRmZjnnRGBmlnNOBGZmOff/AUJLyBVlC5bGAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x_0 = [50, 8, 8, 0]\n", + "model = pints.toy.stochastic.MichaelisMentenModel(x_0)\n", + "\n", + "times = np.linspace(0, 24, 100)\n", + "\n", + "for i in range(3):\n", + " values = model.simulate(k, times)\n", + " plt.step(times, values[:,0])\n", + " plt.step(times, values[:,1])\n", + " plt.step(times, values[:,2])\n", + " plt.step(times, values[:,3])\n", + "\n", + "plt.xlabel('time')\n", + "plt.ylabel('concentration (A(t))'),\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the higher molecule counts version, we will compute the ODE solutions and compare them to our results." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "def pend(y, t):\n", + " x1, x2, x3, x4 = y\n", + " dydt = [-k[0] * x1 * x2 + k[1] * x3, -k[0] * x1 * x2 + k[1] * x3 + k[2] * x3, k[0] * x1 * x2 - k[1] * x3 - k[2] * x3, k[2] * x3]\n", + " return dydt\n", + "\n", + "x_0 = [1e4, 2e3, 2e4, 0]\n", + "times = np.linspace(0, 24, 100)\n", + "\n", + "from scipy.integrate import odeint\n", + "sol = odeint(pend, x_0, times)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(times, sol[:, 0])\n", + "plt.plot(times, first_values[:, 0])\n", + "plt.plot(times, sol[:, 1])\n", + "plt.plot(times, first_values[:, 1])\n", + "plt.plot(times, sol[:, 2])\n", + "plt.plot(times, first_values[:, 2])\n", + "plt.plot(times, sol[:, 3])\n", + "plt.plot(times, first_values[:, 3])\n", + "plt.xlabel('t')\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, our model's simulations are indistinguishable close to the ODE solutions suggesting that our simulations are accurate." + ] + } + ], + "metadata": { + "interpreter": { + "hash": "62b8c3045b77e73a8aab814fbf01ae024ab075fc3f7014742f3a4c5a8ac43e7b" + }, + "kernelspec": { + "display_name": "Python 3.8.0 32-bit", + "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.8.0" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/pints/tests/test_toy_markov_jump_model.py b/pints/tests/test_toy_markov_jump_model.py new file mode 100644 index 0000000000..905c9c418f --- /dev/null +++ b/pints/tests/test_toy_markov_jump_model.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# +# Tests if the markov jump model works. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +import unittest +import numpy as np +from pints.toy.stochastic import DegradationModel + + +class TestMarkovJumpModel(unittest.TestCase): + """ + Tests if the markov jump model works using + the degradation model. + """ + def test_start_with_zero(self): + # Test the special case where the initial molecule count is zero + model = DegradationModel(0) + times = [0, 1, 2, 100, 1000] + parameters = [0.1] + values = model.simulate(parameters, times) + self.assertEqual(len(values), len(times)) + self.assertTrue(np.all(values == np.zeros(5))) + + def test_start_with_twenty(self): + # Run small simulation + model = DegradationModel(20) + times = [0, 1, 2, 100, 1000] + parameters = [0.1] + values = model.simulate(parameters, times) + self.assertEqual(len(values), len(times)) + self.assertEqual(values[0], 20) + self.assertEqual(values[-1], 0) + self.assertTrue(np.all(values[1:] <= values[:-1])) + + def test_simulate(self): + times = np.linspace(0, 100, 101) + model = DegradationModel(20) + time, mol_count = model.simulate_raw([0.1], 100) + values = model.interpolate_mol_counts(time, mol_count, times) + self.assertTrue(len(time), len(mol_count)) + # Test output of Gillespie algorithm + expected = np.array([[x] for x in range(20, -1, -1)]) + self.assertTrue(np.all(mol_count == expected)) + + # Check simulate function returns expected values + self.assertTrue(np.all(values[np.where(times < time[1])] == 20)) + + # Check interpolation function works as expected + temp_time = np.array([np.random.uniform(time[0], time[1])]) + self.assertEqual( + model.interpolate_mol_counts(time, mol_count, temp_time)[0], + 20) + temp_time = np.array([np.random.uniform(time[1], time[2])]) + self.assertEqual( + model.interpolate_mol_counts(time, mol_count, temp_time)[0], + 19) + + def test_errors(self): + model = DegradationModel(20) + # parameters, times cannot be negative + times = np.linspace(0, 100, 101) + parameters = [-0.1] + self.assertRaises(ValueError, model.simulate, parameters, times) + + times_2 = np.linspace(-10, 10, 21) + parameters_2 = [0.1] + self.assertRaises(ValueError, model.simulate, parameters_2, times_2) + + # this model should have 1 parameter + parameters_3 = [0.1, 1] + self.assertRaises(ValueError, model.simulate, parameters_3, times) + + # Initial value can't be negative + self.assertRaises(ValueError, DegradationModel, -1) + + +if __name__ == '__main__': + unittest.main() diff --git a/pints/tests/test_toy_stochastic_degradation_model.py b/pints/tests/test_toy_stochastic_degradation_model.py index d5d34a5ba5..55e3059a74 100755 --- a/pints/tests/test_toy_stochastic_degradation_model.py +++ b/pints/tests/test_toy_stochastic_degradation_model.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Tests if the stochastic degradation (toy) model works. +# Tests if the degradation (toy) model works. # # This file is part of PINTS (https://github.com/pints-team/pints/) which is # released under the BSD 3-clause license. See accompanying LICENSE.md for @@ -8,109 +8,81 @@ # import unittest import numpy as np -import pints -import pints.toy -from pints.toy import StochasticDegradationModel +from pints.toy.stochastic import DegradationModel -class TestStochasticDegradationModel(unittest.TestCase): +class TestDegradationModel(unittest.TestCase): """ - Tests if the stochastic degradation (toy) model works. + Tests if the degradation (toy) model works. """ - def test_start_with_zero(self): - # Test the special case where the initial molecule count is zero - model = StochasticDegradationModel(0) - times = [0, 1, 2, 100, 1000] - parameters = [0.1] - values = model.simulate(parameters, times) - self.assertEqual(len(values), len(times)) - self.assertTrue(np.all(values == np.zeros(5))) - - def test_start_with_twenty(self): - # Run small simulation - model = pints.toy.StochasticDegradationModel(20) - times = [0, 1, 2, 100, 1000] - parameters = [0.1] - values = model.simulate(parameters, times) - self.assertEqual(len(values), len(times)) - self.assertEqual(values[0], 20) - self.assertEqual(values[-1], 0) - self.assertTrue(np.all(values[1:] <= values[:-1])) + def test_n_parameters(self): + x_0 = 20 + model = DegradationModel(x_0) + self.assertEqual(model.n_parameters(), 1) + + def test_simulation_length(self): + x_0 = 20 + model = DegradationModel(x_0) + times = np.linspace(0, 1, 100) + k = [0.1] + values = model.simulate(k, times) + self.assertEqual(len(values), 100) + + def test_propensities(self): + x_0 = 20 + k = [0.1] + model = DegradationModel(x_0) + self.assertTrue( + np.allclose( + model._propensities([x_0], k), + np.array([2.0]))) def test_suggested(self): - model = pints.toy.StochasticDegradationModel(20) + model = DegradationModel(20) times = model.suggested_times() parameters = model.suggested_parameters() self.assertTrue(len(times) == 101) self.assertTrue(parameters > 0) - def test_simulate(self): - times = np.linspace(0, 100, 101) - model = StochasticDegradationModel(20) - time, mol_count = model.simulate_raw([0.1]) - values = model.interpolate_mol_counts(time, mol_count, times) - self.assertTrue(len(time), len(mol_count)) - # Test output of Gillespie algorithm - self.assertTrue(np.all(mol_count == np.array(range(20, -1, -1)))) - - # Check simulate function returns expected values - self.assertTrue(np.all(values[np.where(times < time[1])] == 20)) - - # Check interpolation function works as expected - temp_time = np.array([np.random.uniform(time[0], time[1])]) - self.assertEqual( - model.interpolate_mol_counts(time, mol_count, temp_time)[0], - 20) - temp_time = np.array([np.random.uniform(time[1], time[2])]) - self.assertEqual( - model.interpolate_mol_counts(time, mol_count, temp_time)[0], - 19) - def test_mean_variance(self): # test mean - model = pints.toy.StochasticDegradationModel(10) + model = DegradationModel(10) v_mean = model.mean([1], [5, 10]) self.assertEqual(v_mean[0], 10 * np.exp(-5)) self.assertEqual(v_mean[1], 10 * np.exp(-10)) - model = pints.toy.StochasticDegradationModel(20) + model = DegradationModel(20) v_mean = model.mean([5], [7.2]) self.assertEqual(v_mean[0], 20 * np.exp(-7.2 * 5)) # test variance - model = pints.toy.StochasticDegradationModel(10) + model = DegradationModel(10) v_var = model.variance([1], [5, 10]) self.assertEqual(v_var[0], 10 * (np.exp(5) - 1.0) / np.exp(10)) self.assertAlmostEqual(v_var[1], 10 * (np.exp(10) - 1.0) / np.exp(20)) - model = pints.toy.StochasticDegradationModel(20) + model = DegradationModel(20) v_var = model.variance([2.0], [2.0]) self.assertAlmostEqual(v_var[0], 20 * (np.exp(4) - 1.0) / np.exp(8)) def test_errors(self): - model = pints.toy.StochasticDegradationModel(20) + model = DegradationModel(20) # parameters, times cannot be negative times = np.linspace(0, 100, 101) parameters = [-0.1] - self.assertRaises(ValueError, model.simulate, parameters, times) self.assertRaises(ValueError, model.mean, parameters, times) self.assertRaises(ValueError, model.variance, parameters, times) times_2 = np.linspace(-10, 10, 21) parameters_2 = [0.1] - self.assertRaises(ValueError, model.simulate, parameters_2, times_2) self.assertRaises(ValueError, model.mean, parameters_2, times_2) self.assertRaises(ValueError, model.variance, parameters_2, times_2) # this model should have 1 parameter parameters_3 = [0.1, 1] - self.assertRaises(ValueError, model.simulate, parameters_3, times) self.assertRaises(ValueError, model.mean, parameters_3, times) self.assertRaises(ValueError, model.variance, parameters_3, times) - # Initial value can't be negative - self.assertRaises(ValueError, pints.toy.StochasticDegradationModel, -1) - if __name__ == '__main__': unittest.main() diff --git a/pints/tests/test_toy_stochastic_michaelis_menten_model.py b/pints/tests/test_toy_stochastic_michaelis_menten_model.py new file mode 100644 index 0000000000..35a6e6493e --- /dev/null +++ b/pints/tests/test_toy_stochastic_michaelis_menten_model.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# Tests if the Michaelis Menten (toy) model works. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +import unittest +import numpy as np +from pints.toy.stochastic import MichaelisMentenModel + + +class TestMichaelisMentenModel(unittest.TestCase): + """ + Tests if the Michaelis Menten (toy) model works. + """ + def test_n_parameters(self): + x_0 = [1e4, 2e3, 2e4, 0] + model = MichaelisMentenModel(x_0) + self.assertEqual(model.n_parameters(), 3) + + def test_simulation_length(self): + x_0 = [1e4, 2e3, 2e4, 0] + model = MichaelisMentenModel(x_0) + times = np.linspace(0, 1, 100) + k = [1e-5, 0.2, 0.2] + values = model.simulate(k, times) + self.assertEqual(len(values), 100) + + def test_propensities(self): + x_0 = [1e4, 2e3, 2e4, 0] + k = [1e-5, 0.2, 0.2] + model = MichaelisMentenModel(x_0) + self.assertTrue( + np.allclose( + model._propensities(x_0, k), + np.array([200.0, 4000.0, 4000.0]))) + + +if __name__ == '__main__': + unittest.main() diff --git a/pints/toy/__init__.py b/pints/toy/__init__.py index 7181d91291..7fc8b1d376 100644 --- a/pints/toy/__init__.py +++ b/pints/toy/__init__.py @@ -32,5 +32,4 @@ from ._simple_egg_box import SimpleEggBoxLogPDF from ._sir_model import SIRModel from ._twisted_gaussian_banana import TwistedGaussianLogPDF -from ._stochastic_degradation_model import StochasticDegradationModel from ._stochastic_logistic_model import StochasticLogisticModel diff --git a/pints/toy/_stochastic_degradation_model.py b/pints/toy/_stochastic_degradation_model.py deleted file mode 100644 index b8bd2f7d6a..0000000000 --- a/pints/toy/_stochastic_degradation_model.py +++ /dev/null @@ -1,181 +0,0 @@ -# -# Stochastic degradation toy model. -# -# This file is part of PINTS (https://github.com/pints-team/pints/) which is -# released under the BSD 3-clause license. See accompanying LICENSE.md for -# copyright notice and full license details. -# -import numpy as np -from scipy.interpolate import interp1d -import pints - -from . import ToyModel - - -class StochasticDegradationModel(pints.ForwardModel, ToyModel): - r""" - Stochastic degradation model of a single chemical reaction starting from - an initial molecule count :math:`A(0)` and degrading to 0 with a fixed rate - :math:`k`: - - .. math:: - A \xrightarrow{k} 0 - - Simulations are performed using Gillespie's algorithm [1]_, [2]_: - - 1. Sample a random value :math:`r` from a uniform distribution - - .. math:: - r \sim U(0,1) - - 2. Calculate the time :math:`\tau` until the next single reaction as - - .. math:: - \tau = \frac{-\ln(r)}{A(t) k} - - 3. Update the molecule count :math:`A` at time :math:`t + \tau` as: - - .. math:: - A(t + \tau) = A(t) - 1 - - 4. Return to step (1) until the molecule count reaches 0 - - The model has one parameter, the rate constant :math:`k`. - - Extends :class:`pints.ForwardModel`, :class:`pints.toy.ToyModel`. - - Parameters - ---------- - initial_molecule_count - The initial molecule count :math:`A(0)`. - - References - ---------- - .. [1] A Practical Guide to Stochastic Simulations of Reaction Diffusion - Processes. Erban, Chapman, Maini (2007). - arXiv:0704.1908v2 [q-bio.SC] - https://arxiv.org/abs/0704.1908 - - .. [2] A general method for numerically simulating the stochastic time - evolution of coupled chemical reactions. Gillespie (1976). - Journal of Computational Physics - https://doi.org/10.1016/0021-9991(76)90041-3 - """ - def __init__(self, initial_molecule_count=20): - super(StochasticDegradationModel, self).__init__() - self._n0 = float(initial_molecule_count) - if self._n0 < 0: - raise ValueError('Initial molecule count cannot be negative.') - - def n_parameters(self): - """ See :meth:`pints.ForwardModel.n_parameters()`. """ - return 1 - - def simulate_raw(self, parameters): - """ - Returns raw times, mol counts when reactions occur - """ - parameters = np.asarray(parameters) - if len(parameters) != self.n_parameters(): - raise ValueError('This model should have only 1 parameter.') - k = parameters[0] - - if k <= 0: - raise ValueError('Rate constant must be positive.') - - # Initial time and count - t = 0 - a = self._n0 - - # Run stochastic degradation algorithm, calculating time until next - # reaction and decreasing molecule count by 1 at that time - mol_count = [a] - time = [t] - while a > 0: - r = np.random.uniform(0, 1) - t += -np.log(r) / (a * k) - a = a - 1 - time.append(t) - mol_count.append(a) - return time, mol_count - - def interpolate_mol_counts(self, time, mol_count, output_times): - """ - Takes raw times and inputs and mol counts and outputs interpolated - values at output_times - """ - # Interpolate as step function, decreasing mol_count by 1 at each - # reaction time point - interp_func = interp1d(time, mol_count, kind='previous') - - # Compute molecule count values at given time points using f1 - # at any time beyond the last reaction, molecule count = 0 - values = interp_func(output_times[np.where(output_times <= time[-1])]) - zero_vector = np.zeros( - len(output_times[np.where(output_times > time[-1])]) - ) - values = np.concatenate((values, zero_vector)) - return values - - def simulate(self, parameters, times): - """ See :meth:`pints.ForwardModel.simulate()`. """ - times = np.asarray(times) - if np.any(times < 0): - raise ValueError('Negative times are not allowed.') - if self._n0 == 0: - return np.zeros(times.shape) - - # run Gillespie - time, mol_count = self.simulate_raw(parameters) - - # interpolate - values = self.interpolate_mol_counts(time, mol_count, times) - return values - - def mean(self, parameters, times): - r""" - Returns the deterministic mean of infinitely many stochastic - simulations, which follows :math:`A(0) \exp(-kt)`. - """ - parameters = np.asarray(parameters) - if len(parameters) != self.n_parameters(): - raise ValueError('This model should have only 1 parameter.') - k = parameters[0] - - if k <= 0: - raise ValueError('Rate constant must be positive.') - - times = np.asarray(times) - if np.any(times < 0): - raise ValueError('Negative times are not allowed.') - - mean = self._n0 * np.exp(-k * times) - return mean - - def variance(self, parameters, times): - r""" - Returns the deterministic variance of infinitely many stochastic - simulations, which follows :math:`\exp(-2kt)(-1 + \exp(kt))A(0)`. - """ - parameters = np.asarray(parameters) - if len(parameters) != self.n_parameters(): - raise ValueError('This model should have only 1 parameter.') - k = parameters[0] - - if k <= 0: - raise ValueError('Rate constant must be positive.') - - times = np.asarray(times) - if np.any(times < 0): - raise ValueError('Negative times are not allowed.') - - variance = np.exp(-2 * k * times) * (-1 + np.exp(k * times)) * self._n0 - return variance - - def suggested_parameters(self): - """ See :meth:`pints.toy.ToyModel.suggested_parameters()`. """ - return np.array([0.1]) - - def suggested_times(self): - """ See "meth:`pints.toy.ToyModel.suggested_times()`.""" - return np.linspace(0, 100, 101) diff --git a/pints/toy/stochastic/__init__.py b/pints/toy/stochastic/__init__.py new file mode 100644 index 0000000000..a429108900 --- /dev/null +++ b/pints/toy/stochastic/__init__.py @@ -0,0 +1,11 @@ +# +# Root of the stochastic toy module. +# Provides a number of stochastic toy models for tests of Pints' functions. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +from ._markov_jump_model import MarkovJumpModel # noqa +from ._michaelis_menten_model import MichaelisMentenModel # noqa +from ._degradation_model import DegradationModel # noqa diff --git a/pints/toy/stochastic/_degradation_model.py b/pints/toy/stochastic/_degradation_model.py new file mode 100644 index 0000000000..d20d32ffef --- /dev/null +++ b/pints/toy/stochastic/_degradation_model.py @@ -0,0 +1,87 @@ +# +# Stochastic degradation toy model. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +from . import MarkovJumpModel + +import numpy as np + + +class DegradationModel(MarkovJumpModel): + r""" + Stochastic degradation model of a single chemical reaction starting from + an initial molecule count :math:`A(0)` and degrading to 0 with a fixed rate + :math:`k`: + + .. math:: + A \xrightarrow{k} 0 + + Extends :class:`pints.ForwardModel`, :class:`pints.toy.ToyModel`. + + Parameters + ---------- + initial_molecule_count + The initial molecule count :math:`A(0)`. + """ + def __init__(self, initial_molecule_count=20): + V = [[-1]] + init_list = [initial_molecule_count] + super(DegradationModel, self).__init__(init_list, + V, self._propensities) + + @staticmethod + def _propensities(xs, ks): + return [ + xs[0] * ks[0], + ] + + def mean(self, parameters, times): + r""" + Returns the deterministic mean of infinitely many stochastic + simulations, which follows :math:`A(0) \exp(-kt)`. + """ + parameters = np.asarray(parameters) + if len(parameters) != self.n_parameters(): + raise ValueError('This model should have only 1 parameter.') + k = parameters[0] + + if k <= 0: + raise ValueError('Rate constant must be positive.') + + times = np.asarray(times) + if np.any(times < 0): + raise ValueError('Negative times are not allowed.') + + mean = self._x0 * np.exp(-k * times) + return mean + + def variance(self, parameters, times): + r""" + Returns the deterministic variance of infinitely many stochastic + simulations, which follows :math:`\exp(-2kt)(-1 + \exp(kt))A(0)`. + """ + parameters = np.asarray(parameters) + if len(parameters) != self.n_parameters(): + raise ValueError('This model should have only 1 parameter.') + k = parameters[0] + + if k <= 0: + raise ValueError('Rate constant must be positive.') + + times = np.asarray(times) + if np.any(times < 0): + raise ValueError('Negative times are not allowed.') + + variance = np.exp(-2 * k * times) * (-1 + np.exp(k * times)) * self._x0 + return variance + + def suggested_parameters(self): + """ See :meth:`pints.toy.ToyModel.suggested_parameters()`. """ + return np.array([0.1]) + + def suggested_times(self): + """ See "meth:`pints.toy.ToyModel.suggested_times()`.""" + return np.linspace(0, 100, 101) diff --git a/pints/toy/stochastic/_markov_jump_model.py b/pints/toy/stochastic/_markov_jump_model.py new file mode 100644 index 0000000000..4cd8a032b1 --- /dev/null +++ b/pints/toy/stochastic/_markov_jump_model.py @@ -0,0 +1,159 @@ +# +# Markov jump model. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +import numpy as np +from scipy.interpolate import interp1d +import pints +import random + +from .. import ToyModel + + +class MarkovJumpModel(pints.ForwardModel, ToyModel): + r""" + A general purpose Markov Jump model used for any systems of reactions + that proceed through jumps. We simulate a population of N different species + reacting through M different reaction equations. + + Simulations are performed using Gillespie's algorithm [1]_, [2]_: + + 1. Sample values :math:`r_0`, :math:`r_1`, from a uniform distribution + + .. math:: + r_0, r_1 \sim U(0,1) + + 2. Calculate the time :math:`\tau` until the next single reaction as + + .. math:: + \tau = \frac{-\ln(r)}{a_0} + + where a_0 is the sum of the propensities at the current time. + + 3. Decide which reaction, i, takes place using r_1 * a_0 and iterating + + through propensities. Since r_1 is a a value between 0 and 1 and a_0 is + + the sum of all propensities, we can find k for which + + s_k / a_0 <= r_2 < s_(k+1) / a_0 where s_j is the sum of the first j + + propensities at time t. We then choose i as the reaction corresponding + + to propensity k. + + 4. Update the state :math:`x` at time :math:`t + \tau` as: + + .. math:: + x(t + \tau) = x(t) + V[i] + + 4. Return to step (1) until no reaction can take place or the process + + has gone past the maximum time. + + Extends :class:`pints.ForwardModel`, :class:`pints.toy.ToyModel`. + + Parameters + ---------- + x_0 + An N-vector specifying the initial population of each + of the N species. + V + An NxM matrix consisting of stochiometric vectors v_i specifying + the changes to the state, x, from reaction i taking place. + propensities + A function from the current state, x, and reaction rates, k, + to a vector of the rates of each reaction taking place. + + References + ---------- + .. [1] A Practical Guide to Stochastic Simulations of Reaction Diffusion + Processes. Erban, Chapman, Maini (2007). + arXiv:0704.1908v2 [q-bio.SC] + https://arxiv.org/abs/0704.1908 + .. [2] A general method for numerically simulating the stochastic time + evolution of coupled chemical reactions. Gillespie (1976). + Journal of Computational Physics + https://doi.org/10.1016/0021-9991(76)90041-3 + """ + def __init__(self, x0, V, propensities): + super(MarkovJumpModel, self).__init__() + self._x0 = np.asarray(x0) + self._V = V + self._propensities = propensities + if any(self._x0 < 0): + raise ValueError('Initial molecule count cannot be negative.') + + def n_parameters(self): + """ See :meth:`pints.ForwardModel.n_parameters()`. """ + return len(self._V) + + def simulate_raw(self, rates, max_time): + """ + Returns raw times, mol counts when reactions occur + """ + if len(rates) != self.n_parameters(): + raise ValueError('This model should have only ', + str(self.n_parameters()), + ' parameter(s).') + # Setting the current propensities and summing them up + current_propensities = self._propensities(self._x0, rates) + prop_sum = sum(current_propensities) + + # Initial time and count + t = 0 + x = np.array(self._x0) + + # Run Gillespie SSA, calculating time until next + # reaction, deciding which reaction, and applying it + mol_count = [np.array(x)] + time = [t] + while prop_sum > 0 and t <= max_time: + r_1, r_2 = random.random(), random.random() + t += -np.log(r_1) / (prop_sum) + s = 0 + r = 0 + while s <= r_2 * prop_sum: + s += current_propensities[r] + r += 1 + r -= 1 + x = np.add(x, self._V[r]) + + current_propensities = self._propensities(x, rates) + prop_sum = sum(current_propensities) + + time.append(t) + mol_count.append(np.array(x)) + return time, mol_count + + def interpolate_mol_counts(self, time, mol_count, output_times): + """ + Takes raw times and inputs and mol counts and outputs interpolated + values at output_times + """ + # Interpolate as step function, decreasing mol_count by 1 at each + # reaction time point + interp_func = interp1d(time, mol_count, kind='previous', axis=0, + fill_value="extrapolate", bounds_error=False) + + # Compute molecule count values at given time points using f1 + # at any time beyond the last reaction, molecule count = 0 + values = interp_func(output_times) + return values + + def simulate(self, parameters, times): + """ See :meth:`pints.ForwardModel.simulate()`. """ + times = np.asarray(times) + if np.any(times < 0): + raise ValueError('Negative times are not allowed.') + if np.all(self._x0 == 0): + return np.zeros(times.shape) + # Run Gillespie + time, mol_count = self.simulate_raw(parameters, max(times)) + # Interpolate + values = self.interpolate_mol_counts(np.asarray(time), + np.asarray(mol_count), times) + return values diff --git a/pints/toy/stochastic/_michaelis_menten_model.py b/pints/toy/stochastic/_michaelis_menten_model.py new file mode 100644 index 0000000000..644f9cc550 --- /dev/null +++ b/pints/toy/stochastic/_michaelis_menten_model.py @@ -0,0 +1,44 @@ +# +# Stochastic michaelis-menten toy model. +# +# This file is part of PINTS (https://github.com/pints-team/pints/) which is +# released under the BSD 3-clause license. See accompanying LICENSE.md for +# copyright notice and full license details. +# +from . import MarkovJumpModel + + +class MichaelisMentenModel(MarkovJumpModel): + r""" + Simulates the Michaelis Menten Dynamics using Gillespie. + + This system of reaction involves 4 chemical species with + inital counts ``initial_molecule_count``, and reactions: + + - X1+X2 -> X3 with rate k1 + - X3 -> X1+X2 with rate k2 + - X3 -> X2+X4 with rate k3 + + Parameters + ---------- + initial_molecule_count : Array of size 3 of integers + Sets the initial molecule count. + + References + ---------- + .. [1] https://en.wikipedia.org/wiki/Michaelis-Menten_kinetics + """ + def __init__(self, initial_molecule_count): + V = [[-1, -1, 1, 0], + [1, 1, -1, 0], + [0, 1, -1, 1]] + super(MichaelisMentenModel, self).__init__(initial_molecule_count, + V, self._propensities) + + @staticmethod + def _propensities(xs, ks): + return [ + xs[0] * xs[1] * ks[0], + xs[2] * ks[1], + xs[2] * ks[2] + ] diff --git a/run-tests.py b/run-tests.py index 94b67ec03e..aeb3a77448 100755 --- a/run-tests.py +++ b/run-tests.py @@ -196,6 +196,7 @@ def doctest_rst_and_public_interface(): import pints.plot import pints.residuals_diagnostics import pints.toy + import pints.toy.stochastic # If any modules other than these are exposed it may indicate that a module # has been inadvertently exposed in a public context, or that a new module @@ -207,6 +208,7 @@ def doctest_rst_and_public_interface(): 'pints.plot', 'pints.residuals_diagnostics', 'pints.toy', + 'pints.toy.stochastic', ] doc_symbols = get_all_documented_symbols() @@ -216,7 +218,8 @@ def doctest_rst_and_public_interface(): check_exposed_symbols(pints.noise, [], doc_symbols) check_exposed_symbols(pints.plot, [], doc_symbols) check_exposed_symbols(pints.residuals_diagnostics, [], doc_symbols) - check_exposed_symbols(pints.toy, [], doc_symbols) + check_exposed_symbols(pints.toy, ['pints.toy.stochastic'], doc_symbols) + check_exposed_symbols(pints.toy.stochastic, [], doc_symbols) print('All classes and methods are documented in an RST file, and all ' 'public interfaces are clean.')