diff --git a/EvoloPy.ipynb b/EvoloPy.ipynb
index 9832bc4..06d76c7 100644
--- a/EvoloPy.ipynb
+++ b/EvoloPy.ipynb
@@ -1,1992 +1,2006 @@
{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "name": "EvoloPy.ipynb",
- "provenance": [],
- "collapsed_sections": [],
- "include_colab_link": true
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "widgets": {
- "application/vnd.jupyter.widget-state+json": {
- "3a32992a7be9497c949bc06a2e838a1d": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DropdownModel",
- "state": {
- "_options_labels": [
- "2020-05-15-13-41-36"
- ],
- "_view_name": "DropdownView",
- "style": "IPY_MODEL_3633a55c7efe490784594bad5694800d",
- "_dom_classes": [],
- "description": "Select folder:",
- "_model_name": "DropdownModel",
- "index": 0,
- "_view_module": "@jupyter-widgets/controls",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "disabled": false,
- "_view_module_version": "1.5.0",
- "description_tooltip": null,
- "_model_module": "@jupyter-widgets/controls",
- "layout": "IPY_MODEL_75acaa0a501744f7817d0864462e8a7e"
- }
- },
- "3633a55c7efe490784594bad5694800d": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DescriptionStyleModel",
- "state": {
- "_view_name": "StyleView",
- "_model_name": "DescriptionStyleModel",
- "description_width": "",
- "_view_module": "@jupyter-widgets/base",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "_view_module_version": "1.2.0",
- "_model_module": "@jupyter-widgets/controls"
- }
- },
- "75acaa0a501744f7817d0864462e8a7e": {
- "model_module": "@jupyter-widgets/base",
- "model_name": "LayoutModel",
- "state": {
- "_view_name": "LayoutView",
- "grid_template_rows": null,
- "right": null,
- "justify_content": null,
- "_view_module": "@jupyter-widgets/base",
- "overflow": null,
- "_model_module_version": "1.2.0",
- "_view_count": null,
- "flex_flow": null,
- "width": null,
- "min_width": null,
- "border": null,
- "align_items": null,
- "bottom": null,
- "_model_module": "@jupyter-widgets/base",
- "top": null,
- "grid_column": null,
- "overflow_y": null,
- "overflow_x": null,
- "grid_auto_flow": null,
- "grid_area": null,
- "grid_template_columns": null,
- "flex": null,
- "_model_name": "LayoutModel",
- "justify_items": null,
- "grid_row": null,
- "max_height": null,
- "align_content": null,
- "visibility": null,
- "align_self": null,
- "height": null,
- "min_height": null,
- "padding": null,
- "grid_auto_rows": null,
- "grid_gap": null,
- "max_width": null,
- "order": null,
- "_view_module_version": "1.2.0",
- "grid_template_areas": null,
- "object_position": null,
- "object_fit": null,
- "grid_auto_columns": null,
- "margin": null,
- "display": null,
- "left": null
- }
- },
- "e4a83005aaa043d48540b6f4202070e5": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DropdownModel",
- "state": {
- "_options_labels": [
- "convergence-F4.png",
- "convergence-F3.png"
- ],
- "_view_name": "DropdownView",
- "style": "IPY_MODEL_641b5f943c8e419583baaf02485acffb",
- "_dom_classes": [],
- "description": "Select plot:",
- "_model_name": "DropdownModel",
- "index": 0,
- "_view_module": "@jupyter-widgets/controls",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "disabled": false,
- "_view_module_version": "1.5.0",
- "description_tooltip": null,
- "_model_module": "@jupyter-widgets/controls",
- "layout": "IPY_MODEL_45a8720657764f1585859c3d3dae8745"
- }
- },
- "641b5f943c8e419583baaf02485acffb": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DescriptionStyleModel",
- "state": {
- "_view_name": "StyleView",
- "_model_name": "DescriptionStyleModel",
- "description_width": "",
- "_view_module": "@jupyter-widgets/base",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "_view_module_version": "1.2.0",
- "_model_module": "@jupyter-widgets/controls"
- }
- },
- "45a8720657764f1585859c3d3dae8745": {
- "model_module": "@jupyter-widgets/base",
- "model_name": "LayoutModel",
- "state": {
- "_view_name": "LayoutView",
- "grid_template_rows": null,
- "right": null,
- "justify_content": null,
- "_view_module": "@jupyter-widgets/base",
- "overflow": null,
- "_model_module_version": "1.2.0",
- "_view_count": null,
- "flex_flow": null,
- "width": null,
- "min_width": null,
- "border": null,
- "align_items": null,
- "bottom": null,
- "_model_module": "@jupyter-widgets/base",
- "top": null,
- "grid_column": null,
- "overflow_y": null,
- "overflow_x": null,
- "grid_auto_flow": null,
- "grid_area": null,
- "grid_template_columns": null,
- "flex": null,
- "_model_name": "LayoutModel",
- "justify_items": null,
- "grid_row": null,
- "max_height": null,
- "align_content": null,
- "visibility": null,
- "align_self": null,
- "height": null,
- "min_height": null,
- "padding": null,
- "grid_auto_rows": null,
- "grid_gap": null,
- "max_width": null,
- "order": null,
- "_view_module_version": "1.2.0",
- "grid_template_areas": null,
- "object_position": null,
- "object_fit": null,
- "grid_auto_columns": null,
- "margin": null,
- "display": null,
- "left": null
- }
- },
- "91e278780d5b4dcda11e832e971044f3": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DropdownModel",
- "state": {
- "_options_labels": [
- "boxplot-F3.png",
- "boxplot-F4.png"
- ],
- "_view_name": "DropdownView",
- "style": "IPY_MODEL_c1b161beed5c4b128b06a09d7a5be2fe",
- "_dom_classes": [],
- "description": "Select plot:",
- "_model_name": "DropdownModel",
- "index": 1,
- "_view_module": "@jupyter-widgets/controls",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "disabled": false,
- "_view_module_version": "1.5.0",
- "description_tooltip": null,
- "_model_module": "@jupyter-widgets/controls",
- "layout": "IPY_MODEL_b08d8ae9147047acac84d9e52bfee64f"
- }
- },
- "c1b161beed5c4b128b06a09d7a5be2fe": {
- "model_module": "@jupyter-widgets/controls",
- "model_name": "DescriptionStyleModel",
- "state": {
- "_view_name": "StyleView",
- "_model_name": "DescriptionStyleModel",
- "description_width": "",
- "_view_module": "@jupyter-widgets/base",
- "_model_module_version": "1.5.0",
- "_view_count": null,
- "_view_module_version": "1.2.0",
- "_model_module": "@jupyter-widgets/controls"
- }
- },
- "b08d8ae9147047acac84d9e52bfee64f": {
- "model_module": "@jupyter-widgets/base",
- "model_name": "LayoutModel",
- "state": {
- "_view_name": "LayoutView",
- "grid_template_rows": null,
- "right": null,
- "justify_content": null,
- "_view_module": "@jupyter-widgets/base",
- "overflow": null,
- "_model_module_version": "1.2.0",
- "_view_count": null,
- "flex_flow": null,
- "width": null,
- "min_width": null,
- "border": null,
- "align_items": null,
- "bottom": null,
- "_model_module": "@jupyter-widgets/base",
- "top": null,
- "grid_column": null,
- "overflow_y": null,
- "overflow_x": null,
- "grid_auto_flow": null,
- "grid_area": null,
- "grid_template_columns": null,
- "flex": null,
- "_model_name": "LayoutModel",
- "justify_items": null,
- "grid_row": null,
- "max_height": null,
- "align_content": null,
- "visibility": null,
- "align_self": null,
- "height": null,
- "min_height": null,
- "padding": null,
- "grid_auto_rows": null,
- "grid_gap": null,
- "max_width": null,
- "order": null,
- "_view_module_version": "1.2.0",
- "grid_template_areas": null,
- "object_position": null,
- "object_fit": null,
- "grid_auto_columns": null,
- "margin": null,
- "display": null,
- "left": null
- }
- }
- }
- }
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "view-in-github"
+ },
+ "source": [
+ "
"
+ ]
},
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "view-in-github",
- "colab_type": "text"
- },
- "source": [
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "IiNG95DSmRmt",
- "colab_type": "text"
- },
- "source": [
- "
EvoloPy
\n",
- "An open source nature-inspired optimization toolbox for global optimization in Python"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "hKzyadcdm6yw",
- "colab_type": "text"
- },
- "source": [
- "The EvoloPy toolbox provides classical and recent nature-inspired metaheuristic for the global optimization. The list of optimizers that have been implemented includes Particle Swarm Optimization (PSO), Multi-Verse Optimizer (MVO), Grey Wolf Optimizer (GWO), and Moth Flame Optimization (MFO)."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "2zQnPqDUujil",
- "colab_type": "text"
- },
- "source": [
- "The full list of implemented optimizers is available here https://github.com/7ossam81/EvoloPy/wiki/List-of-optimizers"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "ehxW3t0puwpm",
- "colab_type": "text"
- },
- "source": [
- "Features
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "TufeO-Rturq8",
- "colab_type": "text"
- },
- "source": [
- "* Fourteen nature-inspired metaheuristic optimizers are implemented.\n",
- "* The implimentation uses the fast array manipulation using [NumPy] (http://www.numpy.org/).\n",
- "* Matrix support using [SciPy's] (https://www.scipy.org/) package.\n",
- "* More optimizers are comming soon"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "oG2TRdx-vf8m",
- "colab_type": "text"
- },
- "source": [
- "Installation
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "_XpMUOZNvi9H",
- "colab_type": "text"
- },
- "source": [
- "Python 3.xx is required."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "f_PVAZC6v7px",
- "colab_type": "text"
- },
- "source": [
- "GitHub
"
- ]
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "IiNG95DSmRmt"
+ },
+ "source": [
+ "EvoloPy
\n",
+ "An open source nature-inspired optimization toolbox for global optimization in Python"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "hKzyadcdm6yw"
+ },
+ "source": [
+ "The EvoloPy toolbox provides classical and recent nature-inspired metaheuristic for the global optimization. The list of optimizers that have been implemented includes Particle Swarm Optimization (PSO), Multi-Verse Optimizer (MVO), Grey Wolf Optimizer (GWO), and Moth Flame Optimization (MFO)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "2zQnPqDUujil"
+ },
+ "source": [
+ "The full list of implemented optimizers is available here https://github.com/7ossam81/EvoloPy/wiki/List-of-optimizers"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "ehxW3t0puwpm"
+ },
+ "source": [
+ "Features
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "TufeO-Rturq8"
+ },
+ "source": [
+ "* Fourteen nature-inspired metaheuristic optimizers are implemented.\n",
+ "* The implimentation uses the fast array manipulation using [NumPy] (http://www.numpy.org/).\n",
+ "* Matrix support using [SciPy's] (https://www.scipy.org/) package.\n",
+ "* More optimizers are comming soon"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "oG2TRdx-vf8m"
+ },
+ "source": [
+ "Installation
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "_XpMUOZNvi9H"
+ },
+ "source": [
+ "Python 3.xx is required."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "f_PVAZC6v7px"
+ },
+ "source": [
+ "GitHub
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "aW_66ovkv2ev"
+ },
+ "source": [
+ "Clone the Git repository from GitHub:\n",
+ "git clone https://github.com/7ossam81/EvoloPy.git"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "QgrmE2wEyC_X"
+ },
+ "source": [
+ "!git clone https://github.com/7ossam81/EvoloPy.git"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "_yVUbtjcyiZR"
+ },
+ "source": [
+ "# Change working directory\n",
+ "import os\n",
+ "os.chdir(\"EvoloPy/\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "S4j-t-nXxaM7"
+ },
+ "source": [
+ "Install Packages
"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "-mG8vIuIW1n8"
+ },
+ "source": [
+ "#Install NumPy, SciPy, sklearn, pandas, and matplotlib\n",
+ "!pip install -r requirements.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "fEon-wGyZuq4"
+ },
+ "source": [
+ "User Preferences
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "cFF9ioDfyppV"
+ },
+ "outputs": [],
+ "source": [
+ "# Select optimizers\n",
+ "# \"SSA\",\"PSO\",\"GA\",\"BAT\",\"FFA\",\"GWO\",\"WOA\",\"MVO\",\"MFO\",\"CS\",\"HHO\",\"SCA\",\"JAYA\",\"DE\"\n",
+ "optimizer=[\"SSA\",\"PSO\",\"GWO\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "SuWo96bB6ohe"
+ },
+ "outputs": [],
+ "source": [
+ "# Select benchmark function\"\n",
+ "# \"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"F13\",\"F14\",\"F15\",\"F16\",\"F17\",\"F18\",\"F19\"\n",
+ "objectivefunc=[\"F3\",\"F4\"] "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "CQyWvdS3Ipgt"
+ },
+ "outputs": [],
+ "source": [
+ "# Select number of repetitions for each experiment. \n",
+ "# To obtain meaningful statistical results, usually 30 independent runs are executed for each algorithm.\n",
+ "NumOfRuns=3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "2djrIRh26sKB"
+ },
+ "outputs": [],
+ "source": [
+ "# Select general parameters for all optimizers (population size, number of iterations) ....\n",
+ "params = {'PopulationSize' : 30, 'Iterations' : 50}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "aJb075Np62GM"
+ },
+ "outputs": [],
+ "source": [
+ "#Choose whether to Export the results in different formats\n",
+ "export_flags = {'Export_avg':True, 'Export_details':True, \n",
+ "'Export_convergence':True, 'Export_boxplot':True}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "KAgXf1QkZD7X"
+ },
+ "source": [
+ "Run Framework
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "APzDcxiwI8A2"
+ },
+ "outputs": [],
+ "source": [
+ "# Run EvoCluster\n",
+ "from optimizer import run\n",
+ "run(optimizer, objectivefunc, NumOfRuns, params, export_flags)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "1mB9AVhQuwbH"
+ },
+ "source": [
+ "Results Files and Plots
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "642Oh7QUpRhL"
+ },
+ "outputs": [],
+ "source": [
+ "#import some useful packages to view the results' files in colab\n",
+ "import pandas as pd\n",
+ "from IPython.display import Image\n",
+ "import os\n",
+ "import datetime\n",
+ "import ipywidgets as widgets"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "3a32992a7be9497c949bc06a2e838a1d",
+ "3633a55c7efe490784594bad5694800d",
+ "75acaa0a501744f7817d0864462e8a7e"
+ ]
},
+ "colab_type": "code",
+ "id": "UOLHaWwBRf7D",
+ "outputId": "4423bcec-4cd7-4155-d923-5a6e7d731a9a"
+ },
+ "outputs": [
{
- "cell_type": "markdown",
- "metadata": {
- "id": "aW_66ovkv2ev",
- "colab_type": "text"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3a32992a7be9497c949bc06a2e838a1d",
+ "version_major": 2,
+ "version_minor": 0
},
- "source": [
- "Clone the Git repository from GitHub:\n",
- "git clone https://github.com/7ossam81/EvoloPy.git"
+ "text/plain": [
+ "Dropdown(description='Select folder:', options=('2020-05-15-13-41-36',), value='2020-05-15-13-41-36')"
]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Select the experiments folder\n",
+ "foldernames = [filename for filename in os.listdir() if filename.startswith(str(datetime.datetime.now().year))]\n",
+ "drop_folder = widgets.Dropdown(options=foldernames, description='Select folder:')\n",
+ "drop_folder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "xm8UuPRA6uIb"
+ },
+ "outputs": [],
+ "source": [
+ "#Get the selected folder\n",
+ "foldername = drop_folder.value"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "qjNFP9NqvNV3"
+ },
+ "source": [
+ "Average Results File
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 193
},
+ "colab_type": "code",
+ "id": "U_PNBYEYp2cn",
+ "outputId": "d6fcb639-8d52-400c-fced-468475b9c789"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "QgrmE2wEyC_X",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "!git clone https://github.com/7ossam81/EvoloPy.git"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "_yVUbtjcyiZR",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Change working directory\n",
- "import os\n",
- "os.chdir(\"EvoloPy/\")"
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Optimizer | \n",
+ " objfname | \n",
+ " ExecutionTime | \n",
+ " Iter1 | \n",
+ " Iter2 | \n",
+ " Iter3 | \n",
+ " Iter4 | \n",
+ " Iter5 | \n",
+ " Iter6 | \n",
+ " Iter7 | \n",
+ " Iter8 | \n",
+ " Iter9 | \n",
+ " Iter10 | \n",
+ " Iter11 | \n",
+ " Iter12 | \n",
+ " Iter13 | \n",
+ " Iter14 | \n",
+ " Iter15 | \n",
+ " Iter16 | \n",
+ " Iter17 | \n",
+ " Iter18 | \n",
+ " Iter19 | \n",
+ " Iter20 | \n",
+ " Iter21 | \n",
+ " Iter22 | \n",
+ " Iter23 | \n",
+ " Iter24 | \n",
+ " Iter25 | \n",
+ " Iter26 | \n",
+ " Iter27 | \n",
+ " Iter28 | \n",
+ " Iter29 | \n",
+ " Iter30 | \n",
+ " Iter31 | \n",
+ " Iter32 | \n",
+ " Iter33 | \n",
+ " Iter34 | \n",
+ " Iter35 | \n",
+ " Iter36 | \n",
+ " Iter37 | \n",
+ " Iter38 | \n",
+ " Iter39 | \n",
+ " Iter40 | \n",
+ " Iter41 | \n",
+ " Iter42 | \n",
+ " Iter43 | \n",
+ " Iter44 | \n",
+ " Iter45 | \n",
+ " Iter46 | \n",
+ " Iter47 | \n",
+ " Iter48 | \n",
+ " Iter49 | \n",
+ " Iter50 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " SSA | \n",
+ " F3 | \n",
+ " 1.75 | \n",
+ " 0.00 | \n",
+ " 59072.60 | \n",
+ " 28958.31 | \n",
+ " 23004.41 | \n",
+ " 22427.61 | \n",
+ " 20708.24 | \n",
+ " 20708.24 | \n",
+ " 20156.02 | \n",
+ " 19199.38 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 18967.85 | \n",
+ " 15429.68 | \n",
+ " 15429.68 | \n",
+ " 12987.78 | \n",
+ " 11772.82 | \n",
+ " 9815.49 | \n",
+ " 8419.98 | \n",
+ " 7635.83 | \n",
+ " 6981.20 | \n",
+ " 6300.40 | \n",
+ " 5884.88 | \n",
+ " 5454.59 | \n",
+ " 5278.25 | \n",
+ " 5104.20 | \n",
+ " 4997.53 | \n",
+ " 4916.33 | \n",
+ " 4861.94 | \n",
+ " 4814.55 | \n",
+ " 4782.65 | \n",
+ " 4769.07 | \n",
+ " 4759.84 | \n",
+ " 4752.96 | \n",
+ " 4747.99 | \n",
+ " 4745.71 | \n",
+ " 4744.22 | \n",
+ " 4743.26 | \n",
+ " 4742.71 | \n",
+ " 4742.43 | \n",
+ " 4742.26 | \n",
+ " 4742.16 | \n",
+ " 4742.11 | \n",
+ " 4742.08 | \n",
+ " 4742.06 | \n",
+ " 4742.06 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " SSA | \n",
+ " F4 | \n",
+ " 1.36 | \n",
+ " 0.00 | \n",
+ " 53.51 | \n",
+ " 40.74 | \n",
+ " 34.87 | \n",
+ " 31.09 | \n",
+ " 29.46 | \n",
+ " 28.24 | \n",
+ " 27.21 | \n",
+ " 26.89 | \n",
+ " 26.59 | \n",
+ " 26.29 | \n",
+ " 25.87 | \n",
+ " 25.42 | \n",
+ " 25.04 | \n",
+ " 24.71 | \n",
+ " 24.69 | \n",
+ " 24.69 | \n",
+ " 24.69 | \n",
+ " 24.69 | \n",
+ " 24.47 | \n",
+ " 23.57 | \n",
+ " 23.31 | \n",
+ " 22.52 | \n",
+ " 22.52 | \n",
+ " 22.04 | \n",
+ " 21.53 | \n",
+ " 20.86 | \n",
+ " 20.63 | \n",
+ " 20.17 | \n",
+ " 19.75 | \n",
+ " 19.47 | \n",
+ " 19.28 | \n",
+ " 19.14 | \n",
+ " 19.10 | \n",
+ " 19.01 | \n",
+ " 18.97 | \n",
+ " 18.94 | \n",
+ " 18.93 | \n",
+ " 18.92 | \n",
+ " 18.92 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ " 18.91 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " PSO | \n",
+ " F3 | \n",
+ " 1.22 | \n",
+ " 183637.64 | \n",
+ " 180863.76 | \n",
+ " 154832.61 | \n",
+ " 131202.72 | \n",
+ " 103560.22 | \n",
+ " 86242.08 | \n",
+ " 79219.21 | \n",
+ " 73716.05 | \n",
+ " 48966.69 | \n",
+ " 34182.34 | \n",
+ " 27478.13 | \n",
+ " 26321.51 | \n",
+ " 23063.18 | \n",
+ " 18518.34 | \n",
+ " 17158.39 | \n",
+ " 14448.26 | \n",
+ " 13882.05 | \n",
+ " 12663.19 | \n",
+ " 11345.10 | \n",
+ " 10531.04 | \n",
+ " 9172.04 | \n",
+ " 8471.73 | \n",
+ " 7901.27 | \n",
+ " 7320.39 | \n",
+ " 6875.68 | \n",
+ " 6444.70 | \n",
+ " 6099.12 | \n",
+ " 5818.16 | \n",
+ " 5681.57 | \n",
+ " 5264.52 | \n",
+ " 5011.52 | \n",
+ " 4766.50 | \n",
+ " 4607.50 | \n",
+ " 4566.76 | \n",
+ " 4530.85 | \n",
+ " 4343.02 | \n",
+ " 4228.02 | \n",
+ " 4038.99 | \n",
+ " 3884.79 | \n",
+ " 3586.49 | \n",
+ " 3474.49 | \n",
+ " 3334.95 | \n",
+ " 3292.48 | \n",
+ " 3210.30 | \n",
+ " 3075.05 | \n",
+ " 2921.85 | \n",
+ " 2867.09 | \n",
+ " 2759.10 | \n",
+ " 2711.19 | \n",
+ " 2668.48 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " PSO | \n",
+ " F4 | \n",
+ " 0.97 | \n",
+ " 89.68 | \n",
+ " 85.17 | \n",
+ " 80.06 | \n",
+ " 75.35 | \n",
+ " 70.27 | \n",
+ " 65.05 | \n",
+ " 59.57 | \n",
+ " 54.01 | \n",
+ " 48.85 | \n",
+ " 43.08 | \n",
+ " 37.89 | \n",
+ " 33.47 | \n",
+ " 29.00 | \n",
+ " 25.94 | \n",
+ " 23.26 | \n",
+ " 21.81 | \n",
+ " 19.80 | \n",
+ " 18.78 | \n",
+ " 18.07 | \n",
+ " 17.69 | \n",
+ " 17.61 | \n",
+ " 16.08 | \n",
+ " 15.82 | \n",
+ " 15.54 | \n",
+ " 15.19 | \n",
+ " 14.98 | \n",
+ " 14.82 | \n",
+ " 14.65 | \n",
+ " 14.14 | \n",
+ " 13.91 | \n",
+ " 13.75 | \n",
+ " 13.67 | \n",
+ " 13.31 | \n",
+ " 13.10 | \n",
+ " 13.04 | \n",
+ " 12.86 | \n",
+ " 12.69 | \n",
+ " 12.24 | \n",
+ " 12.23 | \n",
+ " 12.09 | \n",
+ " 11.99 | \n",
+ " 11.78 | \n",
+ " 11.60 | \n",
+ " 11.34 | \n",
+ " 11.19 | \n",
+ " 10.92 | \n",
+ " 10.87 | \n",
+ " 10.77 | \n",
+ " 10.68 | \n",
+ " 10.67 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "S4j-t-nXxaM7",
- "colab_type": "text"
- },
- "source": [
- "Install Packages
"
+ "text/plain": [
+ " Optimizer objfname ExecutionTime ... Iter48 Iter49 Iter50\n",
+ "0 SSA F3 1.75 ... 4742.08 4742.06 4742.06\n",
+ "1 SSA F4 1.36 ... 18.91 18.91 18.91\n",
+ "2 PSO F3 1.22 ... 2759.10 2711.19 2668.48\n",
+ "3 PSO F4 0.97 ... 10.77 10.68 10.67\n",
+ "\n",
+ "[4 rows x 53 columns]"
]
+ },
+ "execution_count": 13,
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Show the average results file\n",
+ "filename = foldername +'/experiment.csv' \n",
+ "df = pd.read_csv(filename)\n",
+ "df.head(4)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "sXSfvROovXRc"
+ },
+ "source": [
+ "Detailed Results File
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 441
},
+ "colab_type": "code",
+ "id": "RXU4upcgqcX_",
+ "outputId": "9ecd8e8f-c243-417c-b0d1-f73c5f0072c8"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "-mG8vIuIW1n8",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "#Install NumPy, SciPy, sklearn, pandas, and matplotlib\n",
- "!pip install -r requirements.txt"
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Optimizer | \n",
+ " objfname | \n",
+ " ExecutionTime | \n",
+ " Iter1 | \n",
+ " Iter2 | \n",
+ " Iter3 | \n",
+ " Iter4 | \n",
+ " Iter5 | \n",
+ " Iter6 | \n",
+ " Iter7 | \n",
+ " Iter8 | \n",
+ " Iter9 | \n",
+ " Iter10 | \n",
+ " Iter11 | \n",
+ " Iter12 | \n",
+ " Iter13 | \n",
+ " Iter14 | \n",
+ " Iter15 | \n",
+ " Iter16 | \n",
+ " Iter17 | \n",
+ " Iter18 | \n",
+ " Iter19 | \n",
+ " Iter20 | \n",
+ " Iter21 | \n",
+ " Iter22 | \n",
+ " Iter23 | \n",
+ " Iter24 | \n",
+ " Iter25 | \n",
+ " Iter26 | \n",
+ " Iter27 | \n",
+ " Iter28 | \n",
+ " Iter29 | \n",
+ " Iter30 | \n",
+ " Iter31 | \n",
+ " Iter32 | \n",
+ " Iter33 | \n",
+ " Iter34 | \n",
+ " Iter35 | \n",
+ " Iter36 | \n",
+ " Iter37 | \n",
+ " Iter38 | \n",
+ " Iter39 | \n",
+ " Iter40 | \n",
+ " Iter41 | \n",
+ " Iter42 | \n",
+ " Iter43 | \n",
+ " Iter44 | \n",
+ " Iter45 | \n",
+ " Iter46 | \n",
+ " Iter47 | \n",
+ " Iter48 | \n",
+ " Iter49 | \n",
+ " Iter50 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " SSA | \n",
+ " F3 | \n",
+ " 1.757159 | \n",
+ " 0.000000 | \n",
+ " 52643.820906 | \n",
+ " 24036.401595 | \n",
+ " 24036.401595 | \n",
+ " 24036.401595 | \n",
+ " 19983.062814 | \n",
+ " 19983.062814 | \n",
+ " 19983.062814 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 19934.621105 | \n",
+ " 13334.325205 | \n",
+ " 10375.641527 | \n",
+ " 6939.862321 | \n",
+ " 6582.065724 | \n",
+ " 6077.301506 | \n",
+ " 5719.317051 | \n",
+ " 5475.807663 | \n",
+ " 5039.564618 | \n",
+ " 4722.449697 | \n",
+ " 4509.082372 | \n",
+ " 4309.845908 | \n",
+ " 4231.900781 | \n",
+ " 4140.790512 | \n",
+ " 4098.868838 | \n",
+ " 4034.224966 | \n",
+ " 4004.345816 | \n",
+ " 3989.210803 | \n",
+ " 3977.592955 | \n",
+ " 3969.432062 | \n",
+ " 3964.404508 | \n",
+ " 3962.278918 | \n",
+ " 3960.183382 | \n",
+ " 3959.594379 | \n",
+ " 3959.012079 | \n",
+ " 3958.727074 | \n",
+ " 3958.542068 | \n",
+ " 3958.447762 | \n",
+ " 3958.383038 | \n",
+ " 3958.355427 | \n",
+ " 3958.340907 | \n",
+ " 3958.337686 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " SSA | \n",
+ " F3 | \n",
+ " 1.765435 | \n",
+ " 0.000000 | \n",
+ " 81772.551480 | \n",
+ " 42077.682686 | \n",
+ " 33528.309386 | \n",
+ " 33528.309386 | \n",
+ " 33528.309386 | \n",
+ " 33528.309386 | \n",
+ " 33339.475319 | \n",
+ " 31302.330551 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 30607.738419 | \n",
+ " 19993.206964 | \n",
+ " 19993.206964 | \n",
+ " 19993.206964 | \n",
+ " 19347.813994 | \n",
+ " 18381.647190 | \n",
+ " 14552.890782 | \n",
+ " 13217.581789 | \n",
+ " 11655.997940 | \n",
+ " 10353.646206 | \n",
+ " 9618.139021 | \n",
+ " 8900.818595 | \n",
+ " 8595.652212 | \n",
+ " 8275.827790 | \n",
+ " 8091.658115 | \n",
+ " 7947.823888 | \n",
+ " 7857.754972 | \n",
+ " 7801.065453 | \n",
+ " 7747.775136 | \n",
+ " 7729.305578 | \n",
+ " 7717.971491 | \n",
+ " 7709.403452 | \n",
+ " 7701.071818 | \n",
+ " 7697.161561 | \n",
+ " 7695.169681 | \n",
+ " 7693.598177 | \n",
+ " 7692.706369 | \n",
+ " 7692.252333 | \n",
+ " 7692.002018 | \n",
+ " 7691.855101 | \n",
+ " 7691.786464 | \n",
+ " 7691.740762 | \n",
+ " 7691.721228 | \n",
+ " 7691.706882 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " SSA | \n",
+ " F3 | \n",
+ " 1.718634 | \n",
+ " 0.000000 | \n",
+ " 42801.424577 | \n",
+ " 20760.853578 | \n",
+ " 11448.508274 | \n",
+ " 9718.130345 | \n",
+ " 8613.360341 | \n",
+ " 8613.360341 | \n",
+ " 7145.510879 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 6361.197995 | \n",
+ " 5635.813877 | \n",
+ " 5595.012494 | \n",
+ " 4124.974623 | \n",
+ " 4124.974623 | \n",
+ " 3612.603490 | \n",
+ " 3568.288281 | \n",
+ " 3071.748392 | \n",
+ " 2996.934424 | \n",
+ " 2740.501042 | \n",
+ " 2730.006176 | \n",
+ " 2726.932276 | \n",
+ " 2669.043669 | \n",
+ " 2660.374966 | \n",
+ " 2629.196836 | \n",
+ " 2608.348509 | \n",
+ " 2595.827449 | \n",
+ " 2588.704813 | \n",
+ " 2583.949026 | \n",
+ " 2580.056033 | \n",
+ " 2578.493490 | \n",
+ " 2577.690935 | \n",
+ " 2577.311228 | \n",
+ " 2576.599663 | \n",
+ " 2576.422911 | \n",
+ " 2576.302945 | \n",
+ " 2576.238549 | \n",
+ " 2576.190531 | \n",
+ " 2576.150747 | \n",
+ " 2576.137962 | \n",
+ " 2576.128898 | \n",
+ " 2576.126138 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " SSA | \n",
+ " F4 | \n",
+ " 1.406983 | \n",
+ " 0.000000 | \n",
+ " 48.759722 | \n",
+ " 40.957126 | \n",
+ " 36.392110 | \n",
+ " 31.176777 | \n",
+ " 29.322985 | \n",
+ " 27.728717 | \n",
+ " 26.566932 | \n",
+ " 26.003224 | \n",
+ " 25.648036 | \n",
+ " 25.425493 | \n",
+ " 25.315400 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 25.303551 | \n",
+ " 22.607473 | \n",
+ " 21.828070 | \n",
+ " 21.689503 | \n",
+ " 21.689503 | \n",
+ " 20.239969 | \n",
+ " 19.857632 | \n",
+ " 18.803468 | \n",
+ " 18.441907 | \n",
+ " 17.896049 | \n",
+ " 17.659752 | \n",
+ " 17.506454 | \n",
+ " 17.293035 | \n",
+ " 17.156107 | \n",
+ " 17.137185 | \n",
+ " 17.055957 | \n",
+ " 17.000349 | \n",
+ " 16.963227 | \n",
+ " 16.948115 | \n",
+ " 16.938561 | \n",
+ " 16.938561 | \n",
+ " 16.935515 | \n",
+ " 16.934493 | \n",
+ " 16.934493 | \n",
+ " 16.934096 | \n",
+ " 16.933586 | \n",
+ " 16.933256 | \n",
+ " 16.933059 | \n",
+ " 16.933022 | \n",
+ " 16.932969 | \n",
+ " 16.932945 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " SSA | \n",
+ " F4 | \n",
+ " 1.327610 | \n",
+ " 0.000000 | \n",
+ " 56.591031 | \n",
+ " 40.379158 | \n",
+ " 30.871326 | \n",
+ " 26.626798 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 25.439015 | \n",
+ " 23.478344 | \n",
+ " 23.478344 | \n",
+ " 23.478344 | \n",
+ " 23.478344 | \n",
+ " 23.478344 | \n",
+ " 23.478344 | \n",
+ " 23.380201 | \n",
+ " 23.002983 | \n",
+ " 22.805620 | \n",
+ " 22.645928 | \n",
+ " 22.425779 | \n",
+ " 22.367321 | \n",
+ " 22.267360 | \n",
+ " 22.245057 | \n",
+ " 22.214275 | \n",
+ " 22.201591 | \n",
+ " 22.201591 | \n",
+ " 22.196134 | \n",
+ " 22.191604 | \n",
+ " 22.189067 | \n",
+ " 22.187006 | \n",
+ " 22.186515 | \n",
+ " 22.186057 | \n",
+ " 22.185648 | \n",
+ " 22.185512 | \n",
+ " 22.185443 | \n",
+ " 22.185379 | \n",
+ " 22.185344 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " SSA | \n",
+ " F4 | \n",
+ " 1.354242 | \n",
+ " 0.000000 | \n",
+ " 55.174022 | \n",
+ " 40.871446 | \n",
+ " 37.350151 | \n",
+ " 35.472124 | \n",
+ " 33.608983 | \n",
+ " 31.558259 | \n",
+ " 29.623234 | \n",
+ " 29.237995 | \n",
+ " 28.692075 | \n",
+ " 28.006064 | \n",
+ " 26.848358 | \n",
+ " 25.513358 | \n",
+ " 24.365946 | \n",
+ " 23.397832 | \n",
+ " 23.316271 | \n",
+ " 23.316271 | \n",
+ " 23.316271 | \n",
+ " 23.316271 | \n",
+ " 22.663024 | \n",
+ " 22.663024 | \n",
+ " 22.663024 | \n",
+ " 22.391910 | \n",
+ " 22.391910 | \n",
+ " 22.391910 | \n",
+ " 21.267261 | \n",
+ " 20.310997 | \n",
+ " 19.969915 | \n",
+ " 19.244283 | \n",
+ " 18.590040 | \n",
+ " 18.092976 | \n",
+ " 17.914960 | \n",
+ " 17.837548 | \n",
+ " 17.796526 | \n",
+ " 17.717655 | \n",
+ " 17.676123 | \n",
+ " 17.647688 | \n",
+ " 17.640746 | \n",
+ " 17.624150 | \n",
+ " 17.616600 | \n",
+ " 17.613227 | \n",
+ " 17.611748 | \n",
+ " 17.609965 | \n",
+ " 17.608916 | \n",
+ " 17.608511 | \n",
+ " 17.608345 | \n",
+ " 17.608128 | \n",
+ " 17.607996 | \n",
+ " 17.607921 | \n",
+ " 17.607890 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " PSO | \n",
+ " F3 | \n",
+ " 1.222843 | \n",
+ " 168506.134641 | \n",
+ " 160184.507508 | \n",
+ " 152720.276230 | \n",
+ " 150436.071070 | \n",
+ " 116981.682931 | \n",
+ " 102664.118631 | \n",
+ " 101190.697395 | \n",
+ " 100989.783658 | \n",
+ " 67178.845380 | \n",
+ " 33865.444822 | \n",
+ " 27574.793828 | \n",
+ " 27574.793828 | \n",
+ " 27296.421603 | \n",
+ " 20470.156348 | \n",
+ " 16390.309992 | \n",
+ " 12235.954403 | \n",
+ " 10941.077099 | \n",
+ " 9816.265024 | \n",
+ " 9461.560535 | \n",
+ " 9288.304382 | \n",
+ " 8893.305293 | \n",
+ " 8478.232909 | \n",
+ " 7880.194124 | \n",
+ " 7405.720029 | \n",
+ " 6409.686999 | \n",
+ " 6074.904144 | \n",
+ " 5844.129893 | \n",
+ " 5664.261802 | \n",
+ " 5539.741430 | \n",
+ " 5539.741430 | \n",
+ " 5395.096605 | \n",
+ " 5128.491577 | \n",
+ " 4940.214753 | \n",
+ " 4920.240543 | \n",
+ " 4812.523367 | \n",
+ " 4537.936270 | \n",
+ " 4537.936270 | \n",
+ " 4434.566434 | \n",
+ " 4112.517704 | \n",
+ " 3875.716661 | \n",
+ " 3731.176948 | \n",
+ " 3623.287046 | \n",
+ " 3608.057776 | \n",
+ " 3477.603649 | \n",
+ " 3418.510414 | \n",
+ " 3405.333652 | \n",
+ " 3405.333652 | \n",
+ " 3292.630866 | \n",
+ " 3270.243950 | \n",
+ " 3245.750870 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " PSO | \n",
+ " F3 | \n",
+ " 1.227612 | \n",
+ " 109898.280554 | \n",
+ " 109898.280554 | \n",
+ " 65502.951157 | \n",
+ " 58683.391332 | \n",
+ " 58683.391332 | \n",
+ " 52198.225490 | \n",
+ " 43605.885661 | \n",
+ " 38426.738696 | \n",
+ " 35462.870877 | \n",
+ " 33873.431312 | \n",
+ " 20051.440760 | \n",
+ " 16581.602268 | \n",
+ " 11264.809731 | \n",
+ " 11264.809731 | \n",
+ " 11264.809731 | \n",
+ " 11264.809731 | \n",
+ " 11264.809731 | \n",
+ " 11264.809731 | \n",
+ " 9267.316682 | \n",
+ " 9267.316682 | \n",
+ " 9267.316682 | \n",
+ " 8000.954761 | \n",
+ " 7956.754025 | \n",
+ " 7056.803897 | \n",
+ " 6841.755067 | \n",
+ " 6366.634743 | \n",
+ " 5948.625310 | \n",
+ " 5588.233464 | \n",
+ " 5517.817797 | \n",
+ " 4820.443619 | \n",
+ " 4495.614235 | \n",
+ " 4148.085704 | \n",
+ " 3997.491039 | \n",
+ " 3966.090257 | \n",
+ " 3966.090257 | \n",
+ " 3899.737922 | \n",
+ " 3838.371485 | \n",
+ " 3578.966232 | \n",
+ " 3455.669892 | \n",
+ " 3022.608755 | \n",
+ " 3022.608755 | \n",
+ " 3019.191579 | \n",
+ " 2968.982288 | \n",
+ " 2904.286056 | \n",
+ " 2866.829836 | \n",
+ " 2730.703276 | \n",
+ " 2638.497908 | \n",
+ " 2621.088148 | \n",
+ " 2566.719503 | \n",
+ " 2549.322518 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " PSO | \n",
+ " F3 | \n",
+ " 1.201217 | \n",
+ " 272508.492870 | \n",
+ " 272508.492870 | \n",
+ " 246274.591997 | \n",
+ " 184488.684465 | \n",
+ " 135015.597386 | \n",
+ " 103863.897697 | \n",
+ " 92861.052714 | \n",
+ " 81731.631975 | \n",
+ " 44258.361366 | \n",
+ " 34808.143216 | \n",
+ " 34808.143216 | \n",
+ " 34808.143216 | \n",
+ " 30628.307382 | \n",
+ " 23820.048196 | \n",
+ " 23820.048196 | \n",
+ " 19844.012445 | \n",
+ " 19440.268534 | \n",
+ " 16908.503061 | \n",
+ " 15306.423264 | \n",
+ " 13037.512205 | \n",
+ " 9355.483219 | \n",
+ " 8935.996431 | \n",
+ " 7866.847510 | \n",
+ " 7498.634829 | \n",
+ " 7375.593346 | \n",
+ " 6892.554820 | \n",
+ " 6504.608269 | \n",
+ " 6201.983031 | \n",
+ " 5987.147678 | \n",
+ " 5433.369587 | \n",
+ " 5143.834924 | \n",
+ " 5022.920619 | \n",
+ " 4884.781872 | \n",
+ " 4813.937026 | \n",
+ " 4813.937026 | \n",
+ " 4591.382122 | \n",
+ " 4307.738324 | \n",
+ " 4103.433506 | \n",
+ " 4086.173684 | \n",
+ " 3861.133701 | \n",
+ " 3669.697947 | \n",
+ " 3362.372729 | \n",
+ " 3300.399516 | \n",
+ " 3249.023486 | \n",
+ " 2939.802726 | \n",
+ " 2629.522799 | \n",
+ " 2557.450265 | \n",
+ " 2363.574354 | \n",
+ " 2296.596855 | \n",
+ " 2210.364796 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " PSO | \n",
+ " F4 | \n",
+ " 0.976889 | \n",
+ " 89.760306 | \n",
+ " 85.452817 | \n",
+ " 80.136817 | \n",
+ " 75.501265 | \n",
+ " 70.348136 | \n",
+ " 65.254231 | \n",
+ " 59.284136 | \n",
+ " 53.593403 | \n",
+ " 48.781403 | \n",
+ " 43.276854 | \n",
+ " 37.693944 | \n",
+ " 32.755011 | \n",
+ " 28.160408 | \n",
+ " 27.368415 | \n",
+ " 24.148719 | \n",
+ " 21.435781 | \n",
+ " 18.768675 | \n",
+ " 18.017429 | \n",
+ " 17.762537 | \n",
+ " 16.625056 | \n",
+ " 16.565979 | \n",
+ " 15.701459 | \n",
+ " 15.333149 | \n",
+ " 15.006977 | \n",
+ " 14.836124 | \n",
+ " 14.836124 | \n",
+ " 14.836124 | \n",
+ " 14.771812 | \n",
+ " 14.618943 | \n",
+ " 14.363203 | \n",
+ " 14.218553 | \n",
+ " 14.087128 | \n",
+ " 13.566046 | \n",
+ " 13.071113 | \n",
+ " 13.001573 | \n",
+ " 13.001573 | \n",
+ " 13.001573 | \n",
+ " 12.696868 | \n",
+ " 12.696868 | \n",
+ " 12.626412 | \n",
+ " 12.428103 | \n",
+ " 12.406141 | \n",
+ " 12.134600 | \n",
+ " 11.806561 | \n",
+ " 11.617327 | \n",
+ " 11.383517 | \n",
+ " 11.243645 | \n",
+ " 11.118397 | \n",
+ " 11.076850 | \n",
+ " 11.076850 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " PSO | \n",
+ " F4 | \n",
+ " 0.970022 | \n",
+ " 89.275125 | \n",
+ " 83.629862 | \n",
+ " 79.550743 | \n",
+ " 74.318743 | \n",
+ " 69.040346 | \n",
+ " 63.909029 | \n",
+ " 59.275125 | \n",
+ " 54.060751 | \n",
+ " 49.005850 | \n",
+ " 43.081794 | \n",
+ " 37.500136 | \n",
+ " 33.709086 | \n",
+ " 27.825001 | \n",
+ " 23.690012 | \n",
+ " 22.752714 | \n",
+ " 21.710060 | \n",
+ " 20.102304 | \n",
+ " 18.466563 | \n",
+ " 16.582291 | \n",
+ " 16.582291 | \n",
+ " 16.582291 | \n",
+ " 14.778997 | \n",
+ " 14.778997 | \n",
+ " 14.778997 | \n",
+ " 14.447877 | \n",
+ " 14.447877 | \n",
+ " 14.447877 | \n",
+ " 14.061955 | \n",
+ " 14.046603 | \n",
+ " 13.614766 | \n",
+ " 13.272456 | \n",
+ " 13.180141 | \n",
+ " 12.612728 | \n",
+ " 12.465817 | \n",
+ " 12.393493 | \n",
+ " 12.253786 | \n",
+ " 12.036155 | \n",
+ " 10.992684 | \n",
+ " 10.968937 | \n",
+ " 10.824234 | \n",
+ " 10.824234 | \n",
+ " 10.303563 | \n",
+ " 10.303563 | \n",
+ " 10.303563 | \n",
+ " 10.274812 | \n",
+ " 9.900511 | \n",
+ " 9.900511 | \n",
+ " 9.772127 | \n",
+ " 9.769182 | \n",
+ " 9.764364 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " PSO | \n",
+ " F4 | \n",
+ " 0.968264 | \n",
+ " 90.002063 | \n",
+ " 86.417589 | \n",
+ " 80.505630 | \n",
+ " 76.234189 | \n",
+ " 71.429979 | \n",
+ " 65.984312 | \n",
+ " 60.138891 | \n",
+ " 54.365979 | \n",
+ " 48.765599 | \n",
+ " 42.870423 | \n",
+ " 38.475694 | \n",
+ " 33.931789 | \n",
+ " 31.016242 | \n",
+ " 26.759818 | \n",
+ " 22.876897 | \n",
+ " 22.279970 | \n",
+ " 20.521839 | \n",
+ " 19.855174 | \n",
+ " 19.855174 | \n",
+ " 19.855174 | \n",
+ " 19.683047 | \n",
+ " 17.745068 | \n",
+ " 17.352341 | \n",
+ " 16.819421 | \n",
+ " 16.277686 | \n",
+ " 15.643854 | \n",
+ " 15.182718 | \n",
+ " 15.128656 | \n",
+ " 13.756645 | \n",
+ " 13.756645 | \n",
+ " 13.756645 | \n",
+ " 13.756645 | \n",
+ " 13.756645 | \n",
+ " 13.756645 | \n",
+ " 13.738042 | \n",
+ " 13.329167 | \n",
+ " 13.035579 | \n",
+ " 13.035579 | \n",
+ " 13.031504 | \n",
+ " 12.809380 | \n",
+ " 12.720261 | \n",
+ " 12.624425 | \n",
+ " 12.365417 | \n",
+ " 11.900102 | \n",
+ " 11.679491 | \n",
+ " 11.471685 | \n",
+ " 11.471685 | \n",
+ " 11.421590 | \n",
+ " 11.195535 | \n",
+ " 11.166306 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "fEon-wGyZuq4",
- "colab_type": "text"
- },
- "source": [
- "User Preferences
"
+ "text/plain": [
+ " Optimizer objfname ExecutionTime ... Iter48 Iter49 Iter50\n",
+ "0 SSA F3 1.757159 ... 3958.355427 3958.340907 3958.337686\n",
+ "1 SSA F3 1.765435 ... 7691.740762 7691.721228 7691.706882\n",
+ "2 SSA F3 1.718634 ... 2576.137962 2576.128898 2576.126138\n",
+ "3 SSA F4 1.406983 ... 16.933022 16.932969 16.932945\n",
+ "4 SSA F4 1.327610 ... 22.185443 22.185379 22.185344\n",
+ "5 SSA F4 1.354242 ... 17.607996 17.607921 17.607890\n",
+ "6 PSO F3 1.222843 ... 3292.630866 3270.243950 3245.750870\n",
+ "7 PSO F3 1.227612 ... 2621.088148 2566.719503 2549.322518\n",
+ "8 PSO F3 1.201217 ... 2363.574354 2296.596855 2210.364796\n",
+ "9 PSO F4 0.976889 ... 11.118397 11.076850 11.076850\n",
+ "10 PSO F4 0.970022 ... 9.772127 9.769182 9.764364\n",
+ "11 PSO F4 0.968264 ... 11.421590 11.195535 11.166306\n",
+ "\n",
+ "[12 rows x 53 columns]"
]
+ },
+ "execution_count": 14,
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Show the detailed results file\n",
+ "filename = foldername +'/experiment_details.csv' \n",
+ "df = pd.read_csv(filename)\n",
+ "df.head(12)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "7gw9qJb7vedV"
+ },
+ "source": [
+ "Convergence Curve Plot
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "e4a83005aaa043d48540b6f4202070e5",
+ "641b5f943c8e419583baaf02485acffb",
+ "45a8720657764f1585859c3d3dae8745"
+ ]
},
+ "colab_type": "code",
+ "id": "14hzxM7spueJ",
+ "outputId": "6e047a4c-b0df-48c1-d4b1-447240fd9384"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "cFF9ioDfyppV",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Select optimizers\n",
- "# \"SSA\",\"PSO\",\"GA\",\"BAT\",\"FFA\",\"GWO\",\"WOA\",\"MVO\",\"MFO\",\"CS\",\"HHO\",\"SCA\",\"JAYA\",\"DE\"\n",
- "optimizer=[\"SSA\",\"PSO\",\"GWO\"]"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "SuWo96bB6ohe",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Select benchmark function\"\n",
- "# \"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"F13\",\"F14\",\"F15\",\"F16\",\"F17\",\"F18\",\"F19\"\n",
- "objectivefunc=[\"F3\",\"F4\"] "
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "CQyWvdS3Ipgt",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Select number of repetitions for each experiment. \n",
- "# To obtain meaningful statistical results, usually 30 independent runs are executed for each algorithm.\n",
- "NumOfRuns=3"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "2djrIRh26sKB",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Select general parameters for all optimizers (population size, number of iterations) ....\n",
- "params = {'PopulationSize' : 30, 'Iterations' : 50}"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "aJb075Np62GM",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "#Choose whether to Export the results in different formats\n",
- "export_flags = {'Export_avg':True, 'Export_details':True, \n",
- "'Export_convergence':True, 'Export_boxplot':True}"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "KAgXf1QkZD7X",
- "colab_type": "text"
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "e4a83005aaa043d48540b6f4202070e5",
+ "version_major": 2,
+ "version_minor": 0
},
- "source": [
- "Run Framework
"
+ "text/plain": [
+ "Dropdown(description='Select plot:', options=('convergence-F4.png', 'convergence-F3.png'), value='convergence-…"
]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Select convergence curve to show\n",
+ "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('convergence')]\n",
+ "\n",
+ "drop_plot_convergence = widgets.Dropdown(options=filenames, description='Select plot:')\n",
+ "drop_plot_convergence"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 279
},
+ "colab_type": "code",
+ "id": "ZMstknfRafMj",
+ "outputId": "b4b18695-4f57-4804-e992-7fd6b72ef746"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "APzDcxiwI8A2",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "# Run EvoCluster\n",
- "from optimizer import run\n",
- "run(optimizer, objectivefunc, NumOfRuns, params, export_flags)"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "1mB9AVhQuwbH",
- "colab_type": "text"
- },
- "source": [
- "Results Files and Plots
"
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
]
+ },
+ "execution_count": 18,
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Show selected convergence curve\n",
+ "Image(foldername +'/' + drop_plot_convergence.value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "HYEl6buevixm"
+ },
+ "source": [
+ "Box Plot
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "91e278780d5b4dcda11e832e971044f3",
+ "c1b161beed5c4b128b06a09d7a5be2fe",
+ "b08d8ae9147047acac84d9e52bfee64f"
+ ]
},
+ "colab_type": "code",
+ "id": "rWF1AKS5bPvV",
+ "outputId": "9cdefbdf-8a8c-4a0f-cbae-3a0aba9528df"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "642Oh7QUpRhL",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "#import some useful packages to view the results' files in colab\n",
- "import pandas as pd\n",
- "from IPython.display import Image\n",
- "import os\n",
- "import datetime\n",
- "import ipywidgets as widgets"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "code",
- "metadata": {
- "id": "UOLHaWwBRf7D",
- "colab_type": "code",
- "outputId": "4423bcec-4cd7-4155-d923-5a6e7d731a9a",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 49,
- "referenced_widgets": [
- "3a32992a7be9497c949bc06a2e838a1d",
- "3633a55c7efe490784594bad5694800d",
- "75acaa0a501744f7817d0864462e8a7e"
- ]
- }
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "91e278780d5b4dcda11e832e971044f3",
+ "version_major": 2,
+ "version_minor": 0
},
- "source": [
- "#Select the experiments folder\n",
- "foldernames = [filename for filename in os.listdir() if filename.startswith(str(datetime.datetime.now().year))]\n",
- "drop_folder = widgets.Dropdown(options=foldernames, description='Select folder:')\n",
- "drop_folder"
- ],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "3a32992a7be9497c949bc06a2e838a1d",
- "version_minor": 0,
- "version_major": 2
- },
- "text/plain": [
- "Dropdown(description='Select folder:', options=('2020-05-15-13-41-36',), value='2020-05-15-13-41-36')"
- ]
- },
- "metadata": {
- "tags": []
- }
- }
+ "text/plain": [
+ "Dropdown(description='Select plot:', options=('boxplot-F3.png', 'boxplot-F4.png'), value='boxplot-F3.png')"
]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Select boxplot to show\n",
+ "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('boxplot')]\n",
+ "\n",
+ "drop_boxplot = widgets.Dropdown(options=filenames, description='Select plot:')\n",
+ "drop_boxplot"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 0,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 265
},
+ "colab_type": "code",
+ "id": "paBsvZRktfTh",
+ "outputId": "61ebf09e-07cc-4718-d273-0ed5e02766f6"
+ },
+ "outputs": [
{
- "cell_type": "code",
- "metadata": {
- "id": "xm8UuPRA6uIb",
- "colab_type": "code",
- "colab": {}
- },
- "source": [
- "#Get the selected folder\n",
- "foldername = drop_folder.value"
- ],
- "execution_count": 0,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "qjNFP9NqvNV3",
- "colab_type": "text"
- },
- "source": [
- "Average Results File
"
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
]
+ },
+ "execution_count": 22,
+ "metadata": {
+ "tags": []
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Show selected boxplot\n",
+ "Image(foldername +'/' + drop_boxplot.value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "eahYmfKKJ62g"
+ },
+ "source": [
+ "Citation Request
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "PkabkcHFKFIK"
+ },
+ "source": [
+ "Please include these citations if you plan to use this Framework:\n",
+ "\n",
+ "* Faris, Hossam, Ibrahim Aljarah, Seyedali Mirjalili, Pedro A. Castillo, and Juan Julián Merelo Guervós. \"EvoloPy: An Open-source Nature-inspired Optimization Framework in Python.\" In IJCCI (ECTA), pp. 171-177. 2016.\n",
+ "* Qaddoura, Raneem, Hossam Faris, Ibrahim Aljarah, and Pedro A. Castillo. \"EvoCluster: An Open-Source Nature-Inspired Optimization Clustering Framework in Python.\" In International Conference on the Applications of Evolutionary Computation (Part of EvoStar), pp. 20-36. Springer, Cham, 2020.\n",
+ "* Ruba Abu Khurma, Ibrahim Aljarah, Ahmad Sharieh, and Seyedali Mirjalili. Evolopy-fs: An open-source nature-inspired optimization framework in python for feature selection. In Evolutionary Machine Learning Techniques, pages 131–173. Springer, 2020"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [],
+ "include_colab_link": true,
+ "name": "EvoloPy.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "3633a55c7efe490784594bad5694800d": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "U_PNBYEYp2cn",
- "colab_type": "code",
- "outputId": "d6fcb639-8d52-400c-fced-468475b9c789",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 193
- }
- },
- "source": [
- "#Show the average results file\n",
- "filename = foldername +'/experiment.csv' \n",
- "df = pd.read_csv(filename)\n",
- "df.head(4)"
+ "3a32992a7be9497c949bc06a2e838a1d": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "2020-05-15-13-41-36"
],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " Optimizer | \n",
- " objfname | \n",
- " ExecutionTime | \n",
- " Iter1 | \n",
- " Iter2 | \n",
- " Iter3 | \n",
- " Iter4 | \n",
- " Iter5 | \n",
- " Iter6 | \n",
- " Iter7 | \n",
- " Iter8 | \n",
- " Iter9 | \n",
- " Iter10 | \n",
- " Iter11 | \n",
- " Iter12 | \n",
- " Iter13 | \n",
- " Iter14 | \n",
- " Iter15 | \n",
- " Iter16 | \n",
- " Iter17 | \n",
- " Iter18 | \n",
- " Iter19 | \n",
- " Iter20 | \n",
- " Iter21 | \n",
- " Iter22 | \n",
- " Iter23 | \n",
- " Iter24 | \n",
- " Iter25 | \n",
- " Iter26 | \n",
- " Iter27 | \n",
- " Iter28 | \n",
- " Iter29 | \n",
- " Iter30 | \n",
- " Iter31 | \n",
- " Iter32 | \n",
- " Iter33 | \n",
- " Iter34 | \n",
- " Iter35 | \n",
- " Iter36 | \n",
- " Iter37 | \n",
- " Iter38 | \n",
- " Iter39 | \n",
- " Iter40 | \n",
- " Iter41 | \n",
- " Iter42 | \n",
- " Iter43 | \n",
- " Iter44 | \n",
- " Iter45 | \n",
- " Iter46 | \n",
- " Iter47 | \n",
- " Iter48 | \n",
- " Iter49 | \n",
- " Iter50 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " SSA | \n",
- " F3 | \n",
- " 1.75 | \n",
- " 0.00 | \n",
- " 59072.60 | \n",
- " 28958.31 | \n",
- " 23004.41 | \n",
- " 22427.61 | \n",
- " 20708.24 | \n",
- " 20708.24 | \n",
- " 20156.02 | \n",
- " 19199.38 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 18967.85 | \n",
- " 15429.68 | \n",
- " 15429.68 | \n",
- " 12987.78 | \n",
- " 11772.82 | \n",
- " 9815.49 | \n",
- " 8419.98 | \n",
- " 7635.83 | \n",
- " 6981.20 | \n",
- " 6300.40 | \n",
- " 5884.88 | \n",
- " 5454.59 | \n",
- " 5278.25 | \n",
- " 5104.20 | \n",
- " 4997.53 | \n",
- " 4916.33 | \n",
- " 4861.94 | \n",
- " 4814.55 | \n",
- " 4782.65 | \n",
- " 4769.07 | \n",
- " 4759.84 | \n",
- " 4752.96 | \n",
- " 4747.99 | \n",
- " 4745.71 | \n",
- " 4744.22 | \n",
- " 4743.26 | \n",
- " 4742.71 | \n",
- " 4742.43 | \n",
- " 4742.26 | \n",
- " 4742.16 | \n",
- " 4742.11 | \n",
- " 4742.08 | \n",
- " 4742.06 | \n",
- " 4742.06 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " SSA | \n",
- " F4 | \n",
- " 1.36 | \n",
- " 0.00 | \n",
- " 53.51 | \n",
- " 40.74 | \n",
- " 34.87 | \n",
- " 31.09 | \n",
- " 29.46 | \n",
- " 28.24 | \n",
- " 27.21 | \n",
- " 26.89 | \n",
- " 26.59 | \n",
- " 26.29 | \n",
- " 25.87 | \n",
- " 25.42 | \n",
- " 25.04 | \n",
- " 24.71 | \n",
- " 24.69 | \n",
- " 24.69 | \n",
- " 24.69 | \n",
- " 24.69 | \n",
- " 24.47 | \n",
- " 23.57 | \n",
- " 23.31 | \n",
- " 22.52 | \n",
- " 22.52 | \n",
- " 22.04 | \n",
- " 21.53 | \n",
- " 20.86 | \n",
- " 20.63 | \n",
- " 20.17 | \n",
- " 19.75 | \n",
- " 19.47 | \n",
- " 19.28 | \n",
- " 19.14 | \n",
- " 19.10 | \n",
- " 19.01 | \n",
- " 18.97 | \n",
- " 18.94 | \n",
- " 18.93 | \n",
- " 18.92 | \n",
- " 18.92 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- " 18.91 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " PSO | \n",
- " F3 | \n",
- " 1.22 | \n",
- " 183637.64 | \n",
- " 180863.76 | \n",
- " 154832.61 | \n",
- " 131202.72 | \n",
- " 103560.22 | \n",
- " 86242.08 | \n",
- " 79219.21 | \n",
- " 73716.05 | \n",
- " 48966.69 | \n",
- " 34182.34 | \n",
- " 27478.13 | \n",
- " 26321.51 | \n",
- " 23063.18 | \n",
- " 18518.34 | \n",
- " 17158.39 | \n",
- " 14448.26 | \n",
- " 13882.05 | \n",
- " 12663.19 | \n",
- " 11345.10 | \n",
- " 10531.04 | \n",
- " 9172.04 | \n",
- " 8471.73 | \n",
- " 7901.27 | \n",
- " 7320.39 | \n",
- " 6875.68 | \n",
- " 6444.70 | \n",
- " 6099.12 | \n",
- " 5818.16 | \n",
- " 5681.57 | \n",
- " 5264.52 | \n",
- " 5011.52 | \n",
- " 4766.50 | \n",
- " 4607.50 | \n",
- " 4566.76 | \n",
- " 4530.85 | \n",
- " 4343.02 | \n",
- " 4228.02 | \n",
- " 4038.99 | \n",
- " 3884.79 | \n",
- " 3586.49 | \n",
- " 3474.49 | \n",
- " 3334.95 | \n",
- " 3292.48 | \n",
- " 3210.30 | \n",
- " 3075.05 | \n",
- " 2921.85 | \n",
- " 2867.09 | \n",
- " 2759.10 | \n",
- " 2711.19 | \n",
- " 2668.48 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " PSO | \n",
- " F4 | \n",
- " 0.97 | \n",
- " 89.68 | \n",
- " 85.17 | \n",
- " 80.06 | \n",
- " 75.35 | \n",
- " 70.27 | \n",
- " 65.05 | \n",
- " 59.57 | \n",
- " 54.01 | \n",
- " 48.85 | \n",
- " 43.08 | \n",
- " 37.89 | \n",
- " 33.47 | \n",
- " 29.00 | \n",
- " 25.94 | \n",
- " 23.26 | \n",
- " 21.81 | \n",
- " 19.80 | \n",
- " 18.78 | \n",
- " 18.07 | \n",
- " 17.69 | \n",
- " 17.61 | \n",
- " 16.08 | \n",
- " 15.82 | \n",
- " 15.54 | \n",
- " 15.19 | \n",
- " 14.98 | \n",
- " 14.82 | \n",
- " 14.65 | \n",
- " 14.14 | \n",
- " 13.91 | \n",
- " 13.75 | \n",
- " 13.67 | \n",
- " 13.31 | \n",
- " 13.10 | \n",
- " 13.04 | \n",
- " 12.86 | \n",
- " 12.69 | \n",
- " 12.24 | \n",
- " 12.23 | \n",
- " 12.09 | \n",
- " 11.99 | \n",
- " 11.78 | \n",
- " 11.60 | \n",
- " 11.34 | \n",
- " 11.19 | \n",
- " 10.92 | \n",
- " 10.87 | \n",
- " 10.77 | \n",
- " 10.68 | \n",
- " 10.67 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " Optimizer objfname ExecutionTime ... Iter48 Iter49 Iter50\n",
- "0 SSA F3 1.75 ... 4742.08 4742.06 4742.06\n",
- "1 SSA F4 1.36 ... 18.91 18.91 18.91\n",
- "2 PSO F3 1.22 ... 2759.10 2711.19 2668.48\n",
- "3 PSO F4 0.97 ... 10.77 10.68 10.67\n",
- "\n",
- "[4 rows x 53 columns]"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 13
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "sXSfvROovXRc",
- "colab_type": "text"
- },
- "source": [
- "Detailed Results File
"
- ]
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select folder:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 0,
+ "layout": "IPY_MODEL_75acaa0a501744f7817d0864462e8a7e",
+ "style": "IPY_MODEL_3633a55c7efe490784594bad5694800d"
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "RXU4upcgqcX_",
- "colab_type": "code",
- "outputId": "9ecd8e8f-c243-417c-b0d1-f73c5f0072c8",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 441
- }
- },
- "source": [
- "#Show the detailed results file\n",
- "filename = foldername +'/experiment_details.csv' \n",
- "df = pd.read_csv(filename)\n",
- "df.head(12)"
- ],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " Optimizer | \n",
- " objfname | \n",
- " ExecutionTime | \n",
- " Iter1 | \n",
- " Iter2 | \n",
- " Iter3 | \n",
- " Iter4 | \n",
- " Iter5 | \n",
- " Iter6 | \n",
- " Iter7 | \n",
- " Iter8 | \n",
- " Iter9 | \n",
- " Iter10 | \n",
- " Iter11 | \n",
- " Iter12 | \n",
- " Iter13 | \n",
- " Iter14 | \n",
- " Iter15 | \n",
- " Iter16 | \n",
- " Iter17 | \n",
- " Iter18 | \n",
- " Iter19 | \n",
- " Iter20 | \n",
- " Iter21 | \n",
- " Iter22 | \n",
- " Iter23 | \n",
- " Iter24 | \n",
- " Iter25 | \n",
- " Iter26 | \n",
- " Iter27 | \n",
- " Iter28 | \n",
- " Iter29 | \n",
- " Iter30 | \n",
- " Iter31 | \n",
- " Iter32 | \n",
- " Iter33 | \n",
- " Iter34 | \n",
- " Iter35 | \n",
- " Iter36 | \n",
- " Iter37 | \n",
- " Iter38 | \n",
- " Iter39 | \n",
- " Iter40 | \n",
- " Iter41 | \n",
- " Iter42 | \n",
- " Iter43 | \n",
- " Iter44 | \n",
- " Iter45 | \n",
- " Iter46 | \n",
- " Iter47 | \n",
- " Iter48 | \n",
- " Iter49 | \n",
- " Iter50 | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " | 0 | \n",
- " SSA | \n",
- " F3 | \n",
- " 1.757159 | \n",
- " 0.000000 | \n",
- " 52643.820906 | \n",
- " 24036.401595 | \n",
- " 24036.401595 | \n",
- " 24036.401595 | \n",
- " 19983.062814 | \n",
- " 19983.062814 | \n",
- " 19983.062814 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 19934.621105 | \n",
- " 13334.325205 | \n",
- " 10375.641527 | \n",
- " 6939.862321 | \n",
- " 6582.065724 | \n",
- " 6077.301506 | \n",
- " 5719.317051 | \n",
- " 5475.807663 | \n",
- " 5039.564618 | \n",
- " 4722.449697 | \n",
- " 4509.082372 | \n",
- " 4309.845908 | \n",
- " 4231.900781 | \n",
- " 4140.790512 | \n",
- " 4098.868838 | \n",
- " 4034.224966 | \n",
- " 4004.345816 | \n",
- " 3989.210803 | \n",
- " 3977.592955 | \n",
- " 3969.432062 | \n",
- " 3964.404508 | \n",
- " 3962.278918 | \n",
- " 3960.183382 | \n",
- " 3959.594379 | \n",
- " 3959.012079 | \n",
- " 3958.727074 | \n",
- " 3958.542068 | \n",
- " 3958.447762 | \n",
- " 3958.383038 | \n",
- " 3958.355427 | \n",
- " 3958.340907 | \n",
- " 3958.337686 | \n",
- "
\n",
- " \n",
- " | 1 | \n",
- " SSA | \n",
- " F3 | \n",
- " 1.765435 | \n",
- " 0.000000 | \n",
- " 81772.551480 | \n",
- " 42077.682686 | \n",
- " 33528.309386 | \n",
- " 33528.309386 | \n",
- " 33528.309386 | \n",
- " 33528.309386 | \n",
- " 33339.475319 | \n",
- " 31302.330551 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 30607.738419 | \n",
- " 19993.206964 | \n",
- " 19993.206964 | \n",
- " 19993.206964 | \n",
- " 19347.813994 | \n",
- " 18381.647190 | \n",
- " 14552.890782 | \n",
- " 13217.581789 | \n",
- " 11655.997940 | \n",
- " 10353.646206 | \n",
- " 9618.139021 | \n",
- " 8900.818595 | \n",
- " 8595.652212 | \n",
- " 8275.827790 | \n",
- " 8091.658115 | \n",
- " 7947.823888 | \n",
- " 7857.754972 | \n",
- " 7801.065453 | \n",
- " 7747.775136 | \n",
- " 7729.305578 | \n",
- " 7717.971491 | \n",
- " 7709.403452 | \n",
- " 7701.071818 | \n",
- " 7697.161561 | \n",
- " 7695.169681 | \n",
- " 7693.598177 | \n",
- " 7692.706369 | \n",
- " 7692.252333 | \n",
- " 7692.002018 | \n",
- " 7691.855101 | \n",
- " 7691.786464 | \n",
- " 7691.740762 | \n",
- " 7691.721228 | \n",
- " 7691.706882 | \n",
- "
\n",
- " \n",
- " | 2 | \n",
- " SSA | \n",
- " F3 | \n",
- " 1.718634 | \n",
- " 0.000000 | \n",
- " 42801.424577 | \n",
- " 20760.853578 | \n",
- " 11448.508274 | \n",
- " 9718.130345 | \n",
- " 8613.360341 | \n",
- " 8613.360341 | \n",
- " 7145.510879 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 6361.197995 | \n",
- " 5635.813877 | \n",
- " 5595.012494 | \n",
- " 4124.974623 | \n",
- " 4124.974623 | \n",
- " 3612.603490 | \n",
- " 3568.288281 | \n",
- " 3071.748392 | \n",
- " 2996.934424 | \n",
- " 2740.501042 | \n",
- " 2730.006176 | \n",
- " 2726.932276 | \n",
- " 2669.043669 | \n",
- " 2660.374966 | \n",
- " 2629.196836 | \n",
- " 2608.348509 | \n",
- " 2595.827449 | \n",
- " 2588.704813 | \n",
- " 2583.949026 | \n",
- " 2580.056033 | \n",
- " 2578.493490 | \n",
- " 2577.690935 | \n",
- " 2577.311228 | \n",
- " 2576.599663 | \n",
- " 2576.422911 | \n",
- " 2576.302945 | \n",
- " 2576.238549 | \n",
- " 2576.190531 | \n",
- " 2576.150747 | \n",
- " 2576.137962 | \n",
- " 2576.128898 | \n",
- " 2576.126138 | \n",
- "
\n",
- " \n",
- " | 3 | \n",
- " SSA | \n",
- " F4 | \n",
- " 1.406983 | \n",
- " 0.000000 | \n",
- " 48.759722 | \n",
- " 40.957126 | \n",
- " 36.392110 | \n",
- " 31.176777 | \n",
- " 29.322985 | \n",
- " 27.728717 | \n",
- " 26.566932 | \n",
- " 26.003224 | \n",
- " 25.648036 | \n",
- " 25.425493 | \n",
- " 25.315400 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 25.303551 | \n",
- " 22.607473 | \n",
- " 21.828070 | \n",
- " 21.689503 | \n",
- " 21.689503 | \n",
- " 20.239969 | \n",
- " 19.857632 | \n",
- " 18.803468 | \n",
- " 18.441907 | \n",
- " 17.896049 | \n",
- " 17.659752 | \n",
- " 17.506454 | \n",
- " 17.293035 | \n",
- " 17.156107 | \n",
- " 17.137185 | \n",
- " 17.055957 | \n",
- " 17.000349 | \n",
- " 16.963227 | \n",
- " 16.948115 | \n",
- " 16.938561 | \n",
- " 16.938561 | \n",
- " 16.935515 | \n",
- " 16.934493 | \n",
- " 16.934493 | \n",
- " 16.934096 | \n",
- " 16.933586 | \n",
- " 16.933256 | \n",
- " 16.933059 | \n",
- " 16.933022 | \n",
- " 16.932969 | \n",
- " 16.932945 | \n",
- "
\n",
- " \n",
- " | 4 | \n",
- " SSA | \n",
- " F4 | \n",
- " 1.327610 | \n",
- " 0.000000 | \n",
- " 56.591031 | \n",
- " 40.379158 | \n",
- " 30.871326 | \n",
- " 26.626798 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 25.439015 | \n",
- " 23.478344 | \n",
- " 23.478344 | \n",
- " 23.478344 | \n",
- " 23.478344 | \n",
- " 23.478344 | \n",
- " 23.478344 | \n",
- " 23.380201 | \n",
- " 23.002983 | \n",
- " 22.805620 | \n",
- " 22.645928 | \n",
- " 22.425779 | \n",
- " 22.367321 | \n",
- " 22.267360 | \n",
- " 22.245057 | \n",
- " 22.214275 | \n",
- " 22.201591 | \n",
- " 22.201591 | \n",
- " 22.196134 | \n",
- " 22.191604 | \n",
- " 22.189067 | \n",
- " 22.187006 | \n",
- " 22.186515 | \n",
- " 22.186057 | \n",
- " 22.185648 | \n",
- " 22.185512 | \n",
- " 22.185443 | \n",
- " 22.185379 | \n",
- " 22.185344 | \n",
- "
\n",
- " \n",
- " | 5 | \n",
- " SSA | \n",
- " F4 | \n",
- " 1.354242 | \n",
- " 0.000000 | \n",
- " 55.174022 | \n",
- " 40.871446 | \n",
- " 37.350151 | \n",
- " 35.472124 | \n",
- " 33.608983 | \n",
- " 31.558259 | \n",
- " 29.623234 | \n",
- " 29.237995 | \n",
- " 28.692075 | \n",
- " 28.006064 | \n",
- " 26.848358 | \n",
- " 25.513358 | \n",
- " 24.365946 | \n",
- " 23.397832 | \n",
- " 23.316271 | \n",
- " 23.316271 | \n",
- " 23.316271 | \n",
- " 23.316271 | \n",
- " 22.663024 | \n",
- " 22.663024 | \n",
- " 22.663024 | \n",
- " 22.391910 | \n",
- " 22.391910 | \n",
- " 22.391910 | \n",
- " 21.267261 | \n",
- " 20.310997 | \n",
- " 19.969915 | \n",
- " 19.244283 | \n",
- " 18.590040 | \n",
- " 18.092976 | \n",
- " 17.914960 | \n",
- " 17.837548 | \n",
- " 17.796526 | \n",
- " 17.717655 | \n",
- " 17.676123 | \n",
- " 17.647688 | \n",
- " 17.640746 | \n",
- " 17.624150 | \n",
- " 17.616600 | \n",
- " 17.613227 | \n",
- " 17.611748 | \n",
- " 17.609965 | \n",
- " 17.608916 | \n",
- " 17.608511 | \n",
- " 17.608345 | \n",
- " 17.608128 | \n",
- " 17.607996 | \n",
- " 17.607921 | \n",
- " 17.607890 | \n",
- "
\n",
- " \n",
- " | 6 | \n",
- " PSO | \n",
- " F3 | \n",
- " 1.222843 | \n",
- " 168506.134641 | \n",
- " 160184.507508 | \n",
- " 152720.276230 | \n",
- " 150436.071070 | \n",
- " 116981.682931 | \n",
- " 102664.118631 | \n",
- " 101190.697395 | \n",
- " 100989.783658 | \n",
- " 67178.845380 | \n",
- " 33865.444822 | \n",
- " 27574.793828 | \n",
- " 27574.793828 | \n",
- " 27296.421603 | \n",
- " 20470.156348 | \n",
- " 16390.309992 | \n",
- " 12235.954403 | \n",
- " 10941.077099 | \n",
- " 9816.265024 | \n",
- " 9461.560535 | \n",
- " 9288.304382 | \n",
- " 8893.305293 | \n",
- " 8478.232909 | \n",
- " 7880.194124 | \n",
- " 7405.720029 | \n",
- " 6409.686999 | \n",
- " 6074.904144 | \n",
- " 5844.129893 | \n",
- " 5664.261802 | \n",
- " 5539.741430 | \n",
- " 5539.741430 | \n",
- " 5395.096605 | \n",
- " 5128.491577 | \n",
- " 4940.214753 | \n",
- " 4920.240543 | \n",
- " 4812.523367 | \n",
- " 4537.936270 | \n",
- " 4537.936270 | \n",
- " 4434.566434 | \n",
- " 4112.517704 | \n",
- " 3875.716661 | \n",
- " 3731.176948 | \n",
- " 3623.287046 | \n",
- " 3608.057776 | \n",
- " 3477.603649 | \n",
- " 3418.510414 | \n",
- " 3405.333652 | \n",
- " 3405.333652 | \n",
- " 3292.630866 | \n",
- " 3270.243950 | \n",
- " 3245.750870 | \n",
- "
\n",
- " \n",
- " | 7 | \n",
- " PSO | \n",
- " F3 | \n",
- " 1.227612 | \n",
- " 109898.280554 | \n",
- " 109898.280554 | \n",
- " 65502.951157 | \n",
- " 58683.391332 | \n",
- " 58683.391332 | \n",
- " 52198.225490 | \n",
- " 43605.885661 | \n",
- " 38426.738696 | \n",
- " 35462.870877 | \n",
- " 33873.431312 | \n",
- " 20051.440760 | \n",
- " 16581.602268 | \n",
- " 11264.809731 | \n",
- " 11264.809731 | \n",
- " 11264.809731 | \n",
- " 11264.809731 | \n",
- " 11264.809731 | \n",
- " 11264.809731 | \n",
- " 9267.316682 | \n",
- " 9267.316682 | \n",
- " 9267.316682 | \n",
- " 8000.954761 | \n",
- " 7956.754025 | \n",
- " 7056.803897 | \n",
- " 6841.755067 | \n",
- " 6366.634743 | \n",
- " 5948.625310 | \n",
- " 5588.233464 | \n",
- " 5517.817797 | \n",
- " 4820.443619 | \n",
- " 4495.614235 | \n",
- " 4148.085704 | \n",
- " 3997.491039 | \n",
- " 3966.090257 | \n",
- " 3966.090257 | \n",
- " 3899.737922 | \n",
- " 3838.371485 | \n",
- " 3578.966232 | \n",
- " 3455.669892 | \n",
- " 3022.608755 | \n",
- " 3022.608755 | \n",
- " 3019.191579 | \n",
- " 2968.982288 | \n",
- " 2904.286056 | \n",
- " 2866.829836 | \n",
- " 2730.703276 | \n",
- " 2638.497908 | \n",
- " 2621.088148 | \n",
- " 2566.719503 | \n",
- " 2549.322518 | \n",
- "
\n",
- " \n",
- " | 8 | \n",
- " PSO | \n",
- " F3 | \n",
- " 1.201217 | \n",
- " 272508.492870 | \n",
- " 272508.492870 | \n",
- " 246274.591997 | \n",
- " 184488.684465 | \n",
- " 135015.597386 | \n",
- " 103863.897697 | \n",
- " 92861.052714 | \n",
- " 81731.631975 | \n",
- " 44258.361366 | \n",
- " 34808.143216 | \n",
- " 34808.143216 | \n",
- " 34808.143216 | \n",
- " 30628.307382 | \n",
- " 23820.048196 | \n",
- " 23820.048196 | \n",
- " 19844.012445 | \n",
- " 19440.268534 | \n",
- " 16908.503061 | \n",
- " 15306.423264 | \n",
- " 13037.512205 | \n",
- " 9355.483219 | \n",
- " 8935.996431 | \n",
- " 7866.847510 | \n",
- " 7498.634829 | \n",
- " 7375.593346 | \n",
- " 6892.554820 | \n",
- " 6504.608269 | \n",
- " 6201.983031 | \n",
- " 5987.147678 | \n",
- " 5433.369587 | \n",
- " 5143.834924 | \n",
- " 5022.920619 | \n",
- " 4884.781872 | \n",
- " 4813.937026 | \n",
- " 4813.937026 | \n",
- " 4591.382122 | \n",
- " 4307.738324 | \n",
- " 4103.433506 | \n",
- " 4086.173684 | \n",
- " 3861.133701 | \n",
- " 3669.697947 | \n",
- " 3362.372729 | \n",
- " 3300.399516 | \n",
- " 3249.023486 | \n",
- " 2939.802726 | \n",
- " 2629.522799 | \n",
- " 2557.450265 | \n",
- " 2363.574354 | \n",
- " 2296.596855 | \n",
- " 2210.364796 | \n",
- "
\n",
- " \n",
- " | 9 | \n",
- " PSO | \n",
- " F4 | \n",
- " 0.976889 | \n",
- " 89.760306 | \n",
- " 85.452817 | \n",
- " 80.136817 | \n",
- " 75.501265 | \n",
- " 70.348136 | \n",
- " 65.254231 | \n",
- " 59.284136 | \n",
- " 53.593403 | \n",
- " 48.781403 | \n",
- " 43.276854 | \n",
- " 37.693944 | \n",
- " 32.755011 | \n",
- " 28.160408 | \n",
- " 27.368415 | \n",
- " 24.148719 | \n",
- " 21.435781 | \n",
- " 18.768675 | \n",
- " 18.017429 | \n",
- " 17.762537 | \n",
- " 16.625056 | \n",
- " 16.565979 | \n",
- " 15.701459 | \n",
- " 15.333149 | \n",
- " 15.006977 | \n",
- " 14.836124 | \n",
- " 14.836124 | \n",
- " 14.836124 | \n",
- " 14.771812 | \n",
- " 14.618943 | \n",
- " 14.363203 | \n",
- " 14.218553 | \n",
- " 14.087128 | \n",
- " 13.566046 | \n",
- " 13.071113 | \n",
- " 13.001573 | \n",
- " 13.001573 | \n",
- " 13.001573 | \n",
- " 12.696868 | \n",
- " 12.696868 | \n",
- " 12.626412 | \n",
- " 12.428103 | \n",
- " 12.406141 | \n",
- " 12.134600 | \n",
- " 11.806561 | \n",
- " 11.617327 | \n",
- " 11.383517 | \n",
- " 11.243645 | \n",
- " 11.118397 | \n",
- " 11.076850 | \n",
- " 11.076850 | \n",
- "
\n",
- " \n",
- " | 10 | \n",
- " PSO | \n",
- " F4 | \n",
- " 0.970022 | \n",
- " 89.275125 | \n",
- " 83.629862 | \n",
- " 79.550743 | \n",
- " 74.318743 | \n",
- " 69.040346 | \n",
- " 63.909029 | \n",
- " 59.275125 | \n",
- " 54.060751 | \n",
- " 49.005850 | \n",
- " 43.081794 | \n",
- " 37.500136 | \n",
- " 33.709086 | \n",
- " 27.825001 | \n",
- " 23.690012 | \n",
- " 22.752714 | \n",
- " 21.710060 | \n",
- " 20.102304 | \n",
- " 18.466563 | \n",
- " 16.582291 | \n",
- " 16.582291 | \n",
- " 16.582291 | \n",
- " 14.778997 | \n",
- " 14.778997 | \n",
- " 14.778997 | \n",
- " 14.447877 | \n",
- " 14.447877 | \n",
- " 14.447877 | \n",
- " 14.061955 | \n",
- " 14.046603 | \n",
- " 13.614766 | \n",
- " 13.272456 | \n",
- " 13.180141 | \n",
- " 12.612728 | \n",
- " 12.465817 | \n",
- " 12.393493 | \n",
- " 12.253786 | \n",
- " 12.036155 | \n",
- " 10.992684 | \n",
- " 10.968937 | \n",
- " 10.824234 | \n",
- " 10.824234 | \n",
- " 10.303563 | \n",
- " 10.303563 | \n",
- " 10.303563 | \n",
- " 10.274812 | \n",
- " 9.900511 | \n",
- " 9.900511 | \n",
- " 9.772127 | \n",
- " 9.769182 | \n",
- " 9.764364 | \n",
- "
\n",
- " \n",
- " | 11 | \n",
- " PSO | \n",
- " F4 | \n",
- " 0.968264 | \n",
- " 90.002063 | \n",
- " 86.417589 | \n",
- " 80.505630 | \n",
- " 76.234189 | \n",
- " 71.429979 | \n",
- " 65.984312 | \n",
- " 60.138891 | \n",
- " 54.365979 | \n",
- " 48.765599 | \n",
- " 42.870423 | \n",
- " 38.475694 | \n",
- " 33.931789 | \n",
- " 31.016242 | \n",
- " 26.759818 | \n",
- " 22.876897 | \n",
- " 22.279970 | \n",
- " 20.521839 | \n",
- " 19.855174 | \n",
- " 19.855174 | \n",
- " 19.855174 | \n",
- " 19.683047 | \n",
- " 17.745068 | \n",
- " 17.352341 | \n",
- " 16.819421 | \n",
- " 16.277686 | \n",
- " 15.643854 | \n",
- " 15.182718 | \n",
- " 15.128656 | \n",
- " 13.756645 | \n",
- " 13.756645 | \n",
- " 13.756645 | \n",
- " 13.756645 | \n",
- " 13.756645 | \n",
- " 13.756645 | \n",
- " 13.738042 | \n",
- " 13.329167 | \n",
- " 13.035579 | \n",
- " 13.035579 | \n",
- " 13.031504 | \n",
- " 12.809380 | \n",
- " 12.720261 | \n",
- " 12.624425 | \n",
- " 12.365417 | \n",
- " 11.900102 | \n",
- " 11.679491 | \n",
- " 11.471685 | \n",
- " 11.471685 | \n",
- " 11.421590 | \n",
- " 11.195535 | \n",
- " 11.166306 | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " Optimizer objfname ExecutionTime ... Iter48 Iter49 Iter50\n",
- "0 SSA F3 1.757159 ... 3958.355427 3958.340907 3958.337686\n",
- "1 SSA F3 1.765435 ... 7691.740762 7691.721228 7691.706882\n",
- "2 SSA F3 1.718634 ... 2576.137962 2576.128898 2576.126138\n",
- "3 SSA F4 1.406983 ... 16.933022 16.932969 16.932945\n",
- "4 SSA F4 1.327610 ... 22.185443 22.185379 22.185344\n",
- "5 SSA F4 1.354242 ... 17.607996 17.607921 17.607890\n",
- "6 PSO F3 1.222843 ... 3292.630866 3270.243950 3245.750870\n",
- "7 PSO F3 1.227612 ... 2621.088148 2566.719503 2549.322518\n",
- "8 PSO F3 1.201217 ... 2363.574354 2296.596855 2210.364796\n",
- "9 PSO F4 0.976889 ... 11.118397 11.076850 11.076850\n",
- "10 PSO F4 0.970022 ... 9.772127 9.769182 9.764364\n",
- "11 PSO F4 0.968264 ... 11.421590 11.195535 11.166306\n",
- "\n",
- "[12 rows x 53 columns]"
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 14
- }
- ]
+ "45a8720657764f1585859c3d3dae8745": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
},
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "7gw9qJb7vedV",
- "colab_type": "text"
- },
- "source": [
- "Convergence Curve Plot
"
- ]
+ "641b5f943c8e419583baaf02485acffb": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "14hzxM7spueJ",
- "colab_type": "code",
- "outputId": "6e047a4c-b0df-48c1-d4b1-447240fd9384",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 49,
- "referenced_widgets": [
- "e4a83005aaa043d48540b6f4202070e5",
- "641b5f943c8e419583baaf02485acffb",
- "45a8720657764f1585859c3d3dae8745"
- ]
- }
- },
- "source": [
- "#Select convergence curve to show\n",
- "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('convergence')]\n",
- "\n",
- "drop_plot_convergence = widgets.Dropdown(options=filenames, description='Select plot:')\n",
- "drop_plot_convergence"
- ],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "e4a83005aaa043d48540b6f4202070e5",
- "version_minor": 0,
- "version_major": 2
- },
- "text/plain": [
- "Dropdown(description='Select plot:', options=('convergence-F4.png', 'convergence-F3.png'), value='convergence-…"
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
+ "75acaa0a501744f7817d0864462e8a7e": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "ZMstknfRafMj",
- "colab_type": "code",
- "outputId": "b4b18695-4f57-4804-e992-7fd6b72ef746",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 279
- }
- },
- "source": [
- "#Show selected convergence curve\n",
- "Image(foldername +'/' + drop_plot_convergence.value)"
+ "91e278780d5b4dcda11e832e971044f3": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "boxplot-F3.png",
+ "boxplot-F4.png"
],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 18
- }
- ]
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select plot:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 1,
+ "layout": "IPY_MODEL_b08d8ae9147047acac84d9e52bfee64f",
+ "style": "IPY_MODEL_c1b161beed5c4b128b06a09d7a5be2fe"
+ }
},
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "HYEl6buevixm",
- "colab_type": "text"
- },
- "source": [
- "Box Plot
"
- ]
+ "b08d8ae9147047acac84d9e52bfee64f": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "rWF1AKS5bPvV",
- "colab_type": "code",
- "outputId": "9cdefbdf-8a8c-4a0f-cbae-3a0aba9528df",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 49,
- "referenced_widgets": [
- "91e278780d5b4dcda11e832e971044f3",
- "c1b161beed5c4b128b06a09d7a5be2fe",
- "b08d8ae9147047acac84d9e52bfee64f"
- ]
- }
- },
- "source": [
- "#Select boxplot to show\n",
- "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('boxplot')]\n",
- "\n",
- "drop_boxplot = widgets.Dropdown(options=filenames, description='Select plot:')\n",
- "drop_boxplot"
- ],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "display_data",
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "91e278780d5b4dcda11e832e971044f3",
- "version_minor": 0,
- "version_major": 2
- },
- "text/plain": [
- "Dropdown(description='Select plot:', options=('boxplot-F3.png', 'boxplot-F4.png'), value='boxplot-F3.png')"
- ]
- },
- "metadata": {
- "tags": []
- }
- }
- ]
+ "c1b161beed5c4b128b06a09d7a5be2fe": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
},
- {
- "cell_type": "code",
- "metadata": {
- "id": "paBsvZRktfTh",
- "colab_type": "code",
- "outputId": "61ebf09e-07cc-4718-d273-0ed5e02766f6",
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 265
- }
- },
- "source": [
- "#Show selected boxplot\n",
- "Image(foldername +'/' + drop_boxplot.value)"
+ "e4a83005aaa043d48540b6f4202070e5": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "convergence-F4.png",
+ "convergence-F3.png"
],
- "execution_count": 0,
- "outputs": [
- {
- "output_type": "execute_result",
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa4AAAD4CAYAAAC0VQLEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAb6ElEQVR4nO3de2xUZeLG8WdooWC5ZEtbKAydFqG09DbAIC1gfwopLhu5iLJaMaGWTUFdVsFqkGyibMJVCBeXILMCRXFL1gtlQ9ZGKMJurBSnUAywsiAMtojdolQuBUvh/P5gmVgpTi/TTg/9fpIm8s45c55hEh/e95yeYzEMwxAAACbRwd8BAABoDIoLAGAqFBcAwFQoLgCAqVBcAABTCWzNg4WGhioqKqo1DwkApud2u3Xu3Dl/x2gzWrW4oqKi5HK5WvOQAGB6Dz74oE6dOqWrV6/6O0qr6dy5s6xWqzp27Hjba61aXACAxsvMzFS3bt0UFRUli8Xi7zgtzjAMfffddyovL1d0dPRtr3OOCwDaOKvVqp49e7aL0pIki8Winj173nGGSXEBQBtnsVjaTWnd8kufl+ICAJgKxQUAJtO3X6RnFuaLn779Iht03IULFyo+Pl5JSUmy2+0qLi7Wjh07NGTIECUnJ2vw4MFav359nX0mT56slJQUn35+Ls4AAJP5prxMT238yGfvtyVrvNdtPvvsM+3YsUMHDhxQUFCQzp07p8uXL+uRRx7R/v37ZbVa9eOPP8rtdnv2qaqqUklJibp27aqTJ0+qf//+PsnLjAsA4NXZs2cVGhqqoKAgSTd/L7dbt26qra1Vz549JUlBQUEaNGiQZ58PP/xQEyZM0BNPPKGtW7f6LIvX4iorK9ODDz6owYMHKz4+XqtXr5YkvfTSS4qNjVVSUpIeeeQRVVVV+SwUAKBtGTdunMrKyhQTE6Nnn31We/fuVUhIiCZOnCibzaaMjAy9++67unHjhmefvLw8ZWRkKCMjQ3l5eT7L4rW4AgMDtWLFCh09elT79u3T2rVrdfToUaWnp+vw4cP64osvFBMTo8WLF/ssVFvkq7VkADCjrl27qqSkRE6nU2FhYXr88ceVm5urt956S4WFhbrvvvu0fPlyZWVlSZIqKip0/PhxjR49WjExMerYsaMOHz7skyxeiysiIkJDhw6VJHXr1k1xcXE6c+aMxo0bp8DAm6fIUlJSVF5e7pNAbZVhGF5/GrIdAJhVQECAHnjgAS1YsEB//vOf9cEHH0iSEhMTNWfOHO3cudMz9re//U3nz59XdHS0oqKi5Ha7fTbratQ5LrfbrYMHD2rEiBF1xjdu3Kjx472f3AMAmNOxY8d0/Phxz59LS0vVq1cv7dmzp86YzWaTdHOZsKCgQG63W263WyUlJT47z9XgqwovXbqkRx99VKtWrVL37t094wsXLlRgYKCmTZtW735Op1NOp1OSVFlZ2cy4AIA+1n4NuhKwMe/nzaVLlzR79mxVVVUpMDBQAwYM0OrVqzVz5kzNnDlTXbp0UXBwsHJzc+V2u3X69Ok6l8FHR0erR48eKi4uvm3y01gWowHrV9euXdPDDz+shx56SHPnzvWM5+bmav369SosLNQ999zj9WAOh+OuvsmuxWJhORCAz+3evVtjxozxd4xW9+9//1txcXG3jXudcRmGoRkzZiguLq5OaRUUFGjZsmXau3dvg0oLAABf8Fpcn376qd555x0lJibKbrdLkhYtWqQ//OEP+vHHH5Weni7p5gUab775ZsumBQC0e16La/To0fUuf/3mN79pkUAAAPwS7pwBADAVigsAYCoUFwDAVCguADCZKGs/nz7WJKoBv8cVEBAgu92uhIQETZ06VdXV1ZLqf9SJJNXU1OiFF17QgAEDNHDgQE2aNMlnd1jisSYAYDKnz5Trypz13jdsoC4rZ3rfpksXlZaWSpKmTZumN998U6mpqbc96qSmpkaSNH/+fF28eFHHjh1TQECANm3apClTpqi4uLjZ921lxgUAaJT7779fJ06cqPdRJ3369FF1dbU2bdqklStXKiAgQJL09NNPKygoSLt372728SkuAECD1dbW6qOPPlJiYmK9jzqRpBMnTigyMrLO7QGlm3dPOnLkSLMzUFwAAK+uXLkiu90uh8OhyMhIzZgx446POmlpnOMCAHj103NcP3XrUScPPPCAEhMTtXnzZk2dOlVff/21Ll68qG7dunm2LSkp0cMPP9zsLMy4AABNUt+jTmw2m4KDgzV9+nTNnTtX169flyS9/fbbqq6u9snNgplxAYDJ2PpaG3QlYGPerynqe9TJrcdYLV68WDk5OYqJiVGHDh0UGxurbdu2+eRJ8A16rImv8FgTAGg8HmtSF0uFAABTobgAAKZCcQEATIXiAgCYitfiKisr04MPPqjBgwcrPj5eq1evliR9//33Sk9P18CBA5Wenq7z58+3eFgAALwWV2BgoFasWKGjR49q3759Wrt2rY4ePaolS5Zo7NixOn78uMaOHaslS5a0Rl4AQDvntbgiIiI0dOhQSVK3bt0UFxenM2fOaPv27Zo+fbokafr06crPz2/ZpAAASZLNavPpY01sVluDjltRUaEnn3xS/fv317Bhw5Samqpt27ZpyJAhnrtq1NbWqmvXrtqyZYtnv2HDhunAgQOSpPz8fCUlJSkuLk6JiYlN6o5G/QKy2+3WwYMHNWLECFVUVCgiIkKS1Lt3b1VUVNS7j9Pp9PxCWmVlZaMDAgDq+vrM1zq44Aufvd+QV5O8bmMYhiZPnqzp06frr3/9qyTp9OnT+vvf/65Ro0apqKhIdrtdhw4dUkxMjIqKivTUU0/p8uXL+uqrr5ScnKxDhw4pJydHO3fuVHR0tE6dOqX09HT1799fSUneM9zS4IszLl26pEcffVSrVq267Y6/t1q7PtnZ2XK5XHK5XAoLC2twsNbWt19ks//VIqlZ+/ftF+nnvwUAqN/u3bvVqVMnzZo1yzNms9k0e/ZsjRw5UkVFRZKkoqIizZo1yzMD279/v4YNG6aAgAAtX75c8+fPV3R0tCQpOjpar7zyil5//fVGZWnQjOvatWt69NFHNW3aNE2ZMkWS1KtXL509e1YRERE6e/aswsPDG3Xgtuab8jI9tfEjv2bYkjXer8cHgDs5cuSI57TRz40aNUp//OMfJd0srldffVV5eXm6ePGiioqKNHLkSM975OTk1NnX4XBo7dq1jcridcZlGIZmzJihuLg4zZ071zM+ceJEbd68WZK0efNmTZo0qVEHBgCY13PPPafk5GQNHz5cNptNNTU1+vbbb/Xll19q0KBBGj58uIqLi1VUVKRRo0b59Nhei+vTTz/VO++8o927d8tut8tut+sf//iH5s2bp507d2rgwIHatWuX5s2b59NgAIC2Iz4+3nOBhSStXbtWhYWFnmsXRo4cqffee08RERGyWCxKSUnRp59+qv379ys1NVWSNHjwYJWUlNR535KSEsXHxzcqi9elwtGjR9/xxrGFhYWNOhgAwJzGjBmj+fPna926dXrmmWckSdXV1Z7XR44cqVWrVikzM1OSlJqaqpdeekm9e/dWjx49JEk5OTmaOnWqxowZo6ioKLndbi1atEjvv/9+o7LwWBMAMJnIvpENuhKwMe/njcViUX5+vubMmaNly5YpLCxMwcHBWrp0qaSb57nmzJnjmV1FRETo+vXrnvNbkmS327V06VJNmDBB165dU8eOHbVs2TLZ7fZG5aW4AMBkTpef9stxIyIitHXr1npfGz58+G2rc263+7btpkyZ4rnIr6m4VyEAwFQoLgCAqVBcANDGGYbR7p6u/kufl+ICgDauvLxc3333XbspL8Mw9N1336lz5871vs7FGQDQxuXm5iotLa1d3e+1c+fOslqt9b5GcQFAG3fx4kXP/f3AUiEAwGQoLgCAqVBcAABTobgAAKZCcQEATIXiAgCYCsUFADAVigsAYCpeiysrK0vh4eFKSEjwjJWWliolJUV2u10Oh0P79+9v0ZAAANzitbgyMzNVUFBQZ+zll1/Wq6++qtLSUv3pT3/Syy+/3GIBAQD4Ka/FlZaWppCQkDpjFotFFy5ckCT98MMP6tOnT8ukAwDgZ5p0r8JVq1bpoYceUk5Ojm7cuKGioqI7but0OuV0OiWpXd0gEgDQMpp0cca6deu0cuVKlZWVaeXKlZoxY8Ydt83OzpbL5ZLL5VJYWFiTgwIAIDWxuDZv3qwpU6ZIkqZOncrFGQCAVtOk4urTp4/27t0rSdq9e7cGDhzo01AAANyJ13NcGRkZ2rNnj86dOyer1aoFCxboL3/5i55//nnV1taqc+fOnnNYAAC0NIvRis+CdjgccrlcrXW4xnmth78T3PTaD/5OAKCNadP/7/QDnoD8P5YFF/TUxo/8mmFL1ngZr/k1AgC0edzyCQBgKhQXAMBUWCr8nz7WftqSNd7vGQAAv4zi+p8zZV83+z0sFota8VoXAGiXWCoEAJgKxQUAMBWWChvIYrH4ZDuWEgGgeSiuBqJwAKBtYKkQAGAqFBcAwFQoLgCAqVBcAABTobgAAKZCcQEATMVrcWVlZSk8PFwJCQl1xt944w3FxsYqPj5eL7/8cosFBADgp7wWV2ZmpgoKCuqMffLJJ9q+fbsOHTqkI0eOKCcnp8UCAgDwU16LKy0tTSEhIXXG1q1bp3nz5ikoKEiSFB4e3jLpAAD4mSad4/rPf/6jf/3rXxoxYoT+7//+T59//vkdt3U6nXI4HHI4HKqsrGxyUAAApCbe8qm2tlbff/+99u3bp88//1y//e1vdfLkyXrv05edna3s7GxJksPhaF5aAEC716QZl9Vq1ZQpU2SxWHTfffepQ4cOOnfunK+zAQBwmyYV1+TJk/XJJ59IurlsWFNTo9DQUJ8GAwCgPl6XCjMyMrRnzx6dO3dOVqtVCxYsUFZWlrKyspSQkKBOnTpp8+bNDX7sBwAAzeG1uPLy8uod37Jli8/DAADgDXfOAACYCsUFADAVigsAYCoUFwDAVCguAICpUFwAAFOhuAAApkJxAQBMheICAJgKxQUAMBWKCwBgKhQXAMBUKC4AgKlQXAAAU6G4AACmQnEBAEzFa3FlZWUpPDxcCQkJt722YsUKWSwWnTt3rkXCAQDwc16LKzMzUwUFBbeNl5WV6eOPP1ZkZGSLBAMAoD5eiystLU0hISG3jc+ZM0fLli2TxWJpkWAAANQnsCk7bd++XX379lVycrLXbZ1Op5xOpySpsrKyKYcDAMCj0cVVXV2tRYsW6eOPP27Q9tnZ2crOzpYkORyOxh4OAIA6Gn1V4VdffaVTp04pOTlZUVFRKi8v19ChQ/Xtt9+2RD4AAOpo9IwrMTFR//3vfz1/joqKksvlUmhoqE+DAQBQH68zroyMDKWmpurYsWOyWq3asGFDa+QCAKBeXmdceXl5v/i62+32VRYAALzizhkAAFOhuAAApkJxAQBMheICAJgKxQUAMBWKCwBgKhQXAMBUKC4AgKlQXAAAU6G4AACmQnEBAEyF4gIAmArFBQAwFYoLAGAqFBcAwFS8FldWVpbCw8OVkJDgGXvppZcUGxurpKQkPfLII6qqqmrRkAAA3OK1uDIzM1VQUFBnLD09XYcPH9YXX3yhmJgYLV68uMUCAgDwU16LKy0tTSEhIXXGxo0bp8DAmw9PTklJUXl5ecukAwDgZ5p9jmvjxo0aP368L7IAAOBVYHN2XrhwoQIDAzVt2rQ7buN0OuV0OiVJlZWVzTkcAABNn3Hl5uZqx44devfdd2WxWO64XXZ2tlwul1wul8LCwpp6OAAAJDVxxlVQUKBly5Zp7969uueee3ydCQCAO/I648rIyFBqaqqOHTsmq9WqDRs26Pe//70uXryo9PR02e12zZo1qzWyAgDgfcaVl5d329iMGTNaJAwAAN5w5wwAgKlQXAAAU6G4AACmQnEBAEyF4gIAmArFhbtClLWfLBaLX3+irP38/dcAtAvNuuUT0Fa4f3dBUnc/p7jg5+MD7QPFhbuCZcEFXZmz3q8ZuqycKeM1v0YA2gWWCgEApkJxAQBMheICAJgKxQUAMBWKCwBgKhQXAMBUuBwedwVbX6u6rJzp9wwAWh7FhbuCu7ysWftbLBYZhuGjNABaktelwqysLIWHhyshIcEz9v333ys9PV0DBw5Uenq6zp8/36IhAQC4xWtxZWZmqqCgoM7YkiVLNHbsWB0/flxjx47VkiVLWiwgAAA/5bW40tLSFBISUmds+/btmj59uiRp+vTpys/Pb5l0AAD8TJPOcVVUVCgiIkKS1Lt3b1VUVNxxW6fTKafTKUmqrKxsyuEAAPBo9uXwtx7pcCfZ2dlyuVxyuVwKCwtr7uEAAO1ck4qrV69eOnv2rCTp7NmzCg8P92koAADupEnFNXHiRG3evFmStHnzZk2aNMmnoQBf8/YQyIZs80srCwBaj9fiysjIUGpqqo4dOyar1aoNGzZo3rx52rlzpwYOHKhdu3Zp3rx5rZEVaDLDMHzyA8D/vF6ckZeXV+94YWGhz8MAAOAN9yoEAJgKxQUAMBWKCwBgKhQXAMBUKC4AgKlQXAAAU6G4AACmQnEBAEyF4gIAmArFBQAwFYoLAGAqFBcAwFQoLgCAqVBcAABTobgAAKZCcQEATKVZxbVy5UrFx8crISFBGRkZunr1qq9yAQBQryYX15kzZ7RmzRq5XC4dPnxY169f19atW32ZDQCA2zRrxlVbW6srV66otrZW1dXV6tOnj69yAQBQryYXV9++fZWTk6PIyEhFRESoR48eGjdu3G3bOZ1OORwOORwOVVZWNissAABNLq7z589r+/btOnXqlL755htdvnxZW7ZsuW277OxsuVwuuVwuhYWFNSssAABNLq5du3YpOjpaYWFh6tixo6ZMmaKioiJfZgMASZLFYmn2D+4eTS6uyMhI7du3T9XV1TIMQ4WFhYqLi/NlNgCQJBmG8Ys/Dd0Gd4cmF9eIESP02GOPaejQoUpMTNSNGzeUnZ3ty2wAANzGYrTiP0UcDodcLldrHQ5AO2GxWO7qWRX/76yLO2cAAEyF4gIAmArFBcCvbFabT64YbO572Kw2P/9NoKEC/R0AQPv29ZmvdXDBF/6OoSGvJvk7AhqIGRcAwFQoLgCAqVBcAABTobgAAKbCxRkA/Mp4tbt0Y7S/Y9zMAVOguAD4lWXBhTZzVaHxmr9ToCFYKgQAmArFBQAwFYoLAGAqnOMC4FeRfSPbxF0rIvtG+jsCGojiAuBXp8tPN/s97vbHmqCuZi0VVlVV6bHHHlNsbKzi4uL02Wef+SoXAAD1ataM6/nnn9evf/1rvf/++6qpqVF1dbWvcgEAUK8mF9cPP/ygf/7zn8rNzZUkderUSZ06dfJVLgDwuPXokuZsw1Li3aPJS4WnTp1SWFiYnn76aQ0ZMkS/+93vdPny5du2czqdcjgccjgcqqysbFZYAO2TYRjN/sHdo8nFVVtbqwMHDuiZZ57RwYMHFRwcrCVLlty2XXZ2tlwul1wul8LCwpoVFgCAJheX1WqV1WrViBEjJEmPPfaYDhw44LNgAADUp8nF1bt3b/Xr10/Hjh2TJBUWFmrw4ME+CwYAQH2adVXhG2+8oWnTpqmmpkb9+/fXpk2bfJULAIB6Nau47Ha7XC6Xr7IAAOAV9yoEAJgKxQUAMBWKCwBgKhajFX8zLzQ0VFFRUa11uFZXWVnJ76qZFN+dud3t35/b7da5c+f8HaPNaNXiuts5HA4uVjEpvjtz4/trX1gqBACYCsUFADAVisuHsrOz/R0BTcR3Z258f+0L57gAAKbCjAsAYCoUFwDAVCiuRli4cKHi4+OVlJQku92u4uJi7dixQ0OGDFFycrIGDx6s9evX19ln8uTJSklJ8VNiSFJAQIDsdrsSEhI0depUVVdXS6r/+5SkmpoavfDCCxowYIAGDhyoSZMmqby83J8foV2qqKjQk08+qf79+2vYsGFKTU3Vtm3bNGTIEJWWlkq6+VzArl27asuWLZ79hg0b5nnEUn5+vpKSkhQXF6fExETl5+f75bPAxww0SFFRkZGSkmJcvXrVMAzDqKysNNxutxEREWGUlZUZhmEYV69eNb788kvPPufPnzesVqsRGxtrfPXVV37JDcMIDg72/PeTTz5prFixot7v88yZM4ZhGMaLL75oZGVlGbW1tYZhGMbGjRuN4cOHGzdu3Gj98O3UjRs3jJSUFGPdunWeMbfbbaxZs8Z47rnnjLVr1xqGYRgul8sYMmSI8cwzzxiGYRiXLl0yevToYdTW1hqlpaXGvffea5w8edIwDMM4efKkce+99xqHDh1q/Q8En2LG1UBnz55VaGiogoKCJN28C0i3bt1UW1urnj17SpKCgoI0aNAgzz4ffvihJkyYoCeeeEJbt271S27Udf/99+vEiRP1fp99+vRRdXW1Nm3apJUrVyogIECS9PTTTysoKEi7d+/2Z/R2Zffu3erUqZNmzZrlGbPZbJo9e7ZGjhypoqIiSVJRUZFmzZrlmYHt379fw4YNU0BAgJYvX6758+crOjpakhQdHa1XXnlFr7/+eut/IPgUxdVA48aNU1lZmWJiYvTss89q7969CgkJ0cSJE2Wz2ZSRkaF3331XN27c8OyTl5enjIwMZWRkKC8vz4/pId1cVvroo4+UmJhY7/cpSSdOnFBkZKS6d+9eZ1+Hw6EjR474I3a7dOTIEQ0dOrTe10aNGlWnuNLS0hQUFKSLFy+qqKhII0eO9LzHsGHD6uzL93h3oLgaqGvXriopKZHT6VRYWJgef/xx5ebm6q233lJhYaHuu+8+LV++XFlZWZJurs8fP35co0ePVkxMjDp27KjDhw/7+VO0T1euXJHdbpfD4VBkZKRmzJhxx+8TbdNzzz2n5ORkDR8+XDabTTU1Nfr222/15ZdfatCgQRo+fLiKi4tVVFSkUaNG+TsuWpq/1yrN6r333jMefvjhOmOVlZVG165dDcMwjDVr1hjdu3c3bDabYbPZjF/96lfG/Pnz/RG13fvpOa47ufV9Xrp0yQgJCTEuXLhQ5/X777/f2LVrV0tFxM/s2rXLSEtLqzNWWVlp2Gw2wzAMY+rUqcaaNWuM8ePHG4ZhGB988IHx2muvGaGhoUZVVZVhGIYxbdo0Y8OGDXXeY8OGDcZTTz3V8h8ALYoZVwMdO3ZMx48f9/y5tLRUvXr10p49e+qM2Ww2STeXCQsKCuR2u+V2u1VSUsJ5rjakvu/TZrMpODhY06dP19y5c3X9+nVJ0ttvv63q6mqNGTPGX3HbnTFjxujq1atat26dZ+zW1aCSNHLkSK1atUqpqamSpNTUVL399tvq3bu3evToIUnKycnR4sWL5Xa7Jd28w/qiRYv04osvtt4HQYsI9HcAs7h06ZJmz56tqqoqBQYGasCAAVq9erVmzpypmTNnqkuXLgoODlZubq7cbrdOnz5d5zL46Oho9ejRQ8XFxRoxYoQfPwmk+r9Pp9MpSVq8eLFycnIUExOjDh06KDY2Vtu2bZPFYvFz6vbDYrEoPz9fc+bM0bJlyxQWFqbg4GAtXbpU0s3zXHPmzPEUV0REhK5fv+45vyVJdrtdS5cu1YQJE3Tt2jV17NhRy5Ytk91u98tngu9wyycAgKmwVAgAMBWKCwBgKhQXAMBUKC4AgKlQXAAAU6G4AACmQnEBAEzl/wHNAEm0iE4TdgAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "tags": []
- },
- "execution_count": 22
- }
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "eahYmfKKJ62g",
- "colab_type": "text"
- },
- "source": [
- "Citation Request
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "PkabkcHFKFIK",
- "colab_type": "text"
- },
- "source": [
- "Please include these citations if you plan to use this Framework:\n",
- "\n",
- "* Faris, Hossam, Ibrahim Aljarah, Seyedali Mirjalili, Pedro A. Castillo, and Juan Julián Merelo Guervós. \"EvoloPy: An Open-source Nature-inspired Optimization Framework in Python.\" In IJCCI (ECTA), pp. 171-177. 2016.\n",
- "* Qaddoura, Raneem, Hossam Faris, Ibrahim Aljarah, and Pedro A. Castillo. \"EvoCluster: An Open-Source Nature-Inspired Optimization Clustering Framework in Python.\" In International Conference on the Applications of Evolutionary Computation (Part of EvoStar), pp. 20-36. Springer, Cham, 2020.\n",
- "* Ruba Abu Khurma, Ibrahim Aljarah, Ahmad Sharieh, and Seyedali Mirjalili. Evolopy-fs: An open-source nature-inspired optimization framework in python for feature selection. In Evolutionary Machine Learning Techniques, pages 131–173. Springer, 2020"
- ]
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select plot:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 0,
+ "layout": "IPY_MODEL_45a8720657764f1585859c3d3dae8745",
+ "style": "IPY_MODEL_641b5f943c8e419583baaf02485acffb"
+ }
}
- ]
-}
\ No newline at end of file
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/README.md b/README.md
index 90c45cc..b1e13a4 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
-
-

