{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# OPTaaS Multi-Objective\n",
"\n",
"### Note: To run this notebook, you need an API Key. You can get one here.\n",
"\n",
"OPTaaS can optimize multiple objectives within a single Task. Your scoring function should return a dictionary of scores for each objective. You can also optionally return a dictionary of variances for each objective (i.e. return a tuple of dictionaries)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define your parameters and objectives\n",
"We will use [this multi-objective optimization example](https://sop.tik.ee.ethz.ch/download/supplementary/testproblems/dtlz2/index.php#Formulation):"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"\n",
"from mindfoundry.optaas.client.parameter import FloatParameter\n",
"from mindfoundry.optaas.client.objective import Objective\n",
"from mindfoundry.optaas.client.goal import Goal\n",
"\n",
"parameters=[\n",
" FloatParameter('x1', minimum=0, maximum=1),\n",
" FloatParameter('x2', minimum=0, maximum=1)\n",
"]\n",
"\n",
"objectives = [\n",
" Objective(\"f1\", goal=Goal.max), # or goal=Goal.min as appropriate\n",
" Objective(\"f2\", goal=Goal.max) # you can also specify known_min_score and known_max_score\n",
"]\n",
"\n",
"def scoring_function(x1, x2):\n",
" g = ((x1 - 0.5) ** 2) + ((x2 - 0.5) ** 2)\n",
" x1_pi2 = x1 * math.pi / 2\n",
" f1 = ((1 + g) * math.cos(x1_pi2))\n",
" f2 = ((1 + g) * math.sin(x1_pi2))\n",
" return {\"f1\": f1, \"f2\": f2}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Connect to OPTaaS using your API Key"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from mindfoundry.optaas.client.client import OPTaaSClient\n",
"\n",
"client = OPTaaSClient('https://optaas.mindfoundry.ai', '')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create your Task"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"task = client.create_task(\n",
" title='Multi-objective Example',\n",
" parameters=parameters,\n",
" objectives=objectives,\n",
" initial_configurations=4\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run your Task\n",
"At the end we will retrieve the set of Pareto front Results. These are the Results where, for each objective, the score cannot be improved without reducing the score for another objective."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running task \"Multi-objective Example\" for 30 iterations\n",
"\n",
"Iteration: 0 Score: {'f1': 0.7071067811865476, 'f2': 0.7071067811865475}\n",
"Configuration: {'x1': 0.5, 'x2': 0.5}\n",
"\n",
"Iteration: 1 Score: {'f1': 1.0393644740751975, 'f2': 0.430518861410726}\n",
"Configuration: {'x1': 0.25, 'x2': 0.75}\n",
"\n",
"Iteration: 2 Score: {'f1': 0.43051886141072604, 'f2': 1.0393644740751975}\n",
"Configuration: {'x1': 0.75, 'x2': 0.25}\n",
"\n",
"Iteration: 3 Score: {'f1': 0.8574530376869998, 'f2': 0.5729318028014647}\n",
"Configuration: {'x1': 0.375, 'x2': 0.375}\n",
"\n",
"Iteration: 4 Score: {'f1': 4.118843994562698e-08, 'f2': 1.311068760938587}\n",
"Configuration: {'x1': 0.99999998, 'x2': 0.7471209844157051}\n",
"\n",
"Iteration: 5 Score: {'f1': 0.09592193816780585, 'f2': 1.4567384014126048}\n",
"Configuration: {'x1': 0.9581408891314421, 'x2': 0.0}\n",
"\n",
"Iteration: 6 Score: {'f1': 1.1752659197219903, 'f2': 0.5522576509385636}\n",
"Configuration: {'x1': 0.2796537691999611, 'x2': 0.0}\n",
"\n",
"Iteration: 7 Score: {'f1': 0.4164848656933371, 'f2': 1.2727990678700287}\n",
"Configuration: {'x1': 0.7986765186547115, 'x2': 0.99999998}\n",
"\n",
"Iteration: 8 Score: {'f1': 0.6372316613982189, 'f2': 1.1079497568369399}\n",
"Configuration: {'x1': 0.6677206544264276, 'x2': 0.0}\n",
"\n",
"Iteration: 9 Score: {'f1': 0.7853418846852135, 'f2': 0.9786915387002382}\n",
"Configuration: {'x1': 0.5695002799034684, 'x2': 0.99999998}\n",
"\n",
"Iteration: 10 Score: {'f1': 0.2996334146590194, 'f2': 1.3471648754563859}\n",
"Configuration: {'x1': 0.860672395860025, 'x2': 0.99999998}\n",
"\n",
"Iteration: 11 Score: {'f1': 0.27096842792228526, 'f2': 1.364096007108697}\n",
"Configuration: {'x1': 0.8751648295134814, 'x2': 0.0}\n",
"\n",
"Iteration: 12 Score: {'f1': 0.6765313066411998, 'f2': 1.0751481701020844}\n",
"Configuration: {'x1': 0.6424451308839596, 'x2': 0.99999998}\n",
"\n",
"Iteration: 13 Score: {'f1': 0.7795915234218058, 'f2': 0.9840004819662557}\n",
"Configuration: {'x1': 0.5734595718837381, 'x2': 0.0}\n",
"\n",
"Iteration: 14 Score: {'f1': 0.7788805899434732, 'f2': 0.9846551702225278}\n",
"Configuration: {'x1': 0.5739482921665194, 'x2': 0.0}\n",
"\n",
"Iteration: 15 Score: {'f1': 0.27668935894543406, 'f2': 1.3607574498971329}\n",
"Configuration: {'x1': 0.8722940463621401, 'x2': 0.99999998}\n",
"\n",
"Iteration: 16 Score: {'f1': 0.4113293194354817, 'f2': 1.2762642468118035}\n",
"Configuration: {'x1': 0.8015144651650478, 'x2': 0.0}\n",
"\n",
"Iteration: 17 Score: {'f1': 1.16208933052274, 'f2': 0.5693873859019918}\n",
"Configuration: {'x1': 0.2900378594243644, 'x2': 0.99999998}\n",
"\n",
"Iteration: 18 Score: {'f1': 0.49868273799395746, 'f2': 1.2152080249424346}\n",
"Configuration: {'x1': 0.7520923609477937, 'x2': 0.99999998}\n",
"\n",
"Iteration: 19 Score: {'f1': 0.823213807070615, 'f2': 0.9431211120917674}\n",
"Configuration: {'x1': 0.5431506072927972, 'x2': 0.0}\n",
"\n",
"Iteration: 20 Score: {'f1': 0.8270894739656314, 'f2': 0.9394209151689157}\n",
"Configuration: {'x1': 0.5404278743492107, 'x2': 0.99999998}\n",
"\n",
"Iteration: 21 Score: {'f1': 0.6831757365569862, 'f2': 1.0694969008566544}\n",
"Configuration: {'x1': 0.6381142020364394, 'x2': 0.0}\n",
"\n",
"Iteration: 22 Score: {'f1': 0.8370902299430105, 'f2': 0.9298208432046696}\n",
"Configuration: {'x1': 0.533380305465506, 'x2': 0.0}\n",
"\n",
"Iteration: 23 Score: {'f1': 0.7429468741187083, 'f2': 1.0172717043616415}\n",
"Configuration: {'x1': 0.5984235477977614, 'x2': 0.99999998}\n",
"\n",
"Iteration: 24 Score: {'f1': 0.6740670480706229, 'f2': 1.0772363132257081}\n",
"Configuration: {'x1': 0.6440471663477743, 'x2': 0.99999998}\n",
"\n",
"Iteration: 25 Score: {'f1': 0.5965258202153979, 'f2': 1.1408083469630266}\n",
"Configuration: {'x1': 0.6932782772637422, 'x2': 0.0}\n",
"\n",
"Iteration: 26 Score: {'f1': 0.30016699935835744, 'f2': 1.3468449043351842}\n",
"Configuration: {'x1': 0.8604000451071535, 'x2': 0.0}\n",
"\n",
"Iteration: 27 Score: {'f1': 0.16080975748499476, 'f2': 1.4245097056049982}\n",
"Configuration: {'x1': 0.9284363664329726, 'x2': 0.99999998}\n",
"\n",
"Iteration: 28 Score: {'f1': 0.6050539453579511, 'f2': 1.1340177648914858}\n",
"Configuration: {'x1': 0.6879766387152254, 'x2': 0.99999998}\n",
"\n",
"Iteration: 29 Score: {'f1': 0.6799645231375991, 'f2': 1.0722319646634353}\n",
"Configuration: {'x1': 0.6402093797980355, 'x2': 0.0}\n",
"\n",
"Task Completed\n",
"\n"
]
}
],
"source": [
"pareto_set = task.run(scoring_function, max_iterations=30)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plot your results"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAHjCAYAAADxD0ixAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XuclnP+x/HXt9JpHUpRzaTtQGHLTsxgI4xTSYTS+q1TTm05C1mHHHJOSCSWJYfECJVDRdwRas10UNlK5NBBSpYVSofr98dlVKSo+56rmXk9H4953N3XXHPNZ/Kw9j3f7/fzCVEUIUmSJElSaVIh6QIkSZIkSfq9DLOSJEmSpFLHMCtJkiRJKnUMs5IkSZKkUscwK0mSJEkqdQyzkiRJkqRSxzArSZIkSSp1DLOSJEmSpFLHMCtJkiRJKnUqJV3A71W7du2oYcOGSZchSZIkScqAiRMnfhFF0Q4bu6/UhdmGDRtSVFSUdBmSJEmSpAwIIXzyW+5zm7EkSZIkqdQxzEqSJEmSSh3DrCRJkiSp1Cl1Z2YlSZIkKR1WrFjBvHnzWLZsWdKllEtVq1alfv36bLXVVpv09YZZSZIkSeXSvHnz2GabbWjYsCEhhKTLKVeiKGLJkiXMmzePRo0abdIz3GYsSZIkqVxatmwZtWrVMsgmIIRArVq1NmtV3DArSZIkqdwyyCZnc//uDbOSJEmSpFLHMCtJkiRJG9GnD6RS615LpeLrm+O5554jhMDMmTN/uvbxxx/TvHlzAMaOHUv79u1/8XVjx45lu+22o2XLluy6665ccsklm1fIenTp0oWhQ4cC0K9fP7777ru0f4/NYZiVJEmSpI3Iy4POndcE2lQqfp+Xt3nPHTJkCPvvvz9PPvnk7/7a1q1bM3nyZCZPnswLL7zAW2+9tXnFbIBhVpIkSZJKofx8KCiIA+zVV8evBQXx9U21dOlS3nrrLf71r39tUpgtVq1aNXJycpg/fz4A3377Laeffjp5eXm0bNmS4cOHA/Dee++x9957k5OTwx577MHs2bPXWQUG6Nu3L9dee+06z+/fvz8LFiwgPz+f/Px8Vq1aRZcuXWjevDktWrTgzjvv3OTaN4ejeSRJkiTpN8jPh+7d4frroVevzQuyAMOGDaNt27Y0bdqU7bffnkmTJrHnnnv+7uf897//Zfbs2RxwwAEA3HjjjRx88ME89NBDfPXVV+y9994ceuih3HfffVxwwQWceOKJ/PDDD6xatYrPP/98o88///zzueOOO0ilUtSuXZuJEycyf/58pk+fDsBXX331u2tOB1dmJUmSJOk3SKVg4MA4yA4c+MsztL/XkCFDOOGEEwA44YQTGDJkyO/6+nHjxrHHHntQt25d2rdvT926dQF4+eWXueWWW8jJyeGggw5i2bJlfPrpp/zlL3/hpptu4tZbb+WTTz6hWrVqm1R348aNmTNnDueddx6jRo1i22233aTnbC5XZiVJkiRpI4rPyBZvLc7P37ytxkuWLOG1115j+vTphBBYtWoVIQT6/I6OUq1bt+aFF17g/fffZ//99+fYY48lJyeHKIp45plnaNas2Tr377bbbuyzzz68+OKLtGnThgcffJCmTZuyevXqn+75LXNfa9asybvvvsvo0aMZMGAABQUFPPTQQ7/9h08TV2YlSZIkaSMKC9cNrsVnaAsLN+15Q4cO5ZRTTuGTTz7h448/Zu7cuTRq1Ig333zzdz+radOmXH755dx6660AtGnThrvvvpsoigCYPHkyAHPmzKFx48acf/75HH300UydOpU6deqwaNEilixZwvLly3nhhRfW+z222WYbvvnmGwC++OILVq9eTceOHbn++uuZNGnSpvwVbDbDrNIqUy3LJUmSpCT17PnLFdj8/Pj6phgyZAjHHnvsOtc6duzIE088sUnP69atG2+88QYfffQRvXr1YsWKFeyxxx40b96cXr16AfDUU0/RvHlzcnJymDlzJqeccgpbbbUVV199Nfvssw/t27dn1113Xe/zu3btyhFHHEF+fj7z58/noIMOIicnhy5dunDzzTdvUs2bKxSn9dIiNzc3KioqSroM/Yri7RfD7lvIfkfXIvXmVmnp9CZJkiSl24wZM9htt92SLqNcW98/gxDCxCiKcjf2tZ6ZVVoVb7f4ts2ZLKswju+ig3nz7DY0a9gGaJR0eZIkSZLKCLcZK+3y82HRcd14ZPkJtKo2mWb9ukPjxtC0KZx7Ljz/PCxdmnSZkiRJkkoxw6zSLpWCi15tz/xe99O00kdMGDQT7roLdtkFHn4Yjj4att8+Tr233AKTJ8NaHdQkSZIkaWMMs0qrtVuW9+4NBU8HjrqkGakW58OLL8KXX8KYMXDhhfGfL78c9twT6tWDk0+Gxx+HRYuS/jEkSZIkbeEMs0qrjbYsr1IFDjkkbm/87ruwYAEMGhRfGzUqDrR16sQB9/LLYexY+OGHhH4aSZIkSVsquxlry7F6dbzlePTo+OPtt2HlSvjDH+JU3KZN/LHzzhBC0tVKkiSplLObcfI2p5uxK7PaclSoAHvtBVdcAa+/DkuWwLBhcMop8J//wHnnxU2kmjSB7t3jz/3vf0lXLUmSJG2SihUrkpOTQ/PmzTn++OP57rvv0vLcQYMGsWDBgt/1NV26dKFRo0bk5OSQk5ND//7901LL2LFjefvtt9PyrJ8zzGrLte220KED3HsvfPghzJ4N99wDzZvDY4/BscdCrVpwwAFw441QVGQjKUmSJJUa1apVY8qUKUyfPp3KlStz3333/eavXbVq1a9+blPCLMBtt93GlClTmDJlCueff/7v+p6/JpNh1jmzKj123jn+OOec+Bzt22+v2ZJ81VXxR61acNhh8Xbkww+HrKykq5YkSVJpcOGFMGVKep+ZkwP9+v2mW1u3bs3UqVMBOOaYY5g7dy7Lli3jggsuoGvXrgBsvfXW9OjRg9GjR3P77bdTrVo1evTowdKlS6lduzaDBg3irbfeoqioiBNPPJFq1aoxfvx43n77bS655BJWrlxJXl4eAwcOpEqVKr+prp9/z+XLl6/3WQ0bNuTUU0/l+eefZ8WKFTz99NNUrVqV++67j4oVK/L4449z991307p16037u1wPV2ZVOlWuDAcdBDffDJMmweefx52Q27WLWyqfdhpkZ8Mee8Cll8YdlJctS7pqSZIk6RdWrlzJyJEjadGiBQAPPfQQEydOpKioiP79+7NkyRIAvv32W5o3b86///1v9tlnH8477zyGDh3KxIkTOf3007nyyivp1KkTubm5DB48mClTphBCoEuXLjz11FNMmzaNlStXMnDgwPXWcemll/60zXjatGm/+J65ubkbfFbt2rWZNGkS3bt3p2/fvjRs2JBu3bpx0UUXMWXKlLQGWXBlVmXFjjvCiSfGH6tXw9Spa1Zt77oL+vaFatXiAFzcSKpZMwiBPn0gL29NB2aI83BhIfTsmdhPJEmSpJL0G1dQ0+n7778nJycHiFdmzzjjDAD69+/Pc889B8DcuXOZPXs2tWrVomLFinTs2BGAWbNmMX36dA477DAg3gJcr169X3yPWbNm0ahRI5o2bQrAqaeeyoABA7jwwgt/ce9tt91Gp06d1rn28++5oWcdd9xxAOy11148++yzm/E389sYZlX2VKgQb+nIyYHLLoOlS+MRP8XhduTI+L4GDaBNG9plHU6HTofy4NAa5OevOytXkiRJypTiM7NrGzt2LGPGjGH8+PFUr16dgw46iGU/7jCsWrUqFStWBCCKIv70pz8xfvz4DX6PzZ1e8/PvuSHFW5crVqzIypUrN+v7/hZuM1bZt/XW0L493H03vP8+zJkDAwfGs2yffJLm1x3PB1/V4g+Ht2JM/o1cc9w0Cp6K1lmplSRJkkrC119/Tc2aNalevTozZ85kwoQJ672vWbNmLF68+Kcwu2LFCt577z0AttlmG7755hsAdt11Vz7++GM++OADAB577DEOPPDATaptU561di3pZphV+dOoEXTrBs89F4//GTeOcMUVZO+wgkPHXsUbX+1B/plN4iYAr70GK1YkXbEkSZLKibZt27Jy5Ur22GMPevXqxb777rve+ypXrszQoUO57LLL+POf/0xOTs5PXYO7dOlCt27dyMnJIYoiHn74YY4//nhatGhBhQoV6Nat2ybVVrVq1d/9rKOOOornnnuOnJwcxo0bt0nf99eEzV12Lmm5ublRUVFR0mWojCneWnzpSZ+x8MHnuaL5CGpPHgPLl0ONGnFjqaOPhrZtYbvtki5XkiRJaTBjxgx22223pMso19b3zyCEMDGKotyNfa0rsyr31j4j2/POehw1oiu7ffACrz+7BJ59Fo45Bl5+GU44AXbYIR75c8898OmnSZcuSZIklVuGWZV7hYVxkC0+I5ufH7//9/Q/wLHHwsMPw8KFMG5cvPX400/hvPPgj3+Eli3hmmtg4kQoZbscJEmSpNLMbcbSppg1C0aMiD/efjseB5SdHW9FPvroOBH/xkHUkiRJSsaMGTPYddddCSEkXUq5FEURM2fOdJuxVKKaNYNLL41XaxcujFdv994bHnkEjjgCateG44+Hxx6DL79MulpJkiStR9WqVVmyZMlmj6/R7xdFEUuWLKFq1aqb/IyMrcyGEB4C2gOLoihqvoH78oAJwF+jKBq6see6Mqst2rJl8Oqra1ZtFy6EihVh//3XrNruvHPSVUqSJIl4nM28efN+muOqklW1alXq16/PVltttc7137oym8kwewCwFHj018JsCKEi8Aqw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\n",
"text/plain": [
"