{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimisation: PSO\n", "\n", "This example shows you how to run a global optimisation with [PSO (particle swarm optimisation)](http://pints.readthedocs.io/en/latest/optimisers/pso.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 Particle Swarm Optimisation (PSO)\n", "Running in sequential mode.\n", "Population size: 6\n", "Iter. Eval. Best Time m:s\n", "0 6 3.85e+07 0:00.0\n", "1 12 3.85e+07 0:00.0\n", "2 18 2.9e+07 0:00.0\n", "3 24 2.31e+07 0:00.0\n", "20 126 223714.2 0:00.1\n", "40 246 223714.2 0:00.1\n", "60 366 223714.2 0:00.1\n", "80 486 123316.3 0:00.2\n", "100 606 123316.3 0:00.2\n", "120 726 123316.3 0:00.2\n", "140 846 123316.3 0:00.2\n", "160 966 123316.3 0:00.3\n", "180 1086 123316.3 0:00.3\n", "200 1206 123316.3 0:00.3\n", "220 1326 123316.3 0:00.3\n", "240 1446 123316.3 0:00.4\n", "260 1566 123316.3 0:00.4\n", "276 1656 123316.3 0:00.4\n", "Halting: No significant change for 200 iterations.\n", "Score at true solution: \n", "102854.433018\n", "Found solution: True parameters:\n", " 1.48193947537603593e-02 1.49999999999999994e-02\n", " 5.06338865329054215e+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, 200], [1, 1000])\n", "\n", "# Perform an optimization with boundaries and hints\n", "x0 = [0, 700]\n", "found_parameters, found_value = pints.optimise(\n", " score,\n", " x0,\n", " boundaries=boundaries,\n", " method=pints.PSO,\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 }