{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A real-world case (Physics: dynamics)\n", "\n", "In this tutorial we will be using data from a real-world case. The data comes from a piecewise continuous function representing the gravitational interaction between two swarm of particles. It is of interest to represent such an interaction with a one only continuous function, albeit introducing some error. If succesfull, this would allow to have some analytical insight on the qualitative stability of the resulting orbits, as well as to make use of methods requiring high order continuity to study the resulting dynamical system.\n", "\n", "The equation is (derived from a work by Francesco Biscani):\n", "$$\n", "a(x) = \\left\\{\n", "\\begin{array}{ll}\n", "\\frac{x^3 - 18x+32}{32} & x < 2 \\\\\n", "\\frac{1}{x^2} & x \\ge 2\n", "\\end{array}\n", "\\right.\n", "$$\n", "\n", "It is important, on this problem, to respect the asymptotic behaviour of the acceleration so that $\\lim_{x\\rightarrow \\infty}a(x) = \\frac 1{x^2}$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Some necessary imports.\n", "import dcgpy\n", "import pygmo as pg\n", "import numpy as np\n", "# Sympy is nice to have for basic symbolic manipulation.\n", "from sympy import init_printing\n", "from sympy.parsing.sympy_parser import *\n", "init_printing()\n", "# Fundamental for plotting.\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 - The raw data\n", "Since the asymptotic behaviour is important, we place the majority of points on the $x>2$ area. Note that the definition of the grid (i.e. how many points and where) is fundamental and has great impact on the search performances." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "X = np.linspace(0,15, 100)\n", "Y = X * ((X**3) - 18 * X + 32) / 32\n", "Y[X>2] = 1. / X[X>2]**2\n", "X = np.reshape(X, (100,1))\n", "Y = np.reshape(Y, (100,1))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# And we plot them as to visualize the problem.\n", "_ = plt.plot(X, Y, '.')\n", "_ = plt.title('Acceleration')\n", "_ = plt.xlabel('a')\n", "_ = plt.ylabel('f')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 - The symbolic regression problem\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# We define our kernel set, that is the mathematical operators we will\n", "# want our final model to possibly contain. What to choose in here is left\n", "# to the competence and knowledge of the user. For this particular application we want to mainly look into rational \n", "#functions. Note we do not include the difference as that can be obtained via negative constants\n", "ss = dcgpy.kernel_set_double([\"sum\", \"mul\",\"pdiv\"])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\tData dimension (points): 1\n", "\tData dimension (labels): 1\n", "\tData size: 100\n", "\tKernels: [sum, mul, pdiv]\n", "\tLoss: MSE\n", "\n" ] } ], "source": [ "# We instantiate the symbolic regression optimization problem (note: many important options are here not\n", "# specified and thus set to their default values).\n", "# Note that we allow for three constants in the final expression\n", "udp = dcgpy.symbolic_regression(points = X, labels = Y, kernels=ss(), n_eph=3, rows =1, cols=20, levels_back=21, multi_objective=True)\n", "print(udp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4 - The search algorithm" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# We instantiate here the evolutionary strategy we want to use to search for models.\n", "# In this case we use a multiple objective memetic algorithm.\n", "uda = dcgpy.momes4cgp(gen = 3000, max_mut = 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5 - The search" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "prob = pg.problem(udp)\n", "algo = pg.algorithm(uda)\n", "# Note that the screen output will happen on the terminal, not on your Jupyter notebook.\n", "# It can be recovered afterwards from the log.\n", "algo.set_verbosity(10)\n", "pop = pg.population(prob, 20)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "pop = algo.evolve(pop)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best loss (MSE) found is: 0.0002555079686589074\n" ] } ], "source": [ "# This extract the population individual with lowest loss\n", "idx = np.argmin(pop.get_f(), axis=0)[0]\n", "print(\"Best loss (MSE) found is: \", pop.get_f()[idx][0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6 - Inspecting the solution" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\frac{2 c_{2} x_{0}^{2}}{\\left(c_{2} + x_{0}^{2}\\right)^{2}}\\right]$" ], "text/plain": [ "⎡ 2 ⎤\n", "⎢ 2⋅c₂⋅x₀ ⎥\n", "⎢───────────⎥\n", "⎢ 2⎥\n", "⎢⎛ 2⎞ ⎥\n", "⎣⎝c₂ + x₀ ⎠ ⎦" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop.get_f()\n", "# Lets have a look to the symbolic representation of our model (using sympy)\n", "parse_expr(udp.prettier(pop.get_x()[idx]))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# And lets see what our model actually predicts on the inputs\n", "Y_pred = udp.predict(X, pop.get_x()[idx])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Lets comapre to the data\n", "_ = plt.plot(X, Y_pred, 'r.')\n", "_ = plt.plot(X, Y, '.', alpha=0.2)\n", "_ = plt.title('measurements')\n", "_ = plt.xlabel('unknown')\n", "_ = plt.ylabel('temperature in unknown units')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Values for the constants: [ 1.43930499 0.63600381 -0.59788675]\n" ] } ], "source": [ "print(\"Values for the constants: \", pop.get_x()[idx][:3])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6" } }, "nbformat": 4, "nbformat_minor": 4 }