{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimisation: CMA-ES\n", "\n", "This example shows you how to run a global optimisation with [CMA-ES](http://pints.readthedocs.io/en/latest/optimisers/cmaes.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 Covariance Matrix Adaptation Evolution Strategy (CMA-ES)\n", "Running in sequential mode.\n", "Population size: 6\n", "Iter. Eval. Best Time m:s\n", "0 6 6606977 0:03.6\n", "1 12 4760926 0:03.6\n", "2 18 1238427 0:03.6\n", "3 24 1238427 0:03.6\n", "20 126 1228394 0:03.7\n", "40 246 1228329 0:03.7\n", "60 366 1127863 0:03.8\n", "80 486 95629.7 0:03.9\n", "100 606 94398.95 0:03.9\n", "120 726 94398.88 0:04.0\n", "140 846 94398.88 0:04.1\n", "160 966 94398.88 0:04.1\n", "180 1086 94398.88 0:04.2\n", "200 1206 94398.88 0:04.2\n", "220 1326 94398.88 0:04.3\n", "240 1446 94398.88 0:04.4\n", "260 1566 94398.88 0:04.4\n", "280 1686 94398.88 0:04.5\n", "300 1806 94398.88 0:04.5\n", "320 1926 94398.88 0:04.6\n", "340 2046 94398.88 0:04.7\n", "360 2166 94398.88 0:04.9\n", "370 2220 94398.88 0:04.9\n", "Halting: No significant change for 200 iterations.\n", "Score at true solution: \n", "94519.5264238\n", "Found solution: True parameters:\n", " 1.49840047036074436e-02 1.49999999999999994e-02\n", " 4.99904900547278771e+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.CMAES\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 }