{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Symbolic Regression and the Island Model\n", "\n", "In this tutorial we will learn how to evolve multiple Cartesian Genetic Programs in an island model setup. We use the same problem used in a previous tutorial performing the same evolution in a *pygmo* archipelago (that is in an island model where each island maintains a population of solutions and evolves them)" ] }, { "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": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Here we define our problem and solution strategy. In this case a simple Evolutionary Strategy acting on \n", "# a CGP with no added constants.\n", "X, Y = dcgpy.generate_chwirut2()\n", "ss = dcgpy.kernel_set_double([\"sum\", \"diff\", \"mul\", \"pdiv\"])\n", "udp = dcgpy.symbolic_regression(points = X, labels = Y, kernels=ss())\n", "uda = dcgpy.es4cgp(gen = 10000, max_mut = 2)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# We then construct our archipelago of *n*=64 islands containin 4 indivisuals each.\n", "prob = pg.problem(udp)\n", "algo = pg.algorithm(uda)\n", "archi = pg.archipelago(algo = algo, prob = prob, pop_size = 4, n=64)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Here is where the evolution starts\n", "archi.evolve()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Island name: Multiprocessing island\n", "\tC++ class name: pybind11::object\n", "\n", "\tStatus: busy\n", "\n", "Extra info:\n", "\tUsing a process pool: yes\n", "\tNumber of processes in the pool: 4\n", "\n", "Algorithm: ES for CGP: Evolutionary strategy for Cartesian Genetic Programming\n", "\n", "Problem: a CGP symbolic regression problem\n", "\n", "Replacement policy: Fair replace\n", "\n", "Selection policy: Select best\n", "\n", "Population size: 4\n", "\tChampion decision vector: [3, 0, 0, 0, 1, ... ]\n", "\tChampion fitness: [1673.5]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can inspect at any time the status of any island of the archipelago\n", "archi[23]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Note how in the log above the island is *busy* indicating that the evolution is running. Note also that the\n", "# island is, in this case, of type *thread island* indicating that its evolution is running on a separate thread\n", "# We can also stop the interactive session and wait for the evolution to finish\n", "archi.wait_check()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Let us inspect the results\n", "fs = archi.get_champions_f()\n", "xs = archi.get_champions_x()\n", "plt.plot(fs, '.')\n", "plt.xlabel('thread (island id)')\n", "_ = plt.ylabel('loss')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "b_idx = np.argmin(fs)\n", "best_x = archi.get_champions_x()[b_idx]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ - x_{0} + 4 + \\frac{32}{x_{0}} + \\frac{32}{x_{0} \\left(x_{0} + \\frac{2}{x_{0}}\\right)}\\right]$" ], "text/plain": [ "⎡ 32 32 ⎤\n", "⎢-x₀ + 4 + ── + ────────────⎥\n", "⎢ x₀ ⎛ 2 ⎞⎥\n", "⎢ x₀⋅⎜x₀ + ──⎟⎥\n", "⎣ ⎝ x₀⎠⎦" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parse_expr(udp.prettier(best_x))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# And lets see what our model actually predicts on the inputs\n", "Y_pred = udp.predict(X, best_x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "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('54 measurments')\n", "_ = plt.xlabel('metal distance')\n", "_ = plt.ylabel('ultrasonic response')" ] } ], "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 }