{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "# Global optimization in SciPy: examples"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "This notebook presents a simple minimization problem which highlights some important features of global optimizers."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:30:28.794Z",
          "iopub.status.busy": "2022-03-07T10:30:28.783Z",
          "iopub.status.idle": "2022-03-07T10:30:28.805Z",
          "shell.execute_reply": "2022-03-07T10:30:28.812Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [],
      "source": [
        "# We import the packages we need in this example\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from scipy.optimize import minimize\n",
        "from scipy.optimize import basinhopping\n",
        "from scipy.optimize import differential_evolution"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "To illustrate the problems linked to local/global minimizations we make use of a mathematical function $f$ which will we use as cost function.\n",
        "\n",
        "This function $f$ is dependent upon a single variable $x$ and is expressed as:\n",
        "\n",
        "$$ f\\left(x\\right) = \\cos \\left( 25.5 x -0.3\\right)+x*(x+0.2)+1.01 $$"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:30:56.082Z",
          "iopub.status.busy": "2022-03-07T10:30:56.072Z",
          "iopub.status.idle": "2022-03-07T10:30:56.090Z",
          "shell.execute_reply": "2022-03-07T10:30:56.096Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [],
      "source": [
        "def f(x):\n",
        "    return np.cos(25.5*x-0.3)+x*(x+0.2)+1.01"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "The cost function $f\\left(x\\right)$ which we wish to minimize is plotted in the next cell. While it appears that a global minimum should be reached close to zero, large oscillations are present which might create problems during the optimization.\n",
        "\n",
        "In this example we will try to find the global minimum of our function where is $x$ belongs to the interval $\\left[-3,3\\right]$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:31:02.548Z",
          "iopub.status.busy": "2022-03-07T10:31:02.532Z",
          "iopub.status.idle": "2022-03-07T10:31:02.617Z",
          "shell.execute_reply": "2022-03-07T10:31:02.622Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": true
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(-3.0,3.0,1000)\n",
        "plt.plot(x,f(x))\n",
        "plt.ylabel('f(x)')\n",
        "plt.xlabel('x')\n",
        "plt.xlim([-3.0,3.0])\n",
        "plt.ylim([0.0,12.0])\n",
        "plt.grid()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "To highlight the problem of local minima, we will carry out 4 minimization with 4 different starting points:\n",
        "\n",
        "$$ x_0 = \\pm 2$$\n",
        "$$ x_0 = \\pm 0.001$$\n",
        "\n",
        "The sequential least square programming approach (SLSQP) is used as a local minimizer with a set of bounds on the variable $x$."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:31:14.044Z",
          "iopub.status.busy": "2022-03-07T10:31:14.038Z",
          "iopub.status.idle": "2022-03-07T10:31:14.061Z",
          "shell.execute_reply": "2022-03-07T10:31:14.065Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "The local minima obtained are:\n",
            "with x_0 = -2.000000 we obtain x = -2.076530 and f = 3.918746\n",
            "with x_0 = 2.000000 we obtain x = 2.099345 and f = 4.852180\n",
            "with x_0 = -0.001000 we obtain x = -0.602694 and f = 0.253472\n",
            "with x_0 = 0.001000 we obtain x = -0.848299 and f = 0.561722\n"
          ]
        }
      ],
      "source": [
        "x0s  = [-2.0,2.0,-0.001,0.001] \n",
        "xs   = []\n",
        "x_it  = []\n",
        "x_fev = []\n",
        "#\n",
        "for x0 in x0s:\n",
        "    res = minimize(f, x0, method='SLSQP',bounds=[(-3.0,3.0)],options={'disp': False, 'iprint': 1, 'maxiter':1000})\n",
        "    xs.append(res.x[0])\n",
        "    x_it.append(res.nit)\n",
        "    x_fev.append(res.nfev)\n",
        "#\n",
        "print('The local minima obtained are:')\n",
        "for x,x0 in zip(xs,x0s):\n",
        "    print('with x_0 = {0:4f} we obtain x = {1:5f} and f = {2:5f}'.format(x0,x,f(x)))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "The next cell shows the cost function $f$ with the starting points and the obtained minima. Each color is linked to a specific starting point, the circle markers indicate the starting points while the square ones show the local minima.\n",
        "\n",
        "When the starting point is far from the global minima the algorithm gets stuck in a local minimum (red and black markers).\n",
        "\n",
        "It is interesting to note that when we use the starting points defined as $x_0 = \\pm 0.001$, we do not get the same minimum and the optimizer is still capable of jumping over several _valleys_ of the cost function $f$.\n",
        "\n",
        "This small example shows the problem of local minima and how an optimization procedure can be sensitive to the choice of the starting point."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:31:58.628Z",
          "iopub.status.busy": "2022-03-07T10:31:58.622Z",
          "iopub.status.idle": "2022-03-07T10:31:58.730Z",
          "shell.execute_reply": "2022-03-07T10:31:58.742Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(-3.0,3.0,1000)\n",
        "plt.plot(x,f(x))\n",
        "\n",
        "cs = ['r','k','g','m']\n",
        "\n",
        "for x,x0,c in zip(xs,x0s,cs):\n",
        "    plt.scatter(x0,f(x0),c=c,marker='o')\n",
        "    plt.scatter(x,f(x),c=c,marker='s')\n",
        "plt.ylabel('f(x)')\n",
        "plt.xlabel('x')\n",
        "plt.xlim([-3.0,3.0])\n",
        "plt.ylim([0.0,12.0])\n",
        "plt.title('SLSQP algorithm')\n",
        "plt.grid()\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "The first global optimizer we employ is the basinhopping method. The local minimizer of this procedure is defined by the SLSQP algorithm.\n",
        "\n",
        "Four minimizations are carried out using the same starting points as before."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:36:03.469Z",
          "iopub.status.busy": "2022-03-07T10:36:03.460Z",
          "iopub.status.idle": "2022-03-07T10:36:03.570Z",
          "shell.execute_reply": "2022-03-07T10:36:03.577Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "The minima obtained are:\n",
            "with x_0 = -2.000000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = 2.000000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = -0.001000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = 0.001000 we obtain x = -0.111400 and f = 0.000130\n"
          ]
        }
      ],
      "source": [
        "x1     = []\n",
        "x1_it  = []\n",
        "x1_fev = []\n",
        "\n",
        "for x0 in x0s:\n",
        "    res = basinhopping(f, x0, niter = 30, minimizer_kwargs={'method':'SLSQP','bounds':[(-3.0,3.0)]},disp=False)\n",
        "    x1.append(res.x[0])\n",
        "    x1_it.append(res.nit)\n",
        "    x1_fev.append(res.nfev)    \n",
        "#\n",
        "print('The minima obtained are:')\n",
        "for x,x0 in zip(x1,x0s):\n",
        "    print('with x_0 = {0:4f} we obtain x = {1:5f} and f = {2:5f}'.format(x0,x,f(x)))"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "In this example when we employ a global algorithm such as the basinhopping, we reach, independently of the starting point, the same minima (the global one). To a large extent we have solved the problem of local minima exemplified at the begining of this notebook."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:34:20.102Z",
          "iopub.status.busy": "2022-03-07T10:34:20.095Z",
          "iopub.status.idle": "2022-03-07T10:34:20.215Z",
          "shell.execute_reply": "2022-03-07T10:34:20.220Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": true
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(-3.0,3.0,1000)\n",
        "plt.plot(x,f(x))\n",
        "\n",
        "cs = ['r','k','g','m']\n",
        "\n",
        "for x,x0,c in zip(x1,x0s,cs):\n",
        "    plt.scatter(x0,f(x0),c=c,marker='o')\n",
        "    plt.scatter(x,f(x),c=c,marker='s')\n",
        "plt.ylabel('f(x)')\n",
        "plt.xlabel('x')\n",
        "plt.xlim([-3.0,3.0])\n",
        "plt.ylim([0.0,12.0])\n",
        "plt.title('Basinhopping algorithm')\n",
        "plt.grid()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "In this notebook we will use one more global algorithm called _differential evolution_. This algorithm relies on a genetic approach to optimization and aims at returning the global minimum of a cost function."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:37:08.450Z",
          "iopub.status.busy": "2022-03-07T10:37:08.445Z",
          "iopub.status.idle": "2022-03-07T10:37:08.498Z",
          "shell.execute_reply": "2022-03-07T10:37:08.502Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "The minima obtained are:\n",
            "with x_0 = -2.000000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = 2.000000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = -0.001000 we obtain x = -0.111400 and f = 0.000130\n",
            "with x_0 = 0.001000 we obtain x = -0.111400 and f = 0.000130\n"
          ]
        }
      ],
      "source": [
        "x2     = []\n",
        "x2_it  = []\n",
        "x2_fev = []\n",
        "\n",
        "for x0 in x0s:\n",
        "    res = differential_evolution(f, [(-3.0,3.0)])\n",
        "    x2.append(res.x[0])\n",
        "    x2_it.append(res.nit)\n",
        "    x2_fev.append(res.nfev)\n",
        "    \n",
        "#\n",
        "print('The minima obtained are:')\n",
        "for x,x0 in zip(x2,x0s):\n",
        "    print('with x_0 = {0:4f} we obtain x = {1:5f} and f = {2:5f}'.format(x0,x,f(x)))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "As expected from a global optimizer, we reach the same minimum independently of the starting point. You should be aware that this algorithm uses a stochastic approach, i.e. random, which might not guarantee that the global minimum is reached. If you re-run the previous cell several times you will observe some variations in the results."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T10:37:24.579Z",
          "iopub.status.busy": "2022-03-07T10:37:24.567Z",
          "iopub.status.idle": "2022-03-07T10:37:24.673Z",
          "shell.execute_reply": "2022-03-07T10:37:24.685Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": true
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "x = np.linspace(-3.0,3.0,1000)\n",
        "plt.plot(x,f(x))\n",
        "\n",
        "cs = ['r','k','g','m']\n",
        "\n",
        "for x,x0,c in zip(x2,x0s,cs):\n",
        "    plt.scatter(x0,f(x0),c=c,marker='o')\n",
        "    plt.scatter(x,f(x),c=c,marker='s')\n",
        "plt.ylabel('f(x)')\n",
        "plt.xlabel('x')\n",
        "plt.xlim([-3.0,3.0])\n",
        "plt.ylim([0.0,12.0])\n",
        "plt.title('Differential evolution algorithm')\n",
        "plt.grid()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "source": [
        "One question we might ask ourselves is : \"why use a local minimizer when we have access to global ones?\"\n",
        "\n",
        "One answer to this question is described in the next cell. There is a numerical _price_ to pay when using a global optimizer compared to a local one. Usually, global optimizer will be slower than local ones and use more evaluations of the cost functions.\n",
        "\n",
        "In the next cell we see the results of the different optimizers, the local SLSQP, the global basinhopping and the global differential equation (printed in this order).\n",
        "\n",
        "The number of iterations is higher when using the global minimizers compared to the local ones. We go from 5 iterations to 30 and 22 iterations. As a result, the number of function evaluations is increasing when using the global optimizers, from 16 to 421 and 351.\n",
        "\n",
        "Note that the basinhopping algorithm carries out a fixed number of iterations (here 30) which blurs a bit the picture. To get a better view of the number of function evaluation we print out the ratio betwen this number and the number of iterations. In this case, the local optimizer uses around 3 function evaluations per iteration while the basinhopping needs 14 and the differential evolution 16.\n",
        "\n",
        "The main motivation to avoid global minimizer is the number of function evaluations which is higher than local minimizers. While in this example the overall runtime is negligible, if we were to use more CPU intensive cost functions (for ex. finite element analyses) the use of a global optimizer will be very costly.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T08:44:37.568Z",
          "iopub.status.busy": "2022-03-07T08:44:37.562Z",
          "iopub.status.idle": "2022-03-07T08:44:37.589Z",
          "shell.execute_reply": "2022-03-07T08:44:37.605Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "fev: [12, 11, 16, 12] it: [4, 4, 5, 4]\n",
            "fev: [409, 409, 392, 399] it: [30, 30, 30, 30]\n",
            "fev: [231, 306, 291, 261] it: [14, 19, 18, 16]\n"
          ]
        }
      ],
      "source": [
        "for fev,it in zip([x_fev,x1_fev,x2_fev],[x_it,x1_it,x2_it]):\n",
        "    print('fev:',fev,'it:',it)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "collapsed": true,
        "execution": {
          "iopub.execute_input": "2022-03-07T07:50:04.131Z",
          "iopub.status.busy": "2022-03-07T07:50:04.122Z",
          "iopub.status.idle": "2022-03-07T07:50:04.148Z",
          "shell.execute_reply": "2022-03-07T07:50:04.151Z"
        },
        "jupyter": {
          "outputs_hidden": false,
          "source_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "number of iterations = 5 30 19\n",
            "number of function evaluations = 16 409 306\n",
            "number of function evaluations per iterations:\n",
            "3.0\n",
            "14.0\n",
            "16.0\n"
          ]
        }
      ],
      "source": [
        "print('number of iterations = {} {} {}'.format(np.max(x_it),np.max(x1_it),np.max(x2_it)))\n",
        "\n",
        "print('number of function evaluations = {} {} {}'.format(np.max(x_fev),np.max(x1_fev),np.max(x2_fev)))\n",
        "\n",
        "print('number of function evaluations per iterations:')\n",
        "for fev,it in zip([x_fev,x1_fev,x2_fev],[x_it,x1_it,x2_it]):\n",
        "    print('{}'.format(np.round(np.max(fev)/np.max(it))))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": []
    }
  ],
  "metadata": {
    "kernel_info": {
      "name": "python3"
    },
    "kernelspec": {
      "argv": [
        "/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9",
        "-m",
        "ipykernel_launcher",
        "-f",
        "{connection_file}"
      ],
      "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.9.10"
    },
    "nteract": {
      "version": "0.28.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
