{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Learning constants using evolution\n", "\n", "In this tutorial we consider an example with a two dimensional input data and we make use of the possibility to add constants to the model (ephemeral constants). We will thus show how to learn these constants using a purely evolutionary approach.\n", "\n", "We will learn:\n", "\n", " * How to introduce ephemeral constants in a symbolic regression problem.\n", " \n", " * How to learn said constants too using an evolutionary strategy." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Some necessary imports.\n", "import dcgpy\n", "import pygmo as pg\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 data" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# We load our data from some available ones shipped with dcgpy.\n", "# In this particular case we use the problem ratpol2 from the paper:\n", "# Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog.\n", "# \"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic\n", "# programming.\" IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. \n", "X, Y = dcgpy.generate_ratpol2d()\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from mpl_toolkits.mplot3d import Axes3D \n", "# And we plot them as to visualize the problem.\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "_ = ax.scatter(X[:,0], X[:,1], Y[:,0])\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2 - The symbolic regression problem" ] }, { "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. A list of kernels shipped with dcgpy \n", "# can be found on the online docs. The user can also define its own kernels (see the corresponding tutorial).\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): 2\n", "\tData dimension (labels): 1\n", "\tData size: 50\n", "\tKernels: [sum, mul, pdiv]\n", "\tLoss: MSE\n", "\n" ] } ], "source": [ "# We instantiate the symbolic regression optimization problem\n", "# Note how we specify to consider one ephemeral constant via\n", "# the kwarg n_eph. We also request 100 kernels with a linear \n", "# layout (this allows for the construction of longer expressions) and\n", "# we set the level back (in an attempt to skew the search towards\n", "# more complex expressions)\n", "udp = dcgpy.symbolic_regression(\n", " points = X, labels = Y, kernels=ss(), \n", " rows = 1, \n", " cols = 100, \n", " n_eph = 1, \n", " levels_back = 80)\n", "prob = pg.problem(udp)\n", "print(udp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3 - The search algorithm" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# We instantiate here the evolutionary strategy we want to use to\n", "# search for models. Note that the evolutionary operators\n", "# will be applied also to the constants as long as the kwarg *learn_constants* is True (default)\n", "uda = dcgpy.es4cgp(gen = 200000, max_mut = 4)\n", "algo = pg.algorithm(uda)\n", "algo.set_verbosity(1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4 - The search" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# We use a population of 4 individuals\n", "pop = pg.population(prob, 4)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Here is where we run the actual evolution. Note that the screen output\n", "# will show in the terminal (not on your Jupyter notebook in case you are using it)\n", "pop = algo.evolve(pop)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best model loss: 0.38250377897772814\n" ] } ], "source": [ "print(\"Best model loss:\", pop.champion_f[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 5 - Inspecting the solution" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Lets have a look to the symbolic representation of our model (using sympy)\n", "x = pop.champion_x\n", "a = parse_expr(udp.prettier(x))[0]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\frac{\\frac{3.83466264613465 \\cdot 10^{-5} x_{0}^{9}}{x_{1}^{2}} + \\frac{8.77931368273209}{x_{1}}}{x_{0} x_{1} + \\frac{\\frac{8.77931368273209 x_{0}^{2}}{x_{1}^{2}} + \\frac{x_{0}}{x_{1}}}{x_{0} x_{1}^{2}}}$" ], "text/plain": [ " 9 \n", "3.83466264613465e-5⋅x₀ 8.77931368273209\n", "─────────────────────── + ────────────────\n", " 2 x₁ \n", " x₁ \n", "──────────────────────────────────────────\n", " 2 \n", " 8.77931368273209⋅x₀ x₀ \n", " ──────────────────── + ── \n", " 2 x₁ \n", " x₁ \n", " x₀⋅x₁ + ───────────────────────── \n", " 2 \n", " x₀⋅x₁ " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = a.subs({\"c1\": x[0]})\n", "a" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# And lets see what our model actually predicts on the inputs\n", "Y_pred = udp.predict(X, pop.champion_x)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Lets compare (visually) to the data\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "_ = ax.scatter(X[:,0], X[:,1], Y[:,0])\n", "_ = ax.scatter(X[:,0], X[:,1], Y_pred[:,0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 6 - Recovering the log\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# Here we get the log of the latest call to the evolve\n", "log = algo.extract(dcgpy.es4cgp).get_log()\n", "gen = [it[0] for it in log]\n", "loss = [it[2] for it in log]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# And here we plot, for example, the generations against the best loss\n", "_ = plt.semilogy(gen, loss)\n", "_ = plt.title('last call to evolve')\n", "_ = plt.xlabel('generation')\n", "_ = plt.ylabel('loss')" ] } ], "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": 2 }