{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example on the usage of NIMBUS\n",
    "This notebook will go through a simple example to illustrate how the synchronous variant of NIMBUS has been implemented in the DESDEO framework.\n",
    "\n",
    "We will be solving the Kursawe function originally defined in [this article](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.8050&rep=rep1&type=pdf).\n",
    "\n",
    "Let us begin by importing some libraries and defining the problem."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from desdeo_problem.problem import MOProblem\n",
    "from desdeo_problem.problem import variable_builder\n",
    "from desdeo_problem.problem import _ScalarObjective\n",
    "\n",
    "def f_1(xs: np.ndarray):\n",
    "    xs = np.atleast_2d(xs)\n",
    "    xs_plusone = np.roll(xs, 1, axis=1)\n",
    "    return np.sum(-10*np.exp(-0.2*np.sqrt(xs[:, :-1]**2 + xs_plusone[:, :-1]**2)), axis=1)\n",
    "\n",
    "def f_2(xs: np.ndarray):\n",
    "    xs = np.atleast_2d(xs)\n",
    "    return np.sum(np.abs(xs)**0.8 + 5*np.sin(xs**3), axis=1)\n",
    "\n",
    "\n",
    "varsl = variable_builder(\n",
    "    [\"x_1\", \"x_2\", \"x_3\"],\n",
    "    initial_values=[0, 0, 0],\n",
    "    lower_bounds=[-5, -5, -5],\n",
    "    upper_bounds=[5, 5, 5],\n",
    ")\n",
    "\n",
    "f1 = _ScalarObjective(name=\"f1\", evaluator=f_1)\n",
    "f2 = _ScalarObjective(name=\"f2\", evaluator=f_2)\n",
    "\n",
    "problem = MOProblem(variables=varsl, objectives=[f1, f2], ideal=np.array([-20, -12]), nadir=np.array([-14, 0.5]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To check out the problem, let us compute a representation of the Pareto optimal front of solutions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from desdeo_mcdm.utilities.solvers import solve_pareto_front_representation\n",
    "\n",
    "p_front = solve_pareto_front_representation(problem, step=1.0)[1]\n",
    "\n",
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can get to the NIMBUS part. Let us define an instance of the NIMBUS method utilizing our problem defined earlier, and start by invoking the instance's `start` method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "from desdeo_mcdm.interactive.NIMBUS import NIMBUS\n",
    "\n",
    "method = NIMBUS(problem, \"scipy_de\")\n",
    "\n",
    "classification_request, plot_request = method.start()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us look at the keys in the dictionary contained in the `classification_request`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['message', 'objective_values', 'classifications', 'levels', 'number_of_solutions'])\n"
     ]
    }
   ],
   "source": [
    "print(classification_request.content.keys())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Message should give us some more information:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Please classify each of the objective values in one of the following categories:\n",
      "\t1. values should improve '<'\n",
      "\t2. values should improve until some desired aspiration level is reached '<='\n",
      "\t3. values with an acceptable level '='\n",
      "\t4. values which may be impaired until some upper bound is reached '>='\n",
      "\t5. values which are free to change '0'\n",
      "Provide the aspiration levels and upper bounds as a vector. For categories 1, 3, and 5,the value in the vector at the objective's position is ignored. Supply also the number of maximumsolutions to be generated.\n"
     ]
    }
   ],
   "source": [
    "print(classification_request.content[\"message\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We should therefore classify each of the objectives found behind the `objective_values` -key in the dictionary in `classification_request.content`. Let's print them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-15.67493201  -7.67493202]\n"
     ]
    }
   ],
   "source": [
    "print(classification_request.content[\"objective_values\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Instead of printing the values, we could have also used the `plot_request` object. However, we are inspecting only one set of objective values for the time being, so a raw print of the values should be enough. Let us classify the objective values next. We can get a hint of what the classification should look like by inspecting the value found using the `classifications` -key in `classification_request.content`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[None]\n"
     ]
    }
   ],
   "source": [
    "print(classification_request.content[\"classifications\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Therefore it should be a list. Suppose we wish to improve (decrease in value) the first objective, and impair (increase in value) the second objective till some upper bound is reached. We should define our preferences as a dictionary `classification_request.response` with the keys `classifications` and `number_of_solutions` (we have to define the number of new solutions we wish to compute). The key `levels` will contain the upper bound for the second objective."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\n",
    "    \"classifications\": [\"<\", \">=\"],\n",
    "    \"number_of_solutions\": 3,\n",
    "    \"levels\": [0, -5]\n",
    "}\n",
    "classification_request.response = response"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To continue, just feed `classification_request` back to the method through the `step` method:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "save_request, plot_request = method.iterate(classification_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We got a new request as a response. Let us inspect it:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['message', 'solutions', 'objectives', 'indices'])\n",
      "Please specify which solutions shown you would like to save for later viewing. Supply the indices of such solutions as a list, or supply an empty list if none of the shown solutions should be saved.\n",
      "[array([-16.66436223,  -5.00892336]), array([-1.99999999e+01,  1.21120356e-06]), array([-18.47503268,  -1.82299996])]\n"
     ]
    }
   ],
   "source": [
    "print(save_request.content.keys())\n",
    "print(save_request.content[\"message\"])\n",
    "print(save_request.content[\"objectives\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose the first and last solutions result in nice objective values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"indices\": [0, 2]}\n",
    "save_request.response = response\n",
    "\n",
    "intermediate_request, plot_request = method.iterate(save_request)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['message', 'solutions', 'objectives', 'indices', 'number_of_desired_solutions'])\n",
      "Would you like to see intermediate solutions between two previously computed solutions? If so, please supply two indices corresponding to the solutions.\n"
     ]
    }
   ],
   "source": [
    "print(intermediate_request.content.keys())\n",
    "print(intermediate_request.content[\"message\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We do not desire to see intermediate results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"number_of_desired_solutions\": 0, \"indices\": []}\n",
    "intermediate_request.response = response\n",
    "\n",
    "preferred_request, plot_request = method.iterate(intermediate_request)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['message', 'solutions', 'objectives', 'index', 'continue'])\n",
      "Please select your most preferred solution and whether you would like to continue. \n"
     ]
    }
   ],
   "source": [
    "print(preferred_request.content.keys())\n",
    "print(preferred_request.content[\"message\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We should select our most preferred solution. Let us plot the objective values to inspect them better:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "for i, z in enumerate(preferred_request.content[\"objectives\"]):\n",
    "    plt.scatter(z[0], z[1], label=f\"solution {i}\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Solutions at indices 0 and 2 seem to be overlapping in the objective space. We decide to select the solution at index 1, and to continue the iterations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"index\": 1, \"continue\": True}\n",
    "preferred_request.response = response\n",
    "\n",
    "classification_request, plot_request = method.iterate(preferred_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Back at the classification phase of the NIMBUS method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\n",
    "    \"classifications\": [\">=\", \"<\"],\n",
    "    \"number_of_solutions\": 4,\n",
    "    \"levels\": [-16, -1]\n",
    "}\n",
    "classification_request.response = response\n",
    "\n",
    "save_request, plot_request = method.iterate(classification_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us plot some of the solutions again:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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lAodDQ623PwSBs1aRddpyxg0a1VAvukmJSVRUFBAYWEhTZs25YUX/OuVW1FR4XVefYJDfn4+AAUFBdxwww015lVWVnpaxSdPwaFd86Y08dGM5yujq1Iq8mhwwPNDbB5avDWgTSGDBw9m586dLF26lP79+5ORkcHw4cP58ccfAcjJyeHmm29m0KBB3HzzzRw8eJDrrruOSy+9lEsvvZQ1a9awe/duXnjhBebMmUN6ejqff/45u3fvZtiwYfTq1YurrrqKPXv21NjvgQMHuOmmm9iwYQPp6ens2rWLlJQUpk6dSp8+fVi4cCFvv/02aWlp9OzZk6lTp1av27JlSx5++GF69+7NgAED+PHHH1m7di1LliwhOzu7ensOye28Z231ldFVKRV5NDjg+SE2ZeWVAWsKqaio4IMPPiAtLY3LL7+c9evXk5+fz8SJE3nyySerl9u2bRsrV67k7bff5v7772fKlCls2LCBd999l9tvv52UlBTuuusupkyZQkFBAYMHD+bee+/l1ltvZcuWLdx4443cd999NfZ93nnn8be//Y3BgwdTUFDARRddBMC5557Lpk2bGDJkCFOnTmXVqlUUFBSwYcMGcnNzATh58iQDBgxg8+bNDBkyhJdffpmBAwcyZswYZs+eXWN7YNUezm3RFNf6Q1JCnGZ0VSrKNNpxDnXhrcmjoU0hZWVlpKenA1bN4fe//z07duzghhtuYP/+/Zw5c4auXbtWLz9mzBiSkqxv2CtXrqzRdHPs2DFOnDjhto9169axePFiAG6++WYefPBBv8rmaF7asGEDV1xxBY7khTfeeCOfffYZWVlZNG3alGuvvRaAvn37smLFilq3m9yuOT+0SCC5bZLmXlIqimlwwGryKPEQCBraFOK45+Ds3nvv5d/+7d8YM2YMq1evJicnp3peixYtqv+uqqpi/fr1JCb6vtFbX8778iYhIaG6O3BcXJzPeyHOmjeNZ820YQ0qn1IqvLRZCeshNkkJNZ9TEKymkKNHj5KcbH2Lfv31170uN2LECJ599tnq144g06pVK44fP149feDAgcyfPx+AefPmMXjw4DqVp1+/fnz66accOnSIyspK3n77bYYOHepzHdcy+CsYN/2VUsGhwQEry+gT49NIbpuEAMltk3hifFpQmkJycnKYMGECffv2pX379l6Xe+aZZ8jLy6NXr1706NGj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a6hw0eAAjLpwFDkDc+jYoiOC0LFFR3IG5jDqwlEB28cDDzxQo9dSTk4OEyZMoG/fvrRvf/ZJqI8++iifffYZqampLF68mC5d9GZlrPL02FFHeg2tQahgi6iU3fWlKbsji773gdF12jKPGV0BkhKasP3x34S0PKrx8ZWyW2sOSkWo2tJraO1BBZMGB6UiVG3pNaYsKNAAoYJGg4NSEaq29BoGyF60WQOECgoNDkpFsNrSa5RXGmYv3xGi0qhYosFBqQjmT3I+X8+FUKq+NDgoFeFqqz34unGtVH1pcIgQV1xxBa7dcV3l5uaybdu26tePPPIIK1euDMj+n3jiCS6++GK6devG8uXLA7JNFRi+kvMlxEmtN66Vqg8NDrajS5fyzbCr2N69B98Mu4qjS5eGu0huXIPDjBkzGD58eIO3u23bNubPn09RUREffvghd999N5WVlbWvqEJmZlYaT9+QTtuks4n42jVPYPZve+uzplVQaHDACgz7//MRKvbtA2Oo2LeP/f/5SIMCxMmTJxk1ahS9e/emZ8+eLFiwAICPP/6YjIwM0tLSuO222zh9+rTbuo7U3ACLFi1i0qRJrF27liVLlpCdnU16ejq7du1i0qRJLFq0yOd2U1JSePTRR+nTpw9paWl89dVXbvt7//33mThxIs2aNaNr165cfPHFfPnll/U+dhUcWRnJFDw6gt2zRrF71ijyHxkBaO4lFRxeg4OIpInIehHZKyIviUg7p3mN6spxYM7TGJfEd+bUKQ7Mebre2/zwww/p1KkTmzdvprCwkKuvvppTp04xadIkFixYwNatW6moqOD555/3a3sDBw5kzJgxzJ49m4KCAi666KLqebVtt3379mzatIk//OEPPPXUU27bLikp4fzzz69+3blzZ0pK9CIT6XLzSzT3kgoaXzWH54EcIA34GvhCRBxXpEaVZL5i//46TfdHWloaK1asYOrUqXz++ee0adOGHTt20LVrVy655BIAbr31Vj777LN678Ohtu2OHz8egL59+7J79+4G709FBs29pILJV3BobYz50BhTaox5CrgH+FBEBoDXlC8BISL3ishXIlIkIk8Gc18A8R071mm6Py655BI2bdpEWloa06dPZ8aMGX6vKyLVf9c1lbcnzZo1AyAuLs7jY0WTk5PZu3dv9evi4uLqjLEqcvnqwpq9sCBo+83NL9Gm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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "for i, z in enumerate(save_request.content[\"objectives\"]):\n",
    "    plt.scatter(z[0], z[1], label=f\"solution {i}\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "NIMBUS really took to heart our request to detoriate the first objective... Suppose we like all of the solutions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"indices\": [0, 1, 2, 3]}\n",
    "save_request.response = response\n",
    "\n",
    "intermediate_request, plot_request = method.iterate(save_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us plot everything we have so far:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "for i, z in enumerate(intermediate_request.content[\"objectives\"]):\n",
    "    plt.scatter(z[0], z[1], label=f\"solution {i}\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assume we really like what we have between solutions 3 and 4. Let NIMBUS compute 3 intermediate solutions between them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\n",
    "    \"indices\": [3, 4],\n",
    "    \"number_of_desired_solutions\": 3,\n",
    "    }\n",
    "intermediate_request.response = response\n",
    "\n",
    "save_request, plot_request = method.iterate(intermediate_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the intermediate solutions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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G8a331a/yOyCBQtYvHhxpeY5dOgQ/fr1Izs7m+nTp1c7hvz8fD766KPKzbOqkLGvrS5TXmPsa6vV/0EkSSk5xFHDhg0pKChg3bp11K9fnyefjK7A7JEjR8KOq0pyWLVqFQAFBQVcc801ZcYdPXo01CwRVSU55M1aT/Gxso/mKD7m1HtaJEkpOfjyVxXSe+J82t01h94T58f8G22fPn349NNPmT17Nr169SInJ4d+/frx1VdfAZCXl8f1119P7969uf7669m5cydXXnklZ599NmeffTYffvghX3zxBU8++SSTJ08mOzubRYsW8cUXX3DxxRfTpUsXLrnkEjZv3lxmvTt27GDEiBEsW7aM7OxsNm3aRNu2bRk3bhzdunXjtdde45VXXiErK4uzzjqLcePGlc7buHFj7rnnHrp27co555zDV199xeLFi5k1axZjx44tXV409hQVhxxeVHxMxflEkpCSA6Erit49c23MEsSRI0d46623yMrK4vzzz2fp0qWsWrWK4cOH89BDD5VO99FHHzFv3jxeeeUVbr/9dsaMGcOyZct4/fXX+elPf0rbtm25+eabGTNmDAUFBfTp04dbb72VG264gTVr1nDddddx2223lVn3ySefzDPPPEOfPn0oKCigffv2AJx00kmsXLmSvn37Mm7cOObPn09BQQHLli0jPz8fgAMHDnDOOeewevVq+vbty9NPP815553H4MGDmTRpUpnlVcdUFecTSTq1ukE6WqEqihYVH2XS3I3VajAtKioiOzsb8M4cfvKTn7Bx40auueYatm/fzuHDh2nXrl3p9IMHD6ZhQ6+z2Lx588pcuvn3v//N/v37y61jyZIlzJw5E4Drr7+eO++8M6rYSi4vLVu2jAsvvJCS53Bfd911LFy4kNzcXOrXr8/ll18OQPfu3Xn33Xcr+Q58p9nx6XzzbeizBwfVfq9FJLaUHAhf2qG6JR9K2hwC3XrrrfzqV79i8ODBLFiwgLy8vNJxjRo1Kv372LFjLF26lIyMjGrFEE7gusJJT08vvfsoLS0tYltIRe4b1JnR0wvCjld5DZHkostKhC/tEI+SD3v37iUz0/uG/MILL4Sdrn///jz22GOlr0uSTJMmTdi3b1/p8PPOO49p06YBMHXqVPr06VOpeHr27MkHH3zArl27OHr0KK+88goXXHBBxHmCY4hGbk4mI845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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "for i, z in enumerate(save_request.content[\"objectives\"]):\n",
    "    plt.scatter(z[0], z[1], label=f\"solution {i}\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nice, we are really getting there, even if we have no goal set... Let us save solution 1:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"indices\": [1]}\n",
    "save_request.response = response\n",
    "\n",
    "intermediate_request, plot_request = method.iterate(save_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We do not wish to generate any more intermediate solutions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\"number_of_desired_solutions\": 0, \"indices\": []}\n",
    "intermediate_request.response = response\n",
    "\n",
    "preferred_request, plot_request = method.iterate(intermediate_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us plot everything we have, and select a final solution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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FkZkZCQvvPBCpdTaJSUl9O/f323K7jZt2tCvXz9OnjwJWCm7J0yYwHPPPVfREA14vF53PvnkEzp27EiXLl283melQtnTacn0O78l9x48QEl09QDhy8O/QlFAU3b7i6bsDi567FUoe+fAUR7avrfSc+Vjw8TnZ7wEI3cpu7XmoJRSDsoDwLSd+8k7U0xCdCRTusRb0ze/zen/PUZMwQH2lbXilahbSRl1d4PMxaTBQSmlqvh5u5bVawmb36bk3YnElVqdRDqEHebh4n8wZUER67//BU+nJQegpHVHG6SVUsoTK54korRy78E4KSI94u0GOVhOg4NSSnnieK7Tye3lCAYaXDZXDQ5KKeWJZh2cTt5nWlm/G1g2V21zUEopTwx7jJJ3J1a6tXTaRPFMyU2A60Gzc15eT88dp2iL8AOGLV0bMX6C0w5CQUVrDkEikCm7i4uLueOOO0hOTqZ79+5MmzbN53Uq1eD0uomI6/7GscjzKDNCbllrHim+iyVll7gcNDvn5fUM2XGadoQRhtCOMIbsOM2cl93/rwcDrTmU2/w2rHjSuq/YrAMMewx63RToUlWSmZnJNddcQ48ePQBqlZLDnQULFnDmzBlycnI4ffo0PXr04JZbbiExMdEv61eqweh1Ey163URmVl7FoNkEN4Nme+44RWyVa/BYhJ47TtVXib2mNQewAsPS38HxvYCxfi/9nTXdS6GUsltEOHXqFCUlJRQUFBAVFUXTpk293nelGrrybK67po9izSNXuhzn0LZavlf304OJBgewagzFVRqTigus6V4KpZTdN954I40aNSI+Pp5OnTrx0EMP0bJlwxoJqlQg/IDzDBSupgcTDQ7gsouay+keCKWU3V9++SXh4eHs27ePXbt28Ze//IWdO3f6XC6lznVbujaioEogKLAbpYNdQIKDiIwRka0iUiYi/Rym/1RENohIjv37yjotyOmjcHArNG7rfL6LrmueCKWU3f/5z3+46qqriIyMpG3btgwZMqTGxnGlVM3GT+jHmq5xHKCMMgwHKGNN1zjtreTGFuAGoOpl82HgWmNMMnAH8EadleD0UattobQI+t8FEdGV50fGWo3SXgqllN2dOnVi5cqVgNVWsnbtWi666KJa7a9SyrnxE/rRb/pldJp+Kf2mXxYSgQEC1FvJGLMNKl8h29OzHF5uBWJFJNoYU73V1lcn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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "for i, z in enumerate(preferred_request.content[\"objectives\"]):\n",
    "    plt.scatter(z[0], z[1], label=f\"solution {i}\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We REALLY like solution 6, so let us go with that:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "response = {\n",
    "    \"index\": 6,\n",
    "    \"continue\": False,\n",
    "    }\n",
    "\n",
    "preferred_request.response = response\n",
    "\n",
    "stop_request, plot_request = method.iterate(preferred_request)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are done, let us bask in the glory of the solution found:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final decision variables: [-1.02602425 -1.09914614 -1.09961167]\n"
     ]
    },
    {
     "data": {
      "image/png": "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vUZTe6KcJIeKlURSVLguJSq712gq7R8a6sQTTww7fNy4ccybN69eyywqKuKhhx5qSFhpQclBJEXV1L2GSDwpOYikqJq612h0Vw/rX4CZPaGotfd3/QsxW7RzjltvvZVu3boxZMgQdu/eXTVu9erVXHTRRfTt25dhw4axa9cuAB5//HHOPfdcevfuzVVXXRWThwWlEyUHkRRVU9cRE+eWNp4Esf4FWHQb7N8OOO/vottiliAWLFjA5s2beeedd3j66aernuZWUVHB+PHjmTdvHqtXr+bGG2/knnvuAeDKK69k1apVrFu3jnPOOYff/e53MYklXahCWiRFFebncM+CDRG713DApHnrqqZNa6/+HCqCitEqyr3hva5u8OKXL1/OtddeS0ZGBh07duSSSy4BYPPmzWzcuJHvfve7gPdktg4dOgCwceNGpk6dyr59+zhw4ADDhg1rcBzpRMlBJIXV1L1GxRHXoGcepIz9O+o2PEacc/To0YO33347ZNy4ceMoLi6md+/ePPnkkyxbtiyusaQaFSuJpLDC/JyIracrNeSZBymjVae6Da+jCy+8kLlz53LkyBF27drF66+/DkC3bt3Ys2dPVXKoqKhg06ZNAHz55Zd06NCBiooK5syZE5M40omSg0iKe+CK6G0aYv3Mg6QYfC9kBm1HZrY3PAauuOIKvvWtb9G9e3euv/56zj//fACaN2/OvHnzmDx5Mr179yYvL6+qPuIXv/gF/fv3Z+DAgXz729+OSRzpRF12i6SBqcUbeHbltpDhmRnGjB/0Tslipbp22c36F7w6hv07vCuGwffGpL5BPOqyW6QRmlaYS0HnthQt3FTVjXebEzK5b0SPlEwM9dLraiWDFKLkIJImwj3voHhtmfpekriIWOdgZrlmttLMtpvZY2bWJmDc3xMTnohEUtn3Utm+chzH+l5qSs+elviJViH9G6AIyAXeB/5qZmf549TJvEiSqe8liadoyeEk59zLzrl9zrmHgFuBl83sPLxjMG7MbLyZvWdmm8zswXiuSyRdRbuFddKLpXFbb2VRVte7FzNw+mtKRI1UtORw1MxaVb5xzr0OXAU8A3SOV0Bm9h3gcqC3c64H0Pi7PxSph2i3sFYchTGPhzbsaqhwRVlT5m9QgmiEoiWHXOAcM5tQOcA5tx4YDMyPY0w/BqY7577217m7hulFmqSa+l56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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(f\"Final decision variables: {stop_request.content['solution']}\")\n",
    "\n",
    "plt.scatter(p_front[:, 0], p_front[:, 1], label=\"Pareto front\")\n",
    "plt.scatter(problem.ideal[0], problem.ideal[1], label=\"Ideal\")\n",
    "plt.scatter(problem.nadir[0], problem.nadir[1], label=\"Nadir\")\n",
    "plt.scatter(stop_request.content[\"objective\"][0], stop_request.content[\"objective\"][1], label=f\"final solution\")\n",
    "plt.xlabel(\"f1\")\n",
    "plt.ylabel(\"f2\")\n",
    "plt.title(\"Approximate Pareto front of the Kursawe function\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "file_extension": ".py",
  "kernelspec": {
   "display_name": "desdeo-mcdm3.9",
   "language": "python",
   "name": "desdeo-mcdm3.9"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  },
  "metadata": {
   "interpreter": {
    "hash": "a64a766d34c1f81dfdeae075f580a2266bf3793db6f1b55cd7e5e28ef9dd24fc"
   }
  },
  "mimetype": "text/x-python",
  "name": "python",
  "npconvert_exporter": "python",
  "pygments_lexer": "ipython3",
  "version": 3
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
