{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimisation: SNES\n", "\n", "This example shows you how to run a global optimisation with [SNES](http://pints.readthedocs.io/en/latest/optimisers/snes.html).\n", "\n", "For a more elaborate example of an optimisation, see: [basic optimisation example](./optimisation-first-example.ipynb)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimising error measure\n", "using Seperable Natural Evolution Strategy (SNES)\n", "Running in sequential mode.\n", "Iter. Eval. Best Time m:s\n", "0 6 1032189 0:03.3\n", "1 12 1032189 0:03.3\n", "2 18 1032189 0:03.3\n", "3 24 415890.9 0:03.3\n", "20 126 99951.86 0:03.3\n", "40 246 97790.04 0:03.3\n", "60 366 97712.96 0:03.4\n", "80 486 97712.92 0:03.4\n", "100 606 97712.92 0:03.4\n", "120 726 97712.92 0:03.4\n", "140 846 97712.92 0:03.4\n", "160 966 97712.92 0:03.4\n", "180 1086 97712.92 0:03.5\n", "200 1206 97712.92 0:03.5\n", "220 1326 97712.92 0:03.5\n", "240 1446 97712.92 0:03.5\n", "260 1566 97712.92 0:03.5\n", "280 1686 97712.92 0:03.5\n", "300 1806 97712.92 0:03.6\n", "320 1926 97712.92 0:03.6\n", "340 2046 97712.92 0:03.6\n", "360 2166 97712.92 0:03.6\n", "380 2286 97712.92 0:03.6\n", "381 2286 97712.92 0:03.6\n", "Halting: No significant change for 200 iterations.\n", "Score at true solution: \n", "97762.3046752\n", "Found solution: True parameters:\n", " 1.49887429771769151e-02 1.49999999999999994e-02\n", " 5.00225855587396723e+02 5.00000000000000000e+02\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from __future__ import print_function\n", "import pints\n", "import pints.toy as toy\n", "import numpy as np\n", "import matplotlib.pyplot as pl\n", "\n", "# Load a forward model\n", "model = toy.LogisticModel()\n", "\n", "# Create some toy data\n", "real_parameters = [0.015, 500]\n", "times = np.linspace(0, 1000, 1000)\n", "values = model.simulate(real_parameters, times)\n", "\n", "# Add noise\n", "values += np.random.normal(0, 10, values.shape)\n", "\n", "# Create an object with links to the model and time series\n", "problem = pints.SingleOutputProblem(model, times, values)\n", "\n", "# Select a score function\n", "score = pints.SumOfSquaresError(problem)\n", "\n", "# Select some boundaries\n", "boundaries = pints.RectangularBoundaries([0, 400], [0.03, 600])\n", "\n", "# Perform an optimization with boundaries and hints\n", "x0 = 0.01, 450\n", "sigma0 = [0.01, 100]\n", "found_parameters, found_value = pints.optimise(\n", " score,\n", " x0,\n", " sigma0,\n", " boundaries,\n", " method=pints.SNES,\n", ")\n", "\n", "# Show score of true solution\n", "print('Score at true solution: ')\n", "print(score(real_parameters))\n", "\n", "# Compare parameters with original\n", "print('Found solution: True parameters:' )\n", "for k, x in enumerate(found_parameters):\n", " print(pints.strfloat(x) + ' ' + pints.strfloat(real_parameters[k]))\n", "\n", "# Show quality of fit\n", "pl.figure()\n", "pl.xlabel('Time')\n", "pl.ylabel('Value')\n", "pl.plot(times, values, label='Nosiy data')\n", "pl.plot(times, problem.evaluate(found_parameters), label='Fit')\n", "pl.legend()\n", "pl.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }