{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Custom Distributions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You might want to model input uncertanty with a distribution not currenlty available in Golem. In this case you can create your own class implementing such distribution.\n", "\n", "Here, we will reimplement a uniform distribution as a toy example." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from golem import *\n", "\n", "import numpy as np\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "import matplotlib\n", "%matplotlib inline\n", "\n", "import seaborn as sns\n", "sns.set(context='talk', style='ticks')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create your own distribution class to be used in Golem, you need to create a class that:\n", "\n", "(1) Inherits from the ``BaseDist`` class;\n", "\n", "(2) Implements a ``cdf`` method that returns the cumulative density for the distribution of interest. The ``cdf`` method needs to to take in two arguments, ``x`` and ``loc``. ``loc`` is the location of the distribution, e.g. the mean for a Gaussian, and ``x`` is where the CDF needs to be evaluated at. \n", "\n", "\n", "In addition, even though this is not required for the code to run, the ``__init__`` method should allow to define the scale of the distribution. In the example below, we allow the user to define the range of the uniform. For a Gaussian distribution this would be the standard deviation, and so on." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Here is a custom, user-implemented, uniform distribution class\n", "\n", "class MyDistribution(BaseDist):\n", "\n", " def __init__(self, urange):\n", " self.urange = urange\n", "\n", " \n", " def cdf(self, x, loc):\n", " \"\"\"Cumulative density function.\n", "\n", " Parameters\n", " ----------\n", " x : float\n", " The point where to evaluate the cdf.\n", " loc : float\n", " The location of the Uniform distribution.\n", " \n", " Returns\n", " -------\n", " cdf : float\n", " Cumulative density evaluated at ``x``.\n", " \"\"\"\n", " a = loc - 0.5 * self.urange\n", " b = loc + 0.5 * self.urange\n", "\n", " # calc cdf\n", " if x < a:\n", " return 0.\n", " elif x > b:\n", " return 1.\n", " else:\n", " return (x - a) / (b - a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To demonstrate how this can be used, we use a simple objective function and we will compute its robust counterpart using the ``Uniform`` class available in Golem as well as the above, user-defined equivalent ``MyDistribution``." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# a sample 1d objective function\n", "def objective(x):\n", " \n", " def sigmoid(x, l, k, x0):\n", " return l / (1 + np.exp(-k*(x-x0)))\n", "\n", " sigs = [sigmoid(x, 1, 100, 0.1),\n", " sigmoid(x, -1, 100, 0.2),\n", " sigmoid(x, 0.7, 80, 0.5),\n", " sigmoid(x, -0.7, 80, 0.9)\n", " ]\n", " return np.sum(sigs, axis=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, using the ``Golem.Uniform`` class..." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0;37m[INFO] Golem ... 1 tree(s) parsed in 53.26 ms ...\n", "\u001b[0m\u001b[0;37m[INFO] Golem ... Convolution of 1000 samples performed in 6.25 ms ...\n", "\u001b[0m" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAE9CAYAAAA26nQIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOydd1hU19bG3zONYQpDFwtNFEQUOxbsvUWjaer1GnNTDcmNySWx3HypppiYGBONxvSbYozGkqAYY0OjQcReUTqiCAgMMwNMPd8fhJHDPjRhCsP+PY+PsE5bw8yc96y19t6LYVmWBYVCoVAorYzA0Q5QKBQKxTWhAkOhUCgUm0AFhkKhUCg2gQoMhUKhUGwCFRgKhUKh2AQqMBQKhUKxCVRgKBQKhWITqMBQKBQKxSZQgaFQKBSKTaACQ6FQKBSbQAWGQqFQKDaBCgyFQqFQbAIVGIrTQddfpdgaV/uMOevroQLTzkhOTsaiRYswdOhQ9O7dGxMmTMCKFStw/fp16z7Xr19HREQEdu7c2eC5IiIi8Omnn7aqf6dPn8aTTz7ZbF8o9uOf//wnIiIiOP969OiB/v37Y/bs2Xf1Xo0dOxb//e9/beAtF41Gg6VLlyI1NbXRfc1mM7Zs2YK5c+diwIAB6NevH2bOnImNGzdCp9Nx9t22bRsiIiJQUFBQ7/mOHz+OiIiIJl27Ofzyyy9YuXJls3yxFyJHO0CxH2vXrsUnn3yCMWPG4P/+7//g4+ODjIwMfPfdd9ixYwc+/vhjDBs2rMnn27x5Mzp27NiqPm7duhXp6enW3/39/bF582YEBQW16nUoLaN37954+eWXrb9bLBYUFBTg22+/xUsvvQRPT0+MGjXKgR7yk5aWhu3bt2PWrFkN7mcwGPD0008jOTkZDzzwAJ566imIRCKcPn0aX375JXbu3ImNGzeic+fOTb52VFQUNm/ejG7durX0ZXDYsGEDBgwYYP199OjR2Lx5M7y9vVv1OncDFZh2wr59+/DJJ59g8eLFWLRokdU+ePBg3HvvvXjiiSfw/PPP47fffmvyOfv27WsLVzlIJBK7XIfSPBQKBe/7MnLkSAwdOhTbtm1zSoFpKu+//z6Sk5PxxRdfYMiQIVZ7bGwsZsyYgblz5yI+Ph4//PADBIKmJYLq+5u1Nt7e3k4hLgAVmEYp0+jx0U+ncC69GEaTxaG+iEUCRHfzxeI5/eGpdGvWsZ9++inCwsI44lKDTCbDihUrMGnSJPzwww944IEHAAAFBQV49NFHceLECfj5+WH+/Pl45JFHrMdFRETgueeew9NPPw0AKC0txQcffID9+/dDp9MhKioK8fHxnKcrg8GATz/9FL/++itu376NoKAgLFq0CFOnTsXSpUuxfft267nfeecdxMTEYNy4cXjvvfcwcOBAjBs3Dq+99hrmzJljPefNmzcxZswYvPXWW7jvvvtQVVWFNWvWYNeuXSgtLUVYWBieffZZjBs3rll/M1tg1qlR+NsnqMq+ANZsdKgvjFAMaUgv+N/zLIRyVaucUyKRQCwWg2EYq62qqgqfffYZdu/ejRs3biAwMBAPP/wwHnroIc6xBoMBr776KhISEiASiTBlyhTEx8dDoVAAqE6jDR06FG+99Zb1mG3btmHZsmVISkpCQEAASkpK8NZbbyE5ORkajQahoaF45JFHcO+99+L48eNYsGABAGDBggWIiYnBd999R7yGkpIS/PTTT7jvvvs44lJDUFAQFi9ejJdffhl//fUXYmNjrdtSUlLw+eefIzs7G927d8fixYsxcuRIALBe/4cffsDAgQMBVEdUq1atQmpqKgQCAYYPH45ly5YhICDAes7CwkKsWrUKhw8fhsFgQO/evfHSSy8hKioKY8eORX5+PnJzc7F9+3bs378fKSkp1r9JcnIylixZgsTERHTt2tV6zh07dmDJkiXYt28fAgMDkZ+fj/fffx9Hjx6F0WjEgAEDsGzZshZHW7QG0wgf/XQKJ68UOlxcAMBosuDklUJ89NOpZh1XUlKCixcvYvTo0fXuExISgsjISBw4cMBqW7NmDTp37ox169Zh/PjxePfdd/H999/zHq/X67Fw4UIcOnQIL7zwAj7++GOoVCosXLgQ586ds+4XHx+Pb775BnPmzMGGDRswaNAgvPDCCzh48CCefvppjB07Fn5+fti8eTPhb+fOnTFw4EDs2rWLY9+1axfc3NwwadIksCyLZ555Bj///DMeffRRrFu3DpGRkYiLi8O+ffua9XezBYW/fYLKjNMOFxcAYM1GVGacRuFvnzT/WJaFyWSy/tPr9cjIyMCyZcug0+kwc+ZM636PP/44vv32W8ydOxfr16/HsGHD8Oqrr2LdunWcc+7atQuZmZlY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T56M9PR0zJ07F7m5uV2krXdwd82tKS8vx+jRo/Hee+9JqKH3cXfNdrsd77//PqZMmYLhw4fjtttuwzfffNNF2nYed9er0+mwdOlSZGdnIyMjAw8++GC3+yw3c/bsWaSmpqKioqLd47x6/xKJdtm6das4aNAg8S9/+Yu4d+9e8fnnnxdTUlLE3NzcNs9ZtGiROH78eHHTpk3it99+K952221iTk6OWFdX14Wae467azaZTOKcOXPEyZMni5s2bRL37dsn/vGPfxRTUlLEr776qou19wxP/s7N2O128b777hNTUlLENWvWdIG23sGTNb/00kvisGHDxLVr14oHDhwQn3vuOXHQoEHi7t27u1Bzz3B3vXa7XZw/f76YlZUlbt68Wdy1a5f4q1/9SszJyRFramq6WPvOUVBQIObk5IgpKSlieXl5u8d68/5FBqYDpk6dKj7++OMOsscee0y85ZZbuMf/9NNPYkpKirhnz54WWVVVlThy5Ejxb3/7m6S6egt31/zdd9+JKSkpYl5enoN84cKF4pw5cyTT05u4u+bWfPrpp+LEiRO7nYFxd83FxcXi4MGDxS+++MJBfvfdd4svvfSSZHp6C3fXW1hYKKakpIibN29ukZWUlIgpKSnipk2bJNXVW1gsFvHTTz8V09PTxYyMjA4NjLfvXxQia4fS0lKUlJRg+vTpDvIZM2agsLAQpaWlzDn79++HWq3GhAkTWmQREREYO3Ys9u7dK7nOncWTNavVasybNw9paWkO8uTkZJSUlEiqrzfwZM2tz125ciVeeuklqdX0Kp6seceOHVCpVLjjjjsc5J9++imWL18uqb6dxZP1mkwmAE3v72a0Wi0AoKamRkJtvcfRo0excuVKPPDAA3j66ac7PN7b9y8yMO1QWFgIAEhKSnKQJyQkAAAuXbrEPSchIQFyudxB3q9fP+7x/oYna87MzMSf//xnh6mgFosFe/bswcCBAyXU1jt4smagKR/x7LPPYubMmZg4caK0SnoZT9acn5+PpKQkHDhwAHPmzMHQoUMxffp0bN26VXqFO4kn6x08eDDGjRuHNWvWoKCgADqdDi+//DKCg4MxdepU6ZX2Av3798eOHTvwyCOPMPckHt6+fyncPqMH0TxGVKPROMibn2gMBgNzjsFgYI5vPod3vL/hyZp5rFy5EkVFRVizZo13FZQAT9f8z3/+E6Wlpfjggw+kVVACPFmzTqdDeXk5li1bhsceewxxcXHYsGEDnnjiCURERGD8+PHSK+4hnv6NX3jhBfz+97/HrFmzAAABAQFYs2YN4uPjJdTWe0RFRbl1vLfvX2Rg2kH8bxed1k/mreW8WdRiO5132ptd7S94smbn415//XV8/PHHWLhwYbd40vNkzYWFhXjrrbfwzjvvICQkRHolvYwna7ZYLNDpdPjggw8wefJkAE3ea2FhIVavXu3XBsaT9RYUFGD+/Pno168fli1bBpVKhS+++AJ/+MMf8OGHH7aMGr6R8Pb9y//veD6k+cbhbLmNRqPD663RaDQtrzufw3sy8Dc8WXMzZrMZTz31FD766CMsXLgQzzzzjHSKehF312yz2fDss8/illtuwYQJE2C1WmG1WgE0hc2av/dnPPk7q9VqyOVyh/i8IAjIyspCfn6+hNp2Hk/W+/HHHwMA1q5di6lTpyI7Oxtvv/02hgwZgldeeUVahX2Et+9fZGDaoTle65yoLi4udnjd+ZzS0lLmSaC4uJh7vL/hyZqBpg/u/fffj9zcXCxbtqzbGBfA/TWXl5cjLy8PW7ZsQWpqassXALz77rst3/sznvydExISuAbUYrEwnoG/4cl6y8rK0L9//5bEPtBkUEePHo2LFy9KqK3v8Pb9iwxMOyQkJCAuLg7btm1zkG/fvh2JiYmIiYlhzsnOzkZdXR0OHDjQItPpdDhy5AiysrIk17mzeLJmm82GJUuWIC8vD6tWrcK9997bVep6BXfXHB0djY0bNzJfALBgwYKW7/0ZT/7OOTk5EEXRYQOt1WrFDz/8gNGjR0uuc2fwZL1JSUm4cOECamtrHeR5eXmIjY2VVF9f4e37l/yFF154wYv63XCEhITg/fffR3V1NQRBwD/+8Q9s3rwZf/rTnzBw4EDodDrk5+dDo9EgICAAsbGxOHz4MNatW4ewsDCUlZVh2bJlEEURr7zyClQqla+X1CHurvmzzz7DunXrcNdddyEjIwMVFRUtX5WVlejTp4+vl9Qh7qw5KCgIvXv3Zr5Wr16NKVOm4NZbb/X1clzC3b9zfHw8Tp48ifXr10OtVqOurg4rVqzAqVOnsGLFCkRHR/t6Se3i7nqTk5OxYcMG7NmzB2FhYbhy5Qreeecd7Nq1C88//3y3qJBszdmzZ/H999/j/vvvbwl3SX7/cnvnTA/ks88+E6dNmyYOGzZMnDlzpsPGq3//+99iSkqKeOjQoRZZTU2N+Oyzz4pjxowRR40aJS5atEgsKCjwheoe486af/vb34opKSncryFDhvhqCW7j7t/Zme620VIU3V9zQ0OD+Oqrr4rZ2dliWlqaOG/ePPHHH3/0heoe4e56L168KD744INienq6OHr0aHHBggXi/v37faF6p2leX+uNllLfv2jgGEEQBCEJlIMhCIIgJIEMDEEQBCEJZGAIgiAISSADQxAEQUgCGRiCIAhCEsjAEARBEJJABoYgCIKQBDIwBEEQhCSQgSEIgiAkgQwMQRAEIQlkYAjCz2hsbMTEiRMxadIkmM1mh9eee+45DBkyBN98842PtCMI1yEDQxB+hkqlwqOPPory8nKsW7euRf7GG29g48aNWL58OWbPnu1DDQnCNajZJUH4ITabDbfffjuqqqqwY8cObNiwAX/961/x6KOP4pFHHvG1egThEmRgCMJP2bVrFx566CFkZmbi0KFDuOeee7B8+XJfq0UQLkMGhiD8mLlz5+L06dOYPXs23njjDb8fTUwQraEcDEH4KVu3bsXZs2cBAGq1mowL0e0gD4Yg/JB9+/bhoYcews033wyFQoFt27bhq6++Qv/+/X2tGkG4DHkwBOFn5OXl4dFHH8WoUaOwcuVKPP7445DJZHjjjTd8rRpBuAUZGILwIwoKCrB48WIkJibivffeQ0BAAPr164c777wT33//PY4ePeprFQnCZShERhB+QllZGRYsWAClUon169cjKiqq5bWrV69i2rRpGDJkCNavX+9DLQnCdcjAEARBEJJAITKCIAhCEsjAEARBEJJABoYgCIKQBDIwBEEQhCSQgSEIgiAkgQwMQRAEIQlkYAiCIAhJIANDEARBSAIZGIIgCEIS/g/szcMlbhvUrQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# take 1000 samples in x\n", "x = np.linspace(0, 1, 1000)\n", "\n", "# compute objective\n", "y = objective(x)\n", "\n", "# compute robust objective with Golem\n", "golem = Golem(goal='max', random_state=42, nproc=1)\n", "golem.fit(X=x.reshape(-1,1), y=y)\n", "\n", "# use the Golem.Uniform class here\n", "dists = [Uniform(0.2)]\n", "y_robust = golem.predict(X=x.reshape(-1,1), distributions=dists)\n", "\n", "# plot results\n", "plt.plot(x, y, linewidth=5, label='Objective')\n", "plt.plot(x, y_robust, linewidth=5, label='Robust Objective')\n", "\n", "_ = plt.legend(loc='lower center', ncol=2, bbox_to_anchor=(0.5 ,1.), frameon=False)\n", "_ = plt.xlabel('$x$')\n", "_ = plt.ylabel('$f(x)$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...then with our new custom ``MyDistribution`` class:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0;37m[INFO] Golem ... Convolution of 1000 samples performed in 297.95 ms ...\n", "\u001b[0m" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAE9CAYAAAA26nQIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOydd1hU19bG3zONYQpDFwtNFEQUOxbsvUWjaer1GnNTDcmNySWx3HypppiYGBONxvSbYozGkqAYY0OjQcReUTqiCAgMMwNMPd8fhJHDPjRhCsP+PY+PsE5bw8yc96y19t6LYVmWBYVCoVAorYzA0Q5QKBQKxTWhAkOhUCgUm0AFhkKhUCg2gQoMhUKhUGwCFRgKhUKh2AQqMBQKhUKxCVRgKBQKhWITqMBQKBQKxSZQgaFQKBSKTaACQ6FQKBSbQAWGQqFQKDaBCgyFQqFQbAIVGIrTQddfpdgaV/uMOevroQLTzkhOTsaiRYswdOhQ9O7dGxMmTMCKFStw/fp16z7Xr19HREQEdu7c2eC5IiIi8Omnn7aqf6dPn8aTTz7ZbF8o9uOf//wnIiIiOP969OiB/v37Y/bs2Xf1Xo0dOxb//e9/beAtF41Gg6VLlyI1NbXRfc1mM7Zs2YK5c+diwIAB6NevH2bOnImNGzdCp9Nx9t22bRsiIiJQUFBQ7/mOHz+OiIiIJl27Ofzyyy9YuXJls3yxFyJHO0CxH2vXrsUnn3yCMWPG4P/+7//g4+ODjIwMfPfdd9ixYwc+/vhjDBs2rMnn27x5Mzp27NiqPm7duhXp6enW3/39/bF582YEBQW16nUoLaN37954+eWXrb9bLBYUFBTg22+/xUsvvQRPT0+MGjXKgR7yk5aWhu3bt2PWrFkN7mcwGPD0008jOTkZDzzwAJ566imIRCKcPn0aX375JXbu3ImNGzeic+fOTb52VFQUNm/ejG7durX0ZXDYsGEDBgwYYP199OjR2Lx5M7y9vVv1OncDFZh2wr59+/DJJ59g8eLFWLRokdU+ePBg3HvvvXjiiSfw/PPP47fffmvyOfv27WsLVzlIJBK7XIfSPBQKBe/7MnLkSAwdOhTbtm1zSoFpKu+//z6Sk5PxxRdfYMiQIVZ7bGwsZsyYgblz5yI+Ph4//PADBIKmJYLq+5u1Nt7e3k4hLgAVmEYp0+jx0U+ncC69GEaTxaG+iEUCRHfzxeI5/eGpdGvWsZ9++inCwsI44lKDTCbDihUrMGnSJPzwww944IEHAAAFBQV49NFHceLECfj5+WH+/Pl45JFHrMdFRETgueeew9NPPw0AKC0txQcffID9+/dDp9MhKioK8fHxnKcrg8GATz/9FL/++itu376NoKAgLFq0CFOnTsXSpUuxfft267nfeecdxMTEYNy4cXjvvfcwcOBAjBs3Dq+99hrmzJljPefNmzcxZswYvPXWW7jvvvtQVVWFNWvWYNeuXSgtLUVYWBieffZZjBs3rll/M1tg1qlR+NsnqMq+ANZsdKgvjFAMaUgv+N/zLIRyVaucUyKRQCwWg2EYq62qqgqfffYZdu/ejRs3biAwMBAPP/wwHnroIc6xBoMBr776KhISEiASiTBlyhTEx8dDoVAAqE6jDR06FG+99Zb1mG3btmHZsmVISkpCQEAASkpK8NZbbyE5ORkajQahoaF45JFHcO+99+L48eNYsGABAGDBggWIiYnBd999R7yGkpIS/PTTT7jvvvs44lJDUFAQFi9ejJdffhl//fUXYmNjrdtSUlLw+eefIzs7G927d8fixYsxcuRIALBe/4cffsDAgQMBVEdUq1atQmpqKgQCAYYPH45ly5YhICDAes7CwkKsWrUKhw8fhsFgQO/evfHSSy8hKioKY8eORX5+PnJzc7F9+3bs378fKSkp1r9JcnIylixZgsTERHTt2tV6zh07dmDJkiXYt28fAgMDkZ+fj/fffx9Hjx6F0WjEgAEDsGzZshZHW7QG0wgf/XQKJ68UOlxcAMBosuDklUJ89NOpZh1XUlKCixcvYvTo0fXuExISgsjISBw4cMBqW7NmDTp37ox169Zh/PjxePfdd/H999/zHq/X67Fw4UIcOnQIL7zwAj7++GOoVCosXLgQ586ds+4XHx+Pb775BnPmzMGGDRswaNAgvPDCCzh48CCefvppjB07Fn5+fti8eTPhb+fOnTFw4EDs2rWLY9+1axfc3NwwadIksCyLZ555Bj///DMeffRRrFu3DpGRkYiLi8O+ffua9XezBYW/fYLKjNMOFxcAYM1GVGacRuFvnzT/WJaFyWSy/tPr9cjIyMCyZcug0+kwc+ZM636PP/44vv32W8ydOxfr16/HsGHD8Oqrr2LdunWcc+7atQuZmZlY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T56M9PR0zJ07F7m5uV2krXdwd82tKS8vx+jRo/Hee+9JqKH3cXfNdrsd77//PqZMmYLhw4fjtttuwzfffNNF2nYed9er0+mwdOlSZGdnIyMjAw8++GC3+yw3c/bsWaSmpqKioqLd47x6/xKJdtm6das4aNAg8S9/+Yu4d+9e8fnnnxdTUlLE3NzcNs9ZtGiROH78eHHTpk3it99+K952221iTk6OWFdX14Wae467azaZTOKcOXPEyZMni5s2bRL37dsn/vGPfxRTUlLEr776qou19wxP/s7N2O128b777hNTUlLENWvWdIG23sGTNb/00kvisGHDxLVr14oHDhwQn3vuOXHQoEHi7t27u1Bzz3B3vXa7XZw/f76YlZUlbt68Wdy1a5f4q1/9SszJyRFramq6WPvOUVBQIObk5IgpKSlieXl5u8d68/5FBqYDpk6dKj7++OMOsscee0y85ZZbuMf/9NNPYkpKirhnz54WWVVVlThy5Ejxb3/7m6S6egt31/zdd9+JKSkpYl5enoN84cKF4pw5cyTT05u4u+bWfPrpp+LEiRO7nYFxd83FxcXi4MGDxS+++MJBfvfdd4svvfSSZHp6C3fXW1hYKKakpIibN29ukZWUlIgpKSnipk2bJNXVW1gsFvHTTz8V09PTxYyMjA4NjLfvXxQia4fS0lKUlJRg+vTpDvIZM2agsLAQpaWlzDn79++HWq3GhAkTWmQREREYO3Ys9u7dK7nOncWTNavVasybNw9paWkO8uTkZJSUlEiqrzfwZM2tz125ciVeeuklqdX0Kp6seceOHVCpVLjjjjsc5J9++imWL18uqb6dxZP1mkwmAE3v72a0Wi0AoKamRkJtvcfRo0excuVKPPDAA3j66ac7PN7b9y8yMO1QWFgIAEhKSnKQJyQkAAAuXbrEPSchIQFyudxB3q9fP+7x/oYna87MzMSf//xnh6mgFosFe/bswcCBAyXU1jt4smagKR/x7LPPYubMmZg4caK0SnoZT9acn5+PpKQkHDhwAHPmzMHQoUMxffp0bN26VXqFO4kn6x08eDDGjRuHNWvWoKCgADqdDi+//DKCg4MxdepU6ZX2Av3798eOHTvwyCOPMPckHt6+fyncPqMH0TxGVKPROMibn2gMBgNzjsFgYI5vPod3vL/hyZp5rFy5EkVFRVizZo13FZQAT9f8z3/+E6Wlpfjggw+kVVACPFmzTqdDeXk5li1bhsceewxxcXHYsGEDnnjiCURERGD8+PHSK+4hnv6NX3jhBfz+97/HrFmzAAABAQFYs2YN4uPjJdTWe0RFRbl1vLfvX2Rg2kH8bxed1k/mreW8WdRiO5132ptd7S94smbn415//XV8/PHHWLhwYbd40vNkzYWFhXjrrbfwzjvvICQkRHolvYwna7ZYLNDpdPjggw8wefJkAE3ea2FhIVavXu3XBsaT9RYUFGD+/Pno168fli1bBpVKhS+++AJ/+MMf8OGHH7aMGr6R8Pb9y//veD6k+cbhbLmNRqPD663RaDQtrzufw3sy8Dc8WXMzZrMZTz31FD766CMsXLgQzzzzjHSKehF312yz2fDss8/illtuwYQJE2C1WmG1WgE0hc2av/dnPPk7q9VqyOVyh/i8IAjIyspCfn6+hNp2Hk/W+/HHHwMA1q5di6lTpyI7Oxtvv/02hgwZgldeeUVahX2Et+9fZGDaoTle65yoLi4udnjd+ZzS0lLmSaC4uJh7vL/hyZqBpg/u/fffj9zcXCxbtqzbGBfA/TWXl5cjLy8PW7ZsQWpqassXALz77rst3/sznvydExISuAbUYrEwnoG/4cl6y8rK0L9//5bEPtBkUEePHo2LFy9KqK3v8Pb9iwxMOyQkJCAuLg7btm1zkG/fvh2JiYmIiYlhzsnOzkZdXR0OHDjQItPpdDhy5AiysrIk17mzeLJmm82GJUuWIC8vD6tWrcK9997bVep6BXfXHB0djY0bNzJfALBgwYKW7/0ZT/7OOTk5EEXRYQOt1WrFDz/8gNGjR0uuc2fwZL1JSUm4cOECamtrHeR5eXmIjY2VVF9f4e37l/yFF154wYv63XCEhITg/fffR3V1NQRBwD/+8Q9s3rwZf/rTnzBw4EDodDrk5+dDo9EgICAAsbGxOHz4MNatW4ewsDCUlZVh2bJlEEURr7zyClQqla+X1CHurvmzzz7DunXrcNdddyEjIwMVFRUtX5WVlejTp4+vl9Qh7qw5KCgIvXv3Zr5Wr16NKVOm4NZbb/X1clzC3b9zfHw8Tp48ifXr10OtVqOurg4rVqzAqVOnsGLFCkRHR/t6Se3i7nqTk5OxYcMG7NmzB2FhYbhy5Qreeecd7Nq1C88//3y3qJBszdmzZ/H999/j/vvvbwl3SX7/cnvnTA/ks88+E6dNmyYOGzZMnDlzpsPGq3//+99iSkqKeOjQoRZZTU2N+Oyzz4pjxowRR40aJS5atEgsKCjwheoe486af/vb34opKSncryFDhvhqCW7j7t/Zme620VIU3V9zQ0OD+Oqrr4rZ2dliWlqaOG/ePPHHH3/0heoe4e56L168KD744INienq6OHr0aHHBggXi/v37faF6p2leX+uNllLfv2jgGEEQBCEJlIMhCIIgJIEMDEEQBCEJZGAIgiAISSADQxAEQUgCGRiCIAhCEsjAEARBEJJABoYgCIKQBDIwBEEQhCSQgSEIgiAkgQwMQRAEIQlkYAjCz2hsbMTEiRMxadIkmM1mh9eee+45DBkyBN98842PtCMI1yEDQxB+hkqlwqOPPory8nKsW7euRf7GG29g48aNWL58OWbPnu1DDQnCNajZJUH4ITabDbfffjuqqqqwY8cObNiwAX/961/x6KOP4pFHHvG1egThEmRgCMJP2bVrFx566CFkZmbi0KFDuOeee7B8+XJfq0UQLkMGhiD8mLlz5+L06dOYPXs23njjDb8fTUwQraEcDEH4KVu3bsXZs2cBAGq1mowL0e0gD4Yg/JB9+/bhoYcews033wyFQoFt27bhq6++Qv/+/X2tGkG4DHkwBOFn5OXl4dFHH8WoUaOwcuVKPP7445DJZHjjjTd8rRpBuAUZGILwIwoKCrB48WIkJibivffeQ0BAAPr164c777wT33//PY4ePeprFQnCZShERhB+QllZGRYsWAClUon169cjKiqq5bWrV69i2rRpGDJkCNavX+9DLQnCdcjAEARBEJJAITKCIAhCEsjAEARBEJJABoYgCIKQBDIwBEEQhCSQgSEIgiAkgQwMQRAEIQlkYAiCIAhJIANDEARBSAIZGIIgCEIS/g/szcMlbhvUrQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# use MyDistribution for the prediction/convolution\n", "dists = [MyDistribution(0.2)]\n", "y_robust = golem.predict(X=x.reshape(-1,1), distributions=dists)\n", "\n", "# plot the results\n", "plt.plot(x, y, linewidth=5, label='Objective')\n", "plt.plot(x, y_robust, linewidth=5, label='Robust Objective')\n", "\n", "_ = plt.legend(loc='lower center', ncol=2, bbox_to_anchor=(0.5 ,1.), frameon=False)\n", "_ = plt.xlabel('$x$')\n", "_ = plt.ylabel('$f(x)$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, the result above (orange line) obtained with the user-defined uniform is the same to that obtained with ``Golem.Uniform`` as expected.\n", "\n", "However, note that while with ``Golem.Uniform`` the 1000 samples were processed in less than 10 ms, with ``MyDistribution`` it took almost 300 ms (~30 times slower). This is because the method ``cdf`` is called many times (about 1 million times in this example) and ``Golem.Uniform`` is implemented in Cython rather than Python. Therefore, if the execution time of the ``predict`` method in Golem with your custom distribution is too slow, you shuold consider a Cython implementation." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "golem", "language": "python", "name": "golem" }, "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 }