-
+# VecMetaPy: A vectorized framework for metaheuristic optimization in Python
+Paper: https://doi.org/10.1016/j.advengsoft.2022.103092
+VecMetaPy is an efficient version of EvoloPy, with vectorized implementation of the 23 benchmark functions and the five algorithms. The guidelines to use VecMetaPy are exactly the same as EvoloPy, with the only difference of using vectorized_optimizer.py instead of optimizer.py. You can find more in the VecMetaPy.ipynb notebook.
-# EvoloPy: An open source nature-inspired optimization toolbox for global optimization in Python
+## EvoloPy: An open source nature-inspired optimization toolbox for global optimization in Python
The EvoloPy toolbox provides classical and recent nature-inspired metaheuristic for the global optimization. The list of optimizers that have been implemented includes Particle Swarm Optimization (PSO), Multi-Verse Optimizer (MVO), Grey Wolf Optimizer (GWO), and Moth Flame Optimization (MFO). The full list of implemented optimizers is available here https://github.com/7ossam81/EvoloPy/wiki/List-of-optimizers
diff --git a/VecMetaPy.ipynb b/VecMetaPy.ipynb
new file mode 100644
index 0000000..dd1b164
--- /dev/null
+++ b/VecMetaPy.ipynb
@@ -0,0 +1,789 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "IiNG95DSmRmt"
+ },
+ "source": [
+ "# VecMetaPy\n",
+ "## A vectorized framework for metaheuristic optimization in Python"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "hKzyadcdm6yw"
+ },
+ "source": [
+ "VecMetaPy is a vectorized version of EvoloPy (https://github.com/7ossam81/EvoloPy) meaning that the implementation of the optimization algorithms and benchmark functions have been vectorized using the features of the numpy library including broadcasting. All the benchmark functions from F1 to F23 have been vectorized, as well as the five optimization algorithms: Grey Wolf Optimizer (GWO), Whale Optimization Algorithm (WOA), Moth-Flame Optimization (MFO), Sine-Cosine Optimization (SCA) and Salp Swarm Optimization (SSA)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "ehxW3t0puwpm"
+ },
+ "source": [
+ "Features
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "TufeO-Rturq8"
+ },
+ "source": [
+ "* The implementation of all benchmark functions have been vectorized.\n",
+ "* The implementation of the five algorithms mentioned above have been vectorized.\n",
+ "* The implementation uses the fast array manipulation using [NumPy] (http://www.numpy.org/)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "oG2TRdx-vf8m"
+ },
+ "source": [
+ "Installation
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "_XpMUOZNvi9H"
+ },
+ "source": [
+ "Python 3.xx is required."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "f_PVAZC6v7px"
+ },
+ "source": [
+ "GitHub
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "aW_66ovkv2ev"
+ },
+ "source": [
+ "Clone the Git repository https://github.com/BaratiLab/VecMetaPy"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "QgrmE2wEyC_X"
+ },
+ "source": [
+ "!git clone https://github.com/BaratiLab/VecMetaPy.git"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "_yVUbtjcyiZR"
+ },
+ "source": [
+ "# Change working directory\n",
+ "import os\n",
+ "os.chdir(\"VecMetaPy/\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "S4j-t-nXxaM7"
+ },
+ "source": [
+ "Install Packages
"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "-mG8vIuIW1n8"
+ },
+ "source": [
+ "#Install NumPy, SciPy, sklearn, pandas, and matplotlib\n",
+ "!pip install -r requirements.txt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "fEon-wGyZuq4"
+ },
+ "source": [
+ "User Preferences
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "cFF9ioDfyppV"
+ },
+ "outputs": [],
+ "source": [
+ "# Select optimizers\n",
+ "# \"GWO\",\"WOA\",\"MFO\", \"SCA\", \"SSA\",\n",
+ "optimizer=[\"SSA\",\"SCA\",\"GWO\", \"WOA\", \"MFO\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "SuWo96bB6ohe"
+ },
+ "outputs": [],
+ "source": [
+ "# Select benchmark function\"\n",
+ "# \"F1\" to \"F23\"\n",
+ "objectivefunc_idx = [1,8,14]\n",
+ "# objectivefunc_idx = range(1, 24) # to include all objective functions\n",
+ "objectivefunc = [f'F{i}' for i in objectivefunc_idx] "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "CQyWvdS3Ipgt"
+ },
+ "outputs": [],
+ "source": [
+ "# Select number of repetitions for each experiment. \n",
+ "# To obtain meaningful statistical results, usually 30 independent runs are executed for each algorithm.\n",
+ "NumOfRuns = 3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "2djrIRh26sKB"
+ },
+ "outputs": [],
+ "source": [
+ "# Select general parameters for all optimizers (population size, number of iterations) ....\n",
+ "params = {'PopulationSize' : 30, 'Iterations' : 200}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "aJb075Np62GM"
+ },
+ "outputs": [],
+ "source": [
+ "# Choose whether to Export the results in different formats\n",
+ "export_flags = {'Export_avg':True, 'Export_details':True, \n",
+ "'Export_convergence':True, 'Export_boxplot':True}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "KAgXf1QkZD7X"
+ },
+ "source": [
+ "Run Framework
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "APzDcxiwI8A2"
+ },
+ "outputs": [],
+ "source": [
+ "# Run VecMetaPy\n",
+ "from vectorized_optimizer import run\n",
+ "run(optimizer, objectivefunc, NumOfRuns, params, export_flags)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "1mB9AVhQuwbH"
+ },
+ "source": [
+ "Results Files and Plots
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "642Oh7QUpRhL"
+ },
+ "outputs": [],
+ "source": [
+ "#import some useful packages to view the results' files in colab\n",
+ "import pandas as pd\n",
+ "from IPython.display import Image\n",
+ "import os\n",
+ "import datetime\n",
+ "import ipywidgets as widgets"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "3a32992a7be9497c949bc06a2e838a1d",
+ "3633a55c7efe490784594bad5694800d",
+ "75acaa0a501744f7817d0864462e8a7e"
+ ]
+ },
+ "colab_type": "code",
+ "id": "UOLHaWwBRf7D",
+ "outputId": "4423bcec-4cd7-4155-d923-5a6e7d731a9a"
+ },
+ "outputs": [],
+ "source": [
+ "#Select the experiments folder\n",
+ "foldernames = [filename for filename in os.listdir() if filename.startswith(str(datetime.datetime.now().year))]\n",
+ "drop_folder = widgets.Dropdown(options=foldernames, description='Select folder:')\n",
+ "drop_folder"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {},
+ "colab_type": "code",
+ "id": "xm8UuPRA6uIb"
+ },
+ "outputs": [],
+ "source": [
+ "#Get the selected folder\n",
+ "foldername = drop_folder.value"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "qjNFP9NqvNV3"
+ },
+ "source": [
+ "Average Results File
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 193
+ },
+ "colab_type": "code",
+ "id": "U_PNBYEYp2cn",
+ "outputId": "d6fcb639-8d52-400c-fced-468475b9c789"
+ },
+ "outputs": [],
+ "source": [
+ "#Show the average results file\n",
+ "filename = foldername +'/experiment.csv' \n",
+ "df = pd.read_csv(filename)\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "sXSfvROovXRc"
+ },
+ "source": [
+ "Detailed Results File
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 441
+ },
+ "colab_type": "code",
+ "id": "RXU4upcgqcX_",
+ "outputId": "9ecd8e8f-c243-417c-b0d1-f73c5f0072c8"
+ },
+ "outputs": [],
+ "source": [
+ "#Show the detailed results file\n",
+ "filename = foldername +'/experiment_details.csv' \n",
+ "df = pd.read_csv(filename)\n",
+ "df.head(12)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "7gw9qJb7vedV"
+ },
+ "source": [
+ "Convergence Curve Plot
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "e4a83005aaa043d48540b6f4202070e5",
+ "641b5f943c8e419583baaf02485acffb",
+ "45a8720657764f1585859c3d3dae8745"
+ ]
+ },
+ "colab_type": "code",
+ "id": "14hzxM7spueJ",
+ "outputId": "6e047a4c-b0df-48c1-d4b1-447240fd9384"
+ },
+ "outputs": [],
+ "source": [
+ "#Select convergence curve to show\n",
+ "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('convergence')]\n",
+ "\n",
+ "drop_plot_convergence = widgets.Dropdown(options=filenames, description='Select plot:')\n",
+ "drop_plot_convergence"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 279
+ },
+ "colab_type": "code",
+ "id": "ZMstknfRafMj",
+ "outputId": "b4b18695-4f57-4804-e992-7fd6b72ef746"
+ },
+ "outputs": [],
+ "source": [
+ "#Show selected convergence curve\n",
+ "Image(foldername +'/' + drop_plot_convergence.value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "colab_type": "text",
+ "id": "HYEl6buevixm"
+ },
+ "source": [
+ "Box Plot
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 49,
+ "referenced_widgets": [
+ "91e278780d5b4dcda11e832e971044f3",
+ "c1b161beed5c4b128b06a09d7a5be2fe",
+ "b08d8ae9147047acac84d9e52bfee64f"
+ ]
+ },
+ "colab_type": "code",
+ "id": "rWF1AKS5bPvV",
+ "outputId": "9cdefbdf-8a8c-4a0f-cbae-3a0aba9528df"
+ },
+ "outputs": [],
+ "source": [
+ "#Select boxplot to show\n",
+ "filenames = [filename for filename in os.listdir(foldername) if filename.startswith('boxplot')]\n",
+ "\n",
+ "drop_boxplot = widgets.Dropdown(options=filenames, description='Select plot:')\n",
+ "drop_boxplot"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 265
+ },
+ "colab_type": "code",
+ "id": "paBsvZRktfTh",
+ "outputId": "61ebf09e-07cc-4718-d273-0ed5e02766f6"
+ },
+ "outputs": [],
+ "source": [
+ "#Show selected boxplot\n",
+ "Image(foldername +'/' + drop_boxplot.value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Citation Request\n",
+ "Please include these citations if you plan to use this Framework:\n",
+ "\n",
+ "* VecMetaPy Paper: https://doi.org/10.1016/j.advengsoft.2022.103092\n",
+ "\n",
+ "\n",
+ "* Faris, Hossam, Ibrahim Aljarah, Seyedali Mirjalili, Pedro A. Castillo, and Juan Julián Merelo Guervós. \"EvoloPy: An Open-source Nature-inspired Optimization Framework in Python.\" In IJCCI (ECTA), pp. 171-177. 2016.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [],
+ "include_colab_link": true,
+ "name": "EvoloPy.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.3"
+ },
+ "widgets": {
+ "application/vnd.jupyter.widget-state+json": {
+ "3633a55c7efe490784594bad5694800d": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
+ },
+ "3a32992a7be9497c949bc06a2e838a1d": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "2020-05-15-13-41-36"
+ ],
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select folder:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 0,
+ "layout": "IPY_MODEL_75acaa0a501744f7817d0864462e8a7e",
+ "style": "IPY_MODEL_3633a55c7efe490784594bad5694800d"
+ }
+ },
+ "45a8720657764f1585859c3d3dae8745": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
+ },
+ "641b5f943c8e419583baaf02485acffb": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
+ },
+ "75acaa0a501744f7817d0864462e8a7e": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
+ },
+ "91e278780d5b4dcda11e832e971044f3": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "boxplot-F3.png",
+ "boxplot-F4.png"
+ ],
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select plot:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 1,
+ "layout": "IPY_MODEL_b08d8ae9147047acac84d9e52bfee64f",
+ "style": "IPY_MODEL_c1b161beed5c4b128b06a09d7a5be2fe"
+ }
+ },
+ "b08d8ae9147047acac84d9e52bfee64f": {
+ "model_module": "@jupyter-widgets/base",
+ "model_name": "LayoutModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/base",
+ "_model_module_version": "1.2.0",
+ "_model_name": "LayoutModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "LayoutView",
+ "align_content": null,
+ "align_items": null,
+ "align_self": null,
+ "border": null,
+ "bottom": null,
+ "display": null,
+ "flex": null,
+ "flex_flow": null,
+ "grid_area": null,
+ "grid_auto_columns": null,
+ "grid_auto_flow": null,
+ "grid_auto_rows": null,
+ "grid_column": null,
+ "grid_gap": null,
+ "grid_row": null,
+ "grid_template_areas": null,
+ "grid_template_columns": null,
+ "grid_template_rows": null,
+ "height": null,
+ "justify_content": null,
+ "justify_items": null,
+ "left": null,
+ "margin": null,
+ "max_height": null,
+ "max_width": null,
+ "min_height": null,
+ "min_width": null,
+ "object_fit": null,
+ "object_position": null,
+ "order": null,
+ "overflow": null,
+ "overflow_x": null,
+ "overflow_y": null,
+ "padding": null,
+ "right": null,
+ "top": null,
+ "visibility": null,
+ "width": null
+ }
+ },
+ "c1b161beed5c4b128b06a09d7a5be2fe": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DescriptionStyleModel",
+ "state": {
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DescriptionStyleModel",
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/base",
+ "_view_module_version": "1.2.0",
+ "_view_name": "StyleView",
+ "description_width": ""
+ }
+ },
+ "e4a83005aaa043d48540b6f4202070e5": {
+ "model_module": "@jupyter-widgets/controls",
+ "model_name": "DropdownModel",
+ "state": {
+ "_dom_classes": [],
+ "_model_module": "@jupyter-widgets/controls",
+ "_model_module_version": "1.5.0",
+ "_model_name": "DropdownModel",
+ "_options_labels": [
+ "convergence-F4.png",
+ "convergence-F3.png"
+ ],
+ "_view_count": null,
+ "_view_module": "@jupyter-widgets/controls",
+ "_view_module_version": "1.5.0",
+ "_view_name": "DropdownView",
+ "description": "Select plot:",
+ "description_tooltip": null,
+ "disabled": false,
+ "index": 0,
+ "layout": "IPY_MODEL_45a8720657764f1585859c3d3dae8745",
+ "style": "IPY_MODEL_641b5f943c8e419583baaf02485acffb"
+ }
+ }
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/optimizer.py b/optimizer.py
index ce65ce7..d5da331 100644
--- a/optimizer.py
+++ b/optimizer.py
@@ -66,7 +66,7 @@ def selector(algo, func_details, popSize, Iter):
elif algo == "DE":
x = de.DE(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
else:
- return null
+ return None
return x
diff --git a/optimizers/GWO.py b/optimizers/GWO.py
index 4658daf..54d9847 100644
--- a/optimizers/GWO.py
+++ b/optimizers/GWO.py
@@ -7,20 +7,12 @@
import random
import numpy
-import math
from solution import solution
import time
def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):
- # Max_iter=1000
- # lb=-100
- # ub=100
- # dim=30
- # SearchAgents_no=5
-
- # initialize alpha, beta, and delta_pos
Alpha_pos = numpy.zeros(dim)
Alpha_score = float("inf")
diff --git a/optimizers/MFO.py b/optimizers/MFO.py
index f8ddafc..4bab4e7 100644
--- a/optimizers/MFO.py
+++ b/optimizers/MFO.py
@@ -14,11 +14,6 @@
def MFO(objf, lb, ub, dim, N, Max_iteration):
- # Max_iteration=1000
- # lb=-100
- # ub=100
- # dim=30
- N = 50 # Number of search agents
if not isinstance(lb, list):
lb = [lb] * dim
if not isinstance(ub, list):
diff --git a/optimizers/SSA.py b/optimizers/SSA.py
index 6fc093b..5030116 100644
--- a/optimizers/SSA.py
+++ b/optimizers/SSA.py
@@ -1,3 +1,10 @@
+"""
+Salp Swarm Algorithm
+
+Author: Hossam Faris
+
+"""
+
import random
import numpy
import math
@@ -7,11 +14,6 @@
def SSA(objf, lb, ub, dim, N, Max_iteration):
- # Max_iteration=1000
- # lb=-100
- # ub=100
- # dim=30
- N = 50 # Number of search agents
if not isinstance(lb, list):
lb = [lb] * dim
if not isinstance(ub, list):
diff --git a/vectorized_benchmarks.py b/vectorized_benchmarks.py
new file mode 100644
index 0000000..3aaf8e7
--- /dev/null
+++ b/vectorized_benchmarks.py
@@ -0,0 +1,327 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue May 17 12:46:20 2016
+
+@author: Hossam Faris
+
+Vectorized by AmirPouya Hemmasian, Dec 2021
+
+Each function receives a NxD matrix (numpy array) as input.
+Each row represents a point in the D-dimensional search space
+The output is a numpy array of length N containing the fitness
+value of the N points respectively.
+"""
+
+import numpy as np
+
+
+
+
+# define the function blocks
+
+# helper function:
+def Ufun(x, a, k, m):
+ return k * ((x - a) ** m) * (x > a) + k * ((-x - a) ** m) * (x < (-a))
+
+# Unimodal High-Dimensional Functions:
+
+def F1(x):
+ return np.sum(x**2, axis=1)
+
+def F2(x):
+ absx = np.abs(x)
+ return np.sum(absx, axis=1) + np.prod(absx, axis=1)
+
+def F3(x):
+ return np.sum(np.cumsum(x, axis=1)**2, axis=1)
+
+def F4(x):
+ return np.max(np.abs(x), axis=1)
+
+def F5(x):
+ return np.sum( 100*(x[:, 1:] - x[:, :-1]**2)**2 + \
+ (x[:, :-1] - 1)**2, axis=1)
+
+def F6(x):
+ return np.sum((x + 0.5)**2, axis=1)
+
+def F7(x):
+ m, n = x.shape
+ w = np.arange(1, n+1)
+ return np.sum(w*x**4, axis=1) + np.random.rand(m)
+
+# Multimodal High-Dimensional Functions:
+
+def F8(x):
+ return np.sum(-x*np.sin(np.abs(x)**0.5), axis=1)
+
+def F9(x):
+ return np.sum(x**2 - 10*np.cos(2*np.pi*x), axis=1) + 10*x.shape[1]
+
+def F10(x):
+ return -20*np.exp(-0.2 * np.mean(x**2, axis=1)**0.5) \
+ - np.exp(np.mean(np.cos(2*np.pi*x), axis=1)) + 20 + np.exp(1)
+
+def F11(x):
+ w = np.arange(1, x.shape[1]+1)
+ return np.sum(x**2, axis=1)/4000 - \
+ np.prod( np.cos(x*w**-0.5) , axis=1) + 1
+
+def F12(x):
+ y = 1 + (1 + x)/4
+ return np.pi/x.shape[1]*(
+ 10*np.sin(np.pi*y[:, 0])**2
+ + np.sum( (y[:, :-1] - 1)**2 *(1 + 10*np.sin(np.pi*y[:, 1:])**2), axis=1)
+ + (y[:, -1] - 1)**2 ) + np.sum( Ufun(x, 10, 100, 4), axis=1)
+
+def F13(x):
+ return 0.1*( np.sin(3*np.pi*x[:,0])**2
+ + np.sum( (x[:,:-1] - 1)**2 *(1 + np.sin(3*np.pi*x[:, 1:])**2 ), axis=1)
+ + (x[:, -1] - 1)**2 * ( 1 + np.sin(2*np.pi*x[:, -1])**2 ) ) \
+ + np.sum(Ufun(x, 5, 100, 4), axis=1)
+
+# Multimodal Low-Dimensional Functions:
+
+a14 = np.array([[-32, -16, 0, 16, 32,
+ -32, -16, 0, 16, 32,
+ -32, -16, 0, 16, 32,
+ -32, -16, 0, 16, 32,
+ -32, -16, 0, 16, 32],
+ [-32, -32, -32, -32, -32,
+ -16, -16, -16, -16, -16,
+ 0, 0, 0, 0, 0,
+ 16, 16, 16, 16, 16,
+ 32, 32, 32, 32, 32]])[None, :, :]
+
+def F14(x):
+ v = x[:, :, None]
+ s = 1/(np.arange(1,26) + np.sum((v-a14)**6, axis=1))
+ return 1/( 1/500 + np.sum(s, axis=-1) )
+
+
+a15 = np.array([0.1957, 0.1947, 0.1735, 0.16, 0.0844, 0.0627,
+ 0.0456, 0.0342, 0.0323, 0.0235, 0.0246,])
+b15 = 1/np.array([0.25, 0.5, 1, 2, 4, 6, 8, 10, 12, 14, 16])
+
+def F15(L):
+ L = L[:,:,None]
+ return np.sum(
+ (a15 -(L[:,0,:]*(b15 **2+L[:,1,:]*b15))/(b15**2+L[:,2,:]*b15+L[:,3,:]))**2,
+ axis=-1)
+
+def F16(L):
+ return (
+ 4 * (L[:,0] ** 2)
+ - 2.1 * (L[:,0] ** 4)
+ + (L[:,0] ** 6) / 3
+ + L[:,0] * L[:,1]
+ - 4 * (L[:,1] ** 2)
+ + 4 * (L[:,1] ** 4)
+ )
+
+def F17(L):
+ return (
+ (L[:,1] - L[:,0]**2 * 5.1/(4*np.pi**2) + 5/np.pi*L[:,0] -6)**2
+ + 10 * (1 - 1 / (8 * np.pi)) * np.cos(L[:,0]) + 10
+ )
+
+def F18(L):
+ return (1
+ + (L[:,0] + L[:,1] + 1) ** 2
+ * (
+ 19
+ - 14 * L[:,0]
+ + 3 * L[:,0] ** 2
+ - 14 * L[:,1]
+ + 6 * L[:,0] * L[:,1]
+ + 3 * L[:,1] ** 2
+ )
+ ) * (30+ (2 * L[:,0] - 3 * L[:,1]) ** 2
+ * (18
+ - 32 * L[:,0]
+ + 12 * L[:,0] ** 2
+ + 48 * L[:,1]
+ - 36 * L[:,0] * L[:,1]
+ + 27 * L[:,1] ** 2
+ )
+ )
+
+a19 = np.array([[3, 10, 30], [0.1, 10, 35], [3, 10, 30], [0.1, 10, 35]]).T
+c19 = np.array([1, 1.2, 3, 3.2])
+p19 = np.array([[0.3689, 0.117, 0.2673],
+ [0.4699, 0.4387, 0.747],
+ [0.1091, 0.8732, 0.5547],
+ [0.03815, 0.5743, 0.8828]]).T
+
+def F19(L):
+ L = L[:,:, None]
+ return -np.sum(c19*np.exp(-np.sum(a19*(L-p19)**2,axis=1)), axis=1)
+
+a20 = np.array([[10, 3, 17, 3.5, 1.7, 8],
+ [0.05, 10, 17, 0.1, 8, 14],
+ [3, 3.5, 1.7, 10, 17, 8],
+ [17, 8, 0.05, 10, 0.1, 14]]).T
+c20 = np.array([1, 1.2, 3, 3.2])
+p20 = np.array([[0.1312, 0.1696, 0.5569, 0.0124, 0.8283, 0.5886],
+ [0.2329, 0.4135, 0.8307, 0.3736, 0.1004, 0.9991],
+ [0.2348, 0.1415, 0.3522, 0.2883, 0.3047, 0.6650],
+ [0.4047, 0.8828, 0.8732, 0.5743, 0.1091, 0.0381]]).T
+
+def F20(L):
+ L = L[:,:, None]
+ return -np.sum(c20*np.exp(-np.sum(a20*(L-p20)**2,axis=1)), axis=1)
+
+a20s = np.array([
+ [4, 4, 4, 4],
+ [1, 1, 1, 1],
+ [8, 8, 8, 8],
+ [6, 6, 6, 6],
+ [3, 7, 3, 7],
+ [2, 9, 2, 9],
+ [5, 5, 3, 3],
+ [8, 1, 8, 1],
+ [6, 2, 6, 2],
+ [7, 3.6, 7, 3.6]]).T
+c20s = np.array([0.1, 0.2, 0.2, 0.4, 0.4, 0.6, 0.3, 0.7, 0.5, 0.5])
+
+def F21(L):
+ L = L[:,:,None]
+ return -np.sum((np.sum((L-a20s[:,:5])**2, axis=1) + c20s[:5])**-1, axis=1)
+
+def F22(L):
+ L = L[:,:,None]
+ return -np.sum((np.sum((L-a20s[:,:7])**2, axis=1) + c20s[:7])**-1, axis=1)
+
+def F23(L):
+ L = L[:,:,None]
+ return -np.sum((np.sum((L-a20s)**2, axis=1) + c20s)**-1, axis=1)
+
+
+
+param = {
+ "F1": ["F1", -100, 100, 30],
+ "F2": ["F2", -10, 10, 30],
+ "F3": ["F3", -100, 100, 30],
+ "F4": ["F4", -100, 100, 30],
+ "F5": ["F5", -30, 30, 30],
+ "F6": ["F6", -100, 100, 30],
+ "F7": ["F7", -1.28, 1.28, 30],
+ "F8": ["F8", -500, 500, 30],
+ "F9": ["F9", -5.12, 5.12, 30],
+ "F10": ["F10", -32, 32, 30],
+ "F11": ["F11", -600, 600, 30],
+ "F12": ["F12", -50, 50, 30],
+ "F13": ["F13", -50, 50, 30],
+ "F14": ["F14", -65.536, 65.536, 2],
+ "F15": ["F15", -5, 5, 4],
+ "F16": ["F16", -5, 5, 2],
+ "F17": ["F17", -5, 15, 2],
+ "F18": ["F18", -2, 2, 2],
+ "F19": ["F19", 0, 1, 3],
+ "F20": ["F20", 0, 1, 6],
+ "F21": ["F21", 0, 10, 4],
+ "F22": ["F22", 0, 10, 4],
+ "F23": ["F23", 0, 10, 4]}
+
+def getFunctionDetails(a):
+ # [name, lb, ub, dim]
+ return param.get(a, "nothing")
+
+'''
+# ESAs space mission design benchmarks https://www.esa.int/gsp/ACT/projects/gtop/
+from fcmaes.astro import (
+ MessFull,
+ Messenger,
+ Gtoc1,
+ Cassini1,
+ Cassini2,
+ Rosetta,
+ Tandem,
+ Sagas,
+)
+def Ca1(x):
+ return Cassini1().fun(x)
+def Ca2(x):
+ return Cassini2().fun(x)
+def Ros(x):
+ return Rosetta().fun(x)
+def Tan(x):
+ return Tandem(5).fun(x)
+def Sag(x):
+ return Sagas().fun(x)
+def Mef(x):
+ return MessFull().fun(x)
+def Mes(x):
+ return Messenger().fun(x)
+def Gt1(x):
+ return Gtoc1().fun(x)
+
+param = {
+ "F1": ["F1", -100, 100, 30],
+ "F2": ["F2", -10, 10, 30],
+ "F3": ["F3", -100, 100, 30],
+ "F4": ["F4", -100, 100, 30],
+ "F5": ["F5", -30, 30, 30],
+ "F6": ["F6", -100, 100, 30],
+ "F7": ["F7", -1.28, 1.28, 30],
+ "F8": ["F8", -500, 500, 30],
+ "F9": ["F9", -5.12, 5.12, 30],
+ "F10": ["F10", -32, 32, 30],
+ "F11": ["F11", -600, 600, 30],
+ "F12": ["F12", -50, 50, 30],
+ "F13": ["F13", -50, 50, 30],
+ "F14": ["F14", -65.536, 65.536, 2],
+ "F15": ["F15", -5, 5, 4],
+ "F16": ["F16", -5, 5, 2],
+ "F17": ["F17", -5, 15, 2],
+ "F18": ["F18", -2, 2, 2],
+ "F19": ["F19", 0, 1, 3],
+ "F20": ["F20", 0, 1, 6],
+ "F21": ["F21", 0, 10, 4],
+ "F22": ["F22", 0, 10, 4],
+ "F23": ["F23", 0, 10, 4],
+ "Ca1": [
+ "Ca1",
+ Cassini1().bounds.lb,
+ Cassini1().bounds.ub,
+ len(Cassini1().bounds.lb),
+ ],
+ "Ca2": [
+ "Ca2",
+ Cassini2().bounds.lb,
+ Cassini2().bounds.ub,
+ len(Cassini2().bounds.lb),
+ ],
+ "Gt1": ["Gt1", Gtoc1().bounds.lb, Gtoc1().bounds.ub, len(Gtoc1().bounds.lb)],
+ "Mes": [
+ "Mes",
+ Messenger().bounds.lb,
+ Messenger().bounds.ub,
+ len(Messenger().bounds.lb),
+ ],
+ "Mef": [
+ "Mef",
+ MessFull().bounds.lb,
+ MessFull().bounds.ub,
+ len(MessFull().bounds.lb),
+ ],
+ "Sag": ["Sag", Sagas().bounds.lb, Sagas().bounds.ub, len(Sagas().bounds.lb)],
+ "Tan": [
+ "Tan",
+ Tandem(5).bounds.lb,
+ Tandem(5).bounds.ub,
+ len(Tandem(5).bounds.lb),
+ ],
+ "Ros": [
+ "Ros",
+ Rosetta().bounds.lb,
+ Rosetta().bounds.ub,
+ len(Rosetta().bounds.lb),
+ ],
+ }
+
+def getFunctionDetails(a):
+ # [name, lb, ub, dim]
+ return param.get(a, "nothing")
+
+'''
\ No newline at end of file
diff --git a/vectorized_optimizer.py b/vectorized_optimizer.py
new file mode 100644
index 0000000..91862cd
--- /dev/null
+++ b/vectorized_optimizer.py
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue May 17 15:50:25 2016
+
+@author: hossam
+
+Vectorized by: AmirPouya Hemmasian
+
+"""
+from pathlib import Path
+import vectorized_optimizers.GWO as gwo
+import vectorized_optimizers.MFO as mfo
+import vectorized_optimizers.WOA as woa
+import vectorized_optimizers.SSA as ssa
+import vectorized_optimizers.SCA as sca
+import vectorized_benchmarks as benchmarks
+import csv
+import numpy
+import time
+import warnings
+import os
+import plot_convergence as conv_plot
+import plot_boxplot as box_plot
+
+warnings.simplefilter(action="ignore")
+
+
+def selector(algo, func_details, popSize, Iter):
+ function_name = func_details[0]
+ lb = func_details[1]
+ ub = func_details[2]
+ dim = func_details[3]
+
+ if algo == "SSA":
+ x = ssa.SSA(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
+ elif algo == "GWO":
+ x = gwo.GWO(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
+ elif algo == "WOA":
+ x = woa.WOA(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
+ elif algo == "MFO":
+ x = mfo.MFO(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
+ elif algo == "SCA":
+ x = sca.SCA(getattr(benchmarks, function_name), lb, ub, dim, popSize, Iter)
+ else:
+ return None
+ return x
+
+def run(optimizer, objectivefunc, NumOfRuns, params, export_flags):
+
+ """
+ It serves as the main interface of the framework for running the experiments.
+
+ Parameters
+ ----------
+ optimizer : list
+ The list of optimizers names
+ objectivefunc : list
+ The list of benchmark functions
+ NumOfRuns : int
+ The number of independent runs
+ params : set
+ The set of parameters which are:
+ 1. Size of population (PopulationSize)
+ 2. The number of iterations (Iterations)
+ export_flags : set
+ The set of Boolean flags which are:
+ 1. Export (Exporting the results in a file)
+ 2. Export_details (Exporting the detailed results in files)
+ 3. Export_convergence (Exporting the covergence plots)
+ 4. Export_boxplot (Exporting the box plots)
+
+ Returns
+ -----------
+ N/A
+ """
+
+ # Select general parameters for all optimizers (population size, number of iterations) ....
+ PopulationSize = params["PopulationSize"]
+ Iterations = params["Iterations"]
+
+ # Export results ?
+ Export = export_flags["Export_avg"]
+ Export_details = export_flags["Export_details"]
+ Export_convergence = export_flags["Export_convergence"]
+ Export_boxplot = export_flags["Export_boxplot"]
+
+ Flag = False
+ Flag_details = False
+
+ # CSV Header for for the cinvergence
+ CnvgHeader = []
+
+ results_directory = time.strftime("%Y-%m-%d-%H-%M-%S") + "/"
+ Path(results_directory).mkdir(parents=True, exist_ok=True)
+
+ for l in range(0, Iterations):
+ CnvgHeader.append("Iter" + str(l + 1))
+
+ for i in range(0, len(optimizer)):
+ for j in range(0, len(objectivefunc)):
+ convergence = [0] * NumOfRuns
+ executionTime = [0] * NumOfRuns
+ for k in range(0, NumOfRuns):
+ func_details = benchmarks.getFunctionDetails(objectivefunc[j])
+ x = selector(optimizer[i], func_details, PopulationSize, Iterations)
+ convergence[k] = x.convergence
+ optimizerName = x.optimizer
+ objfname = x.objfname
+ if Export_details == True:
+ ExportToFile = results_directory + "experiment_details.csv"
+ with open(ExportToFile, "a", newline="\n") as out:
+ writer = csv.writer(out, delimiter=",")
+ if (
+ Flag_details == False
+ ): # just one time to write the header of the CSV file
+ header = numpy.concatenate(
+ [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]
+ )
+ writer.writerow(header)
+ Flag_details = True # at least one experiment
+ executionTime[k] = x.executionTime
+ a = numpy.concatenate(
+ [[x.optimizer, x.objfname, x.executionTime], x.convergence]
+ )
+ writer.writerow(a)
+ out.close()
+
+ if Export == True:
+ ExportToFile = results_directory + "experiment.csv"
+
+ with open(ExportToFile, "a", newline="\n") as out:
+ writer = csv.writer(out, delimiter=",")
+ if (
+ Flag == False
+ ): # just one time to write the header of the CSV file
+ header = numpy.concatenate(
+ [["Optimizer", "objfname", "ExecutionTime"], CnvgHeader]
+ )
+ writer.writerow(header)
+ Flag = True
+
+ avgExecutionTime = float("%0.2f" % (sum(executionTime) / NumOfRuns))
+ avgConvergence = numpy.around(
+ numpy.mean(convergence, axis=0, dtype=numpy.float64), decimals=2
+ ).tolist()
+ a = numpy.concatenate(
+ [[optimizerName, objfname, avgExecutionTime], avgConvergence]
+ )
+ writer.writerow(a)
+ out.close()
+
+ if Export_convergence == True:
+ conv_plot.run(results_directory, optimizer, objectivefunc, Iterations)
+
+ if Export_boxplot == True:
+ box_plot.run(results_directory, optimizer, objectivefunc, Iterations)
+
+ if Flag == False: # Faild to run at least one experiment
+ print(
+ "No Optomizer or Cost function is selected. Check lists of available optimizers and cost functions"
+ )
+
+ print("Execution completed")
diff --git a/vectorized_optimizers/GWO.py b/vectorized_optimizers/GWO.py
new file mode 100644
index 0000000..3881759
--- /dev/null
+++ b/vectorized_optimizers/GWO.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon May 16 00:27:50 2016
+
+@author: Hossam Faris
+
+Vectorized by AmirPouya Hemmasian in Dec 2021
+
+"""
+
+import numpy as np
+from solution import solution
+import time
+
+
+def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter):
+
+ # initialize alpha, beta, and delta_pos
+ top3_score = np.array([float('inf')]*3)
+ top3_pos = np.zeros((3,dim))
+
+ if not isinstance(lb, list):
+ lb = [lb] * dim
+ if not isinstance(ub, list):
+ ub = [ub] * dim
+
+ lb = np.array(lb)
+ ub = np.array(ub)
+
+ # Initialize the positions of search agents
+ Positions = np.random.uniform(lb, ub, (SearchAgents_no,dim))
+
+ Convergence_curve = np.zeros(Max_iter)
+ s = solution()
+
+ # Loop counter
+ print(f'GWO is optimizing {objf.__name__}')
+
+ timerStart = time.time()
+ s.startTime = time.strftime("%Y-%m-%d-%H-%M-%S")
+ # Main loop
+ for t in range(Max_iter):
+
+ f_list = objf(Positions)
+
+ # new alpha, beta, delta
+ f_race = np.concatenate((top3_score, f_list))
+ pos_race = np.concatenate((top3_pos, Positions))
+ winners = np.argsort(f_race)[:3]
+ top3_score = f_race[winners]
+ top3_pos = pos_race[winners]
+
+ # a decreases linearly fron 2 to 0
+ a = 2*(1-t/Max_iter)
+
+ # sampling the random values r
+ r = np.random.rand(6, SearchAgents_no, dim)
+
+ # A and C for alpha, beta, delta
+ A = a*(2*r[:3]-1)
+ C = 2*r[3:]
+
+ Positions = np.mean(
+ top3_pos[:, None, :] -
+ A*np.abs(C*top3_pos[:, None, :] - Positions)
+ , axis=0)
+
+ Positions = np.clip(Positions, lb, ub)
+
+ Convergence_curve[t] = top3_score[0]
+
+ if (t+1) % 100 == 0:
+ print(f'Iteration: {t+1} | Best Fitness: {top3_score[0]}')
+
+ timerEnd = time.time()
+ s.endTime = time.strftime("%Y-%m-%d-%H-%M-%S")
+ s.executionTime = timerEnd - timerStart
+ s.convergence = Convergence_curve
+ s.optimizer = "GWO"
+ s.objfname = objf.__name__
+
+ return s
diff --git a/vectorized_optimizers/MFO.py b/vectorized_optimizers/MFO.py
new file mode 100644
index 0000000..e7987aa
--- /dev/null
+++ b/vectorized_optimizers/MFO.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon May 16 10:42:18 2016
+
+@author: hossam
+
+Vectorized by AmirPouya Hemmasian in Dec 2021
+"""
+
+
+import numpy as np
+import math
+from solution import solution
+import time
+
+
+def MFO(objf, lb, ub, dim, N, Max_iter):
+
+ if not isinstance(lb, list):
+ lb = [lb] * dim
+ if not isinstance(ub, list):
+ ub = [ub] * dim
+
+ # Initialize the positions of moths
+ lb = np.array(lb)
+ ub = np.array(ub)
+
+
+ Moth_pos = np.random.uniform(lb, ub, (N, dim))
+
+ Convergence_curve = np.zeros(Max_iter)
+
+ s = solution()
+
+ print(f'MFO is optimizing {objf.__name__}')
+
+ timerStart = time.time()
+ s.startTime = time.strftime("%Y-%m-%d-%H-%M-%S")
+
+ b = 1
+ Moth_fitness = objf(Moth_pos)
+ I = np.argsort(Moth_fitness)
+ flame_pos = Moth_pos[I]
+ flame_fitness = Moth_fitness[I]
+
+ # Main loop
+ for t in range(Max_iter):
+
+ # Number of flames Eq. (3.14) in the paper
+ Flame_no = int(N-(N-1)*t/Max_iter)
+
+ a = -1-t/Max_iter
+
+ # Eq. 3.12 and 3,.13 to update the moth positions:
+ T = (a-1)*np.random.rand(N,dim) + 1
+
+ spiral = np.exp(b*T)*np.cos(2*np.pi*T)
+
+ Moth_pos[:Flame_no] = flame_pos[:Flame_no] + spiral[:Flame_no]*\
+ np.abs(flame_pos[:Flame_no]-Moth_pos[:Flame_no])
+ if Flame_no=0.5 # bubble net
+ es = (p<0.5) & (np.abs(A)>=1) # encircle search
+ eh = (p<0.5) & (np.abs(A)<1) # encircle hunt
+
+ li = np.random.choice(SearchAgents_no, es.sum())
+ l = (a2 - 1) * np.random.rand(bl.sum()) + 1
+ b = 1
+ A = A[:,None]
+ C = C[:,None]
+
+ Positions[es] = Positions[li] - A[es]*np.abs(C[es]*Positions[li] - Positions[es])
+
+ Positions[eh] = Leader_pos - \
+ A[eh]*np.abs(C[eh]*Leader_pos - Positions[eh])
+
+ Positions[bl] = np.abs(Leader_pos - Positions[bl])*\
+ np.exp(b*l[:,None])*np.cos(np.pi*2*l[:,None]) + Leader_pos
+
+
+ Positions = np.clip(Positions, lb, ub)
+
+ convergence_curve[t] = Leader_score
+
+ if (t+1) % 100 == 0:
+ print(f'Iteration: {t+1} | Best Fitness: {Leader_score}')
+
+ timerEnd = time.time()
+ s.endTime = time.strftime("%Y-%m-%d-%H-%M-%S")
+ s.executionTime = timerEnd - timerStart
+ s.convergence = convergence_curve
+ s.optimizer = "WOA"
+ s.objfname = objf.__name__
+ s.best = Leader_score
+ s.bestIndividual = Leader_pos
+
+ return s