{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"2022-01-21-pymoo.ipynb","provenance":[{"file_id":"https://github.com/recohut/nbs/blob/main/raw/T145475%20%7C%20Multi-objective%20Optimization%20using%20Pymoo%20Library.ipynb","timestamp":1644658136441}],"collapsed_sections":[],"authorship_tag":"ABX9TyMZddOeG4MwaQznPAhGC7Sx"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"PWdAC_B0bU23"},"source":["# Multi-objective Optimization using Pymoo Library"]},{"cell_type":"markdown","metadata":{"id":"n1E6vDYXVgvT"},"source":["Without any loss of generality an optimization problem can be defined by:\n","\n","\\begin{align}\n","\\begin{split}\n","\\min \\quad& f_{m}(x) \\quad \\quad \\quad \\quad m = 1,..,M \\\\[4pt]\n","\\text{s.t.} \\quad& g_{j}(x) \\leq 0 \\quad \\; \\; \\, \\quad j = 1,..,J \\\\[2pt]\n","\\quad& h_{k}(x) = 0 \\quad \\; \\; \\quad k = 1,..,K \\\\[4pt]\n","\\quad& x_{i}^{L} \\leq x_{i} \\leq x_{i}^{U} \\quad i = 1,..,N \\\\[2pt]\n","\\quad& x \\in \\Omega\n","\\end{split}\n","\\end{align}\n","\n","where xi represents the i-th variable to be optimized, xLi and xUi its lower and upper bound, fm the m-th objective function, gj the j−th inequality constraint and hk the k-th equality constraint.\n","\n","The objective function(s) f are supposed to be minimized by satisfying all equality and inequality constraints. If a specific objective function is maximized (maxfi), one can redefine the problem to minimize its negative value (min−fi).\n","\n","Instead of starting coding your problem immediately, it is recommendable to first think about the mathematical problem formulation. Doing so makes you being aware of the complete optimization problem. This also helps you to identify the challenging facets of your optimization problem and, thus, to select a suitable algorithm. In this guide, we will demonstrate an example of a multi-objective problem, use pymoo to obtain a solution set, and theoretically derive the optimum for verification purposes.\n","\n","If you have some experience solving optimization problems, the following might already be apparent to you. However, if you are new to optimization, thinking about your problem’s characteristics is vital. In the following a few common facts and challenges to consider when intending to solve a (real-world) optimization problem are discussed:\n","\n","Variable Types. The variables span the search space Ω of your optimization problem. Thus, the type of variables is an essential aspect of the problem to be paid attention to. Different variables types, such as continuous, discrete/integer, binary, or permutation, define the characteristics of the search space. In some cases, the variable types might be even mixed, which increases the complexity further.\n","\n","Number of Variables. Not only the type but also the number of variables (N) is essential. For either a very small or large number, different algorithms are known to work more efficiently. You can imagine that solving a problem with only ten variables is fundamentally different from solving one with a couple of thousand. For large-scale optimization problems, even the second-order derivate becomes computationally very expensive, and efficiently handling the memory plays a more important role.\n","\n","Number of Objectives. Some optimization problems have more than one conflicting objective (M>1) to be optimized. Before researchers have investigated multi-objective optimization, single-objective problems were the main focus. Single-objective optimization is only a particular case where M=1. In multi-objective optimization, the solution’s domination relation generalizes the comparison of two scalars in single-objective optimization. Moreover, having more than one dimension in the objective space, the optimum (most of the time) consists of a set of non-dominated solutions. Because a set of solutions should be obtained, population-based algorithms have mainly been used as solvers.\n","\n","Constraints. Optimization problems have two types of constraints, inequality (g) and equality (h) constraints. From an end-user perspective, constraints have a priority over objective values. No matter how good the solution’s objectives are, it is considered infeasible if it turns out to violate just a single constraint. Constraints can have a big impact on the complexity of the problem. For instance, if only a few islands in the search space are feasible or a large number of constraints (|J|+|K|) need to be satisfied. For genetic algorithms satisfying equality constraints can be rather challenging. Thus, this needs to be addressed differently, for instance, by mapping the search space to a utility space where the equality constraints are always satisfied or injecting the knowledge of the equality constraint through customization.\n","\n","Multi-modality. Most aspects discussed so far are most likely known or to be relatively easy to define. However, the nature of the fitness landscape is less obvious bet yet essential to be aware of. In the case of multi-modal fitness landscapes, optimization becomes inevitably more difficult due to the existence of a few or even many local optima. For the solution found, one must always ask if the method has explored enough regions in the search space to maximize the probability of obtaining the global optimum. A multi-modal search space quickly shows the limitation of local search, which can easily get stuck.\n","\n","Differentiability. A function being differentiable implies the first or even second-order derivative can be calculated. Differentiable functions allow gradient-based optimization methods to be used, which can be a great advantage over gradient-free methods. The gradient provides a good indication of what direction shall be used for the search. Most gradient-based algorithms are point-by-point based and can be highly efficient for rather unimodal fitness landscapes. However, in practice, often functions are non-differentiable, or a more complicated function requires a global instead of a local search. The research field addressing problems without knowing their mathematical optimization is also known as black-box optimization.\n","\n","Evaluation Time. Many optimization problems in practice consist of complicated and lengthy mathematical equations or domain-specific software to be evaluated. The usage of third-party software often results in a computationally expensive and time-consuming function for evaluating objectives or constraints. For those types of problems, the algorithm’s overhead for determining the next solutions to be evaluated is often neglectable. A commercial software performing an evaluation often comes with various more practical issues such as distributed computing, several instances to be used in parallel and software license, and the software’s possible failure for specific design variable combinations.\n","\n","Uncertainty. Often it is assumed that the objective and constraint functions are of a deterministic manner. However, if one or multiple target functions are nondeterministic, this introduces noise or also referred to as uncertainty. One technique to address the underlying randomness is to repeat the evaluation for different random seeds and average the resulting values. Moreover, the standard deviation derived from multiple evaluations can be utilized to determine the performance and the reliability of a specific solution. In general, optimization problems with underlying uncertainty are investigated by the research field called stochastic optimization.\n","\n","Of course, this shall not be an exhaustive list of problem characteristics but rather an idea of how fundamentally different optimization problems are. Being aware of possible challenges, one can make better decisions regarding a method and its suitability. In this tutorial, solving a constrained bi-objective optimization problem is demonstrated. This, and your problem’s characteristics, shall help you to use pymoo as a toolbox to tackle your optimization problem."]},{"cell_type":"markdown","metadata":{"id":"KCDd8k47V_QN"},"source":["In the following, we investigate exemplarily a bi-objective optimization with two constraints. We have tried to select a suitable optimization problem with enough complexity for demonstration purposes, but not too difficult to lose track of the overall idea.\n","\n","As already discussed in the Preface, let an optimization problem be defined by:\n","\n","\\begin{align}\n","\\begin{split}\n","\\min \\quad& f_{m}(x) \\quad \\quad \\quad \\quad m = 1,..,M \\\\[4pt]\n","\\text{s.t.} \\quad& g_{j}(x) \\leq 0 \\quad \\; \\; \\, \\quad j = 1,..,J \\\\[2pt]\n","\\quad& h_{k}(x) = 0 \\quad \\; \\; \\quad k = 1,..,K \\\\[4pt]\n","\\quad& x_{i}^{L} \\leq x_{i} \\leq x_{i}^{U} \\quad i = 1,..,N \\\\[2pt]\n","\\quad& x \\in \\Omega\n","\\end{split}\n","\\end{align}\n","\n","The the example problem to be solved in this getting started guide is given by:\n","\n","\\begin{align}\n","\\begin{split}\n","\\min \\;\\; & f_1(x) = 100 \\,(x_1^2 + x_2^2) \\\\\n","\\max \\;\\; & f_2(x) = -(x_1-1)^2 - x_2^2 \\\\[1mm]\n","\\text{s.t.} \\;\\; & g_1(x) = 2 \\, (x_1 - 0.1) \\, (x_1 - 0.9) \\leq 0\\\\\n","& g_2(x) = 20 \\, (x_1 - 0.4) \\, (x_1 - 0.6) \\geq 0\\\\[1mm]\n","& -2 \\leq x_1 \\leq 2 \\\\\n","& -2 \\leq x_2 \\leq 2\\\\[1mm]\n","& x \\in \\mathbb{R}\n","\\end{split}\n","\\end{align}\n","\n","The problem consists of two objectives (M=2) where f1(x) is minimized and f2(x) maximized. The optimization is subject to two inequality constraints (J=2) where g1(x) is formulated as a less than and g2(x) as a greater than constraint. The problem is defined with respect to two variables (N=2), x1 and x2, both in the range [−2,2]. The problem does not contain any equality constraints (K=0).\n","\n","Let us analyze where the Pareto-optimal solutions have to lie. The first objective f1 is minimized at (0,0), whereas the second object f2 at (1,0). Because both functions are of quadratic nature, the optimum is given by a straight line between the two optima. This means all Pareto-optimal solutions (ignoring the constraints for now) have in common that x2=0 and x1∈(0,1). The first constraint only relies on x1 and is satisfied if x1∈(0.1,0.9). The second constraint g2 is satisfied for x1∈(0.4,0.6). This means analytically, the pareto-optimal set is given by PS={(x1,x2)|(0.1≤x1≤0.4)∨(0.6≤x1≤0.9)∧x2=0}.\n","\n","The figure below shows the problem’s functions in the design space and might help to see the relationship between the functions intuitively. The contour lines of the objective function f1(x) is represented by a solid and f2(x) by a dashed line. The constraints g1(x) and g2(x) are parabolas which intersect the x1-axis at (0.1,0.9) and (0.4,0.6). A thick orange line illustrates the Pareto-optimal set. When considering both constraints together, the Pareto-set shown in orange is split into two parts as analytically derived above."]},{"cell_type":"markdown","metadata":{"id":"JhIrDJ9fWTYx"},"source":["## Setup"]},{"cell_type":"code","metadata":{"id":"0kILtUYimP3H"},"source":["!pip install -q pymoo"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"GAB6o0elVaru"},"source":["import numpy as np\n","import matplotlib.pyplot as plt\n","\n","from pymoo.core.problem import ElementwiseProblem\n","from pymoo.algorithms.moo.nsga2 import NSGA2\n","from pymoo.factory import get_sampling, get_crossover, get_mutation\n","from pymoo.factory import get_termination\n","from pymoo.optimize import minimize\n","from pymoo.decomposition.asf import ASF\n","from pymoo.mcdm.pseudo_weights import PseudoWeights\n","from pymoo.util.misc import stack\n","from pymoo.optimize import minimize\n","from pymoo.indicators.hv import Hypervolume\n","from pymoo.util.running_metric import RunningMetric\n","from pymoo.util.running_metric import RunningMetric\n","from pymoo.indicators.igd import IGD\n","from pymoo.indicators.igd_plus import IGDPlus"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"IisnAyUgWbt1"},"source":["## A Constrained Bi-objective Optimization Problem"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":370},"id":"fpvMOftLWXjU","executionInfo":{"status":"ok","timestamp":1635264352951,"user_tz":-330,"elapsed":1884,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"7092e92b-692c-4a6e-9b58-ce066cb0ffd5"},"source":["X1, X2 = np.meshgrid(np.linspace(-2, 2, 500), np.linspace(-2, 2, 500))\n","\n","F1 = X1**2 + X2**2\n","F2 = (X1-1)**2 + X2**2\n","G = X1**2 - X1 + 3/16\n","\n","G1 = 2 * (X1[0] - 0.1) * (X1[0] - 0.9)\n","G2 = 20 * (X1[0] - 0.4) * (X1[0] - 0.6)\n","\n","plt.rc('font', family='serif')\n","\n","levels = [0.02, 0.1, 0.25, 0.5, 0.8]\n","plt.figure(figsize=(7, 5))\n","CS = plt.contour(X1, X2, F1, levels, colors='black', alpha=0.5)\n","CS.collections[0].set_label(\"$f_1(x)$\")\n","\n","CS = plt.contour(X1, X2, F2, levels, linestyles=\"dashed\", colors='black', alpha=0.5)\n","CS.collections[0].set_label(\"$f_2(x)$\")\n","\n","plt.plot(X1[0], G1, linewidth=2.0, color=\"green\", linestyle='dotted')\n","plt.plot(X1[0][G1<0], G1[G1<0], label=\"$g_1(x)$\", linewidth=2.0, color=\"green\")\n","\n","plt.plot(X1[0], G2, linewidth=2.0, color=\"blue\", linestyle='dotted')\n","plt.plot(X1[0][X1[0]>0.6], G2[X1[0]>0.6], label=\"$g_2(x)$\",linewidth=2.0, color=\"blue\")\n","plt.plot(X1[0][X1[0]<0.4], G2[X1[0]<0.4], linewidth=2.0, color=\"blue\")\n","\n","plt.plot(np.linspace(0.1,0.4,100), np.zeros(100),linewidth=3.0, color=\"orange\")\n","plt.plot(np.linspace(0.6,0.9,100), np.zeros(100),linewidth=3.0, color=\"orange\")\n","\n","plt.xlim(-0.5, 1.5)\n","plt.ylim(-0.5, 1)\n","plt.xlabel(\"$x_1$\")\n","plt.ylabel(\"$x_2$\")\n","\n","plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.12),\n"," ncol=4, fancybox=True, shadow=False)\n","\n","plt.tight_layout()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"WLcu_nCFWchG"},"source":["Next, we derive the Pareto-front by mapping the Pareto-set to the objective space. The Pareto-front equation is based on f2 depending on the variable of f1. We know that at the optimum x2=0 which means we can simplify the objective functions to f1(x)=100x21 and f2(x)=−(x1−1)2. The first objective f1 can be reformulated to x1=f1100−−−√ and then be put into the second objective which results in\n","\n","$$f_2 = -\\left(\\sqrt{\\frac{f_1}{100}}-1\\right)^2$$\n","\n","The equation defines the shape, however, next all possible values for f1 need to be defined. As shown before the Pareto-set is defined for (0.1≤x1≤0.4)∨(0.6≤x1≤0.9)∧x2=0. If we plug in the values for x1 into f1 we get the points of interest [1,16] and [36,81]. Thus the Pareto-front is given by:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":370},"id":"m1VOQxoQWnyk","executionInfo":{"status":"ok","timestamp":1635264420568,"user_tz":-330,"elapsed":673,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"acccd7a2-98bb-467d-a29d-df335820f38b"},"source":["plt.figure(figsize=(7, 5))\n","\n","f2 = lambda f1: - ((f1/100) ** 0.5 - 1)**2\n","F1_a, F1_b = np.linspace(1, 16, 300), np.linspace(36, 81, 300)\n","F2_a, F2_b = f2(F1_a), f2(F1_b)\n","\n","plt.rc('font', family='serif')\n","plt.plot(F1_a,F2_a, linewidth=2.0, color=\"green\", label=\"Pareto-front\")\n","plt.plot(F1_b,F2_b, linewidth=2.0, color=\"green\")\n","\n","plt.xlabel(\"$f_1$\")\n","plt.ylabel(\"$f_2$\")\n","\n","plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.10),\n"," ncol=4, fancybox=True, shadow=False)\n","\n","plt.tight_layout()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAfAAAAFhCAYAAACPlvgAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxU9f3v8dcnBAiBgIGE3YAg+6YSUKpW0SoopVZwV6ptXX7+aq2Xq/4sD2v1V6XoVa91rYhapXXhJ7dYxQVxBYogIAiChH2HBEhIQoBsn/vHDDFAkC3MmZO8n4/HPDJnmZn3ySR553zPmRlzd0RERCRcEoIOICIiIkdOBS4iIhJCKnAREZEQUoGLiIiEkApcREQkhBKDDiBSm82dO7d5YmLiOKAn+oc6COXAotLS0hv79u2bHXQYkSOhAhcJUGJi4riWLVt2S09Pz01ISNBrOmOsvLzccnJyum/evHkc8LOg84gcCf3HLxKsnunp6fkq72AkJCR4enr6DiIjICKhogIXCVaCyjtY0e+//hZK6OiHVkREJIRU4CK13Keffprcv3//LqeeemrXkSNHth4xYkTG9ddff2JZWdkx3/eTTz7ZbOvWrXWO5DYFBQUJQ4YM6fCHP/yhxWWXXdb+mEMAS5curTd+/PgTquO+ROKFClyklhs4cGDRWWedVdCvX7/Cxx9/fOP48ePXLl68OPmtt95qcqz3/fe//z1t27ZtR1TgM2fObFCvXr3yP/3pT1v+8Y9/rDnWDADLli2rP2nSJBW41Cg6C10kTtgD1vd43K//0eceyfolJSXk5uYmPv744y1mzZrVsLCwMKFVq1YlDzzwwJapU6c2vO2229r17t17Z7169fy9995LzcrKWvTiiy82Xbp0aVJaWlrpjh076jz33HPrJ02a1HjDhg31Hn744RZdu3bdfffdd+c8+uijaVlZWUknnHBCWU5OTuILL7ywLjHx+z9D27dvT3j++efTlyxZkjxy5MjWgwcP3nH77bcf8Hh/+9vfUve/nwkTJjS55557Trzgggt2FBYWJmRlZTV44403VrZr167k5Zdfbvbtt98mR0cYtp966qm7q/0bLRJjpk8jEwnOggULVvfp02crBFvgI0eObP3pp582HjhwYP62bdvqDBgwYGejRo3Kr7vuujyArl27dp85c+Z3qamp5SNHjmxdVFSU8Ne//nX9rFmzGpgZV111VYfly5d/m5CQwPDhw9tfeumledddd11e//79u4wfP35Vly5diufNm5d01VVXdcjKyloMcO2112aceuqpRXfeeefWylnefffdlJdffrnZxIkTV+/Ntv/jXXfddSdVdT/Dhw9vf8YZZxTeddddW//whz+0SEhI4IEHHtiy/33ub8GCBWl9+vRpf0zfaJEY0x64SJw40j3l6rZ3CH3v9COPPJJ+2223tWncuHFZYWFhnezs7MTU1NRigG7duu0COP3003e99NJLqQkJCdx7770tAerWres7duw44PDc/PnzG7Rt27Z47/TJJ5+8Z8GCBcnjx48/YezYsekAkydPXlFVtv0fr6r72TvdtWvXPQDp6emlq1evrn9s3xWR+KUCF5EDzJw5s8GTTz7Zcv369QsB3n///X2OH5tZxfVTTz11V1JSUvno0aM3A0yfPj25Xr16DlCnTh13d7766quk3r1771q/fn29vbdbtmxZ/b59+xaNGDEib8SIEXk/lGf/xxszZswB91PVunslJia6u1NUVGTLli2r16dPnz2H/c0QiVN17r///qAziNRaW7ZsuaNly5ZFh17z+Pniiy+SX3rppbT169fXq1+/ftkpp5yyOzU1teyDDz5Ief/991MWLlyYNG3atMa7du2y1q1bFz/77LPN165dW79du3Z72rVrV9KqVavSXbt28dJLLzWdOXNm8ueff95oxIgRuUlJSb5mzZrESZMmpU6bNi3ljjvu2Lpnzx4fN25cs88++6xRSUmJjR49enNCwvc767m5uQkPPfRQy8WLFyeXlZV5gwYNyqt6vKru5/PPP09+5ZVX0jZt2pTYv3//oscff7zF8uXLk84444zCjh07Fo8bNy793//+d8NmzZqV9ujRY58C37JlS3LLli2fiPk3X+QY6Bi4SIAqHwOX4OgYuISRXkYmIiISQipwERGREFKBiwSrvLy8/MCzriRmot//8qBziBwpFbhIsBbl5OQ0UYkHI/pxok2ARUFnETlSehmZSIBKS0tv3Lx587jNmzf3RP9QB6EcWFRaWnpj0EFEjpTOQhcREQkh/ccvIiISQipwERGREFKBi4iIhJAKXEREJIRU4CIiIiFU419GlpaW5u3btw86hoiIyFGZO3fuVndP339+jS/w9u3bM2fO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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"pKkHCxK0WtT_"},"source":["Researchers have developed all kinds of test problems and derived their optima from designing and comparing suitable optimization algorithms. However, deriving the Pareto-set and Pareto-front from a mathematical problem formulation can become quite challenging for more complicated problems or not even be possible. Also, not all algorithms can be put into a math equation and might be of a black-box nature. Thus, we use optimization algorithms to find (near-optimal) solutions using well-benchmarked algorithms."]},{"cell_type":"markdown","metadata":{"id":"uuJUtrQuW0Qb"},"source":["## Find a Solution Set using Multi-objective Optimization\n","\n","Most optimization frameworks commit to either minimize or maximize all objectives and to have only ≤ or ≥ constraints. In pymoo, each objective function is supposed to be minimized, and each constraint needs to be provided in the form of ≤0.\n","\n","Thus, we need to multiple an objective that is supposed to be maximized by −1 and minimize it. This results in minimizing −f2(x) instead of maximizing f2(x).\n","\n","Moreover, the inequality constraints need to be formulated as less than zero (≤0) constraint. For this reason, g2(x) is multiplied by −1 in order to flip inequality relation. Also, we recommend the normalization of constraints to make them operating on the same scale and giving them equal importance. For g1(x), the coefficient results in 2⋅(−0.1)⋅(−0.9)=0.18 and for g2(x) in 20⋅(−0.4)⋅(−0.6)=4.8, respectively. We achieve normalization of constraints by dividing g1(x) and g2(x) by its corresponding coefficient.\n","\n","After these reformulations the problem to be implemented is given by:\n","\n","\\begin{align}\n","\\begin{split}\n","\\min \\;\\; & f_1(x) = 100 \\, (x_1^2 + x_2^2) \\\\\n","\\min \\;\\; & f_2(x) = (x_1-1)^2 + x_2^2 \\\\[1mm]\n","\\text{s.t.} \\;\\; & g_1(x) = 2 \\, (x_1 - 0.1) \\, (x_1 - 0.9) \\, / \\, 0.18 \\leq 0\\\\\n","& g_2(x) = - 20 \\, (x_1 - 0.4) \\, (x_1 - 0.6) \\, / \\, 4.8 \\leq 0\\\\[1mm]\n","& -2 \\leq x_1 \\leq 2 \\\\\n","& -2 \\leq x_2 \\leq 2\\\\[1mm]\n","& x \\in \\mathbb{R}\n","\\end{split}\n","\\end{align}"]},{"cell_type":"markdown","metadata":{"id":"2m1p_Pm-W-wQ"},"source":["### Implement the Problem\n","\n","After having formulated the problem the right way, we can start implementing it. In this tutorial we the element-wise problem definition, which is one out of three different ways for implementing a problem. We define a new Python objective inheriting from ElementwiseProblem and set the correct attributes, such as the number of objectives (n_obj) and constraints (n_constr) and the lower (xl) and upper bounds (xu). The function being responsible for the evaluation is _evaluate which shall be implemented next. The function’s interface is the parameters x and out. For this element-wise implementation x is a one-dimensional NumPy array of length n_var which represents a single solution to be evaluated. The output is supposed to be written to the dictionary out. The objective values should be written to out[\"F\"] as a list of NumPy array with length of n_obj and the constraints to out[\"G\"] with length of n_constr (if the problem has constraints to be satisfied at all)."]},{"cell_type":"code","metadata":{"id":"IYCI3qdBXMfS"},"source":["class MyProblem(ElementwiseProblem):\n","\n"," def __init__(self):\n"," super().__init__(n_var=2,\n"," n_obj=2,\n"," n_constr=2,\n"," xl=np.array([-2,-2]),\n"," xu=np.array([2,2]))\n","\n"," def _evaluate(self, x, out, *args, **kwargs):\n"," f1 = 100 * (x[0]**2 + x[1]**2)\n"," f2 = (x[0]-1)**2 + x[1]**2\n","\n"," g1 = 2*(x[0]-0.1) * (x[0]-0.9) / 0.18\n"," g2 = - 20*(x[0]-0.4) * (x[0]-0.6) / 4.8\n","\n"," out[\"F\"] = [f1, f2]\n"," out[\"G\"] = [g1, g2]\n","\n","\n","problem = MyProblem()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ItXbbyA1XO98"},"source":["A problem can be defined in a couple of different ways. Above, the implementation of an element-wise implementation is demonstrated, which means the _evaluate is called for each solution x at a time. Other ways of implementing a problem are vectorized, where x represents a whole set of solutions or a functional and probably more pythonic way by providing for each objective and constraint as a function. For more details, please have a look at the Problem tutorial."]},{"cell_type":"markdown","metadata":{"id":"yMr4vC94XPJd"},"source":["### Initialize an Algorithm\n","\n","The reason why you became aware of this framework, is probably the existence of an algorithm you like to use. pymoo follows an object oriented approach and, thus, we have to define an algorithm object next. Depending on the optimization problem, different algorithms will perform better or worse on different kind of problems. It is recommendable to first understand the intuition behind an algorithm and then select one which seems to be most suitable for solving your optimization problem. A list of algorithms which are available in pymoo is available here.\n","\n","In our case, the optimization problem is rather simple, but the aspect of having two objectives and two constraints should be considered. Thus, let us select the well-known multi-objective algorithm NSGA-II. For the majority of algorithms you could either choose the default hyper-parameters or create your own version of the algorithm by modifying them. For instance, for this relatively simple problem we choose a population size of 40 (pop_size=40) and with only 10 (n_offsprings=10) in each generation. Such an implementation is a greedier variant and improves the convergence of simpler optimization problems without major difficulties regarding optimization, such as the existence of local Pareto-fronts. Moreover, we enable a duplicate check (eliminate_duplicates=True), making sure that the mating produces offsprings that are different from themselves and the existing population regarding their design space values."]},{"cell_type":"code","metadata":{"id":"Yq5TWup6XWSZ"},"source":["algorithm = NSGA2(\n"," pop_size=40,\n"," n_offsprings=10,\n"," sampling=get_sampling(\"real_random\"),\n"," crossover=get_crossover(\"real_sbx\", prob=0.9, eta=15),\n"," mutation=get_mutation(\"real_pm\", eta=20),\n"," eliminate_duplicates=True\n",")"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1-dxQ_3RXWgM"},"source":["The algorithm object contains an implementation of NSGA-II with the custom configuration discussed above. The object can now be used to start an optimization run."]},{"cell_type":"markdown","metadata":{"id":"mh5l-k4EXYlv"},"source":["### Define a Termination Criterion\n","\n","Furthermore, a termination criterion needs to be defined to start the optimization procedure. Most common ways of defining the termination is by limiting the overall number of function evaluations or simply the number of iterations of the algorithm. Moreover, some algorithms already have implemented their own, for instance Nelder-Mead when the simplex becomes degenerated or CMA-ES where a vendor library is used. Because of the simplicity of this problem we use a rather small number of 40 iteration of the algorithm."]},{"cell_type":"code","metadata":{"id":"UZw9uiJiXx84"},"source":["termination = get_termination(\"n_gen\", 40)"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"xq7EodhaXd8B"},"source":["### Optimize\n","\n","Finally, we are solving the problem with the algorithm and termination we have defined. The functional interface uses the minimize method. By default, the minimize performs deep-copies of the algorithm and the termination object which guarantees they are not modified during the function call. This is important to ensure that repetitive function calls with the same random seed end up with the same results. When the algorithm has been terminated, the minimize function returns a Result object."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"U0IZ6FuDXe5q","executionInfo":{"status":"ok","timestamp":1635264721421,"user_tz":-330,"elapsed":813,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"953f70ec-74be-4e61-854f-2299d005100f"},"source":["res = minimize(problem,\n"," algorithm,\n"," termination,\n"," seed=1,\n"," save_history=True,\n"," verbose=True)\n","\n","X = res.X\n","F = res.F"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["=====================================================================================\n","n_gen | n_eval | cv (min) | cv (avg) | n_nds | eps | indicator \n","=====================================================================================\n"," 1 | 40 | 0.00000E+00 | 2.36399E+01 | 1 | - | -\n"," 2 | 50 | 0.00000E+00 | 1.15486E+01 | 1 | 0.00000E+00 | f\n"," 3 | 60 | 0.00000E+00 | 5.277918607 | 1 | 0.00000E+00 | f\n"," 4 | 70 | 0.00000E+00 | 2.406068542 | 2 | 1.000000000 | ideal\n"," 5 | 80 | 0.00000E+00 | 0.908316880 | 3 | 0.869706146 | ideal\n"," 6 | 90 | 0.00000E+00 | 0.264746300 | 3 | 0.00000E+00 | f\n"," 7 | 100 | 0.00000E+00 | 0.054063822 | 4 | 0.023775686 | ideal\n"," 8 | 110 | 0.00000E+00 | 0.003060876 | 5 | 0.127815454 | ideal\n"," 9 | 120 | 0.00000E+00 | 0.00000E+00 | 6 | 0.085921728 | ideal\n"," 10 | 130 | 0.00000E+00 | 0.00000E+00 | 7 | 0.015715204 | f\n"," 11 | 140 | 0.00000E+00 | 0.00000E+00 | 8 | 0.015076323 | f\n"," 12 | 150 | 0.00000E+00 | 0.00000E+00 | 7 | 0.026135665 | f\n"," 13 | 160 | 0.00000E+00 | 0.00000E+00 | 10 | 0.010026699 | f\n"," 14 | 170 | 0.00000E+00 | 0.00000E+00 | 11 | 0.011833783 | f\n"," 15 | 180 | 0.00000E+00 | 0.00000E+00 | 12 | 0.008294035 | f\n"," 16 | 190 | 0.00000E+00 | 0.00000E+00 | 14 | 0.006095993 | ideal\n"," 17 | 200 | 0.00000E+00 | 0.00000E+00 | 17 | 0.002510398 | ideal\n"," 18 | 210 | 0.00000E+00 | 0.00000E+00 | 20 | 0.003652660 | f\n"," 19 | 220 | 0.00000E+00 | 0.00000E+00 | 20 | 0.010131820 | nadir\n"," 20 | 230 | 0.00000E+00 | 0.00000E+00 | 21 | 0.005676014 | f\n"," 21 | 240 | 0.00000E+00 | 0.00000E+00 | 25 | 0.010464402 | f\n"," 22 | 250 | 0.00000E+00 | 0.00000E+00 | 25 | 0.000547515 | f\n"," 23 | 260 | 0.00000E+00 | 0.00000E+00 | 28 | 0.001050255 | f\n"," 24 | 270 | 0.00000E+00 | 0.00000E+00 | 33 | 0.003841298 | f\n"," 25 | 280 | 0.00000E+00 | 0.00000E+00 | 37 | 0.006664377 | nadir\n"," 26 | 290 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000963164 | f\n"," 27 | 300 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000678243 | f\n"," 28 | 310 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000815766 | f\n"," 29 | 320 | 0.00000E+00 | 0.00000E+00 | 40 | 0.001500814 | f\n"," 30 | 330 | 0.00000E+00 | 0.00000E+00 | 40 | 0.014706442 | nadir\n"," 31 | 340 | 0.00000E+00 | 0.00000E+00 | 40 | 0.003554320 | ideal\n"," 32 | 350 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000624123 | f\n"," 33 | 360 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000203925 | f\n"," 34 | 370 | 0.00000E+00 | 0.00000E+00 | 40 | 0.001048509 | f\n"," 35 | 380 | 0.00000E+00 | 0.00000E+00 | 40 | 0.001121103 | f\n"," 36 | 390 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000664461 | f\n"," 37 | 400 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000761066 | f\n"," 38 | 410 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000521906 | f\n"," 39 | 420 | 0.00000E+00 | 0.00000E+00 | 40 | 0.004652095 | nadir\n"," 40 | 430 | 0.00000E+00 | 0.00000E+00 | 40 | 0.000287847 | f\n"]}]},{"cell_type":"markdown","metadata":{"id":"M-iFJBrQX5jH"},"source":["If the verbose=True, some printouts during the algorithm’s execution are provided. This can very from algorithm to algorithm. Here, we execute NSGA2 on a problem where pymoo has no knowledge about the optimum. Each line represents one iteration. The first two columns are the current generation counter and the number of evaluations so far. For constrained problems, the next two columns show the minimum constraint violation (cv (min)) and the average constraint violation (cv (avg)) in the current population. This is followed by the number of non-dominated solutions (n_nds) and two more metrics which represents the movement in the objective space."]},{"cell_type":"markdown","metadata":{"id":"y15J6XuKX5yL"},"source":["### Visualize\n","\n","Analyzing the solutions being found by the algorithm is vital. Always a good start is visualizing the solutions to get a grasp of commonalities or if the Pareto-front is known to even check the convergence."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"0BSrPjHqX8QL","executionInfo":{"status":"ok","timestamp":1635264748759,"user_tz":-330,"elapsed":547,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"bccaffc6-43ee-43ac-e817-e3d512992b1c"},"source":["xl, xu = problem.bounds()\n","plt.figure(figsize=(7, 5))\n","plt.scatter(X[:, 0], X[:, 1], s=30, facecolors='none', edgecolors='r')\n","plt.xlim(xl[0], xu[0])\n","plt.ylim(xl[1], xu[1])\n","plt.title(\"Design Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"PUaX5lYGX9ee","executionInfo":{"status":"ok","timestamp":1635264754924,"user_tz":-330,"elapsed":628,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"49d8f313-f8d7-4734-c7ef-e171842e0be2"},"source":["plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.title(\"Objective Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"kAZV-qjeX-wU"},"source":["## Multi-Criteria Decision Making\n","\n","Having now obtained a set of non-dominated solutions, one can ask how a decision-maker can nail down the set to only a few or even a single solution. This decision-making process for multi-objective problems is also known as Multi-Criteria Decision Making (MCDM). You should know that the main focus of pymoo lies in the optimization, not the MCDM part. However, the framework offers some rudimentary tools to find an appropriate solution.\n","\n","The Pareto-optimal solutions obtained from the optimization procedure are given by:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"CeQQWYDcYI_U","executionInfo":{"status":"ok","timestamp":1635264797108,"user_tz":-330,"elapsed":603,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"e762cb74-759e-4d4c-cafb-d9d5596fcea2"},"source":["F = res.F\n","xl, xu = problem.bounds()\n","plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.title(\"Objective Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"SBhPlzwuYJPe"},"source":["Before we start using any technique, we should note that the objectives have a different scale. What has not been a problem for single-objective optimization because not more than one dimension existed now becomes fundamentally important to consider."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yVq99fHcYKyr","executionInfo":{"status":"ok","timestamp":1635264809043,"user_tz":-330,"elapsed":500,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"5d8be74e-f2ab-47b1-9c59-41c017a5eca7"},"source":["fl = F.min(axis=0)\n","fu = F.max(axis=0)\n","print(f\"Scale f1: [{fl[0]}, {fu[0]}]\")\n","print(f\"Scale f2: [{fl[1]}, {fu[1]}]\")"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Scale f1: [1.3377795039158837, 74.97223429467643]\n","Scale f2: [0.01809179532919018, 0.7831767823138299]\n"]}]},{"cell_type":"markdown","metadata":{"id":"uJIbcMArYMIy"},"source":["As one can observe, the lower and upper bounds of the objectives f1 and f2 are very different, and such normalization is required.\n","\n","> Warning: Without normalization, we are comparing oranges with apples. The first objective will dominate any distance calculation in the objective space because of its larger scale. Handling different scales of objectives is an inherent part of any multi-objective algorithms, and, thus, we need to do the same for post-processing.\n","\n","A common way is normalizing using the so-called ideal and nadir point. However, for the decision-making purpose here and the sake of generalization, we assume the ideal and nadir points (also referred to as boundary points) and the Pareto-front) are not known. Thus the points can be approximated by:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"GQ4rv0zYYSW4","executionInfo":{"status":"ok","timestamp":1635264837395,"user_tz":-330,"elapsed":650,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"f27cec99-faae-4358-d38c-2d38aafef4af"},"source":["approx_ideal = F.min(axis=0)\n","approx_nadir = F.max(axis=0)\n","\n","plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.scatter(approx_ideal[0], approx_ideal[1], facecolors='none', edgecolors='red', marker=\"*\", s=100, label=\"Ideal Point (Approx)\")\n","plt.scatter(approx_nadir[0], approx_nadir[1], facecolors='none', edgecolors='black', marker=\"p\", s=100, label=\"Nadir Point (Approx)\")\n","plt.title(\"Objective Space\")\n","plt.legend()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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Lfnzn/+cdo1Fixbx+++/Z5hBt3LlSipVqsRtt93Gv/71r7Rk9eKLL9K9e3fuvvtuNm3axLx583jiiSfYtGkT3bt3p3LlypxyyinMnTuXNm3acPXVV9OrVy/GjBlD586d+eSTTzj55JPp2bMn/fr144QTTmDRokVce+21VKlShW7durF06VKmTZtG69atadGiBf379+eYY45h27ZtLFiw4ID/SMiSu8fk44wzznBxHz7cvUOHjG0ff+xet25s4hE5EN9++23OB33+uXutWu433OC+eXN6+xdfuNeu7X799Rnb91P//v39zjvvdHf3t99+21u2bJm2r0mTJj516lTfs2ePH3PMMb506VJ3d3/++ef99ttvd3f38ePHpx3funVr//rrr9PO+/zzz2d5zerVq3vXrl393nvv9VtuucW///57f/fdd71Vq1Zpx7Rs2dLfe+89d3c/55xzfPHixWnn7d27t7u7v/LKK37LLbe4u/vixYv9nHPOyfJ648eP9wsvvDBD26OPPuorVqzwXbt2efXq1f3777/PEN+iRYvc3X3s2LHevn37tGvfc8897u6+bds2r1Spkq9evdrd3YsVK+Zr1671Xbt2+dy5c71Dhw7+6quvurv7ihUrvEqVKr5nzx7fsmWLn3766T5s2DB/5JFHMsR06aWX+v/+978s7yFaVj83wBzPImeoZxVjV1wBgwbBI4+EHtXChdClS1j3CmDmzFBDcNkyOPts6NEDIn+8iSSW5GT48kto1gxeeQU6dw7t3bqFh7apP/R54JtvvqF27dpp28cffzwAq1evZu3atYwePRqAtWvXUrhwYQB27NhBz549KVeuHMuWLWPVqlW5ulbqMGCqt956K+16ALVq1WL+/Pm0aNFir6894YQTAEhKSmJTLqpab9++nSOOSP+17e5Mnz6dDRs2AFCzZk1GjhzJI488ste916pVi2+++Wav9mLFilGhQgV++uknypcvz9FHH03ZsmUBqF+/PgsWLKBHjx4AHH300WzYsIHVq1eTlJTEsGHDaN68+V7PqIoUKcLWrVtzvJ/9oWQVY2XKhKHAXr3CkiFVqsAdd8B114XJFp06hfaTT4aXXgoJa86cjMOGIgmjZMnwl9eJJ4a/zho2hKZNYf36PL1MnTp1+PDDD9O2f/75ZwAqVKhAUlISN910E2XLlmXNmjXMnj2b9evX06lTJzZu3EjRokVZsGDBAV+7Xr16GSZzLFq0iDZt2mR5bFbPrwoXLoxHJp3Mnz+fevXqpe079thjWbt2bdr2lClT6NKlC3/9618BSElJoWHDhgwePJhixYql3XutWrVYuHAhdaLK56R+T7Zt28bKlSupWbNmljHVq1ePn376iQYNGrBixQrKlClDhQoVcHdee+01Hn30UTp37sybb76Z9rVr166lWuZlJg6SZgPGgRNPhPHjYcOGUDvwhhvCkP1994VXUbp0gbPOCrN8jzsOXn451hGLHKBZs8K7GZdeGoYI/vMfeOONg55NNGfOHKZPn84nn3zCjBkzaNWqFTVr1uSGG25g4MCBuDujR49m8+bNjB07ll69ejFkyBD69u1LzZo1Oeqoo7jsssu4+uqrefjhh/n2228ZPXo0X331FdOnT2fChAksW7YswzVHjRrFhg0bGDlyJD9GTd9t0aIFZ555Jn369KF37940btyY888/n4kTJ5KSksKIESNYuHBh2nmXL1/O6NGjWbBgAXPmzKFy5coUL16cHj168Pnnn2e4ZqNGjVi1ahXbtm1j4cKF9O/fnxUrVqTt//7779mzZw/dunVL69l88MEH3HPPPYwePZoHH3ww7diVK1cyePBgOnTowJAhQyhfvjzPPvssGzZs4NFHH0077uGHH+add95h8ODB3H333YwdO5a1a9fSuXNndu/ezYUXXsjcuXPp3Lkz69atY9euXaSkpGQ7MeWAZTU2eCg+9MwqZ0lJ7suXZ2x74AH3nj1jE49IdnL1zMrdvXdv92OOcZ8yJWxv3x5+oME98ixH9u29995Le9aVk+rVq2fZvq/ncAdr4MCB/uabb+bq2P15ZpWrnpWZnWdmw81sgJn138dxV5mZm9mReZZNC7DTT4d33knf3rMHJk0KCzmKJKRbboGvvoJzzw3bRYvCgw+GIYWqVWMbW4Jo0aIF1113XY6lil566SU2bNjA8OHDM7R//fXXab26JUuW5Glsu3fvpl27dtkOex4M8xxeyDOzksACoK67bzezccBwd5+S6biTgY7A3UApd9+8r/MmJyf7nDlzDir4w91nn4XZvjffHF5DefhhWLkS2rWD7t0h6pmuSEx99913nHzyybEOQxJMVj83ZvaFu+/1sl1uelaNgRR3T301eibQKtPJSwI9gYEHFLFkqVGjMBtw40bo2ROKFYNhw0LiOvfcsE9EpCDIzWzAikD0nMqNkbZoDwD3ufuOfb2dbWZdgC5Ans8UOVydcAI0bhzek5w2Lf1dyWrVoF+/ULVGRORwl5ue1UqgVNR26UgbAGZ2LFAWuNzMekea7zCzvbpx7j7S3ZPdPTkpKekgwi5Y5s+HFi0yvtTfokVoF0lEu3btYvjw4cyePTvWoUiCyE2ymg1UN7Nike0mwEQzK2dmpd19ibtf6+5D3D21SNCj7q4HUnmkbt3Qq4p+vDhtmlYclsSUkpJCs2bNGDNmDJdccgmDBg3Ksbir7Fu8fv/yMq4ck5W7b4bUWwwAAB8lSURBVAG6Ak+Y2SBgQWRyRW+gW+pxZpZkZvdGNnuaWZU8i7KAa98eVq2Cq6+G99+HJ5+EG2+ExYtDibXzzguFcEXi3WuvvUbDhg1p06YNH330EV988QVTpkzJsgrC/pg+fXpa1fWdO3cCYfXia6+9losvvjjXL/m+9NJLadUbAC644IJ9FqZNtWPHDm6//XZKlizJgAEDuOeee7j44otZuHBhtl/zww8/0KFDhxzPPW/evH1WjJ81a1aG96IA+vbtS+vWrXM8d35bunQpPXv2zFAh/oBlNZ/9UHzoPav9s26de//+7s2auf/lL+7HHus+a5b7pk3uzzzjXrGi+2+/xTpKKahyes/qjz/+8C5duvjxxx/vn376aYZ9u3bt8kGDBnnFihUz1OfbX/379/emTZt6t27d0tqmTp263+8TRb+btGfPnlx/3eLFi718+fJp26NGjfJLL710n1+Tm/M///zz3r9//yz3rVu3zhs3buy7du1Ka9u5c6ffeOONXr58eV+yZEnugs9H48aNS6tDmFmev2clsVemTFiccepU2LkzrKrQuDEceWSoeHHxxfDii7GOUiRr48ePZ/bs2cydO5dGjRpl2Fe4cOG0CgsdO3ZMKzV0IP79738zY8YMXszif4ZPPvmEDh06MHToUK688kp+/fVXANasWUPbtm25++67efzxx9N6ZtOnT+f0009n2rRpLFq0iKZNm3LppZdy6623UqNGDebNm7fPWFKrsG/atImbbrqJBx98kG7duvHmm28C8MQTT6RVT3/++eepVKkS/fv359prr+Xss89m48aNrFy5kvHjxzNt2jQGDBiQoVoFhJ5qo0aN0uobAkyYMIFOnTrRsWNHnn322bT2O+64g7p163Lfffdxxx130LFjR7Zv385bb71FjRo16NOnDwMHDqR169Z8+eWXrFu3jpYtW3LBBRdw2223ceqppzJ+/HhmzpxJly5dGDp0KNdddx2//fYb06ZNo06dOnTp0oVvv/2WBg0a8MorrwDw17/+leeee+7gF2XMKoMdig/1rA5ctWrukULKaYYMcY8UjxY55HLqWaWkpHj58uV9x44d2R4zZsyYvSqK74/+/fv74sWL/eeff/aqVav63LlzM/SsFixY4D///LO7h7/277rrLnd3v+uuu3zIkCHu7r5p0yYvXrx42jmvueYanzp1qruHHk5qT+nHH3/0devWZbj+4sWLvUSJEt6/f3/v06eP9+rVy9evX++9e/f2hx56yN1DhfMqVar42rVr3T1jL+6cc87xd999193du3Xr5q+99lradbPrWd1+++0+dOjQDG29evVyd/eFCxd6tWrV0npdixcv9mOPPdZ3797t7u4333yzDxs2LO3akydPdnf3Tz75xJOTk9099EwbNmzo7u7Lly/3pUuXepUqVXzlypXuHiq5X3HFFe7u/t133/lJJ53kDz74oE+bNi1DTElJSf5bFkM/6lkd5po3h+eeS9/etg3+97/w7OqPP+Dpp8MzrUcfhXXrYhenSKpq1apRs2ZNPvroo2yPee2112jXrt1BX+u4447jhRde4LLLLmNd1P8AJUqUYNiwYfzzn//k3XffTauqHl2h/cgjj2RfM5VTX2CtWbMmZcqU2Wt/6jOrwYMHM2TIEI466igWLFiQocJ52bJlM9QSjHawVdh/+eUXvvvuOwYMGMBLL73EEUccwTtRZXBq1KhBoULh1352Vdgzt6fec6VKlShatCgbN25M+x6lVpQHOOmkk+jUqROvvfYa55xzToY486IKu5JVArr/fnj1VbjwwlCtvV69sGZdkybh49134YwzwqSLBg1g+fJYRywC7dq1Y1w2BWu3bNnC5MmTueiii/LkWs2bN+fmm2+me/fuaW09evSgXr169OnTh/bt26e116lTJ20ixObNm/e5NEhOq/xmJbVqOYQK5+vWrcuwfElO50+twr5u3bq0octUmauwjx49mv/85z8MGDCAAQMG0L9/f0aOHJm2PyUlJW04Lrsq7Jnbo2OqUKECRx11VNqkk0WLFlG/fn0gVFpft24d9erVy7BEibuzefNmjjnmmH19m3KkZJWAqlQJ5dWuvBJKlw4rhL/4YniOlVrB/eabYfTo8CxrPxc8FckX7dq144033shyOvO7775Lw4YNKV++/AGde8aMGUyfPp1hw4bxxx9/AOEZTbNmzdKO6dixI6NGjWLgwIG88soraVXOe/fuzezZs7nrrrt47LHHKF26NMOHD2fGjBksWLCA0aNHk5KSwoQJE5g+fXqWy7Xv3LmTYcOGsXXrVgYNGpT23AugT58+LFy4kEGDBtG9e3eeeuopypQpw/Dhw9mwYQNjxoxh8uTJpKSkMGrUKH7++ee02n2rVq2iUaNGfPrpp/To0YM1a9ZkuO7FF1/Mp59+CsDkyZOZMGFChpmPK1euZNKkSWn1AcuVK8fDDz/MbbfdxqZNm7jhhhvSjv3888/p378/9913HyNGjGD79u1p1eBT/8gwM8aOHUufPn0YPHgwkyZN4uGHH+bLL7+kXbt2/PnPf6Z9+/b07duXoUOHAmGZk2bNmlG8ePED+rdNlWNtwPyi2oB5r337sPLC5Zent338cSjVpHcvJT/ltjZg/fr1qV+/PuXKlcvQPm3aNG688Ua6du2aXyEetgYOHEj9+vVz7JX+8ssvXHvttVlOg2/WrBkvvPACNWrUyNPYtm3bxo033sj999+f5bnzujagJIjjjw8LsUb78kuIrKkmEnOjRo3itNNOo2rVqhk+rrvuOq6++upYh5eQ+vfvnzarcF+GDx9OSkoKEydOzNCeus5W5urseWHNmjU8/vjjeZIE1bM6jPzyC5x5ZuhJXXhh6FXdcw+8956WFZH8parrciDUsyqgatSADz8My95ffDFMnAhvv61EJSKJLzdV1yWB1K0LY8bEOgopiNz9gGbLScG0v6N66lmJyEErXrw4a9asOajqE1JwuDtr1qzZrxmC6lmJyEGrWrUqS5cu3ec7SiLRihcvTtWqVXN9vJKViBy0IkWK5GpGmsiB0jCgiIjEPSUrERGJe0pWIiIS95SsREQk7ilZiYhI3FOyEhGRuKdkJSIicU/JSkRE4p6SlYiIxD0lKxERiXtKViIiEvdyVRvQzM4D2gIrAXf3gZn2Xw5cBMwDGgIvuvuEPI5VREQKqByTlZmVBEYAdd19u5mNM7Pm7j4l6rASQG93/9XMTgdeAZSsREQkT+RmGLAxkOLu2yPbM4FW0Qe4+wvu/mtksxbwbd6FKCIiBV1uhgErApuitjdG2jIwsxLAAKAZcFVWJzKzLkAXgGrVqu1fpCIiUmDlpme1EigVtV060paBu291916ERDXVzIpkccxId0929+SkpKQDjVlERAqY3CSr2UB1MysW2W4CTDSzcmZWGsDM7jIzi+xfClQgPMcSERE5aDkOA7r7FjPrCjxhZquABe4+xcyGAmuBIUAx4Ckz+xU4GbjN3TfmZ+AiIlJw5GrqurtPBiZnausZ9fkDeRyXiIhIGr0ULCIicU/JSkRE4p6SlYiIxD0lKxERiXtKViIiEveUrEREJO4pWYmISNxTshIRkbinZCUiInFPyUpEROKekpWIiMQ9JSsREYl7SlYiIhL3lKxERCTuKVmJiEjcU7ISEZG4p2QlIiJxT8lKRETinpKViIjEPSUrERGJe0pWIiIS95SsREQk7ilZiYhI3FOyEhGRuHdEbg4ys/OAtsBKwN19YKb9vYBKwHIgGejn7t/ncawiIlJA5ZiszKwkMAKo6+7bzWycmTV39ylRhx0J3OHubmaXAw8BrfMnZBERKWhyMwzYGEhx9+2R7ZlAq+gD3L2vu3vUOTfnXYgiIlLQ5WYYsCKwKWp7Y6RtL2ZWFLgG+PvBhyYiIhLkpme1EigVtV060pZBJFE9Ddzj7j9ldSIz62Jmc8xszqpVqw4kXhERKYByk6xmA9XNrFhkuwkw0czKmVlpSHuu9W/gUXf/wszaZXUidx/p7snunpyUlJQX8YuISAGQ4zCgu28xs67AE2a2Cljg7lPMbCiwFhgC/Bc4BTjOzAD+BIzLv7BFRKQgydXUdXefDEzO1NYz6vO2eRyXiIhIGr0ULCIicU/JSkRE4p6SlYiIxL1cPbMSkYOzfTtMnw6FCsHZZ0ORIrGOSCSxKFmJ5LPZs6FtWzj+eNi9G377Dd56C+rXj3VkIolDyUokH+3cCZddBs88A3/7W2j73//g8svhu+9CT0tEcqb/VUTy0eefQ4UK6YkK4IorQg/r229jF5dIolGyEslHxYrBli2QVuYZ2LMHtm4N+0Qkd5SsRPJRgwYhKT36aOhN7dwJgwZBjRpQu3asoxNJHEpWIvnIDMaPh9dfh8qVw8dHH8HLL2c8bvPmkNDatoXbboOFC2MTr0i80gQLkXx2/PEwcyYsWRImVFSpknH/tm3wf/8Hxx4LHTrA119DkyYwaRIkJ8cmZpF4o2Qlcogce2zW7S+/DGXKwLhxoSd22WUhoQ0YAG+/fUhDFIlbGgYUibF586Bly5CoUv31r/Dll/Dcc3D33WEocdeu2MUoEmtKViIxdvLJ8PHHGdveegvWrw//LVECBg+GVq1gx47YxCgSa+bRc2oPoeTkZJ8zZ05Mri0STzZvDs+mzjkn/ZlVz57QujW88ko4ZvfuMLOwXDmoWxeuugoaN45t3CL5wcy+cPe9ntaqZyUSY0ceCTNmhETUrx988kl4ZtWnT/oxQ4bA8uXhna1jj4VLL4WRI2MXs8ihpp6VSBxq2RKuuSZUu1i1Ck44IUy8qFgR7r8ffvghzBj89VcoWTLW0Yrknex6VpoNKBKH/vEPuO46KF0a/vgDjj4a3ngjlG8COPFEqFQJFi2CevWyP8/69WEocfXqkAAbNDg08YvkNQ0DisShCy6Ap5+G++6Dm26CxYvDjMDq1cP+NWtg2bLsp8MDfPVVmLzxwQfh+IsuCjMLRRKRhgFFEkCnTvD773DPPWFGYP/+YYLFI49k/zXNm4dnWzffHLbXroVTToH33w//FYlH2Q0DKlmJJICdO+Gxx+DVV+GII0Lyuvnm7JcY2bMnLPC4dSsULZrefvnlYWjwz38On9epc2jiF8ktzQYUSWBFioTp7J9/HhZz7NZt32thmYWlSRYvTm977rkwlFisWHqJpxdfzP/YRfKCelYih6nBg8NLxSNHhnJOJ54I5cuHSRklSsA334R3uzSjUOKJZgOKFDC9e4ceWevWsHJlSFDTp4f/Qni5+Nhjw0vIjRrFNlaRnGgYUOQwVagQ9OgBKSnw3XfhWdcxx6Tv37Il9KoyV4HP7IcfwlT6Dh1gxIgwhChyqOUqWZnZeWY23MwGmFn/bI653Mx+MrO/ZbVfRGKnRg1o1gyuvDJMaV+wICSfCy/cd7KaPRuaNoVSpUJtwjfeCF+TkhLW6Prii4yrIIvklxyHAc2sJDACqOvu281snJk1d/cpUcccB6wEluRfqCJyMP7zn7BK8UUXhQkYV10VpsLvyz33hEUhO3UK21ddBdWqhanv554bhhBr1gyJ68gj8/8epODKTc+qMZDi7tsj2zOBVtEHuPtid5+a18GJSN4pUQIeeAB+/hl++im8cFys2L6/5ssvQ48q1cyZoaLGjTfCm2+GFY0rVAgloETyU26SVUVgU9T2xkjbfjOzLmY2x8zmrFq16kBOISKH0IknwqxZ6dtvvBFmFJ5xRtguXBh69QrtqbZsCdPkb7stzET8449DG7McnnKTrFYCpaK2S0fa9pu7j3T3ZHdPTkpKOpBTiMgh1K8fdOkCo0aFyvBTp8KGDdCuXfoxmzalzzDcsCFU1nj99fCc7O23w0zDtWtjEr4cRnKTrGYD1c0sdcCgCTDRzMqZWen8C01EYq1VK/jf/0LSufPOsO4WhOFBgBUrQs/quuvC9lNPhedZb78dZhC+9VZIVk88EZv45fCR4wQLd99iZl2BJ8xsFbDA3aeY2VBgLTDEzAy4B6gOXG5mO939vXyNXEQOiWbNwkeqCy8MMwn37AlDfDfdBLfeGvbNmBHKQJmlH3/55fDww/u+xpo14SXlWrUyTq8XSZWrl4LdfTIwOVNbz6jPHRgU+RCRw9gll0CbNrBkSZhcET0LsHr1MDW+TZv0tq++Sq8Wn5X77w8zDuvWhW+/DYnwySfD8zCRVKpgISL7rXDh8Ewqs1tvDSWcKlaE88+HDz+EoUPDMiVZmTQJRo8OLy1XqgQbN4ae2zPPpFeLFwFVsBCRPFSnDrzzTpjWfvbZ8Npr4blVdgtEjh0bnm1VqhS2S5cOa26NHZv9NZYuDWt9PfecJm4UJEpWIpKnGjYMEyx+/TUkrsaNsz+2UCHYvTtj2+7d2VeUHzMGTjsNPv00rMt1wgkwbVqehS5xTMOAIhIzV14ZhvvatAmVMdauDVU2brxx72M3boS//z0U401dPHLSJLj++lBJPjrBTZoUhhI3bgznvvnmjOt6SeJRz0pEYub886Fr1zBM2KBBKN3UtGn6VPhos2ZB/foZVzlu2TL0xH78Mb3tmWfCel8XXQS33x56eZddtu84VqwIQ4vPPBMWrJT4o/WsRCTmNmwIpZuOOy7MMMzKnDmhJ/bDD+lT4//4A6pWDW0VK4bEdeyx8O67YbgQwirLJ54Ir7yS/p5YtAcfhL59wznNwjlGjoTOnfPnXmXftFKwiMSto44Kz7qyS1QQSjyVLRtWTN6wAX7/PVTXaNkyJCqAdevCEiapiQrCml5NmoT3uDJbsCDUSLzwwjBkuHVrmJrftSv88kue3qIcJCUrEUkIZmFm4ZIlITnVrBlmDz77bPoxZcuG976iB222b4ePPsp6RuJbb4UlTv71r1DU1wweeST897XX8v+eJPc0wUJEEsbRR4dp7Xv2pA/bRStcGAYPhosvDmWgKlQIJaCaNg3PuzIrUSL9XKk2bgwLVWqdrviinpWIJJxChfZOVKk6dgz1DD//HF5+OUzWePHFrI/t0CGcp3Pn0ANbvRpuuCE8t2rfPuc4fvsNrr469PROOilU3lCSyx/qWYnIYefss8NHTqpUgVdfDUmrZMmQuIoUCbMCjztu31+7Y0dYgLJt21DYd9myMLV+69bwXG3PHnjsMfj3v8Mztlat4J//DL1D2X9KViJSoP3tb2Hob9asMDnjL38JiSsnb78dKm8MHhy2q1aF//43lJvq0SNM3HjvvdDLq1gRHn88TNWfO1d1Dw+EhgFFpMArVCg81zrvvNwlKgg9qZNOythWq1aoIL9tWxgSHDMmTJevVi1Uni9RAiZPzvg17jBsWHh/rEqVMMNx5QGtGHh4U7ISETkAzZrBhAmwfn1625gxcOaZ4d2ubdtCkkplFpLbsmUZzzNkCLzwQni36+OPQ7I87zzYtSvr6+7YEQoET50arlNQaBhQROQAnHoqXHFFqLxx1VUhCb39NkycCKVKhbqFr7+ePlFjzZpQBuree9PPsXt3WB5l1iyoXTu0PfZYGIp8//3w/le0zz4Lz8iqVg1f+/vvoWjw6afvHd/MmaGi/Y4dIYa//jX7SSmJILF7Vnv2aOqNiMTMQw+FhAAheX39dXi52SwM7XXtGuoc3nNPSGo33ZSelCD0vjZtCu+MpTIL1euXLMl4rd27Q9moJ5+ETz4Jsx0ffDAsbrlnT8ZjR44Mk0Zq1w7XveMO6Ncvff+OHSFxjh8frp8IErvc0l13hak1PXrkTVAiInlo+fIwwSJ1NuCZZ+59zBlnhGVR2rUL2+vXw8knw5QpIWml+uyzULT3q6/S29xDKalXX01/6Xnr1lByasaM9Gdqq1eHxPXtt+HzVq3CEOWf/hReoP7vf0PPKx5kV24pcYcBd+8Of9JUrKhkJSJxqXJluPPOfR/z+OOhxNMHH4TZhS++GIYVoxMVhKrxW7eGBJU6nOceemfRFeUXL4by5TNO/qhQIfT45s4Nw5ADB6bXPpw9G1q3hpSUkLziVeIOA86cGXpVa9aECpgiIgmoaVOYNy+svLx1a5hs8dBDex9Xr15IJo8+Gv5W37UrTM6oVCljYqpSJcwm/P339LZt22D+/PD1v/0G11yTvq9x41BL8aOP9j9295BczzsvTDgZPnzv9cnySuL0rH7/HQYMSP9OzJsHl14aavvfeGPoC0Mo8DV4cHjCKSKSAKpUCeWh9sUM3ngj9LqGDs04BBg9ceKoo8Kzsr/9LfzKLF48JLXzzw/Di9u3h2dWxYunf8369bmfsh+tb9+wwGa/fqF3N2RIeEE6ul5jXkmcZ1abNoVpMB99FF4Pr1EjPG3cvj38C373XehPt20b5o8WKZJvsYuIxFJKSkhQ0VPjo7nDqFGh15M6G7B79/Br8aKLwjOtoUNDghk+PEwG+e67/XtZef36UOXj++/Tq3L88QdUrx6eg9WocWD3lvjPrEqVCq+DP/RQ6Ae//HIouQyQlBSm2/z736GwVyLPzxQRyUH16vvebxYmY1x//d77nn8+/JqsXDm8DF23bphuv79VNX79NfQIo8tH/elPYbhy0aIDT1bZSZxkBeE726tX+LNi2rSwSI1ZSGK33pr1WtgiIpKmXLnw/te6daHXdaC1CmvWDM+/fv4Zjj8+tK1ZE4YBo1dzziuJN8HCPSwDWrFimItZr174rr37bqwjExFJGGXLHlxR3T/9KTwTa948DCOOHAlnnQXduoVeW17LVc/KzM4D2gIrAXf3gZn2FwceBpYBtYEh7p4/U/TmzQtzMwcODKWR162D224LLzIsWxb6pSIiku+6dw+9qNGjQ+mnIUPCNPj8kGOyMrOSwAigrrtvN7NxZtbc3adEHXY78Ku7DzWzU4HngLPyJeIffoAWLcLTw9TE1LhxWLTm+++VrEREDqFzzw0f+S03PavGQIq7b49szwRaAdHJqhVwN4C7f2Vm9cystLtvzNNoIdQQ6dAhY9sJJ4TXtUVE5LCUm2dWFYHo6lEbI237ewxm1sXM5pjZnFWrVu1vrCIiUkDlJlmtBKLfsC0dadvfY3D3ke6e7O7JSUlJ+xuriIgUULlJVrOB6mZWLLLdBJhoZuXMLPKiExMJw4VEnlnNz5chQBERKZByfGbl7lvMrCvwhJmtAha4+xQzGwqsBYYAjwMPm9m9QC0gi1fRREREDkyupq67+2Rgcqa2nlGfbwX+nrehiYiIBIn3UrCIiBQ4SlYiIhL3YlZ1PfL8K2U/vqQCsDqfwjkUFH9sKf7YS/R7UPyHRnV332u6eMyS1f4yszlZlY1PFIo/thR/7CX6PSj+2NIwoIiIxD0lKxERiXuJlKxGxjqAg6T4Y0vxx16i34Pij6GEeWYlIiIFVyL1rEREpICK+2Xtc1r4MR6ZWSVgEFDP3RtG2g7dApUHwcxqEmL/EqgKrHH3+8ysHKG01s+E+O92999jF2n2zKwQMAH4FCgK1ASuA0qQOPdQghD/++5+V6L8/KQys0+AbZHN3e7ePMF+hk4ErgC2AucAAwi/g/oCPwI1gDvdfXOMQtwnM6tBWMZpSaSpNLAAuIME+TfYi7vH7QdQkvCDUSyyPQ5oHuu4chF3e6A1MCeqrTfQM/L5qcDHsY4zm9gbAhdFbX8LnEFYgPOySFtrYHSsY93HPRQC7o3afhO4KsHu4RHgP8DDifTzExX/gCzaEuL7DxQmFOcuFNmuDCQB7wKNIm23AvfHOtZ93EN54Lzofw+gaaL8G2T1Ee/DgNkt/BjX3P01Mq7vBSHu2ZH9XwH1oqrWxw13/9zd34xqKgT8QVT8xPm/g7vvcfdBAGZ2BKGH+AMJcg9m1okQ3+Ko5oT4+Ylyqpn1MrMBZpb6fU6I7z/hDzYDbjWzPoRf6uuB/wM+jxwTz/Hj7mvc/QOAyIoZye4+g8T5N9hLvA8D5mpRxwSR3b3E7VIqZnYJ8J67f29m0fFvBMqa2RHuvit2Ee6bmV0A/AN4293nJMI9mFkd4GR3v9vMTovalWg/Pw+6+2dmVhiYbmabyHgPcfn9j6hO+EP5CnffYGb/JfRUtnqkS0Ji/S66Ahgb+TxR/g32Eu89q1wt6pggEupezOz/CH9J/iPSFB1/aWBdvP+Au/t77t4SOM7MupEY93AJsM3MehOGbRqZ2e0k2M+Pu38W+e9u4GPCz1IifP8h/BL/3t03RLZnAKcAJczMIm1x/f3P5FLg5cjnifJvsJd471mlLfwYGQpsAgyPcUwHKnWByo/jfYHKyLDNWcBtQGUzq056/EuILMAZuwj3LdI7Oc7dU2NcDBxPAtyDuz+Q+nlkUsWR7v6vyOeJ8vNzEtDE3Z+LNNUG3iABvv8RnwLlzaxwJNlWB74h9K4aAp8R3/GnMbNmwGx33xlpSpR/g73E/XtWZnY+YcLCKmCnJ8ZswHOAq4GWwNOEh+UQZnMtJyxQOdjjcDaXmZ0BfATMiTT9CXgKeAt4kFB8uCbQ2+N0FlFkRuNDhBmNRYCTge7ADhLnHtoR1ogrSvj+jycBfn4AzOwYYBgwl/DXexHCLLQyJM73/xLgXMLvnWqECRVHA/0IM+mqAXd4nM4GTGVmY4Bb3X11ZLscCfJvkFncJysREZF4f2YlIiKiZCUiIvFPyUpEROKekpWIiMQ9JSsREYl7SlYiIhL3lKxERCTuKVmJiEjc+3/7DW5PwMOhsAAAAABJRU5ErkJggg==\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"bIknFUDPYTE1"},"source":["Normalizing the obtained objective values regarding the boundary points is relatively simple by:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":369},"id":"dRib-TXdYWTS","executionInfo":{"status":"ok","timestamp":1635264854413,"user_tz":-330,"elapsed":628,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"9968da13-d65a-4b8d-86d7-6b08d695b582"},"source":["nF = (F - approx_ideal) / (approx_nadir - approx_ideal)\n","\n","fl = nF.min(axis=0)\n","fu = nF.max(axis=0)\n","print(f\"Scale f1: [{fl[0]}, {fu[0]}]\")\n","print(f\"Scale f2: [{fl[1]}, {fu[1]}]\")\n","\n","plt.figure(figsize=(7, 5))\n","plt.scatter(nF[:, 0], nF[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.title(\"Objective Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Scale f1: [0.0, 1.0]\n","Scale f2: [0.0, 1.0]\n"]},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"_-mq4a8mYWkt"},"source":["### Compromise Programming\n","\n","Without going into too much detail in this getting started guide, one way for decision-making is using decomposition functions. They require the definition of weights that reflect the user’s wishes. A vector gives the weights with only positive float numbers summing up to one and a length equal to the number of objectives.\n","\n","Here for a bi-objective problem, let us assume the first objective is less a bit less important than the second objective by setting the weights to"]},{"cell_type":"code","metadata":{"id":"p5s6RRXPYjmv"},"source":["weights = np.array([0.2, 0.8])"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"UvMOmBlPYlZd"},"source":["Next, we choose the decomposition method called Augmented Scalarization Function (ASF), a well-known metric in the multi-objective optimization literature."]},{"cell_type":"code","metadata":{"id":"QRM7tEXqYmhF"},"source":["decomp = ASF()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"JCgvhNPwYqUX"},"source":["Now let us obtain the best solution regarding the ASF. Because ASF is supposed to be minimized, we choose the minimum ASF values calculated from all solutions. You might be wondering why the weights are not passed directly, but 1/weights. For ASF, different formulations exist, one where the values are divided and one where they are multiplied. In pymoo, we divide, which does not reflect the idea of the user’s criteria. Thus, the inverse needs to be applied. No worries if this is too much detail for now; however, decision-making about decomposition techniques is vital."]},{"cell_type":"code","metadata":{"id":"2v9tGwb9YrDv"},"source":["i = decomp.do(nF, 1/weights).argmin()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"jXNCIrMoYsk4"},"source":["After having found a solution (i) we can operate on the original scale to represent the results:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VfFnAFm3YtXg","executionInfo":{"status":"ok","timestamp":1635264954079,"user_tz":-330,"elapsed":709,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"67c57625-bbfc-4202-cbfd-b723eaa825ae"},"source":["print(\"Best regarding ASF: Point \\ni = %s\\nF = %s\" % (i, F[i]))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Best regarding ASF: Point \n","i = 21\n","F = [43.28059434 0.12244878]\n"]}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"X0wwpxXgYu90","executionInfo":{"status":"ok","timestamp":1635264954703,"user_tz":-330,"elapsed":7,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"3c89e4f1-241f-4d91-baf4-92a5df7222b3"},"source":["plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.scatter(F[i, 0], F[i, 1], marker=\"x\", color=\"red\", s=200)\n","plt.title(\"Objective Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"B_vr5zIFYvlh"},"source":["### Pseudo-Weights\n","\n","A simple way to chose a solution out of a solution set in the context of multi-objective optimization is the pseudo-weight vector approach proposed in. Respectively, the pseudo weight wi for the i-ith objective function can be calculated by:\n","\n","\\begin{equation}\n","w_i = \\frac{(f_i^{max} - f_i {(x)}) \\, /\\, (f_i^{max} - f_i^{min})}{\\sum_{m=1}^M (f_m^{max} - f_m (x)) \\, /\\, (f_m^{max} - f_m^{min})}\n","\\end{equation}\n","\n","This equation calculates the normalized distance to the worst solution regarding each objective i. Please note that for non-convex Pareto fronts, the pseudo weight does not correspond to the result of an optimization using the weighted sum. However, for convex Pareto-fronts, the pseudo weights indicate the location in the objective space.\n","\n"]},{"cell_type":"code","metadata":{"id":"psiybS8gY5XC"},"source":["i = PseudoWeights(weights).do(nF)"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":386},"id":"pozkQEk8Y9RR","executionInfo":{"status":"ok","timestamp":1635265016454,"user_tz":-330,"elapsed":1409,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"f4bbbaa1-8da5-4fe0-85d3-3e7c1f1ece10"},"source":["print(\"Best regarding Pseudo Weights: Point \\ni = %s\\nF = %s\" % (i, F[i]))\n","\n","plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')\n","plt.scatter(F[i, 0], F[i, 1], marker=\"x\", color=\"red\", s=200)\n","plt.title(\"Objective Space\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Best regarding Pseudo Weights: Point \n","i = 39\n","F = [58.52211061 0.06005482]\n"]},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"pPw3nc9dY-n4"},"source":["## Analysis of Convergence\n","\n","Great! So far, we have executed an algorithm and already obtained a solution set. But let us not stop here without knowing how the algorithm has performed. This will also answer how we should define a termination criterion if we solve the problem again. The convergence analysis shall consider two cases, i) the Pareto-front is not known, or ii) the Pareto-front has been derived analytically, or a reasonable approximation exists.\n","\n","To further check how close the results match the analytically derived optimum, we have to convert the objective space values to the original definition where the second objective f2 was maximized. Plotting then the Pareto-front shows how close the algorithm was able to converge."]},{"cell_type":"code","metadata":{"id":"TaTSK6BJZHPe"},"source":["class MyTestProblem(MyProblem):\n","\n"," def _calc_pareto_front(self, flatten=True, *args, **kwargs):\n"," f2 = lambda f1: ((f1/100) ** 0.5 - 1)**2\n"," F1_a, F1_b = np.linspace(1, 16, 300), np.linspace(36, 81, 300)\n"," F2_a, F2_b = f2(F1_a), f2(F1_b)\n","\n"," pf_a = np.column_stack([F1_a, F2_a])\n"," pf_b = np.column_stack([F1_b, F2_b])\n","\n"," return stack(pf_a, pf_b, flatten=flatten)\n","\n"," def _calc_pareto_set(self, *args, **kwargs):\n"," x1_a = np.linspace(0.1, 0.4, 50)\n"," x1_b = np.linspace(0.6, 0.9, 50)\n"," x2 = np.zeros(50)\n","\n"," a, b = np.column_stack([x1_a, x2]), np.column_stack([x1_b, x2])\n"," return stack(a,b, flatten=flatten)\n","\n","problem = MyTestProblem()"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"D6sg3NDEZHkk"},"source":["For IGD, the Pareto front needs to be known or to be approximated. In our framework, the Pareto front of test problems can be obtained by:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":335},"id":"PGjGLK2MZKRX","executionInfo":{"status":"ok","timestamp":1635265066417,"user_tz":-330,"elapsed":823,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"5e519a40-a77f-49f1-8ed1-cb8ac47f8a42"},"source":["pf_a, pf_b = problem.pareto_front(use_cache=False, flatten=False)\n","pf = problem.pareto_front(use_cache=False, flatten=True)\n","\n","plt.figure(figsize=(7, 5))\n","plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='b', label=\"Solutions\")\n","plt.plot(pf_a[:, 0], pf_a[:, 1], alpha=0.5, linewidth=2.0, color=\"red\", label=\"Pareto-front\")\n","plt.plot(pf_b[:, 0], pf_b[:, 1], alpha=0.5, linewidth=2.0, color=\"red\")\n","plt.title(\"Objective Space\")\n","plt.legend()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"RS1v0QkEZK80"},"source":["Whether the optimum for your problem is known or not, we encourage all end-users of pymoo not to skip the analysis of the obtained solution set. Visualizations for high-dimensional objective spaces (in design and/or objective space) are also provided and shown here.\n","\n","In Part II, we have run the algorithm without storing, keeping track of the optimization progress, and storing information. However, for analyzing the convergence, historical data need to be stored. One way of accomplishing that is enabling the save_history flag, which will store a deep copy of the algorithm object in each iteration and save it in the Result object. This approach is more memory-intensive (especially for many iterations) but has the advantage that any algorithm-dependent variable can be analyzed posteriorly.\n","\n","A not negligible step is the post-processing after having obtained the results. We strongly recommend not only analyzing the final result but also the algorithm’s behavior. This gives more insights into the convergence of the algorithm.\n","\n","For such an analysis, intermediate steps of the algorithm need to be considered. This can either be achieved by:\n","\n","A Callback class storing the necessary information in each iteration of the algorithm.\n","\n","Enabling the save_history flag when calling the minimize method to store a deep copy of the algorithm’s objective each iteration.\n","\n","We provide some more details about each variant in our convergence tutorial. As you might have already seen, we have set save_history=True when calling the minmize method in this getting started guide and, thus, will you the history for our analysis. Moreover, we need to decide what metric should be used to measure the performance of our algorithm. In this tutorial, we are going to use Hypervolume and IGD. Feel free to look at our performance indicators to find more information about metrics to measure the performance of multi-objective algorithms."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"weasMukRZ1IV","executionInfo":{"status":"ok","timestamp":1635265249098,"user_tz":-330,"elapsed":11,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"2bd85cc2-cf3e-4fbb-982d-eb554cc85c70"},"source":["res = minimize(problem,\n"," algorithm,\n"," (\"n_gen\", 40),\n"," seed=1,\n"," save_history=True,\n"," verbose=False)\n","\n","X, F = res.opt.get(\"X\", \"F\")\n","\n","hist = res.history\n","print(len(hist))"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["40\n"]}]},{"cell_type":"markdown","metadata":{"id":"fu5VddNdZ3V6"},"source":["From the history it is relatively easy to extract the information we need for an analysis."]},{"cell_type":"code","metadata":{"id":"BdwWbbeFZ3vx"},"source":["n_evals = [] # corresponding number of function evaluations\\\n","hist_F = [] # the objective space values in each generation\n","hist_cv = [] # constraint violation in each generation\n","hist_cv_avg = [] # average constraint violation in the whole population\n","\n","for algo in hist:\n","\n"," # store the number of function evaluations\n"," n_evals.append(algo.evaluator.n_eval)\n","\n"," # retrieve the optimum from the algorithm\n"," opt = algo.opt\n","\n"," # store the least contraint violation and the average in each population\n"," hist_cv.append(opt.get(\"CV\").min())\n"," hist_cv_avg.append(algo.pop.get(\"CV\").mean())\n","\n"," # filter out only the feasible and append and objective space values\n"," feas = np.where(opt.get(\"feasible\"))[0]\n"," hist_F.append(opt.get(\"F\")[feas])"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"EcHFy8-IZ5hH"},"source":["### Constraint Satisfaction\n","\n","First, let us quickly see when the first feasible solution has been found:"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"SpSO75zQaC1U","executionInfo":{"status":"ok","timestamp":1635265307075,"user_tz":-330,"elapsed":529,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"d97e3275-0a62-496b-e086-e4bf00b2d176"},"source":["k = np.where(np.array(hist_cv) <= 0.0)[0].min()\n","\n","print(f\"At least one feasible solution in Generation {k} after {n_evals[k]} evaluations.\")"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["At least one feasible solution in Generation 0 after 40 evaluations.\n"]}]},{"cell_type":"markdown","metadata":{"id":"jE-2004UaFPy"},"source":["Because this problem does not have much complexity, a feasible solution was found right away. Nevertheless, this can be entirely different for your optimization problem and is also worth being analyzed first."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":365},"id":"D8C1tqlLaLZJ","executionInfo":{"status":"ok","timestamp":1635265351405,"user_tz":-330,"elapsed":2946,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"974e458c-4799-4fa0-a4a7-5b883e10f167"},"source":["# replace this line by `hist_cv` if you like to analyze the least feasible optimal solution and not the population\n","vals = hist_cv_avg\n","\n","k = np.where(np.array(vals) <= 0.0)[0].min()\n","\n","print(f\"Whole population feasible in Generation {k} after {n_evals[k]} evaluations.\")\n","\n","plt.figure(figsize=(7, 5))\n","plt.plot(n_evals, vals, color='black', lw=0.7, label=\"Avg. CV of Pop\")\n","plt.scatter(n_evals, vals, facecolor=\"none\", edgecolor='black', marker=\"p\")\n","plt.axvline(n_evals[k], color=\"red\", label=\"All Feasible\", linestyle=\"--\")\n","plt.title(\"Convergence\")\n","plt.xlabel(\"Function Evaluations\")\n","plt.ylabel(\"Constraint Violation\")\n","plt.legend()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Whole population feasible in Generation 8 after 120 evaluations.\n"]},{"output_type":"display_data","data":{"image/png":"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XrxYx44dq+XKldMvv/zysp7PGOPfNm/e7HYEx8SJE7Vfv346aNCgHH3e5ORk7dChg65atcrZ9tdff2mjRo1UVXXp0qVasWJFTUxMdB5/5JFHNC4uLsv7uPfee3XevHmqqpqQkJDmsVGjRumjjz7qrLdp00a/++67y/pdUkvv3w5YpenUjIDtqb333nv88ssvrF27ltKlS9OqVSvatWtHy5YtOXToEGFhYW5HNMYEqe3bt/Paa69Rt25dnnnmGe6++27Onj3Lxx9/zP79+3nwwQcZN24cpUqVYtSoUTRt2pQzZ87w2Wef8eabb9KjR490n3fNmjXExsam6f0VL16cH3/8EYCWLVtSpkwZZs2aRffu3fnrr79QVUqWLHnBc02ZMoVt27ZRpkwZDh8+zIQJE1i6dCkrV67k3LlzHDp0iH79+mX4OyYmJnLkyBHCwsJYunQp//73v6lRowa//fYbL774IkeOHOHBBx+kfPny1KtXj7Vr19KjRw/uuCOb356UXqXLS8vl9tRWrFihNWvW1OTkZH3mmWd07dq1unr1aq1evbomJydf1nMGtM6dPYsxASqv9NSWL1+uX331laqq9u/fXydPnqzbtm3TBg0aqKrq3r179aWXXlJV1aZNm+ry5ctVVXXOnDnatm3bTJ976tSpeuONN2ba5o033nDaTJ48WVesWHFBm82bN2v9+vWd9b///e86efJkVVW98847dcGCBek+96hRo7RFixY6atQovf/++/WTTz7R5ORkrVChgsbExDgZb7vtNqf9U089paqqZ86c0SuuuEKPHDmSbp7zEWw9taZNm3L27Fk2btxI2bJlOXr0KPPnz6dPnz72YXF64uPdTmCMTw0aNIiDBw/m2PNFRkYyZcqUi7b7/PPPKV68OL/++iuFCxdm8uTJDBo0iMjISBYuXMjChQsZMmQIAJs2baJmzZoAVK9e/aLPXbFiRQ4dOpRpmwEDBvDUU0+xb98+Vq5cyaBBgy5os3HjRlJfSL5GjRr8+uuvF90/eHqDo0ePdtYPHz5MXFwc5cqVS/e5Un6vwoULExYWxs6dOwkNDc3SvtITsEVNROjTpw+33XYbIkL+/PnZt28fs2fPdjuaMSYPyEoBymmxsbGUKVOGZ5991tkWFRXF6tWruf/++xk3bhw1a9YkIiICgLp167Jt2zauvfZadu3alea5du/e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Brp582anTUJCgj755JMaGRmpM2bM0MGDB6fZt6pqUlKSjhs3TsuVK6effvqpPvXUU1q+fHn9/vvvnTbJycn6wQcfaFhYmL799tv62muvaVhYmH766adpfv8ZM2ZoRESEPv/88/rvf/9bw8LC9K233tLk5GSnzaJFi7Ry5cr60EMP6VdffaURERE6atQoPXfunNPm119/1Tp16mi/fv30+++/1ypVquj999+v8fHxTptdu3bptddeq507d9b58+frVVddpbfeequeOHHCaXPo0CHt3LmzXnvttbpw4UJt2bKl3nDDDfrHH384bWJjY7Vfv35ap04dnT9/vvO679ixw2kTHx+vDz74oFauXFlnz56tAwYM0Nq1a+u6deucNomJifrcc89peHi4Tps2TR9++GGtVKmS/vTTT2lex3feeUfDwsL0/fff1xdffFHDw8P1m2++SfM6Tp06VcuVK6fjxo3TSZMmaWhoqL733ntpXscff/xRIyMjdcSIEfrZZ59puXLl9NVXX9WkpCSnzYoVKzQqKkrvu+8+/fbbbzUyMlKfeOIJPXv2rNNmy5Yt2qhRI+3Vq5fOnTtXa9Sooffcc4/+9ddfTpt9+/Zp27ZttV27drpw4UJt3Lix9uzZU48cOeK0OXr0qN50003aqFEjXbBggbZv317btGmj+/btc9r89ddfeu+992qNGjV07ty52rt3b23YsKFu2bLFaZOQkKDDhw/XyMhInTlzpg4aNEirV6+uv/zyi9MmKSlJX331VeeYHTlypJYvX15/+OGHNK/1+++/r2FhYTpx4kQdP368hoWF6WeffZbmtZ4+fbpGREToCy+8kOYYT/1a//TTT1qpUqU0x+xzzz2niYmJTpt169Zp7dq1tX///s4x+8ADD6Q5Znfu3KnNmjXTLl266Pz587Vu3bp62223aWxsrNPm0KFD2qlTJ+eYvfbaa7VTp0566NAhp82JEyf0tttu07p16+r8+fO1S5cu2rx58zTvD/Hx8frAAw9olSpV9Pvvv9fbb79d69Spk+aYPXfunI4ePVojIiJ02rRp+tBDD2nlypV10aJFaV7Ht99+W8PCwvSDDz7QF154QSMiInT69OmaHcAqTa/OpLcxtxagAzAv1fojwITMfibYitqOHTs0PDxcp0yZolOmTNHnn39ea9euraqeN8/Zs2dr5cqVtXHjxtqjRw8dPXq0vvPOO3rnnXdq69atddGiRfrrr79q586d9fbbb3f+QyQlJemoUaP06quvdvb10EMPaZcuXTz/IT74QJPff1/feOMNveKKK5w2Y8eO1WbNmumff/7pbPvvf/+rhQoV0tOnT6uq6n/+8x+tVauW7tq1y2kzf/58LVq0qO7Zs0dVVRcsWKARERG6fv16p83q1as1NDTUKZBbt27VEiVK6OLFi50227Zt02rVqum0adNU1fOfsWDBgjpjxgynzYEDB7RRo0b65ptvqqrnP1GZMmV0ypQpzhvLsWPH9G9/+5sOHz7c+bmrrrpKR48e7byJnzp1Svv27au333670+b666/XIUOGaEJCgqp6/hPff//92r59e6fNwIEDNTo6Wk+dOuXs/8UXX9RatWo5bZ566ilt27atHj161Nn2/vvva8mSJZ39T5w4URs0aKD79+932nz33XdaqFAh5+emT5+uVapU0a1btzptli5dqiVLltRNmzapqurKlSs1JCREV65c6bTZsGGDli9fXufMmaOqqvv379ciRYro3LlznTa///671q5dWz/88ENVVT179qwWLlxYp06d6rSJiYnRFi1a6EsvveRsq1ixok6YMMF5rePi4rRbt276j3/8w2nTvHlzffzxx5038TNnzujAgQP1pptuctr07t1b77jjDj1z5oyqeor8E088oddcc43T5oEHHtCuXbtqXFyc81q/9tprGhkZ6bQZM2aMXnvttRoTE+Ns+/zzz7Vw4cLOc3/00Ud65ZVX6u7du5028+bN0yJFijhFdN68eXrFFVfohg0bnDarVq3SkJAQp0Bu2bJFS5YsqUuWLHHabN26VatWrapff/21qqoeP35cCxYsqDNnznTapByzb7/9tqp6/n+WLl1a3333XafNsWPHtH379jpixAhnW506dfT5559Pc8z26dNH77jjDqdNx44ddejQoc4xm5CQoEOHDtUOHTo4be644w69+eabnWM2KSkpzXuNquqIESO0ffv2euzYMWfbu+++q6VLl3b2//bbb2vDhg31wIEDTptvv/1WCxUqpMePH1dV1a+//lqrVq2a5phdsmSJlixZMs0fI5cqo6Im6sMJCCJyG3CLqt7kXb8XaKeqt5/XbhAwCKBy5cpN9uzZ47OMecGYMWPYuXOns96rVy+6du3qrL/99tusWLGCyZMn8+uv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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Jf2AdE00aPO2"},"source":["### Pareto-front is unknown\n","\n","If the Pareto-front is not known, we can not know if the algorithm has converged to the true optimum or not. At least not without any further information. However, we can see when the algorithm has made most of its progress during optimization and thus if the number of iterations should be less or more. Additionally, the metrics serve to compare two algorithms with each other.\n","\n","In multi-objective optimization normalization the very important. For that reason, you see below that the Hypervolume is based on a normalized set normalized by the bounds (idea) More details about it will be shown in Part IV."]},{"cell_type":"markdown","metadata":{"id":"jXDGfvsraaev"},"source":["\n","### Hypvervolume (HV)\n","\n","Hypervolume is a very well-known performance indicator for multi-objective problems. It is Pareto-compliant and is based on the volume between a predefined reference point and the solution provided. Therefore, hypervolume requires defining a reference point ref_point, which shall be larger than the maximum value of the Pareto front."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":348},"id":"cNBA9AB2aZjb","executionInfo":{"status":"ok","timestamp":1635265423415,"user_tz":-330,"elapsed":711,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"3c1ea2f4-cc95-4d0d-e33e-0dd38df89a35"},"source":["approx_ideal = F.min(axis=0)\n","approx_nadir = F.max(axis=0)\n","\n","metric = Hypervolume(ref_point= np.array([1.1, 1.1]),\n"," norm_ref_point=False,\n"," zero_to_one=True,\n"," ideal=approx_ideal,\n"," nadir=approx_nadir)\n","\n","hv = [metric.do(_F) for _F in hist_F]\n","\n","plt.figure(figsize=(7, 5))\n","plt.plot(n_evals, hv, color='black', lw=0.7, label=\"Avg. CV of Pop\")\n","plt.scatter(n_evals, hv, facecolor=\"none\", edgecolor='black', marker=\"p\")\n","plt.title(\"Convergence\")\n","plt.xlabel(\"Function Evaluations\")\n","plt.ylabel(\"Hypervolume\")\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"k3TjfinUahva"},"source":["> Note: Hypervolume becomes computationally expensive with increasing dimensionality. The exact hypervolume can be calculated efficiently for 2 and 3 objectives. For higher dimensions, some researchers use a hypervolume approximation, which is not available yet in pymoo."]},{"cell_type":"markdown","metadata":{"id":"sEYZeQ_NajeK"},"source":["### Running Metric\n","Another way of analyzing a run when the true Pareto front is not known is the recently proposed running metric. The running metric shows the difference in the objective space from one generation to another and uses the algorithm’s survival to visualize the improvement. This metric is also being used in pymoo to determine the termination of a multi-objective optimization algorithm if no default termination criteria have been defined.\n","\n","For instance, this analysis reveals that the algorithm improved from the 4th to the 5th generation significantly."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"id":"Wf7gXvszamsi","executionInfo":{"status":"ok","timestamp":1635265468306,"user_tz":-330,"elapsed":1726,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"31516c81-bc51-44b4-c032-8fabcfd9b30d"},"source":["running = RunningMetric(delta_gen=5,\n"," n_plots=3,\n"," only_if_n_plots=True,\n"," key_press=False,\n"," do_show=True)\n","\n","for algorithm in res.history[:15]:\n"," running.notify(algorithm)"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAcYAAAEKCAYAAACISPXmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXyU1dn/8c+ZJfsKIYGwbwKyK26IiOJCC1i3tq4/l7pUW6t1fay21adqq2JradVKsU+1WFtLW4taN2wVRVFBQEQUWQIBgYQQsi+TmfP7454kk5CELJNMkvm++8qL3Ps1qeTinPuc6xhrLSIiIuJwRToAERGR7kSJUUREJIQSo4iISAglRhERkRBKjCIiIiGUGEVEREIoMYqIiIRQYhQREQmhxNgNGWM8xpi7jDGLIh2LiEi0UWLsnhKBV9H/PyIiXc4TqQcbY1YBlcFNv7V2dhPnnAacC+QB1lp7b8ixeOAD4HVr7a3BfcOAN4Hc4GkpwCfAlcCLwfNjgJHAldbaCmPMD4GBQBkQC9xp21knzxjTH7gPmGytPaY1n6Mp1toiY0xBe2IQEZGOiVhiBF611t7T3EFjTALwO2C8tbbKGPN3Y8xsa+2bwVPuA9Y2uqwEuNZauzx4j3uA5cFj71tr7wvu/xdwrjHmM+Aya+2U4P6/A2cD/2wUyzFAobV2S3DbDZxvrf1ro+fPAP4FTGnN5zDGTAh+jlDXWGvzmvu5BO95DXANQGJi4tFjx45t6XQREWlkzZo1+621/Zo6FsnEONEYcwcQD3xkrX250fETgB3W2qrg9kpgLvCmMebS4PYkIKn2AmttAcFEaIyJBaaFJN/apOgBBgFfAKOob10CbANm0ygxAoXAEmPM1cBm4M/UJ9w61tqlxphZrf0c1tpPcRJxm1hrFwGLAKZNm2ZXr17d1luIiEQ1Y8yO5o5FMjE+aK39MNj6WmGMKbHWrgg5nonTAqxVDGQaY44Exllrf2SMmdTC/S8E/hK6wxhzJvBD4CVr7WpjzH7g58aYOKAKmEbDRAmAtXaLMeabwN+ACuApa+2SVn7OJj9HSxcYYwzwbWCMMeYoa+3HrXyWiIh0UMQGd1hrPwz+6QfeAU5pdEoekByynRLcdw5QaYz5H5yuy2ONMTc18YhvAg26Oq21r1lr5wDDjTHXW2tzcLokfwzcCHwK7Gwm5BKgPBjTnlZ+zJY+R7Os40Fr7UlKiiIiXSsiLUZjzFjgRGvtU8Fdowl2XxpjhgUT1vvAUGNMbLAb8kTg8ZB3jARbeknW2kcb3X8WzjtFX3D7SGB4SHftdmBE8PsD1tq7guf9CXi8iXgzgaXAT3Dea/7DGJNkrf1XKz5uk5+jFdeJiEgERKortRiYa4zJxmlB5QJ/Nsa4gLeMMbOstTnGmOuAhcaYfOCTRknxPGAmEGOMudBa+1zI/a8FbgjZrgK+Y4yZCniBccAPgscWGmPeCZ6zzFq7qYl4JwC3WGs/Cj57PsHBL6GMMScDlwIDjDF3A49Ya8tb+hwiIm3h8/nYtWsXlZWVhz9ZiIuLY9CgQXi93lZfY9o5M0G6CQ2+EYku27dvJzk5mb59++IMR5DmWGspKCigpKSE4cOHNzhmjFljrZ3W1HWaQC4i0oNUVlYqKbaSMYa+ffu2uXUdyVGpEikBPxRsjXQUbZeUCfFpkY5CJOKUFFuvPT8rJcZoVFMFqx6LdBTtYGDICTBmDsSlRjoYEemllBijUE0gQEm5L9JhtFlirJuYne/B7tUw8lQYcQp44yIdlkjUefTRR7nppqZmyR3qnnvu4a233qrbvuuuuzj99NM7KbLwUGKMQr6A4b2D6ZEOo028gUrSfHkM7ZtIVgqw+VXYsRKO+BoMOR5c7kiHKBI12pIYgQaJsSdQYoxGnjje7XdBpKNos8zK7RQVvc3YmmIGpSdgqkpgw/Ow7S0YNx/6TwS9e5Eocuc/NnTavX9+7sQm9z///PMcPHiQe+65h7Fjx7J06VJKS0sPOe/uu+9mxowZANx///3Exsbi9/u54YYbSEhI6LS4w0HTNXq49kzXqKrx89ePDql8163tL6kiv7QaYwMMLv+Mk+2HjE3z4wpNhH1GwLizoM/w5m8k0sNt2rSJcePGAZFJjADDhg0jJyenVffZuHEjw4YNIzExkccff5w1a9bw1FNPHf7CMAr9mdVqabqGWoxRKNbj5v+dMCzSYbRJbTLftKeEnYkTeNaOZYZ/I6d71+Ox1c5JB7bBykdhwGQYOx+SmiycLyJhdPbZZzfZYvzpT3/KSSedxPjx4+v2nXrqqTz88MNdGV67KDFKjxDrcXPJcUNZtv4rPth+gIDxsMJOZqtnApf320zSnlVg/c7Je9bD3g0w9EQ44kyITW755iI9VEutus7kdrux1vLJJ5/wwgsvtHjubbfdVpcMv/zyS0aOHNkVIXaIEqP0GC6X4RtTsklL8PLaxn0A7C53s3DfRK486gT673kTvgou0WkDkPMO7PoIRp0Gw08GT0wEoxfpPebOncutt94KwCOPPNLiuR6PhxtvvJHMzEw2bNjA4493/1LResfYw0VrSbh1uQdZuiYXf8DZjvW4uOi4IRwRUwCfLYMDjQoYxKXCmLkw6BhwqeCT9FxNvS+TlrX1HaN+Q0iPNGVwGlecOJw4r/OfcFVNgKffy2F1UQpMvwGOuQqSsuovqCyC9X+GFQ9D3ibQPwhFpBlKjNJjjeyXxHdPHklqvFM1P2Dh7x/v5o1NedisCXDy/8DEbzV8x1jyFXzwO1j1OBTtilDkItKdKTFKj5aVEsd1s0aSnVpfAec/n+exdM0uaiww7EQ49cdOIQB3bP2F+zc7rceP/wQVhV0fuIh0W0qM0uOlxnu5euYIjshKqtv38c6DPP3+Dip9fvDEOvVVT73LGalqQv6z370a3vkl+HteiTwR6RxKjNIrxHmduZnThtaXutuSV8qiFdsoqggmvbhUmPQtOPkOyJpQf3FVMRzc2cURi0h3pcQovYbbZTj3qIGcNi6zbt+eokqeeGsre4tC1mNL7g/HXg3ZR9XvK9nThZGKSHemxCi9ijGG2eOyOP/ogbiC1eKKKnz87u2tbMlrVJ0jdWD998VKjCKt9eijj7b63EAgwJNPPklmZiaffvppg2NLlizhlltu4fbbb+fJJ58Md5jtpsQovdLRQ/tw+fRhxHrqp3P88b3tfLwzZKBNcnb99yVfdXGEIj1XWxLj+vXrOe644w4pHL5r1y4WLFjAggULeOihh1i8eDFffvlluENtF1W+kV5rdFYy1548gj++l0NxRQ3+APxt9S6Kyn3MGtMPkzKg/uSSvc7cRq3OIT3Jizd23r3n/7rJ3W1dXWPq1KlN3ue1117j6KOPxgT/zp1wwgm88sorjB49OnyfoZ2UGKVXG5Aaz/Unj+L/3tvOvuIqAF7/bB8HK6r5xqRsXJ54qKkAXzlUHoT4nrVOpUhX+9a3vsXtt9/OPffcA8AFF7RvCbu8vDySk+vnGKekpJCXlxeOEDtMiVF6vdQEL9fOHMmzH+xga34ZAB9uL6So3McliVl4inKcE4v3KDGKtNHhVtdoTmZmJlu2bKnbLi4uZtSoUZ0SY1spMUpUiI9xc/n0Yfzj492szT0IwBf7SvlPlZtZ8QFi3C5nZGrWkRGOVKQNmunu7GxtWV2jOWeeeSa/+c1vsNZijOH999/nhhtuCHOk7aPBNxI1PG4X35w2iFPG1K/TmONLZfPeEqd0qqZsiLRK7eoazzzzzGHPLSws5L777qOoqIhFixaxatUqAAYNGsStt97KD3/4Q2655RauuuqqbvF+EbS6Ro8XratrdNSH2w/wr3W7Sa/M5aT855iQnUpiv6Fw8m2RDk2kRVpdo+20uoZIKxw7vA+jM5Mo9jqtx6oaP5TuhUAgwpGJSKQpMUrUSkuIweeKo9KdRHVNAAI1UJYf6bBEJMKUGCVqpSfGAFDs7UdVTbClqIn+IlFPiVGiVlpwHceiBolxbwQjEpHuQIlRolZ6QrDF6Mmgusbv7CxWi1Ek2ikxStRKS3RajMXejJAWo6ZsiHRXfr+/XcfaSolRolZyrAePy1DizaAmADUBC2X7oaY60qGJdGttKSIOLa+wMWzYMGbNmsWsWbO4+OKLm73H4sWLefXVVykpKcHn83HPPfeQk5PDgQMHAPjZz37Ghg0b2v5hmqDKNxK1jDGkJXjZX2op9aRTXePHE2OcaRtpQyIdnki39eijj3LTTTe1+vzmVtgAuPzyy+vqrjZnxYoVrFq1isWLF7Nu3ToWLVpEbm4uVVVV+Hw+7r//fm6//XZmz57NihUr8Hq9bf1IDSgxSlRLS4hhf2l1sDt1DwkxbqdmqhKj9ACnPn9qp937P9/6T5P7G6+uccEFF3D++ee3a4UNgHfeeYeHHnqIkpISvva1rzF9+vRDzlm0aBHnn38+AEOGDGHUqFGsXbuW/Px85s+fj9frJTY2lhEjRvDKK69w1llntfNTO5QYJaqlJ9S+Z+xHVc0uwKspGyItaLy6BsDSpUvbfb+f//znHHvssZSXl3PUUUfx0ksvHVJMfOPGjdx4o7PE1ldffcXXv/51iouLufzyy1m3bh2BQACXy8XAgQPZuHGjEqNIR9SOTC3y9nMm+YPTYhSRVmvvChsAxx57LAAJCQlMmTKFlStXHpIYq6qq8HicdDVhwgQALrnkErKysjj77LPrzvN6vVRUVHTos4ASo0S5tGCLscSTQVWlJvlLz9Jcd2dnC11dY/Lkye1eYePNN9/E5/MxZ84cALZs2cLIkSMPOW/w4MF1g2xqNbVE1YEDBzj66KPbFUsojUqVqFbbYizzpFHhD/51qCqBqkP/9SsijrasrgHNr7CRmZnJ73//ex544AG+//3vc+655zJjxoxDrj/nnHPqrmnJmjVrmD9/fts+TBO0ukYPp9U1Oqao3McvXv0cgDMK/sQp/aucAyfcABndY9FUkVDRuLpGTU0Nl112Gffee2+zixn/4Q9/oLKykuuvv/6QY1pdQ6QNkuM8uIzz/X7TF38g+A9FdaeKdBsej4dnnnmGqqqqZs+ZNm1ak0mxPZQYJaq5XKbuPWOxBuCIdFtut5vx48c3e3zSpElhe5YSo0S9upqpDUrDqcUo3ZdegbVee35WSowS9dKaTIx7Qb98pBuKi4ujoKBAybEVrLUUFBQQFxfXpus0XUOiXu0k/0pXEhU4SZKaSqgohIQ+EYxM5FCDBg1i165d5OdrUe3WiIuLY9CgQW26RolRol5tixFjKHT3Yxj7ne3ir5QYpdvxer0MHz480mH0aupKlahX22IE2G9CEqGWoBKJSkqMEvVqB98A7LPp9QeUGEWikhKjRL2UeC8mOJdxj+2Dv3ZQg6ZsiEQlJUaJem6XITW+di5jRv1cxtJ9EAjfquAi0jMoMYpQ/56xxhVLpTvF2Wn9UJoXwahEJBKUGEUIGZkKFMf0qz+gif4iUUfTNaKQP+Anv6LnzYHKiM/A4+qc/2TT4utHpha6+jKUHGejeA8M7JRHikg3pcQYhcpryrno5YsiHUab5K/Op2RdCddeeC13XnFn2O/fJ7G+xbjf9K0/oJGpIlFHXanSIxSsLqC8vJzf/Ok3/Gbtb/D5fWG9f1rIXMa9mrIhEtXUYoxCBkNWQlakw2iTkuNL2PbqNrKmZ/HPL//Jxv0b+ckJPyE7KTss9w99x7jbnwLGBTYA5QXgqwRv22otikjPpcQYhZJiknhu3nORDqNNSs4o4foB17M7azcAmws3c+0b13LrtFs5efDJHb5/6DvGoipLILUfrrJ9wYfvgT4qwSUSLdSVKj1CckwyV064ku9P/X7dAJwyXxn3vn8vCz9eSLW/ukP397hdpMQ797UWKuJCWtQlezt0bxHpWZQYpccwxnDu6HNZeOpCBiQOqNv/wpYX+P6b32d36e4O3T8tPmTKhjej/oCmbIhEFSVG6XHG9hnLk6c/ycxBM+v2bTm4hWvfuJb/7vxvu+8bWky80BMyMlWl4USiihKj9EhJMUn89ISfcsPUG+q6Vst95fxs1c/45ZpfUuWvavM9Qwfg5KMpGyLRSolReixjDOeMPoffzv5tg9GpL219ie+9+T1yS3LbdL/QFmO+Pwncsc5GdSlUFoclZhHp/pQYpcc7Iv0Injz9SWYNnlW3b9vBbXz3je/y5o43W32f9JBJ/oXlPkgOHYCjVqNItFBilF4h0ZvIj4//MTcdfRNel9Pyq6ip4P4P7mfBRwta1bUaOsn/YEU1JIfMkVRiFIkaSozSaxhjOGvkWTw2+zEGJtUXOP339n9z/fLr2Vm8s8XrQ0elHiz3EUiqH/mqATgi0UOJUXqdUemjePL0Jzl1yKl1+7YXbefaN67ltZzXmr0uxuMiKdYNQMBCWWxm/UFN2RCJGkqM0isleBO467i7uHnazcS4nZZglb+KBz98kAc/fJDKmsomrwsdmVrgDh2ZuteZ+S8ivZ4So/RaxhjmjZjH47MfZ3Dy4Lr9r+W8xnXLryOnKOeQa9JDEmNhTQzEJDkb/mqnbqqI9HpKjNLrjUgbwROnPcFpQ0+r27ejeAffXf5dXt3+aoNzQ6dsHCz3QUrIAJxidaeKRAMlRokKCd4E7jz2Tm475ra6rtVqfzUPffQQCz9eiA12k4Z2pR4oq4bkkAE4qpkqEhWUGCVqGGP42vCv8cRpTzAkZQjgLID8i1t/wW+f/S3QeMpGoxajBuCIRAUlRok6w1OH88RpT3DsgGMpWF1ATXUNz/ztGQD6JIZO2aiG5P71F2rKhkhUUGKUqBTvieeK8VfQd1pf/OV+asbVUFxdTGp8w3eMNikkMZblgb8mAtGKSFdSYpSoNabPGKafPp0h84eQflQ6r+e8TpzXTUKMM5exJmAprnFDQnDahg1A6b4IRiwiXUGJUaLavBHz6r5/ceuLWGtJC2k1FpX7Gg3AUXeqSG+nxChRbfaQ2cR54gDILcllff76RsXEqzVlQyTKKDFKVEvwJnBU5lF12y9te6nByNTC8sZTNtRiFOntlBgl6k3Pnl73/YpdK4jx1peLO9i4K1UtRpFeT4lRot7A5IGM7TMWgJpADRuLV9QdKyyvhqRMMM6AHCoPgq8iEmGKSBdRYhQBzhp5Vt337+97HWsDQHDBYpe74XxGdaeK9GpKjCLArMGzSPQmApBfuZdC/2bAmeRvrdVEf5EoosQoAsR54jh96OkAGGCPfyUAPr+lrNoPyaGl4ZQYRXozJUaRoHkj6+c05vnXUxUoBqCwrBpSNABHJFooMYoEjUgdwfiM8cGtAF/VvA80MTK1ZI8WLRbpxZQYRULMHzEfAJeB3b6VWBtwRqbGp0OwEAC+cqgsimCUItKZlBhFQpw8+GSSYpJwGUOF3U+B/3MnMRqjif4iUUKJUSRErDuWOcPmYIyzvbvmXYoqfM6GJvqLRAUlRpFG5o2YhyuYGfNrPmF3cZ5zIHQATsneCEQmIl1BiVGkkSEpQ5jUbxIAlgCfFr0VnMsYOmVDLUaR3kqJUaQJZ486i2BvKjuq3qW0qtGUjZJ9EAhEJDYR6VxKjCJNmDloJnHuZAAqbSFv71wFMYkQm+KcEPBB+f4IRiginUWJUaQJXreX8Skz67b/nfOS843WZhTp9ZQYRZpxfNbpdd9vKFhNXnmepmyIRAElRpFmDE8bQh/3GAD8gQD/3vZvJUaRKNDqxGiMOdsYY40xY5s5/ogxZr0x5jfhC08kctITvAzyngRAwMLL21+mJimz/gStsiHSK7WlxXghsDr4ZwPGmJHAidbaydbaG8IVnEgkpcXH0M89iRiTgrWWgooCVpXtgNrxqmX54PdFNEYRCb9WJUZjTBIwC7iKRonRGDMGeAsYaoxZa4xJDHOMIhGRnujFZTwM9JxAIFgz/MXtr0BiRvAMq+5UkV6otS3GbwDLrbXrgVJjzNG1B6y1XwBPAz+21k611pZ1QpwiXS4p1oPHZRjoPRELWGD13tXsjUuqP0kVcER6ndYmxguB54PfP8+h3akTgfXhCkqkOzDGkJ7gJd6VQV/3OALWYrG8VBkyTUNTNkR6ncMmRmNMH+A44NXgrueBbxtTW2YZgPHAp+EPTySyUhNiABjkPckpCwe8UvgpPhuseqOuVJFepzUtxvOBf1trqwCstduAPcBJAMaYZMBnra3otChFIqRPoheADPcEkjzpABTWlPOe74BzghKjSK/TmsR4ITDfGJNT+wWMo747dQJqLUovlRbvtBhdxs3EtFnOTuPixep9zveVRVCt1+oivYnncCdYa085zPH3gW+GLSKRbiQtwVv3/fC4Gaw2y7DW8rG/mN3+Cga64535jBmjIhiliISTKt+ItCA9+I4RwO9L5fgBxzsbxs1L1cERqepOFelVlBhFWhCaGA+WVzN3xFxnw7h4tTrPGYSjxCjSqygxirQgOc6DKzj+urTKz5SMafRL6AcuN0UBH+/4CjRlQ6SXUWIUaYHLZRq8ZyytDDB3+Fwwzl+dl6r2Oi3G4FQOEen5lBhFDiO0O7Ww3MfXR3wdl8sDxrCupoidVQegojCCEYpIOCkxihxGWqP3jBnxGZyQfQIYNxDSahSRXkGJUeQw0kO6UgvLqwGYP2I+uJy/Pq9V51FdlBuR2EQk/JQYRQ6jYYvRWWZqWv9p9I9zVtkosTW8vfvdiMQmIuGnxChyGA1bjE5idBkXc4ecVrd/Wf6aLo9LRDqHEqPIYTSey1hrzhHn4Q7W0t9Ylc/2wq1dHpuIhJ8So8hhpMR7qV1LpriyBp/fWVmjb8ogTowb4Bywlhe/eL6ZO4hIT6LEKHIYbpchNb6+O7Wowlf3/VkZR9V9/0buf6msqezS2EQk/JQYRVoh9D1jaHfqlMypZLvjACjzlfJW7ltdHZqIhJkSo0grpDWa5F/LlTqIeTH9nQ0b4MVtL3Z1aCISZkqMIq2QFtKVWlhW32IkuT9zYrLwGAMBP5sKNrH1oAbhiPRkSowirdAn8dC5jAAk9SfNHctMbwbYAGB5catajSI9mRKjSCukNVH9BgC3BxIz67tTAwGW71xOua+8iyMUkXBRYhRphebeMQKQ3J/JnhQGu+PB+in3lfOf3P90cYQiEi5KjCKtEPqOsbjShz8QssxUSjbGGKfVaJ05ji9tfamrQxSRMFFiFGkFj9tFSrwHcJZeDJ3LSLIzyf/MmEy8wXUZNxdu5osDX3R5nCLScZ5IByDSU6TFx1BcUQM47xnrBuQEE2OKy8usmH68YUsBuG75dRhMWGPITMjkyolXcvrQ08N6XxGppxajSCs1N8mfxAxwO0lyvqev06QMsmH8X97qPN7+5dvc/NjNPPDBA5T5yrrss4tEEyVGkVZqMACnLKQr1RhIdkaljncnMy97Bm6XO+zPL1hdQE11DQWrC1i+YznXvHENmwo2hf05ItFOXakirdSgxVjReGRqNhzciTGGmwfO5qYZ94b9+Uu9S/nJgp/gnebEsad0Dz/47w+4YvwVXDD2AlxG/84VCQclRpFWSk8MbTFWNzwYbDECULK3U5LUt875FpnpmfhH+Hl0zaOU+crwB/ws3rCYNfvWcOdxd5IRnxH254pEG/0TU6SV0hq0GBslxpTs+u+Lv+rUOGYPmc2i0xdxZN8j6/atzVvLVa9dxXtfvdepzxaJBkqMIq3UcMFiH4HQuYzBkakAlOxtMACnMwxIGsCvTvkVF4+7uG7ka3F1MXe/ezcLP15Ilb+qU58v0pspMYq0ktftIinWGVQTsFBSWVN/MDYZYpKc7/1VUH6g8+NxefnOxO+wYNaCBl2oL2x5geuXX8/2ou2dHoNIb6TEKNIGoSNTD4RO2TCmUauxc7tTQ03NnMrvz/g907On1+3bXrSd65Zfx7Kty7Cd3HoV6W2UGEXaoGF3auP3jCGJsXhPF0XkSI1N5Wcn/owbj7qRmOCcymp/NY+ueZSfvPcTiqqKujQekZ5MiVGkDRpO8m88ZSO0xdi1iRHAGMM3Rn2Dx097nOGpw+v2r9y9kqtfv5p1eeu6PCaRnkiJUaQNGq6y0XjKRmQTY60RqSN4/LTHOXvU2XX79lfs55a3buGpDU/hC/hauFpElBhF2iA9MXRdxhZajKX7wF9DpMS6Y/nBUT/gvhPvIyUmBXDK0z276Vl++N8fsqc0colbpLtTYhRpgxbfMXrjIL6P870NOMkxwqYPnM7iMxczNXNq3b7PCj7jmjeu4c2db0YwMpHuS4lRpA1S4xu+YzxkxGfoRP+SvV0UVcsy4jN4aOZDXDXxqroarmW+Mu5fdT8Pfvgg5b7yCEco0r0oMYq0QZzXTUKMk1xqApbiykbdpRGasnE4bpebi8ZdxMJTFjIgqT7G13JeUzFykUZUK1WkjdITvJRX+wEoKvc1aEU2mLKxcxUc2Bbeh3+xB446omHLtA3G9R3HotMX8euPf83yHcsBWP/WemYvmM3UU6Zy/cXXM2vwLBK9ieGMWqRHUWIUaaO0hBh2H6wEnJGpQ/om1B9MDklY1aVwoDS8Dy/YBSsWwJivwcjZ4Gp7p0+iN5EfHfcjpmVN49cf/7puOau1/13LI2Me4bdrf8vMQTOZM3wOk/tN1qodEnWUGEXaKL3FKRv9IX0YFOZ0XgDWD5+/BHs3wNRLICmzXbc5Y9gZjM8Yzy1f3sLy55fTd3pfAKr8Vbyx4w3e2PEGAxIHcMawMzhz2Jn0T+x/mDuK9A5KjCJtlNbSJH9jYPqNUJQLgTBP1/BXw/aF9dsHd8DbD8G4eTD8ZOfZbTQwaSB/ueMvLJu6jMqhlbyW81qDGqt7yvbw9ManeXrj00zNnMqc4XM4aeBJxHniwvGJRLolJUaRNmqxxQhO92b60M55+IRvwmA/fPGK03IM+GDjP53W4+SLILFvu26bEpPCWWPO4ptHfJPNhZt5NedVlu9YTpmvrO6ctXlrWZu3loXehcwaPIs5w+dwZJ8jMe1IyCLdmRKjSBuFthgPmeTf2VwuGH0qZB4J656F4t3O/oIt8PaDMP5sGHJCu1qP4JSVG9NnDGP6jOG6ydexcvdKXsl5hTV712BxpqaU+cp4edvLvLztZQYnD+bMYWdyxrAztEiy9BpKjHtjyY8AABo1SURBVCJt1HiSv7W261tNqQNhxs3w5WuwZblTUMBfBZ/8FfZ8ApO/DfHpHXpEjDuGU4acwilDTiG/PJ/Xd7zOq9tfZXfp7rpzcktyWbxhMU99+hTH9D+GOcPmcGL2iXjd3hbuLNK9KTGKtFF8jJtYj4uqmgA+v6Ws2k9SbAT+Krk9MHYuZE1wWo+1lXbyN8FbD8KE82DQtHa3HkP1S+jHxeMu5qKxF7GxYCOvbH+Ft3LfoqKmAgBrLR/u+ZAP93xIckwys4fMZs7wOYxOG62uVulxNA5bpB36JIa8Zyxr4j1jV0ofCjNvgxGnAMEkVFMB65bAR4uhsjhsjzLGMCFjArcdcxtLz1rKHcfewZTMKQ3OKaku4YUtL3Dez89j2jem8c9//TNszxfpCkqMIu3Q4sjUSHB7nfeL02+AhJABOPs+hbd+AV+Ff8mpeE88Zw47k1/O+iVLvr6Ey8ZfRlZCVt3xgtUF5B7I5dFnHg37s0U6kxKjSDu0uPxUJPUdCSffAUNn1O/zlcGa/4M1T0N1WfPXdkB2UjaXjb+MZ+c+y4KTFzA9ezp9p/XFX+6ncFQh6/PXd8pzRTqD3jGKtEN6g5Gp3SgxAnhiYdI3YcAkWPdnqDzo7P/qYyj4EiZfCFnjO+XRLuPiqKyjmNxvMuU15fw3/r+kj0/n/lX3s/jMxXVLYIl0Z2oxirRD6MjUoopu0JXalH5jnNbj4OPq91WVwIeLYN1z4KvotEe7XW5+dNyPSPA65fL2V+xnwUcLDl2NRKQbUmIUaYfQd4wHIj34piUxCTDlIjjmaohNrt+fu8p595i/udMenRGfwYVjLqzbfnf3u7y47cVOe55IuCgxirRDw7mMTazL2N30nwCz7oTs+gWLqTwIqx6DDUudcnOdYEK/CZw96uy67cfXPc62ojCvOCISZkqMIu2QEOMmxu1MjaiqCVDh80c4olaISYSjL4ejLoPQZaVy3oF1f4H9Wzrlsd+d/F1GpI4AoNpfzX2r7qPKX9UpzxIJByVGkXYwxjQYmdotpmy01sCjYNb/OIUBalUVwfu/gU+eD/u7xxh3DHcffzcxbufnlVOUwxPrngjrM0TCSYlRpJ3Se8p7xqbEpcAxV8GUi8ETX79/x0p46+ew99OwPm5Y6jC+P/X7ddvLti5jxa4VYX2GSLgoMYq0U3piDxiZ2hJjYPCxTusxfXj9/soi+Oj3zrzHqpKwPW7u8LnMHDSzbvvhjx5mX9m+sN1fJFyUGEXaqdtO8m+r+DSn5urRl0NMUv3+rz52Rq7uXgNhGFxkjOGWabeQmeAsrFzmK+OBDx6gJtzrVop0kBKjSDulR3L5qXAzxhmxesqPYNAx9furS+HjZ5yaqxWFHX5Mckwydx9/Ny7j/OrZsH8Dz256tsP3FQknJUaRdkqLDxl809PeMTYnJhGmXgLHXgtxafX7a2uu5qzscOtxQsYELht/Wd32M589wyf5n3ToniLhpMQo0k7pib2oxdhY1pHOvMdhJ9Xvq6mEDc/D+7+F0vwO3f6isRcxud9kwFmy6v4P7qe4OnyrgIh0hBKjSDslxXrwuJy5jBU+P5U9YS5jW3jjYOL5MP0HkNivfn/BFnj7QdjyJgQC7bp1bcm45BinGk9+eT6PrH6k+xdKkKigxCjSTsaYBu8Ze9RcxraoXbFj1GkQfDdIwAeblsG7v4Si3e26bb+Eftx+zO112+/seoeXtr0UjohFOkSJUaQDUnvLyNTDcXth3HyYcTOkDKrfX5QL7yyAL14Bf9tHl5448MQGJeMeW/cY24u2hyNikXZTYhTpgD6J3Xj5qc6QNhhOuhnGzgNXcNU6G4DNr8KKh+FA25PatZOvVck46VaUGEU6oMHI1N7aldqYyw2jT4eZtzcsDFC6F1b+Gj79B9S0PrHFumMblIzbXrRdJeMkopQYRTogrTsvWNzZkrPgxBthwnngjg3utLD9bWdwThuWtBqWOozvTfle3fayrct4Z9c7YQ5YpHWUGEU6oE9iFLYYQxkDw2c6ZeX6ja3fX17gLGm1/e1Wz3ucN2Jew5Jxqx8mrzwv3BGLHJYSo0gHNOxKjbIWY6iEPnDcd52i5N6E+v17PoEvX2/VLRqXjCutLuX+VffjD/SyaTDS7SkxinRAcpwHd/BvUWmVn6qaKP4lXleU/M6GS1p98W/Y/XGrblFbMs4YZ37ohv0bWLJpSWdEK9IsJUaRDnC5DKnx9e8Zi6KxO7WxuBSYdiVkHFG/b92foXBHqy6fkDGBy45sWDJuQ/6GcEcp0iwlRpEOSm8wl1GJEXBGrh59RX291YDPWcqqlYXILx53MZP6TQKcknH3fXAfJdXhWwJLpCVKjCIdFLr8VFS/Z2wsJsEpClD7zrGqBD5c3KqpHG6Xm7uOu0sl4yQilBhFOig9mqdsHE58Gkz7Tn0pueJdzjJWrUhw/RL6cdsxt9Vtr9i1QiXjpEsoMYp0UMMWo7pSD5ExCiZ+q35736ew6cVWXTpj4Ay+MeobddsqGSddQYlRpIN61YLFnWXoCTDilPrtrW/Czg9adel3J3+X4alOhZ3aknEVNRWdEaUIAJ5IByDS06XrHWPrjDsLyvKdFiPAJ3+FxAxn9Y4W1JaMu275dVT7q9letJ15/5xHRnwG/RP60z+x/isrIYv+if3pl9APr8vb4n1FmqPEKNJBqfFeXAYCFoora/D5A3jd6ow5hMsFUy+F9xZC8W6wfvjoKacoeWJGi5cOTx3O96Z8j1+t+RXgjFTNL88nvzyfDfsPncphjCEjPqMuUfZP7F+XRLMSs8hMyFTilGYpMYp0kMtlSIn31r1fLKrwkZEUe5iropQ3Do65ylnHsaoEfGXw4SI48SZnFGsL5o2Yx77yfbye8zoFFQVYmh/AE5o4P93/6SHHDYa+8X0btDTT49IxmA5/xMZGpI1gUsakuqIF0v0pMYqEQXpCfWI8WF6txNiShD7OSNX3fwuBGijdBx8/Dcde67Qqm2GM4aqJV3HVxKvw+X3kVeSxt2xvw6/yvewr23f4xIllf8V+9lfsbzJxhtvYPmO55MhLOGHACUqQPYASo0gYOCNTywENwGmVPsNhykXO1A2A/M9h4z9g4vmtutzr9jIwaSADkwY2edwX8JFXnse+sn11CTM0gR4ucYbb5wc+5+5372ZE2gguHXcpJw06CZdRd3t3pcQoEgYNqt+UaQBOqww8GkrznEWOAXLegaRMZ7WODvK62p44S6tLO/zcxkp9pbyd+za+gPOPpW0Ht3Hv+/cyJGUIl4y7hFmDZ+Fx6ddwd6P/R0TCIHTKhuYytsERc5yu1K/WOtuf/gMS+0HmuE597OESZzhdM+ka/vbF31i2dRlVfqfqz87inTzwwQP8ceMfuXjcxZw29DQNBupG1JYXCYO0BvVS1WJsNWOcparShgR3WFjzRyjZG8mowiojPoPrplzHc3Of46JxF5EQsizXV6Vf8fBHD3Ppvy/lhS0vUO3XfzvdgRKjSBikaZJ/+7m9cMzV9QXHayqdkapVvatoeFpcGldNvIrn5j7HZeMvIykmqe5YXnkeCz9eyMX/vpi/bf6bChhEmBKjSBikxXupHWxYXOnDH1Cx6zaJS4FjrwF3cDRveQGs/gP4ayIbVydIjknmsvGX8Ze5f+HqSVeTGptad6ygooAn1j3BRS9fxJ83/ZkyX1kEI41eSowiYeBxu0iOc17ZW+vMZZQ2Sh0IR10KtXMJD2xzquP00hU1ErwJXDj2Qp6b+xzfm/I9+sb3rTtWVFXE4g2LufDlC3l649NacquLKTGKhEm63jN2XP+JzlJVtXZ9CFvejFw8XSDOE8d5R5zHs19/lpuOvomshKy6Y6XVpTy98WkufPlCfv/J7zlYeTCCkUYPJUaRMEmLDx2ZqsTYbiNPhcHH129//iLsWR+5eLpIjDuGs0aexTNff4bbj7md7KTsumPlvnKe+/w5Lnj5Ah5f9zj7K/ZHMNLeT9M1RMIkPTF0LqO6UtvNGJj4TSjfDwVbnH1rl0BCX0gdFNnYuoDX5WXO8DmcNvQ03s59myWblrCjeAfgrC6ydPNS/rXlX0zImMDQlKEMTh7M0JShDEkZQt+4vqqsEwZKjCJh0qDFqHeMHeP2wLQr4Z1fOgnSX+2MVJ1xs7P4cRTwuDzMHjqbU4acwru732XJZ0vYctD5h4Iv4GNt3lrW5q1tcE2CN4HByYMZkjyEISlDGJI8hKEpQxmQNEDzJNtAiVEkTBq2GNWV2mExic5I1Xd/BTUVUFkEHy2G6T8AT8zhr+8lXMbFzEEzOWngSazas4olm5awqWBTk+eW+8r54sAXfHHgiwb73S432YnZdcky9M9Eb2JXfIweRYlRJExC5zIerFBiDIvkLJh2BXzwO7ABKMqFdUvg6CsgyroMjTGckH0Cxw84nj1le8gpzmFn8U52FO8gtySXHcU7mp3e4Q/4yS3JJbckl5WsbHCsb3zfupalumUdSowiYdJwwWIfgYDF5YrOXyxh1W8MTDgPNvzN2d6z3lm2qv8kyDwSUrKjKkkaY8hOyiY7KZvp2dPr9ltrKawqZGfxTnaW7HT+DH6fV57X7P0KKgooqChotlu2NmFGU7esEqNImHjdLpJi3ZRW+QlYKKmsITWhd/8C6TLDZjg1VbevcLYP7nS+Pn8J4tMha4KTJDNGO5V0opAxhj5xfegT14cpmVMaHCv3lbOrdFfDpFmyk10lu6gJNF1EoTXdsqFJszd1yyoxioRRWkIMpVVOOa8D5dVKjOF05DlOJZyd70PoklEVhc7KHDnvgDsGMo6ArPFOooySgTqHk+BN4Ij0Izgi/YgG+2sCNewt21uXKNvcLbu7d3bLKjGKhFF6Qgy7Cp3E6Mxl7B3/gu4WXC6Y/G0YNw/yNsG+jc6foXVF/dWw71PnC5zpHbWtybQhUdXl2hoel4dByYMYlDyI6TTslj1QeaAuSYa2MvPL85u93+G6ZRsP/MlOyu6W3bJKjCJhpOWnukBMIgya5nwF/HBgezAZboSyRu/SinY5X5tfhdhkyBzvtCb7jQFPbGTi7wGMMfSN70vf+L5NdsvWthhDW5i7S3e3uVvWZVxkJ2XXty6ThzA4ZTBDk4c2KLLe1ZQYRcJIy091MZcbMkY5X+PPhtJ8yNvoJMmCLc5I1lpVJZC7yvlyeaDvaMg60mlRJvSJ3GfoYRK8CYzpM4YxfcY02F8TqGFP2R5yi3Nb3S0bsAF2lexiV8ku3v/q/QbH0uPSD2lhDk4eTGZCJi7TuUXblBhFwig9UctPRVRSP0iaBSNmga8C8r8Idrl+BtWl9ecFaiB/k/P16d8heYDT3dp/AvQZEaHgezaPy8Pg5MEMTh7cbLdsaJdsbnEu+8r3NXu/wspCCisLWZ/fsBxgjDumwWjZGQNnMDJtZHg/S1jvJhLlGk7ZUIsxorzxkD3F+QoE4OCO+iRZvLvhuSV7nK+CLXDSzZGJt5dqqVu2oqaCXSW76hJlbeLMLcnFF2j6H5bV/mq2HtzK1oNbAchKyFJilOiVltY5IwzDed/U+IbvGK21YR2N1xN+Bl1x3zZzuaDPcOdr3DwoP+AkyH0bYf9mpwUJTreqdJl4Tzyj00czOn10g/3+gJ+88jx2lOyoS5S1Lc2iqqIG5w5OGRz2uIztpWudRYtp06bZ1atXRzoMCfHGZ/tIivWQnujliMxkTfLv7mqqYP+XTpIcPhNSBkQ6ImlBUVVRXStzR/EOLhl3SbsG6hhj1lhrpzV5TImxZ1NiFBFpu5YSo9ZjFBERCaHEKCIiEkKJUUREJIQSo4iISAhN1+hmjDFnAWMBL7DZWvu3CIckIhJVujwxGmNGAvcBHwODgAJr7f82c2488AHwurX21pD9pwHnAnmAtdbea4xxAS8Gz48BRgJXWmsrgtesAiqDt/Bba2e3JZZWfK7+wXtNttYe0+jYIfG2cKs11tplxphU4ClAiVFEpAtFosXYB/iLtfZfAMaYz4wxL1tr1zRx7n1AgzLtxpgE4HfAeGttlTHm78aY2cB/gfettfcFz/sXTjJ6Nnjpq9bae9oaizHmGKDQWrsluO0GzrfW/rXRvWYA/wIalHZoId59wc8X6hprbW1JjnOABU38TEREpBN1eWK01n7UaJcLOKTCrDHmUmAlMAkInb15ArDDWlsV3F4JzLXWvkkw0RhjPDgtwNBS7hONMXcA8cBH1tqXWxlLIbDEGHM1sBn4M7C8ic+11Bgzq4mP3Fy8NwNnN3E+xpi5wDZgdzPHrwGuCW6WGmO+aOq8CMoA9kc6iDboSfH2pFihZ8Xbk2KFnhVvd4x1aHMHOiUxGmNeA7KaOPQTa+2ykPPOAV6z1n7e6PojgXHW2h8ZYyY1ukcmUBKyXRzcV3vtmcAPgZestaEz3x+01n4YbPGtMMaUWGtXHC4Wa+0WY8w3cbo0K4CnrLVLDvczaG28jRljzgbuANYDycDFjc+x1i4CFrUhhi5ljFnd3MTZ7qgnxduTYoWeFW9PihV6Vrw9KVbopMRorT3zcOcYY04BTgFuauLwOUClMeZ/cLooY4wxN1lrH8V5T5cccm5KcF/ts18DXjPGPGOMud5a+3hw/4fBP/3GmHeCz17RiljASWzlwWftOdxna6TFeBuz1r4AvNDGZ4iISJhEZFRqsKvwJOBGYIAxZqi19n1jzDBrbY619v6Qc+OApGBSBHgfGGqMiQ12T54IPB5sZQ631r4cPG87MCJ4j7HAidbap4LHRgP/bCmWkOdnAkuBn+C87/yHMSap9r1kKzQZb6t/WCIi0qUiMSr1aOCvwGqcATOJwGPGmA+At4wxs6y1OcFzzwNm4rQYL7TWPmetLTfGXAcsNMbkA59Ya98MjjD9jjFmKs5Uh3HAD4KPLQbmGmOycVpsucCfm4sFJ5nVmgDcUvs+0hgzn/r3e6Gf62TgUpzkejfwiLW2orl4O/6T7Na6bTdvM3pSvD0pVuhZ8fakWKFnxduTYlURcRERkVCqfCMiIhJClW8kbMJZMKGrNFdEojsyxowBLsQZHX0ycE/toLLuxhhzGzAMZ4j+aOA7tcU2uoOmCnIExzMswJkmNRr4hbV2c+SidDQT6x1Af5zBgNNwRvx/3vxdus5hip1cDCwBkq21pZGIrzWUGCWc2lK8obs4pIhEdxScZvRLYL61NmCMeQaoiXBYTQr+YrwTyAjG2rjYRnfQVEGOm4Cd1tqHjDETcSpPnRSJ4BppKtYk4GZrrTXGfBt4GJgfieCa0Fyxk3HAkRGJqI3UlSphY639qNFo3SaLN3QXIUUktkc6llY4BjDADcaYO3F+CXa3CdO1yoFqnIFu4PwS3xi5cA5lrV1Kw/nFAHMJDryz1m4AJhtjUhpf29WaitVa+2NbP0DEBXSb1ldT8QYrgN0OtFQOs9tQi1E6RXMFE7qLwxSR6I6G4lRRutBaW2SMWYKTfP4Y0aiaYK0tDnal/tUYswfYBWyJcFit0VwxjuLIhHN4xpgY4DLge5GO5TDuB/7XWlttjIl0LIelFqOEXUjBhB9GOpYWNC4icawxprkCD91BMfC5tbYouP0uMCty4TTPGDMFuA2n9OHlOC3bn0Q0qNZpUzGOSAsmxSeAu6y1WyMdT3OMMYOBdODbwb9vADcbY7ptJRy1GCWsDlcwobs4TBGJ7ugDoK8xxm2t9eO0ICM+MKQZA4ED1trad6B7gCERjKe1XsZplb8TfMe43lrbLVuLwa7Jx4AF1tqNxpjzrLV/j3RcTbHW5gKX124bY34O/LI7D77RPEYJm2DBhLdxCiZAsGCCtfaPEQvqMIJFJL6Hs1TZY9ba5yIcUrOC3dOnAvk4ieaG7jTSs1ZwoNBCnGXeDuIUybjJWtvWcoqdJliQ4/8Bc3BaXY8EDy3ASeSjgAe6yajUpmJ9Fufn+lXwtMTGI0Ajpal4rbUVxph+wLXAz4JfT4asJtStKDGKiIiE0DtGERGREEqMIiIiIZQYRUREQigxioiIhFBiFBERCaF5jCJRxhgzALgVZyqFGxgD5Fhr74xQPLOAg9badcHt/wVWW2uXRSIeESVGkSgSLGawDDg3OPG6toLKnyMY1iwgB1gX3P6p1TwyiSAlRpHoMhendZhbu8NaWw2cD3WtNQ/gB0qCK01cAfwceBKn4s4IYF6wJup44A5gAzAWpyZmIfAcTtHzz3GKEvwYOBqnkEI1EGetvc0YcwROYjxojBkG/AFYaIxZZ629xxiTDfwvTpWf0cAfrbUrjTF/BUbiFJQ4EvjQWvvTTvh5SRRSYhSJLiOAvbUbxpihOGs8ngi8BBxvrT0jeOwtY8zr1tr/M8ZcBrxnrf2pMeYx4HTg78Bi4BZr7XvBLtFHrLXnGGN+ATxkrb0xuAyVG7AhS5ItM8aMD5YzewsnWf8xeOwFnLUcwany8ndr7VJjTBawJlh78w7gHZwVGwB2AkqMEhZKjCLRZStwXO2GtXYH8AtjTA7wIZAQUug5F+gXcm1tebR86ottTwLOMMbMBOJpuPzRpuAz9gIYY6YbYx4CDuDUUw29d3Mm4aw1iLV2nzEmFcgIHtsWrBuLMcbXinuJtIoSo0h0eRm4yxgzzFqbA2CcdYDcQBGQZ639RXD/qTRcLqqp937rgX9Yaz8xxsTirFpyyPnGmDTgT0BKcOmh0KW+/MEwsoHGCW49Tpfpx8GW50Gc1ToSm4lHpMOUGEWiiLW2yhgzD7jDGFOIkxBH4azr+BSQElz9oARnqaD/McacjvNu8UpjzB+BmcBEY8zLwHeAW4wxW4ABwN+CCfJSYFLIqg9FwPPAM8aY1TjvBS81xqzEeU94M867yLtxFmFOD66ZeStwvzFmdDDOC4Kr1l8FDDXGzMZZHirVGHOltfYPnfjjkyihIuIiIiIhNMFfREQkhBKjiIhICCVGERGREEqMIiIiIZQYRUREQigxioiIhFBiFBERCaHEKCIiEuL/A0ZiEI2BU4MHAAAAAElFTkSuQmCC\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Bbb4XeS6ar9p"},"source":["Plotting until the final population shows the algorithm seems to have more a less converged, and only a slight improvement has been made."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":283},"id":"F0x1Z1NNatbY","executionInfo":{"status":"ok","timestamp":1635265508839,"user_tz":-330,"elapsed":865,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"7b5ef146-bb98-4cd8-f39e-e125d5512c60"},"source":["running = RunningMetric(delta_gen=10,\n"," n_plots=4,\n"," only_if_n_plots=True,\n"," key_press=False,\n"," do_show=True)\n","\n","for algorithm in res.history:\n"," running.notify(algorithm)"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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2qCEEKKLJDGKPuexeYh47fE5jSPQSCgq9VKFEAODJEbR57x2L5H4PUaNxh5olBE2hBADhiRG0efsFjsxn6dl3hH0y5iMQohei8U6/v9IZ+u6SxKj6HNKKexZ2cRHnpIxGYUYZB588MEebXfvvfcybNiwNsuefPJJlixZwm233cajjz7a4baPPfYYr7/+On6/n0gkwl133cWBAweorq4G4O6772bLli09iutU8h6jSApnZjaReGa0hwIEAiHAl9KYhBB9ozujazRbvnx5SxJrduTIEe6//342btyIUoo5c+ZwySWXMHHixDbtVq5cyerVq3nsscf48MMPWbp0KYcPHyYUChGJRLj33nu57bbbWLhwIStXrsRut9MbkhhFUnicPqoc1pb5YG0djMlLYURCDD675yWvhNrEd1e2u/zU0TWuv/56rrvuuk5H2CgvL+fpp5/me9/7Hr///e9b1r/xxhvMmjULFR/ZfO7cubz22munJcalS5dy3XXXATBmzBhKSkrYuHEjlZWVXHnlldjtdpxOJ+PHj+e1117r9QgdkhhFUnhsHk64bGCYD+BEaqQsnBCDwamjawA899xzHbY3DIM77riD+++/n7pTykNWVFSQkZHRMt/RCBvbtm3jO9/5DgDHjh3jiiuuoL6+ni996Ut8+OGHGIaBxWJh5MiRbNu2TRKjSE9eu5ew0w4BAE24Vl7yF2Kw6myEDbfbjd1u59FHH6WmpoZAIMDPfvYzrr32WvLz89mzZ09L+/r6ekpKSk7bTygUwmYz09XUqVMBuOGGGygoKODqq69uaWe32wkEAr0+HkmMIim8di9RlxUCMTSaaL30GIXoax1d7ky2xNE1ZsyYccYRNmbPng3AgQMHePzxx7n99tsBcLvdPPzww2itUUqxatUqvvWtb522/ejRo0+7P9leAq2urmbWrFk9PawW8lSqSAqv3UvE2fqSf1RG2BBi0GgeXeOJJ57o8jZ79uzhl7/8JYFAgHvuuYfGxkZGjRrFrbfeyi233MKSJUu46aabTru/CHDNNdewevXqM37H+vXrufLKK7t1LO2RHqNICrfNTcwV//XSGi1jMgoxaHRndI1mJSUl3H///dx///1tlt9www3ccMMNnW570003ceONN7Jnz552e4oAv/nNb/jSl75EQUFBt2M7lSRGkRQ+h4+oy+wxakAnjNQthBDd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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"Fz0cIRq-a2eL"},"source":["### Pareto-front is known or approximated\n","\n","**IGD/GD/IGD+/GD+**\n","\n","The Pareto-front for a problem can either be provided manually or directly implemented in the Problem definition to analyze the run on the fly. Here, we show an example of using the history of the algorithm as an additional post-processing step.\n","\n","For real-world problems, you have to use an approximation. An approximation can be obtained by running an algorithm a couple of times and extracting the non-dominated solutions out of all solution sets. If you have only a single run, an alternative is to use the obtained non-dominated set of solutions as an approximation. However, the result only indicates how much the algorithm’s progress in converging to the final set.\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":293},"id":"9keEkdHja77h","executionInfo":{"status":"ok","timestamp":1635265549816,"user_tz":-330,"elapsed":1078,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"d0341c88-c41b-4deb-a88e-b962dcf7e688"},"source":["metric = IGD(pf, zero_to_one=True)\n","\n","igd = [metric.do(_F) for _F in hist_F]\n","\n","plt.plot(n_evals, igd, color='black', lw=0.7, label=\"Avg. CV of Pop\")\n","plt.scatter(n_evals, igd, facecolor=\"none\", edgecolor='black', marker=\"p\")\n","plt.axhline(10**-2, color=\"red\", label=\"10^-2\", linestyle=\"--\")\n","plt.title(\"Convergence\")\n","plt.xlabel(\"Function Evaluations\")\n","plt.ylabel(\"IGD\")\n","plt.yscale(\"log\")\n","plt.legend()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":293},"id":"B3mrwz7ya9-0","executionInfo":{"status":"ok","timestamp":1635265554796,"user_tz":-330,"elapsed":655,"user":{"displayName":"Sparsh Agarwal","photoUrl":"https://lh3.googleusercontent.com/a/default-user=s64","userId":"13037694610922482904"}},"outputId":"39a25943-4bb6-4a9d-f9e9-7d53e52fe4a4"},"source":["metric = IGDPlus(pf, zero_to_one=True)\n","\n","igd = [metric.do(_F) for _F in hist_F]\n","\n","plt.plot(n_evals, igd, color='black', lw=0.7, label=\"Avg. CV of Pop\")\n","plt.scatter(n_evals, igd, facecolor=\"none\", edgecolor='black', marker=\"p\")\n","plt.axhline(10**-2, color=\"red\", label=\"10^-2\", linestyle=\"--\")\n","plt.title(\"Convergence\")\n","plt.xlabel(\"Function Evaluations\")\n","plt.ylabel(\"IGD+\")\n","plt.yscale(\"log\")\n","plt.legend()\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAYkAAAEUCAYAAADeJcogAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3xN5x/A8c9DEkElMWJGzNo7id02RtESKzZpzRhFaY22tKhRWlRLpZQWoaGotkbV+lkVtVJb7CKKUBISZHh+f9zjNiKxmuQk1/f9ep2Xc57n3nO/5yTuN2c836O01gghhBBJyWR2AEIIIdIvSRJCCCGSJUlCCCFEsiRJCCGESJYkCSGEEMmSJCGEECJZdmYHIERqUEq9AowE7IHMwB1gIRCktY4xMzYhMhJJEsLmKKWaALOABlrrk0bba8AvwH7gTxPDEyJDkdNNwqYopTIBM4Hx9xMEgNb6V2CZaYEJkUFJkhC2phpQDFiXRF934KBSKp9SarlSaqtSaqdS6k0ApZS7sayVUm8qpTYopUKVUrWN/rVG36/GcielVJhS6idj2cNY5xal1EalVBmj3V8pdVYptVgp9Y1S6k+l1Gajr5tS6pDx+oHG+ncqpdyN/qHG8jal1HSllIPR/qNS6o5SarhS6iel1EmlVL/7G6qUslNKTVRK7TBi+kEpVdzoy2u8f6vR3zJVfhLCNmitZZLJZiagPaAB+0e8ZgMw2pjPA/wNvGQsFzXe385YHgb8ZszbAZeB2gnW9TOWP7acgXCgvtHeFAgFMhnLo4FLgKvx+klAeSAaKGa8ZoDx2UWN5c7AUSAboIAfgJEJPvssMNOYrw7cAuyM5Q+A9UBmY3kG0NWYXw98bMwXAK7d/0yZZEo8yZGEeK4opQoBDYBvAbTWV4FVQLdEL11r/HsAy5EJWus4IAi4f+RRATistb4HNANuaa03Ga9dDeQHaiRYZ7DWOlxrfU9rPRxoY7SdMfoXJYqhK7BYax2ttdbGZ/s9Is7sQF5juRsQqLWON5YnAFuM7W8IzDXi/BvYDnRMcoeJ555cuBa25v51iEJY/tJOzM34NzxBWzjgmfBFWutIY/YO4JCgawGwUSk1EMsX9rwE6811/zRSgvXmTrAckSiWAsDVBJ/5j1IqcaydlFL1jGVH4F6idUQa771jvNchwXut26i1vgiglLqftBYope5X98wDHESIJEiSELYmBDgBNAJmJ+xQSs3F+Asay2mfcwnmLzzJyrXW+5RSYUAroLTW+qjRdR64oLX2TvB5TliSTHL+BkoleH3uRP3ngfVa688SvCbPk8RpvNc10bpzGO0AbbTW4UafI/JdIJIhp5uETTFO/fgD7yulSt5vV0p1AyoCO7Gck+9qtOfGcv3gu6f4mAXAFGBjgrZVQB6llJex3uzA/7Bcq0jOMqDW/QvKQLtE/fOAtsaXOMYRxawnjHEe4KeUymwsTwQqG0cU63nwtNXXQD2ESIrZF0Vkkik1JuAlYBOwFcs597lAHqMvL5Yv6K1YksabRnsuY1ljuSDtjmVMxR1gQYJ1FwRu319fgnYPYDOwxVh3M6O9E5ZTX5cSrsfo6wYcxnIxvafx2UUS9L8L/GFsy09AXqN9gRHXn1iumfxovHensR32WBJDsLH94xOs8/72bzOmD8z+ecmUfieltTx0SAizKKVyaa3/MeZdsdw99YLWOtrcyISwkNNNQphEKWUH/GIMAATLKaDtkiBEeiIXq4QwTzxwGghWSsViGefwhrkhCfEgOd0khBAiWXK6SQghRLJs7nRTnjx5dNGiRc0OQwghMoy9e/de1Vq7JtVnc0miaNGi7Nmzx+wwhBAiw1BK/ZVcn82cblJK+SilZkdEJK58IIQQ4lnZTJLQWq/UWvs7Oz9qgKsQQoinYTNJQgghRMqzuWsSQoi0ERsby4ULF7hz51E1DEV64ujoiJubG/b29k/8HkkShvDwcBwdHcmRI0eS/efPnyd//vzJ7tzTp09TrFgxEpV6FsJmXbhwgRw5clC0aFH5vc8AtNZcu3aNCxcuUKxYsSd+n5xuAhYtWkSZMmWoUKEC27dvf6AvLi6O0aNHU7p0aerWrcupU6ce6I+MjKRLly6UKVOGDh06cOPGjbQMXQjT3Llzh9y5c0uCyCCUUuTOnfupj/ye6yRx69Yt3nzzTcaOHcvGjRuZMWMGbdq0YcyYMdy7d48LFy5Qv359tm/fzsmTJ+nYsSM1a9YkKCgIgD179lC1alWyZ8/OpUuXcHV1pUqVKgQHB5u8ZUKkDUkQGcuz/Lye69NNq1atIiQkhL1796K1xtXVlVWrVuHt7Y23tzeLFy/GxcWFr776Cq01bdu2pXDhwvj5+VG3bl0GDRpEu3bt6N+/P/fu3WPGjBmULFmSoUOHPnBEsnr1apYvX87YsWMpVKiQiVsshBBP57lOEi+//DJ9+/bFzs6Obdu2sWzZMm7cuIHWmu+//57z58+zb98+xo8fb33PyZMncXV1Zfz48cTExLBy5UquX7/OrVu3uHz5MtHR0VSsWBGtNTExMQwfPpwVK1bQqlUrPDw8+Oabb/Dx8TFxq4WwPZGRkRQsWJAtW7bg4eGRouuOiIjgk08+IXv27MTFxXH06FFKly5N+/bt6du3L7dv32bhwoWUKVOGe/fu0aVLF7TWBAQE4OLi8tj1b9q0ie+//x4XFxcqV66Mn5/leVC7du1i2LBhxMTE0KhRI8LDw8mUKRNffPEFmTKl4Ukgsx9okdKTh4eHfhp16tTRq1evti6PHz9ev/XWW1prre/evatz5sypw8LCrP2+vr7622+/1VprffToUV2wYEEdHx+vtdY6NjZW58+fX3fq1Ek3aNBAFyxYUHt7e+vw8HCttdbbt2/XRYoU0TNmzHiqGIVIj44cOWJ2CFYzZ87UnTp10v7+/im63nv37ukGDRroPXv2WNtu3bqlq1SporXW+vfff9dubm46Li7O2v/OO+/oyMjIJ/6Mnj176o0bN2qttY6JiXmgb9SoUfrdd9+1Lr/88ssPfF89i6R+bsAencx36nN9JAHQvn17unbtSt68eQHLXUwrV64EwMHBgRYtWlCrVi3rXU/nzp1j1izLEyTLlClDnjx5KFeuHHZ2dsTHx+Ps7MzChQsBKF68OO7u7nTs2BFfX1/69OlDs2bNiIyMNGFLhbBdJ06c4PPPP6dcuXJ8+OGHdO/enbt37xIYGMiFCxcYOHAgkydPxsnJiVGjRuHp6cmdO3cICgriyy+/pHnz5kmud9++fURERDxwdJI9e3bWrVsHQO3atXFxcWHNmjX4+Phw69YttNZJ3iU5e/Zsjh8/jouLC+Hh4UydOpXff/+d3bt3Exsby6VLl+jUqVOy2xgXF8fVq1fJkycPv//+O/Pnz6dkyZIcO3aMcePGcfXqVQYOHEiBAgWoUKECISEhNG/enDfe+G/V55/7JNG/f3/q16+PNkqmZ82alRIlSlj7AwICOHnypHU5Z86c5M797/PqN2/eTFhYmHW5YMGC1otDXbp04c6dO8yfP5/XXnsNf39/fvzxRzZv3pzKWyVE2vP39+fixYsptr6CBQsye/bsx77ujz/+4KWXXiJv3rw0adKENWvW8NVXX9GmTRvc3d1RStG6dWu8vb3x8vJixowZ1KhRgw0bNhAcHJxsggDL6eX8+fM/1O7q+m8tvF69ejF79mx8fHz4/vvv6dix40OvP3r0KDNmzODAgQMA9O3bl7lz5+Lv70+VKlXo2rUr3t7eScawY8cORo8ezbVr1xgxYgReXl4ULlyYkJAQXF1dWbJkCUOGDOH777/H29ubuLg4RowYwd27dylatChNmzZ94DvraT33SUIpRfny5ZPtd3R0pEKFCsn258yZk5w5cybZ5+vrS4sWLfDy8uL69etMmDCB3LlzU6pUqf8ctxDpzZN8oaeGJUuWkD17dvbv30+WLFmYNWsW/v7+FCxYkM2bN7N582b69u0LwOHDh3nxxRcBy5H+47i5uXHp0qVHvsbPz48RI0Zw/vx5du/ejb+//0OvOXToEAmrU5csWZL9+/c/0fbVrl2b0aNHW5fDw8OJjIy0JqrE67q/XVmyZCFPnjycOnXqPyWJ5/oW2NRWuXJl2rVrx7Jly4iOjmbjxo0PXAQXQvw3ERERuLi4MHbsWEaPHs3cuXO5ceMGe/fupX///kyePJmIiAjy5csHQLly5Th+/DhgGQCb0JkzZx5af+3atXF0dCQkJMTadvXqVetf7GD5Q7FVq1b0798/2YvmFStWfGD9J06coEqVKs+0zXny5MHZ2ZkrV64kua7723Xnzh2uXLnywJmRZ/HcH0mkJqUUn332GQAbNmzgzz//fOShrRDiyd29e5e+ffvi4OBgbTt27Bi5cuVi6NChzJgxg2PHjvHRRx9Z+7/++ms+/PBDqlevTpYsWaynhsPDw62DZR0dHa2vV0qxcuVKPv30U3755Rfi4+M5f/48M2fOxM7u36/P3r1707hxYwIDA5OMtUyZMgwYMIBBgwbh7OyMg4MD3bt3Z/v27Rw4cIDAwECcnJyoVq2a9T179uxh69atxMTEsHz5cnx9fa0xLV68mPfff58SJUoQGhrK5MmTre+7cuUKEyZMYNeuXUycOPE/HUWADT6+1NPTU6fH50ncuHGDPn36sHjxYrNDESJFHD16lLJly5odxlMJCQmhYsWK2NnZsXXrVhYsWMCcOXPMDivFjB49mqJFi9K1a9dkX5PUz00ptVdr7ZnU6+VIIo24uLhIyQ4hTHbo0CFmzZpFiRIlOH78OKNGjTI7pBRz6NAhtm7dysGDB2nQoAGFCxdOkfVKkkhDuXPn5tq1a//58E8I8Wz8/Pysg9VsTYUKFdi0aVOKr1cuXKchT09PebSqECJDkSSRhry8vNi9e7fZYQghxBOTJJGGqlat+sCtdEIIkd5JkkhD2bNnJzo62uwwhBDiidlMklBK+SilZkdERJgdyiMVKFAgRUsXCPE8u3TpEj179sTLy8vadufOHfr3788nn3xC9+7drYPnEvrhhx+sNdiSM2/ePPr06cNnn31Gx44d2bFjR4rHnxHYTJLQWq/UWvs7OzubHcojyXUJIVLO9u3badGiBQnHe02bNg13d3fef/99Bg8eTI8ePR54z8SJE1m4cCG7du2id+/e3Lt3L8l1h4WFMW3aNIYOHcqgQYPo3bt3qm5LeiW3wKYxLy8vfv75Z1q0aGF2KEKkrKQK1LVrB/36QXQ0vP76w/1du1qmq1ehTZsH+56gEGabNm0eKpi5evVqJkyYAFjKYezfv5/IyEicnJz4+OOPyZ07N7/88gsAP/74IwMHDmTatGkPjKAGGDFihHX+3r17vPDCC4+NxxZJkkhjFStWZOzYsWaHIYTNunLlygOlup2cnLhy5QpOTk4PlOgAaN26Na1bt37k+rTWfPHFF0ydOjVV4k3vJEmksSxZshATE4PWWp4PLGzLo/7yz5bt0f158jzRkcOTyJs3Lzdv3rQuR0ZGWp8X8yjBwcGMGTMGgJkzZ1K8eHG01gwdOpSuXbtSq1atFIkvo7GZaxIZSbFixZKsOCmE+O+aNm1KcHAwAAcPHqRy5co4OTk99n21atVi7dq1rF27luLFixMfH8/bb7+Nj48PTZo0Yfny5akderokScIEMvJaiJSxZcsWAgMD+fvvvxk3bhy3b9/m7bff5q+//mLcuHFMmTKFuXPnPtO6hw4dyk8//cSoUaPw9vZm0KBBKRx9xiBVYE1w8OBBFixYYC0jLkRGlBGrwIqnrwIrRxImKFu2LEePHjU7DCGEeCxJEiaws7Pj3r17yd6fLYQQ6YUkCZOULl2a0NBQs8MQ4j+xtdPVtu5Zfl6SJEwiI69FRufo6Mi1a9ckUWQQWmuuXbv2wONZn4SMkzCJl5cXX375JW+88YbZoQjxTNzc3Lhw4QLh4eFmhyKekKOjI25ubk/1HkkSJilZsiQnT540Owwhnpm9vT3FihUzOwyRyuR0k0mUUtjZ2REbG2t2KEIIkSxJEiaqUKEChw4dMjsMIYRIliQJE8nFayFEeidJwkRSnkMIkd5JkjBR4cKFOX/+vNlhCCFEsiRJmEgphaOjI7dv3zY7FCGESJIkCZNVqVKF/fv3mx2GEEIkSZKEyTw9PeXitRAi3ZIkYTK5w0kIkZ5JkjCZi4sL27dvp3379ly+fPmh/mvXruHn58fbb7+d5LWL0NBQXnvtNaZNmyY1dIQQKU6ShIlOnDhB7dq1uXv3Lm5ublStWpXffvvN2r9lyxaqVq2Kq6srly9fpnr16hw+fBiwFOv67rvvqFu3LvXq1WPJkiU0bdqUK1eumLU5QggbJLWbTHLp0iVq1KjB2LFjiYyMpFatWvj4+NCpUydmz57NCy+8QLt27Zg/fz6vvfYaWmvmzZvHSy+9xJ49e1i5ciVff/01//vf/6hQoQKDBw/mo48+wsPDg7Nnz5I5c2azN1EIYQPk8aUmiY6OpkCBApw+fZrjx48zYMAAChQowNatWylfvjx2dnbs3buX+vXrW98TFxfHhg0baNCgAX///Tfh4eF4eHgAloe/V6xYkW7duhEaGopSyvq+8PBwXF1d03wbhRAZw6MeX4rW2qYmDw8PnVH4+vrquXPnWpdPnDih8+XLp+Pi4vS9e/d0sWLFdEhIiLX/hx9+0I0aNdJaax0eHq6dnJx0VFSUjomJ0fPmzdPu7u7a29tb37hxQ2ut9e3bt3X//v11pkyZ9JtvvqkjIyPTdgOFEBkCsEcn850qp5tM1KZNGz777DOuX78OwB9//EGrVq2sp4ratGnDqFGjePnllwFYvnw53bp1AyBPnjx4eXkxZMgQSpQoAVgSfrNmzWjfvj3u7u5s27aNihUrcu7cOUaNGoWHhwdBQUHWow8hhHgcOd1kotu3bzNx4kRu3boFWEZgv/XWW9Ya/WFhYUybNs36LGxHR0fee+89cuTIAcCePXsICgqyri9fvnwMHToUgBo1ahAREUH9+vUZNmwYxYoVY+rUqSxZsoQ//vgjLTdTCJHOPep0kyQJGzVhwgQuXrxI9+7dGTFiBG+//TbBwcFERUUxefJks8MTQqQjkiSeQ6GhodSvX5/z588TExNDp06d2LNnD0uWLKFWrVpmhyeESEcelSTkmoSNKl26NLlz58bT0xMHBwfi4uK4evWqjKMQQjyVdJ8klFJ2wHCgiNba3+x4MpINGzZw+vRp63L+/PkZNmwY9+7do1WrViZGJoTIKNJ9kgCyA2uBvmYHktHkzZuXvHnzPtC2aNEi3njjDeLj42nTpg0XLlxg3bp1+Pn5YW9vb1KkQoj0KlXLciil8iul5iildidqb6iUmqmUGq2UGvWodWitI4BrqRnn88Te3p4FCxawYsUK3n33XTw8PAgICKBu3boPHHUIIQSkfu2musDPgHX4r1IqG/A1MFhrPRqopJRqoJSqoJT6KdGUN+nVPkgp5a+U2qOU2hMeHp4a22FT7O3tyZcvH7Nnz6Zfv37s2rWLjh07UqNGDdauXWt2eEKIdCRVk4TWehlwM1FzLeAvrfVdY/l3oKnW+pDWumWi6YmusmqtZ2utPbXWnlJ+4sksX76cdevWcfbsWebNm8egQYPo0aOHJAkhxAPMqAKblwcTR6TRliRlKULUHiitlKqWyrE9N1q0aMGGDRuYM2cOR48eZeDAgfz666+0bNnS7NCEEOmIGUniCpAjwbKT0ZYko7TIJK31S1rrfake3XPC19eXZcuWceXKFQYPHoybmxtHjx6laNGiZocmhEhHzEgSwUARpVQWY7kOsNqEOJ5rdevWJXv27FSrVo1q1arx+eef07t3b3r06MGGDRusrzt06BC//vprsuvZvXs3hw4dSouQhRAmSNVbYJVSrwB+QAGl1EhgitY6WinVF/hSKRUOHNBab0zNOMTDMmfOzI4dOx5qj46O5q233mLnzp04OTkxduxYXFxcqFWrFl999ZW1blRcXBxjxoxhzpw5xMfH88EHH/D2228/UKJcCJHx2UxZDqWUD+BTsmTJXidOnDA7nAwtJiYGLy8vzp07x4YNGyhTpgyDBg1i8+bNrF69mpw5c9KiRQucnJyYP38+UVFRdOrUiVy5crF06VKyZ89u9iYIIZ7Co8py2MzjS7XWK7XW/s7OzmaHkuFdv36d0NBQfvnlF4YMGcKyZcto2LAhWbNm5csvv+SLL74gLCyM3r17s2vXLvLly8e2bdvYs2cPJ0+eNDt8IUQKspkkIVJOvnz5qFatGtHR0Sxbtgw7Oztu3rzJiRMnKF26NG5uboSHh3PmzBk2btzIwoULCQ0NJWvWrFSqVMns8IUQKUiShEiSr68vixcvJlOmTLz++utky5aNOnXqMGDAAPr06YOPjw/ZsmVj8ODBBAcHs3TpUnx9feWahBA2JiPUbhImaNu2LV988QXFixe3ts2aNcs6361bN1q2bMmAAQOIj48nW7ZsbNmyxYxQhRCpSJKESJK7uzvnzp1Ltr9JkybcuXMHgHbt2jFnzhycnJzSKjwhRBqxmdNNSikfpdTsiIgIs0N57nh5ebF79+7Hv1AIkeHYTJKQu5vMU6NGDXluthA2ymaShDBPtWrV2Lt3r9lhCCFSgSQJ8Z+98MILREVFYSsDM4UQ/5IkIVKEu7s758+fNzsMIUQKkyQhUoRclxDCNkmSEClCkoQQtslmkoTcAmuusmXLcuTIEbPDEEKkMJtJEnILrLkyZ86MUorY2FizQxFCpCCbSRLCfBUrVuTw4cNmhyGESEGSJESKkesSQtgeSRIixUiSEML2SJIQKaZgwYL8/fffZochhEhBkiREisqRIweRkZFmhyGESCGSJESK8vT0lIqwQtgQm0kSMk4ifZDrEkLYFptJEjJOIn3w8PCQirBC2BCbSRIifZCKsELYFkkSIsVJRVghbIckCZHi5LqEELZDkoRIcdWrV5ckIYSNkCQhUly5cuWkIqwQNkKShEhxUhFWCNshSUKkCqkIK4RtsJkkIYPp0he5eC2EbbCZJCGD6dIXuXgthG14qiShlCqbWoEI21KoUCEuXrxodhhCiP/oaY8kpqRKFMImSUVYITI+mzndJNIfLy8vqQgrRAb32CShlBqllPpIKTUKKGnMf5QGsYkMLkuWLLRv357evXsTHR1tdjhCiGfwJEcSm4Etxr/XjfktqReSyOji4uIYNWoUEyZMoGTJkkRFReHp6cmBAwfMDk0I8ZQemyS01lvuT8C1BPNCJGny5MmsXbuW/fv34+zsTGBgIMOHD6dWrVrExMSYHZ4Q4ik87TWJe6kShbAppUqVIkeOHOTPn59SpUoREhJCyZIlKV68OA4ODmaHJ4R4CsrW6v57enrqPXv2mB3Gcy06OpoCBQpw6tQp7t69S69evShdujTOzs6MHj3a7PCEEIkopfZqrT2T6rN7gjdnAhoC7sA5YIPWWo4oRLKyZctGo0aN8PPzo0iRIly7do25c+eyY8cOs0MTQjylRyYJpZQzsAm4iyVBFAEmKqXqa61vpEF8IoOaMmUKa9asAaB8+fLMnj2bokWLmhuUEOKpPfJ0k1LqE2CL1nptgrZGQAOt9fA0iO+JKaV8AJ+SJUv2OnHihNnhiERWr17Njh07GD9+vNmhCCESedTppsdduFYJEwSA1nodEJdSwaUUqd2UvjVt2pSjR49y6tQps0MRQjyFxyWJ5EZARaV0IML2TZw4kffee8/sMIQQT+FxF64bK6VeSKK9JjAhFeIRNqxUqVIUL16ctWvX0qRJE7PDEUI8gccdScRgOWpIPMkjx8QzGTlyJJ9++qkMqhMig3jckcQwrfVDFdqUUh6pFI+wcTly5KB79+58+eWXDBkyxOxwhBCP8cgjiYQJQinlrpQqp5QqB8hT7sUz69y5Mxs2bGDnzp306dOHP//80+yQhBDJeGSSUEpNUEr9YCzOAFYDvwJy9VE8M6UUL7/8Mt7e3mTOnJlXX32VL7/8Elsb/S+ELXjcNYmiQCdj/netdTGjrWQqxiRs3KhRo5g/fz7NmjXDz8+PnTt3snDhQnr06GF2aEKIRB6XJEK11vfHRAQBaMufeydTNSph0y5cuEDv3r0JCAjggw8+IHv27AwbNowLFy6YHZoQIpHHJQnroDmt9bmk2oV4Wr6+vvz444+4urry+eef06VLF6ZMmULr1q3NDk0IkcjjkkROpVShhA1KKXcgV+qFJGxdgwYNOHz4MD/88AMXLlygf//+hISEsGbNGi5dumR9XVhYGHPmzJHbZYUw0eNqN+UHfgHOAJeAgliuSTTTWl9OiwCflpQKzxhmzJjBr7/+al329PSkdevWDBkyhK5du5IjRw78/f0pWrQocXFxBAUF8eKLL5oYsRC261G1mx6XJOoCu4GmQHEs1yLWAJ5a63RZ91mSRMYWGxtL/fr12bdvH99//z3NmzcnICCAUaNG8e233+Lj42N2iELYnP/yPImJQMJkkBeojaUsx8spE54Q/7K3t+fSpUvMnDmTGTNmcOnSJfz8/Lh06RJr1661Jom4uDjGjx/PoUOH+OKLLyhYsKDJkQthmx53TSKWDFKWQynlo5SaHRERYXYo4j9q2bIlp06dYs2aNTg4ONClSxe++uorcuXKRXR0NH/99Rfe3t5s376d0qVLU61aNVavXv3AOmJjY5kwYQJTp07l3j15RpYQz0xrnewEeCXT7vGo95k5eXh4aJGxBQcH67Jly+qwsDAdFham9+3bp3PmzKmnT5+uGzVqpB0cHPQbb7yho6OjtdZab9u2Tbu5uemlS5dqrbU+c+aMrlWrlm7UqJF+6aWXdIMGDXRYWJiZmyREugbs0cl8pz7ydJNOom6T0b43xbOVEIbq1auTN29ePD3/PUXav39/+vfvj7+/P3nz5qV48eL4+vqSNWtWXnzxRRwdHTl9+jRbtmyhTZs2vPfeewwePBitNePHj8fDw4Pg4GB5Op4QT+mxz7gWIq1lypSJzZs3J9nn4OBA8+bNyZ07N2vWrCEqKorg4GCmT59OTEwMU6ZMITo6mk2bNrFr1y569OjBiBEj+Oqrr4iPj0/bDRHCBkiSEBlOmzZtGDlyJFHkCOYAACAASURBVHFxljGd+/bto3Xr1owcORKtNcWLF2fChAkUKVKEoUOH8v3335M/f35KlChhcuRCZDyPu3AtRLrTuHFjWrVqxdmzZzl79iy5cuVixIgRgKV4oK+vL59//jlbtmyhWbNmHDp0iJiYGK5evWpy5EJkPI8cJ5ERyTgJcfLkSYYPH2490nBwcKBHjx5MmjSJiRMnUqNGDSIjI/n444+pU6cOrVq1MjliIcz1zIPpMiJJEiI5N27coFevXhQtWpTly5dTt25dtm/fTuPGjZk6dSpZs2a1vvb8+fN8+umn9OzZk8qVK5sYtRCp71FJQk43ieeGi4sLnTp1IiAgAHd3d2bOnElISAgRERHUqFGD2FjL8J8VK1bg6enJnTt3aNiwIdOnT5dnXYjnlly4Fs+V8PBwXn/9dfr160fz5s2pX78+NWvWZNWqVVy+fJnAwEC++eYbfv75Z2rWrMnw4cPp2LEj+/bt47vvvjM7fCHSnJxuEs+VK1euUKpUKf7++29iY2M5fPgwM2fO5PDhw1StWpX169eTPXt2ypQpQ/ny5fn4449ZtWoVU6ZMYcuWLWaHL0SqkNNNQhjy5s1L1apVmTp1Klu3buXatWscPXqUsWPHMnfuXObMmYOzszNLlizBwcGBFStW8OOPP9KmTRuzQxfCFHIkIZ47GzZsYNq0adblPHnyMGvWLLJkyUJsbCz58+dn9uzZ2NvbM2rUKP766y8OHjxIoUKFHrFWITKu/1IFVgib07BhQxo2bJhkn729PWPGjGHWrFkAREVF8dJLL0mCEM8tOZIQ4hGio6Px8fFh3bp1ZM6c2exwhEgVck1CiGeULVs2fHx8+OGHH8wORQhTSJIQ4jF69+7NN998IwUCxXNJkoQQj5E1a1ZatWpFUFCQ2aEIkeYkSQjxBHr16sW3335rrQclxPNCkoQQT8DR0ZE2bdqwcOFCs0MRIk1JkhDiCfXo0YMFCxZYazwJ8TywmSShlPJRSs2OiIgwOxRho7JkyUL79u1ZsGCB2aEIkWZsJklorVdqrf2dnZ3NDkXYsG7durFw4UJu377NiRMnzA5HiFRnM0lCiLTg4ODA66+/TuXKlalUqRL9+vXj9u3bZoclRKqRJCHEU1i5ciWfffYZcXFxnDlzhuvXr+Pl5cXhw4fNDk2IVCFlOYR4CsWLF2fy5MlERERw+/Zt+vbtyzvvvMM///zD/PnzzQ5PiGciBf6ESCENGjTg7NmzDBw4kHbt2lmPKFq3bm12aEKkCjndJMRT8PX1ZdmyZdjZ2bFs2TJiY2NZvXo11apVMzs0IVKFnG4S4inExMTg7u6Ok5MTAHfu3KFEiRLY29vTrVs3OnbsSHx8PJMmTWLfvn188cUXUmZcpHtyukmIFOLg4MDhw4e5du2atc3NzQ17e3vGjRuHr68vly9fxt7enrp16+Lh4cE333yDj4+PiVEL8ewkSQjxlHLnzk3u3Lkfah86dCiFCxcmZ86czJw5kyZNmtCkSRM6duzIrVu36NixownRCvHfyDUJIVKIo6MjdnZ2rF69mp9//pkvvviCOnXqUKJECbJly2Z2eEI8E0kSQqQQOzs7mjdvztq1a5k5cyarV6/mzJkzhISE0KhRI7PDE+KZyOkmIVKQr68vw4YNI1OmTBQqVIj27dvTuHFjsmbNanZoQjwTSRJCpKCGDRvSpk0bTp8+zQsvvMDff//NrFmzzA5LiGcmSUKIFOTg4MDo0aOty1WqVGHfvn1UrVrVvKCE+A/kmoQQqahLly4sWrRIno8tMixJEkKkoixZstC0aVN++ukns0MR4plIkhAilfn7+zNr1ixsrbqBeD5IkhAileXIkYMaNWqwadMms0MR4qlJkhAiDQwcOJAvv/zS7DCEeGqSJIRIA66urhQpUgQpPikyGkkSQqSRd999lylTppgdhhBPRZKEEGmkSJEiZMmShdDQULNDEeKJSZIQIg0NHTrU+vjTyMhIs8MR4rEkSQiRhsqXL8+xY8coVaoUZcuWZf369WaHJMQjSZIQIo3ExMTw7rvvEhoaire3NwsWLKBbt24MGzaM2NhY6+u01vz666+cPn3axGiFsJAkIUQa2b59O0uXLuXo0aPcunWLKlWqEBISwqJFi9i5cycAERERdO7cmQEDBlCjRg2CgoIeWk9UVBTTp08nLCwsrTdBPIckSQiRRqpXr86NGzfIlCkTH330Ed26daNTp05cvXqVy5cvs337dqpWrYqzszMHDhxg3bp1jBkzhm7dullHa+/fvx9PT0+WLVuGh4cHq1atMnmrhK2TJCFEGnnhhReoX78+K1eupEaNGvzyyy+0bduWl19+mStXrjBo0CCio6O5ffs2gYGB3Lx5k4ULF7Jo0SKioqIICgqiYcOGfPDBB2zZsoXly5fTv39/Ro4cafamCRumbK2ejKenp5YBSyK9CgoKYuDAgbi5uQFw/vx5AgICaNu2LadPn6ZWrVrs3buXXbt2ceLECTZt2kRISAheXl4cOHCAXLly0bhxY0qVKkX37t3ZuHEjQ4YMYf/+/SZvmcjIlFJ7tdaeSfXJ8ySESEMdOnSgQoUKxMXFAWBvb0/58uUBKF68OIUKFeLIkSM0btyYxo0bs2fPHsaPH0+vXr1YtWoVn3zyCW+++SZr1qxh6NCh3Lt3j9atW5u5ScLGSZIQIg0ppahYsWKy/f7+/rRq1cq6nCtXLmbOnAnAq6++ip+fHzExMbRp04bPP/+cwMBAtm3blupxi+eXJAkh0pE+ffrQp0+fJPuyZMlCv379rEcOWmty5MjBsWPHqFChQlqGKZ4jcuFaiAxk/PjxnDlzhjNnznD27FlOnTpFYGAgO3bsMDs0YaPSdZJQSjVXSg1TSo1QSrU1Ox4h0ht7e3sCAwP56KOPOH78uNnhCBuUaklCKZVfKTVHKbU7UXtDpdRMpdRopdSox6xmr9b6U2AG0D61YhUiI3NycmLBggX07t2by5cvc+DAAd59910uXbpkdmjCBqTmNYm6wM9AlfsNSqlswNdAea31XaXUcqVUA+AyMC7R+/211veHlLYCJj/Rp4aGgrf3g23t2kG/fhAdDa+//vB7una1TFevQps2D/f37Qvt28P58+Dn93D/u++Cj4/ls3v3frh/5Eho2BD+/BMGDXq4f8IEqF0bduyADz54uH/aNKhSBTZsgHGJdxMwaxaULg0rV0JSpagDA6FwYViyBAICHu5ftgzy5IF58yxTYmvWQLZsMHMm/PDDw/2bN1v+nTwZEg/uypoVfv3VMj92LGzc+GB/7tywfLll/v33ITj4wX43N1i40DI/aJBlHyZUqhTMnm2Z9/eHxH9NV6li2X8AXbrAhQsP9teqBZ98Ypn39YVr1x7sb9AAPvzQMv/aa3D79oP9zZrBkCGW+cS/d5Bmv3sFb95k1a1bHC5WjNjYWHrmzs3p6dM5N3o01T/4QH735Hfv4f6Ev3uPkGpJQmu9TCnlnai5FvCX1vqusfw70FRr/Q7QMqn1KKWaAqeBZGsQKKX8AX+ASlmy/MfIhciYzp8/j8byuNQypUsTERFB388/p0a2bAwyvkRiY2MJDQ0lMjKSMmXLksvUiEVGkKqD6YwkMfn+IA2lVEegvda6pbHcE/DWWndJ5v0tgeHAfiCH1rrz4z5TBtOJ51XNmjUZPXo0//zzDz/99BMdO3YkODiYmzdvEhAQwJYtW/Dz86Ndu3Y0bNiQnj170rlzZ8aOHYuDgwNguWMqMDCQ+Ph4unbtilLK5K0SaeFRg+nS+sL1FSBHgmUnoy1JWuuftNa1tNZ9niRBCPE88/X1ZcWKFXTq1IkPP/yQK1eu8N1337F37158fHyoX78+PXr0YNiwYTRp0oQ///yTzZs3M336dACuX79Ou3btmDp1KtOnT6dVq1ZcS3wKBEuhwvPnzycZw+3bt5k5c6YUH7QhaZ0kgoEiSqn754TqAKvTOAYhbNL9JLFp0yauXr1K3rx5AdixYwdLliyhUKFC3Lp1i2HDhvH666/Tq1cvzp07x40bN9iyZQtVqlShYMGC7Ny5k+DgYEqUKEHVqlU5e/YsYEkA/fr1o0OHDnh6erL8/vl8w+HDh6levTpBQUF4eHjw888/p/UuEKkg1a5JKKVeAfyAAkqpkcAUrXW0Uqov8KVSKhw4oLXe+MgVCSGeSPHixenQoQNjx461tn300UfY2dlhZ2eHn58fcXFxzDMuEIeGhlKzZk2KFi3KnDlzuHLlCidOnGDgwIFUrFiRxo0bs2zZMsLDw4mPj6dFixZUqlSJw4cPc+zYMTp16sT69esJCAhg+fLl9O3bl0mTJtGtWzeCg4Pp3LkzO3bsYNKkSSbtEZESbKbAn1LKB/ApWbJkrxMnTpgdjhDpzr59+2jcuDENGjQA4Ny5c5QrV445c+agtebFF19kyZIl5M2bl8OHD7Np0yYCAgJ45ZVXOHPmDDdu3KBPnz6UKVOGF154gWvXrvHmm28yZ84cFi5ciIuLC02bNiVTpky0atWKkJAQ+vXrx5EjR0zecvE4z0WBP631SmClp6dnL7NjESI9qlq1KosWLeKff/6xtr366quApaaUr68vs2bNolu3bjg7OxMVFUWvXr2YOnUqZ86cwcvLC29vb06ePEl4eDhHjhyhZMmS2NnZ4eXlxYoVK+jSpQtRUVG0bduWu3fv0rRp0wdiuH79OitXrqR9+/ZkkTsRMwSbOZK4T+5uEuLZHD9+nJ49e1ofpWpnZ8esWbMoV64cAB4eHkyePJl69eoB0K1bN6pWrcrAgQOJiYkhf/78rF+/njx58qC1pmbNmri7u9O5c2d69+7N3r176dy5Mzlz5gRg8eLFlC5d+qliXL16NXfu3MHX1zcFt1w86kgCrbVNTR4eHloIkfK++uorDVgnZ2dnff78eWv/hx9+qN3d3a1T48aNdWxsrA4MDNQlSpTQOXLk0CtWrND37t3TX3/9tc6TJ49eunTpA5+xaNEi3adPH3316tUH2qOjo3WfPn10sWLFdJkyZXSXLl10ZGRkmmz38wDYo5P5TpUjCSHEE0v8ffGk4yiqVatG7dq1OXLkCJ07d6Zhw4YsXbqUvXv3EhQUxM2bN+nfvz9//PEH9erVY/Xq1QQGBvLKK68QHh5OvXr1qFSpEgEBAdjb2zN48GA2btzIpk2bcHd3T41Nfa6kp3ESQogMTCn1wPSkWrZsib29PWvWrMHe3p5x48YxadIkzpw5w6RJk6wPXtq7dy8BAQF8/fXXdOjQgR9++IHjx49z+fJl/Pz8WLZsGdu3bycgIAAHBwfr7bn3bdq0iZMnT6bkJj/35EhCCJHqDh8+zGuvvcaff/6JUoqbN29SoUIFjhw5wqFDh/D19aV27dpkzpwZFxcXIiMjCQkJwdXVlUqVKrF69Wp69uxJzZo1OXbsGKtWreLgwYOEhoZSqFAhoqKiGDRoEOvXrycqKoopU6bg5+f3UCL7+++/yZcvH5kyyd/HCT0XdzcluAXW7FCEEImUK1eOUqVKUaJECWtbp06dcHNzw83Njc6dO1O6dGkGDx7MrVu3yJw5MwULFuR///sfuXPn5r333uPWrVuUL1+e8uXLc+vWLXLmzMk777xDVFQUBw4cwNvbm4MHD3L27Fk6dOjAunXrmD9/PpkzZyY2NpbRo0fz2WefUb9+febPn0++fPlM3CMZhxxJCCFM99tvvzFs2DBGjBgBwMGDBwkODmbDhg0AHD16lPbt2xMTEwNA5syZmT9/Pp6ennz66ad88803FC5cmFdffZUGDRqQP39+SpYsycWLF7l16xYdO3bExcWFOXPmEBAQwLfffsu8efNo1KiRNYbLly+zePFiunXrhpOTU9rvBBM96khCkoQQwnSxsbG8/fbbXE1Qtvqtt97ilVdeeex7L168SIUKFQgLC2Pr1q0EBwfzv//9j4MHD1KnTh1OnTqFi4sLY8aMoXz58hQoUIBly5YxePBgLhjlu9etW0fXrl0pU6YMf/31F0FBQVSvXj3Vtje9eS5ONwkhMi57e3tmzpz5TO8tWLAgZcuWZf369TRq1IhXXnmFv/76i5YtWzJw4ECmTZvGsmXLOHjwIEuWLCEsLIxLly6RO3duNm7cyObNm5k3bx6LFi2iXr16LFu2jGbNmvHJJ5/Qo0ePFN7SjEeOJIQQGd68efPo06ePddnJyYm9e/dSuHBhrl+/TpEiRQgLCyNHDksR6nr16lG/fn0cHR2ZNGkS7u7uVKpUiVdeeYXOnTsza9Ysfv/9dxYvXmzWJqUpOZIQQti0rl270rVr1yT7cubMyUsvvYSXlxfZs2cH4PTp06xatYrs2bOjlOL48eOMGTOGNWvW0LhxY65fv87w4cMfWM+tW7e4cOECZcqUSfJz7ty5Q3x8vPUzbIUcSQghbF5kZCQJC3/my5cPNzc3AM6cOUONGjUIDg5GKcX169epU6cOtWvXZuTIkdSvX599+/bRsWNHLl++TJ8+fRg7diz29vbW9e3evZuOHTsSHR3N/PnzrTWxMornoiwH4APMLlmy5H8ani6EeP506NBBFytWzDoNGjRIX7t2TQ8ZMkRXrFhR58yZUwcFBekrV67o119/XVevXl2fOXNGx8fH60mTJmlXV1e9dOlSvWHDBl2oUCE9dOhQfffu3Qc+IywsLN2WEkHKcgghxNOLjY0lW7ZsNG3alJw5c9K/f3+yZ8/OoEGDKFu2LE2aNKFDhw5s3ryZYsWKkT17dv755x9q167NlClTaN68OVprvv76az744ANy5szJ999/T82aNc3etAfINQkhhHgG9vb21KtXjy5duvDiiy+yePFiYmJi2L17N9mzZ2fp0qVER0czbtw4HBwc+Oeff7C3t+fChQtkyZKF8PBwevfuzdmzZ9m5cydHjx6lRYsWvP3227z//vsZ4hnikiSEEOIRfH19Wb58OUFBQVSuXJnQ0FAWL17M0qVLyZQpE3fv3qVmzZq89dZbAAQFBXHu3Dm2bdvGkCFDCAsLY9CgQVy9epVmzZqxZ88eSpYsyZtvvkmhQoUACA8PZ/z48bRt25Y6deqYubkPkQImQgjxCC1btmTNmjXWEiK1atWiY8eO1vpPbdu2ZcyYMdStW5e6desybNgw/P39GTduHD///DN2dnbUrl2bdevW8frrrzNgwABcXV1xdXUFYMOGDVSpUoWbN2/i6+vL2LFjiY+Pt36+1prp06fj7u7OvHnzHqrEC5YR6jNmzLCOSE9Jck1CCCEe4/r160RFRVmXCxQoQObMmQHLl/jevXu5c+cOYCkZUqNGDWsSqVatGp9//rl19Hjv3r05ceIEDg4O3Lx5k2PHjrFw4UJee+01Ll68SJcuXXB0dGTNmjVcvXqV7t27c/HiRUaPHs17771nLZnu7OyM1pqZM2cyevRoypUrx+3btwkKCnqgRtaTkLIcQghhkk8//ZTJkydbn8h38eJFtm3bRpUqVRgwYAAHDx4ka9asuLq6UqpUKaKioli4cCFLly5l4MCBVK5cma+++goHBwdu376Nv78/N2/eZMWKFbRr147Tp08TFBTEiy++yIwZM/j4448JCgqiYcOGTxyjJAkhhDDJvXv3HhijkS1bNgoXLgzAn3/+SevWrTl16hSXL1/m7NmzTJo0iZiYGGrWrElQUBD29vbW1wOEhoaitaZGjRosX76cN998kyJFiuDp6UmjRo3w9/enSJEi1mKJT+K5uLtJSoULIdKjTJkyJfss78qVK6OU4ttvv7VexA4JCeGnn36iSpUqeHp6Mm7cOFatWmV9T7ly5Zg9ezYVKlQgJiYGFxcX6tWrh7OzM/fu3WP16tXW6rkpQY4khBDCRIsWLSIwMNC6XKxYMWbOnIlSipiYGPLnz0+HDh2sd1L9+uuvnDt3jkyZMrFq1SrGjx/Pd999B8CRI0cYOXIkR44ceaoY5HSTEEJkUFu2bOHgwYPWZU9PT+tgvLt379K4cWMuXbpk7R8yZAg9e/Z8qs+QJCGEECJZj0oSMk5CCCFEsiRJCCGESJYkCSGEEMmSJCGEECJZkiSEEEIky2aShFLKRyk1OyIiwuxQhBDCZtjcLbBKqXDgr1RafR7gaiqt+7+S2J6NxPZsJLZnk15jK6K1dk2qw+aSRGpSSu1J7l5is0lsz0ZiezYS27NJz7Elx2ZONwkhhEh5kiSEEEIkS5LE05ltdgCPILE9G4nt2UhszyY9x5YkuSYhhBAiWXIkIYQQIlmSJIQQQiTLZp5Ml9KUUjuBO8ZivNa6gVIqFzAROA28CHygtb6cBrHkB8YBlbXWXkabIzAZCDNimai1Pm70dQGqAvHAKa31rDSOrSvQh3/331ytdaAJsZUwYtsHuAHXtNYfP+rnqJQaCjgBOYF1Wutf0ji20YB3gpeO11qvT+PYMgErgT8AB6AE0B3Iivn7LbnYhmPyfksQY1YjvnVa6yHp5f/qM9Nay5TEBIxOou1roJ0x7wMEplEsbYzP25Og7T1gmDFfEdhmzLsBf/Lv9abdwItpHFtXoGgSr03r2LyAFgmWjwAeyf0cgRrAGmPeDjgBOKdxbA/93pkQWyZgZILln4HO6WS/JReb6fstwWdOAeYDk43ldPF/9VknOd2UvIpKqeFKqdFKqaZGW1Mg2Jj/3VhOdVrrZcDNRM3WWLTWB4HKSiknoDGwVxu/dcZrXkvj2AD6K6WGKKU+Mv5yx4TYdmutf07QlAmIIvmfYzP+3adxwFHglTSODaXUCGPfDVdKZTMhtnta63FGLHZYvsxCSR/7LbnYTN9vRgx+WPbNmQTN6eL/6rOS003Jm6S13qWUygxsVUrdBPLy7xdiJJBTKWVn/PKltYSx3I8n7yPa09IWYLXWOlwp9TqwFGhgZmxKqVbAb1rrY0qpJH+ORixH0zq+RLEtBc5qraOUUv2A6UAPM2JTSjUGBgOrtNZ70tN+SyK225i835RS5YCyWusPlFKVEnSl5/+rjyVHEsnQWu8y/o0HtgH1gCtADuMlTsB1kxIEiWK5H8+VR7SnGa31Ga11uLG4CXjFSLamxKaUqofl5zfYaEru55jm8SWOTWt9WGsdZXRvAuonEXOaxKa1/k1r3QQoZnzxppv9lji2dLLfWgF3lFLvAXWB6kqpQY+IwfT/q09CkkQSlFJllFI9EjS9CJwCVgO1jLY6xrJZrLEopSoC+7XWkcBvgIdSShmvqwX8mpaBKaU+Mf7CBMu+O2sk2zSPzThV2Bh4G8ivlKpF8j/HhPvUHigLbE3L2JRSnyV4yf3fuzSNTSlVLsEpVrCcOilOOthvycWWHvab1nq81vpjrfVEYDuwS2s9jXT8f/VJyGC6JCilCgIzgBAs2d0eeAdwASZhqTJbAnhPp83dTa8AbwBNgAAsF8bAcsfE30BJYIJ+8I4JTyx3TBzXqXsHUVKx+QMVsPwHrgh8obXeaUJsHlhOfe0xmrIDXwG/kMzP0bgTJqcx/apT7y6d5GIrDWTD8hdlReCjBD/XtIqtBPAZljuv7n+xDgRiMH+/JRfb25i83xLE6Au8heXuq6+An0gH/1eflSQJIYQQyZLTTUIIIZIlSUIIIUSyJEkIIYRIliQJIYQQyZIkIYQQIlmSJES6o5SqrpTarJTaYZRFGa2UmqiUmpbCn1NUKdUywXIDpdTkFFr3MKWUVkpNSLANT31/vlKqglJqk1E08VljGZRoeY8xuFGIx5JbYEW6ZFRDfUFrPcRYdgQaaq1XpeBneANdtdZdE7QpnUL/KZRSGsihtb5lLDd/lnv0jX1xVms97xnjOKu1LppgOcW2Udg+qd0k0j1j9PZErfUgpVQH4GuttYtSqjqWx0EOAvYDQViOjo8ClYFFWutvjHV8hGVw012jrxOWarVVjC/hxVgGAVYDvI2/tCcD17AMwgrVWs82BmaNMiYPwBlobowof9Q2fK217qOUKgl8j2VglR+W8g1jgF6ArxFjDOCotR6aaB35sVRi/VNrPVopNQGorbX2Vkq9ACzBMpq4NPC91nqDUqod4GJs4zEgGvhSKeWttT6rlGoBvApcwDKq+l0sAyEDsAxYizH21wCjRlJr4GXgIuCptW73qO0WNsDMErQyyZTcBIwG9gLTgC+AaQn6ziaYnwd4G/PeQLAx7wocNOYbY5SLNpZ7JHj9vATtRYHNxnxvYEaCvkNYircBnAVKG/OrAY9ktkFjGXE7DTiQoL0hlsJ0ALWBN4z5hKXDfwHKJ9gXXY35rhhlsRPFmw3LkRZALmB3UvvLWN5svDcnluTgYLQPxzIa+P5nfmLMtwWmG/M/AW/ej93s3xOZUn+SIwmRnv1PWx7aorDU43kSxwG0pQLt/eJplYCT91+gtZ77BOupxL/1f8BSYqQC/1YUPW78G86DRdoSG661vqWUKpPg8zcopaYppYoD7YFhRpeDUupT4B+gEJZE96QUliOgWkDsE763JPCP1jrGWD6J5QE+9yW1je8A7yulBgBrlFLBWms5dWXD5MK1SPe0xfEETTeVpR4/gHvilyexiv1Yag0BoJTqrpRywFIvRymlHJVSpR/1HiynYg4mjOkpt+GYUqpZgqYAYCyWJ9LdVUq5AIFYHqgzEeMZCUm4iaWeGDy47T2BglrrscDURO+JVxaVE7WfBHIZ+wIsifjPhGEn8fnltda9sBSja4jlqWrChsmRhEh3lFKeWM57Oyil2mqtlyZ6yQxgurI8YvYe4KeUCsFyjr+S8f4KgLNSyldrvVwpVVMp9QmWR6pe01rHKKUOY3lozRRgFZaS3UWUUq8Bc4Epxrn8nFiKFB5TSrU11tsdyxdqJePzf9daxybYhneM2WFKqft/qTczPgcsTy4bw79HERHAD8ACpdQeoJyx3mvGvqiolFoPbAB6KaWGY7m+cj/e34A2RjXUfxJuO5ZTYpONuDYBRYA+Wuv3lFJvYblGcQHLKajBSqlSCT7zsAJXvwAAAExJREFUt0T7taZSqiaWaxuHjEnYMLm7SQghRLLkdJMQQohkSZIQQgiRLEkSQgghkiVJQgghRLIkSQghhEiWJAkhhBDJkiQhhBAiWf8HsoJH6rQsT78AAAAASUVORK5CYII=\n","text/plain":["
"]},"metadata":{"needs_background":"light"}}]}]}