diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..ad2b8da62 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,11 @@ +repos: + - repo: https://github.com/srstevenson/nb-clean + rev: 3.1.0 + hooks: + - id: nb-clean + args: + - --remove-empty-cells + - --preserve-cell-metadata + - tags + - format + - -- diff --git a/docs/source/algorithms/hyperparameters.ipynb b/docs/source/algorithms/hyperparameters.ipynb index 030949df7..dd442204a 100644 --- a/docs/source/algorithms/hyperparameters.ipynb +++ b/docs/source/algorithms/hyperparameters.ipynb @@ -2,35 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_algorithms_hyperparameters:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Hyperparameters" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -40,11 +26,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Most algoriths have **hyperparameters**. For some optimization methods the parameters are already defined and can directly be optimized. For instance, for Differential Evolution (DE) the parameters can be found by:" ] @@ -52,17 +34,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:48.308627Z", - "iopub.status.busy": "2022-08-01T02:36:48.308160Z", - "iopub.status.idle": "2022-08-01T02:36:48.364512Z", - "shell.execute_reply": "2022-08-01T02:36:48.363614Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import json\n", @@ -75,22 +47,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "If not provided directly, when initializing a `HyperparameterProblem` these variables are directly used for optimization." ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Secondly, one needs to define what exactly should be optimized. For instance, for a single run on a problem (with a fixed random seed) using the well-known parameter optimization toolkit [Optuna](https://optuna.org), the implementation may look as follows:" ] @@ -98,17 +62,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:48.369753Z", - "iopub.status.busy": "2022-08-01T02:36:48.369415Z", - "iopub.status.idle": "2022-08-01T02:36:59.415863Z", - "shell.execute_reply": "2022-08-01T02:36:59.414988Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.hyperparameters import SingleObjectiveSingleRun, HyperparameterProblem\n", @@ -141,11 +95,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Of course, you can also directly use the `MixedVariableGA` available in our framework:" ] @@ -153,17 +103,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:59.419480Z", - "iopub.status.busy": "2022-08-01T02:36:59.419084Z", - "iopub.status.idle": "2022-08-01T02:37:05.995629Z", - "shell.execute_reply": "2022-08-01T02:37:05.994612Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.hyperparameters import SingleObjectiveSingleRun, HyperparameterProblem\n", @@ -198,11 +138,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Now, optimizing the parameters for a **single random seed** is often not desirable. And this is precisely what makes hyper-parameter optimization computationally expensive. So instead of using just a single random seed, we can use the `MultiRun` performance assessment to average over multiple runs as follows:" ] @@ -210,17 +146,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:37:06.000183Z", - "iopub.status.busy": "2022-08-01T02:37:05.999864Z", - "iopub.status.idle": "2022-08-01T02:37:21.459474Z", - "shell.execute_reply": "2022-08-01T02:37:21.458554Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.hyperparameters import HyperparameterProblem, MultiRun, stats_single_objective_mean\n", @@ -255,11 +181,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Another way of performance measure is the number of evaluations until a specific goal has been reached. For single-objective optimization, such a goal is most likely until a minimum function value has been found. Thus, for the termination, we use `MinimumFunctionValueTermination` with a value of `1e-5`. We run the method for each random seed until this value has been reached or at most `500` function evaluations have taken place. The performance is then measured by the average number of function evaluations (`func_stats=stats_avg_nevals`) to reach the goal." ] @@ -267,17 +189,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:37:21.462989Z", - "iopub.status.busy": "2022-08-01T02:37:21.462728Z", - "iopub.status.idle": "2022-08-01T02:37:38.013305Z", - "shell.execute_reply": "2022-08-01T02:37:38.012403Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.hyperparameters import HyperparameterProblem, MultiRun, stats_avg_nevals\n", @@ -313,7 +225,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/index.ipynb b/docs/source/algorithms/index.ipynb index 8c05737ea..84f0ab9f2 100644 --- a/docs/source/algorithms/index.ipynb +++ b/docs/source/algorithms/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_algorithms:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :hidden:\n", @@ -52,7 +48,8 @@ " moo/age2\n", " moo/rvea\n", " moo/sms\n", - " moo/dnsga2\n" + " moo/dnsga2\n", + " moo/kgb\n" ] }, { @@ -64,9 +61,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -77,7 +72,24 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/initialization.ipynb b/docs/source/algorithms/initialization.ipynb index 541e764d2..ba8006b13 100644 --- a/docs/source/algorithms/initialization.ipynb +++ b/docs/source/algorithms/initialization.ipynb @@ -2,45 +2,28 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_algorithms_init:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Initialization" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Algorithms are directly initialized using the corresponding constructor." ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Directly initializing the object keeps the code clean and if you use an idea lets you quickly jump to the definition of the algorithm and find hyperparameters to modify." ] @@ -48,18 +31,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:37:41.860818Z", - "iopub.status.busy": "2022-08-01T02:37:41.860438Z", - "iopub.status.idle": "2022-08-01T02:37:41.907117Z", - "shell.execute_reply": "2022-08-01T02:37:41.906417Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -67,7 +39,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/list.ipynb b/docs/source/algorithms/list.ipynb index e51595b48..4d5ce3f25 100644 --- a/docs/source/algorithms/list.ipynb +++ b/docs/source/algorithms/list.ipynb @@ -2,35 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_algorithms_list:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# List Of Algorithms" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. csv-table:: Algorithms available in pymoo\n", " :header: \"Algorithm\", \"Class\", \"Objective(s)\", \"Constraints\", \"Description\"\n", @@ -39,7 +25,24 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/age.ipynb b/docs/source/algorithms/moo/age.ipynb index 34fd2a805..79c6c8b81 100644 --- a/docs/source/algorithms/moo/age.ipynb +++ b/docs/source/algorithms/moo/age.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_agemoea:" ] @@ -57,16 +55,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "algorithms/usage_nsga2.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:37:58.389087Z", - "iopub.status.busy": "2022-08-01T02:37:58.388483Z", - "iopub.status.idle": "2022-08-01T02:38:09.398062Z", - "shell.execute_reply": "2022-08-01T02:38:09.397102Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.age import AGEMOEA\n", @@ -101,16 +90,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "algorithms/usage_nsga2_binary.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:38:09.402666Z", - "iopub.status.busy": "2022-08-01T02:38:09.402311Z", - "iopub.status.idle": "2022-08-01T02:38:28.753407Z", - "shell.execute_reply": "2022-08-01T02:38:28.752637Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.age import AGEMOEA\n", @@ -154,16 +134,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.age.AGEMOEA\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/age2.ipynb b/docs/source/algorithms/moo/age2.ipynb index 462d21dc6..1c8144f47 100644 --- a/docs/source/algorithms/moo/age2.ipynb +++ b/docs/source/algorithms/moo/age2.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_agemoea2:" ] @@ -34,16 +32,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "algorithms/usage_nsga2.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:40:12.867840Z", - "iopub.status.busy": "2022-08-01T02:40:12.867466Z", - "iopub.status.idle": "2022-08-01T02:40:25.525000Z", - "shell.execute_reply": "2022-08-01T02:40:25.524091Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.age2 import AGEMOEA2\n", @@ -76,16 +65,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.age2.AGEMOEA2\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/ctaea.ipynb b/docs/source/algorithms/moo/ctaea.ipynb index b5976a317..69f002fca 100644 --- a/docs/source/algorithms/moo/ctaea.ipynb +++ b/docs/source/algorithms/moo/ctaea.ipynb @@ -2,23 +2,14 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_ctaea:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# C-TAEA\n", "\n", @@ -31,18 +22,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:38:55.107829Z", - "iopub.status.busy": "2022-08-01T02:38:55.107203Z", - "iopub.status.idle": "2022-08-01T02:39:37.950795Z", - "shell.execute_reply": "2022-08-01T02:39:37.949837Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.ctaea import CTAEA\n", @@ -75,18 +55,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:39:37.962823Z", - "iopub.status.busy": "2022-08-01T02:39:37.962497Z", - "iopub.status.idle": "2022-08-01T02:40:09.351112Z", - "shell.execute_reply": "2022-08-01T02:40:09.350005Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"carside\")\n", @@ -104,23 +73,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## API" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.ctaea.CTAEA\n", " :noindex:" @@ -128,17 +88,25 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Python implementation by [cyrilpic](https://github.com/cyrilpic) based on the [original C code](https://web.archive.org/web/20200916105021/https://cola-laboratory.github.io/docs/publications)." ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/dnsga2.ipynb b/docs/source/algorithms/moo/dnsga2.ipynb index 29ccaa5a3..102617b9b 100644 --- a/docs/source/algorithms/moo/dnsga2.ipynb +++ b/docs/source/algorithms/moo/dnsga2.ipynb @@ -3,9 +3,7 @@ { "cell_type": "raw", "id": "1c4f9d85-e64f-4680-a937-1079d69d5c33", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dnsga2:" ] @@ -13,9 +11,7 @@ { "cell_type": "markdown", "id": "f0a1dfd8-a241-4f73-b8db-3ed46ae7fd23", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "# D-NSGA-II: Dynamic Multi-Objective Optimization Using Modified NSGA-II" ] @@ -32,14 +28,7 @@ "cell_type": "code", "execution_count": null, "id": "4a786da2-8c26-406e-ad1e-c6f0159793c1", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:40:29.361615Z", - "iopub.status.busy": "2022-08-01T02:40:29.360969Z", - "iopub.status.idle": "2022-08-01T02:40:33.474285Z", - "shell.execute_reply": "2022-08-01T02:40:33.473443Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.dnsga2 import DNSGA2\n", @@ -54,14 +43,12 @@ "\n", "algorithm = DNSGA2(version=\"A\")\n", "\n", - "simulation = TimeSimulation()\n", - "\n", "res = minimize(problem,\n", " algorithm,\n", " termination=('n_gen', 100),\n", - " callback=CallbackCollection(ObjectiveSpaceAnimation(), simulation),\n", + " callback=TimeSimulation(),\n", " seed=1,\n", - " verbose=True)\n" + " verbose=False)\n" ] } ], @@ -80,8 +67,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/docs/source/algorithms/moo/kgb.ipynb b/docs/source/algorithms/moo/kgb.ipynb index 9e7856ace..5f51a470e 100644 --- a/docs/source/algorithms/moo/kgb.ipynb +++ b/docs/source/algorithms/moo/kgb.ipynb @@ -2,28 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_kgb:" ] }, { "cell_type": "markdown", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "# KGB-DMOEA: Knowledge-Guided Bayesian Dynamic Multi-Objective Evolutionary Algorithm" ] }, { "cell_type": "markdown", - "metadata": { - "jp-MarkdownHeadingCollapsed": true, - "tags": [] - }, + "metadata": {}, "source": [ "KGB-DMOEA is a sophisticated evolutionary algorithm for dynamic multi-objective optimization problems (DMOPs). It employs a knowledge-guided Bayesian classification approach to adeptly navigate and adapt to changing Pareto-optimal solutions in dynamic environments. This algorithm utilizes past search experiences, distinguishing them as beneficial or non-beneficial, to effectively direct the search in new scenarios." ] @@ -37,7 +30,7 @@ "\n", "- **Knowledge Reconstruction-Examination (KRE):** Dynamically re-evaluates historical optimal solutions based on their relevance and utility in the current environment. \n", "- **Bayesian Classification:** Employs a Naive Bayesian Classifier to forecast high-quality initial populations for new environments.\n", - "- **Adaptive Strategy:** Incorporates dynamic parameter adjustment for optimized performance across varying dynamic contexts." + "- **Adaptive Strategy:** Incorporates dynamic parameter adjustment for optimized performance across varying dynamic contexts.\n" ] }, { @@ -45,35 +38,6 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Example" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'pymoo.algorithms.moo.kgb'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/var/folders/dp/fdf8szyn3zd4kcyh18gxsyvm0000gn/T/ipykernel_78338/2424210873.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mpymoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0malgorithms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkgb\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mKGB\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpymoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallback\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCallbackCollection\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpymoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moptimize\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mminimize\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpymoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproblems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdyn\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTimeSimulation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpymoo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproblems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdynamic\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdf\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mDF1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pymoo.algorithms.moo.kgb'" - ] - } - ], "source": [ "from pymoo.algorithms.moo.kgb import KGB\n", "from pymoo.core.callback import CallbackCollection\n", @@ -87,21 +51,17 @@ "\n", "algorithm = KGB()\n", "\n", - "simulation = TimeSimulation()\n", - "\n", "res = minimize(problem,\n", " algorithm,\n", - " termination=('n_gen', 100),\n", - " callback=CallbackCollection(ObjectiveSpaceAnimation(), simulation),\n", + " termination=('n_gen', 10),\n", + " callback=TimeSimulation(),\n", " seed=1,\n", - " verbose=True)\n" + " verbose=False)\n" ] }, { "cell_type": "markdown", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "### Parameters \n", "\n", @@ -123,7 +83,7 @@ "cell_type": "raw", "metadata": {}, "source": [ - "Yulong Ye, Lingjie Li, Qiuzhen Lin, Ka-Chun Wong, Jianqiang Li, Zhong Ming. “A knowledge guided Bayesian classification for dynamic multi-objective optimization”. Knowledge-Based Systems, Volume 251, 2022. Link to the paper" + "Yulong Ye, Lingjie Li, Qiuzhen Lin, Ka-Chun Wong, Jianqiang Li, Zhong Ming. “A knowledge guided Bayesian classification for dynamic multi-objective optimization”. Knowledge-Based Systems, Volume 251, 2022." ] } ], @@ -142,8 +102,7 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/docs/source/algorithms/moo/moead.ipynb b/docs/source/algorithms/moo/moead.ipynb index 87c5806cc..06132fcd3 100644 --- a/docs/source/algorithms/moo/moead.ipynb +++ b/docs/source/algorithms/moo/moead.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_moead:" ] @@ -23,12 +21,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:38:32.433379Z", - "iopub.status.busy": "2022-08-01T02:38:32.433016Z", - "iopub.status.idle": "2022-08-01T02:38:51.604270Z", - "shell.execute_reply": "2022-08-01T02:38:51.603527Z" - }, "tags": [] }, "outputs": [], @@ -67,16 +59,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.moead.MOEAD\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/nsga2.ipynb b/docs/source/algorithms/moo/nsga2.ipynb index 063790524..9c5322be5 100644 --- a/docs/source/algorithms/moo/nsga2.ipynb +++ b/docs/source/algorithms/moo/nsga2.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_nsga2:" ] @@ -27,9 +25,7 @@ }, { "cell_type": "markdown", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "# NSGA-II: Non-dominated Sorting Genetic Algorithm" ] @@ -86,9 +82,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -122,15 +116,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:41:41.424586Z", - "iopub.status.busy": "2022-08-01T02:41:41.424186Z", - "iopub.status.idle": "2022-08-01T02:41:52.509972Z", - "shell.execute_reply": "2022-08-01T02:41:52.509081Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -167,16 +153,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.nsga2.NSGA2\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/nsga3.ipynb b/docs/source/algorithms/moo/nsga3.ipynb index 3bc40d61e..30bcaefb0 100644 --- a/docs/source/algorithms/moo/nsga3.ipynb +++ b/docs/source/algorithms/moo/nsga3.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_nsga3:" ] @@ -79,15 +77,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:40:55.515469Z", - "iopub.status.busy": "2022-08-01T02:40:55.514884Z", - "iopub.status.idle": "2022-08-01T02:41:09.986121Z", - "shell.execute_reply": "2022-08-01T02:41:09.985458Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga3 import NSGA3\n", @@ -117,15 +107,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:41:09.990271Z", - "iopub.status.busy": "2022-08-01T02:41:09.989967Z", - "iopub.status.idle": "2022-08-01T02:41:24.723125Z", - "shell.execute_reply": "2022-08-01T02:41:24.722224Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res = minimize(get_problem(\"dtlz1^-1\"),\n", @@ -138,25 +120,33 @@ }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.nsga3.NSGA3\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/rnsga2.ipynb b/docs/source/algorithms/moo/rnsga2.ipynb index 041c2e07c..4bca04808 100644 --- a/docs/source/algorithms/moo/rnsga2.ipynb +++ b/docs/source/algorithms/moo/rnsga2.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_rnsga2:" ] @@ -62,15 +60,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:41:28.550073Z", - "iopub.status.busy": "2022-08-01T02:41:28.549443Z", - "iopub.status.idle": "2022-08-01T02:41:32.621805Z", - "shell.execute_reply": "2022-08-01T02:41:32.620855Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -116,16 +106,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.rnsga2.RNSGA2\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/rnsga3.ipynb b/docs/source/algorithms/moo/rnsga3.ipynb index 84d8147d2..f35ed7d3c 100644 --- a/docs/source/algorithms/moo/rnsga3.ipynb +++ b/docs/source/algorithms/moo/rnsga3.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_rnsga3:" ] @@ -64,12 +62,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:41:56.232538Z", - "iopub.status.busy": "2022-08-01T02:41:56.232135Z", - "iopub.status.idle": "2022-08-01T02:42:03.282443Z", - "shell.execute_reply": "2022-08-01T02:42:03.281758Z" - }, "tags": [] }, "outputs": [], @@ -114,12 +106,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:03.285933Z", - "iopub.status.busy": "2022-08-01T02:42:03.285662Z", - "iopub.status.idle": "2022-08-01T02:42:21.939742Z", - "shell.execute_reply": "2022-08-01T02:42:21.939026Z" - }, "tags": [] }, "outputs": [], @@ -157,25 +143,33 @@ }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.rnsga3.RNSGA3\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/rvea.ipynb b/docs/source/algorithms/moo/rvea.ipynb index 849a0ae91..b0b11b1fa 100644 --- a/docs/source/algorithms/moo/rvea.ipynb +++ b/docs/source/algorithms/moo/rvea.ipynb @@ -2,45 +2,28 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_rvea:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# RVEA: Reference Vector Guided Evolutionary Algorithm" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "The algorithm is implemented based on . In RVEA, a scalarization approach, termed angle penalized distance (APD), is adopted to balance the convergence and diversity of the solutions in the high-dimensional objective space. Furthermore, an adaptation strategy is proposed to dynamically adjust the reference vectors' distribution according to the objective functions' scales. An illustration of the APD is shown below:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "
\n", " \n", @@ -49,23 +32,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Example" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -76,18 +50,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:25.461155Z", - "iopub.status.busy": "2022-08-01T02:42:25.460793Z", - "iopub.status.idle": "2022-08-01T02:42:28.508517Z", - "shell.execute_reply": "2022-08-01T02:42:28.507785Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.rvea import RVEA\n", @@ -116,30 +79,33 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.rvea.RVEA\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/sms.ipynb b/docs/source/algorithms/moo/sms.ipynb index 3cd768ef9..86c7234d2 100644 --- a/docs/source/algorithms/moo/sms.ipynb +++ b/docs/source/algorithms/moo/sms.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_sms:" ] @@ -41,9 +39,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -61,15 +57,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:37:49.158027Z", - "iopub.status.busy": "2022-08-01T02:37:49.157669Z", - "iopub.status.idle": "2022-08-01T02:37:54.867445Z", - "shell.execute_reply": "2022-08-01T02:37:54.866443Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.sms import SMSEMOA\n", @@ -102,16 +90,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.sms.SMSEMOA\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/moo/unsga3.ipynb b/docs/source/algorithms/moo/unsga3.ipynb index 443799f93..0a22e2bfe 100644 --- a/docs/source/algorithms/moo/unsga3.ipynb +++ b/docs/source/algorithms/moo/unsga3.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_unsga3:" ] @@ -40,15 +38,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:40:36.997417Z", - "iopub.status.busy": "2022-08-01T02:40:36.996984Z", - "iopub.status.idle": "2022-08-01T02:40:43.735821Z", - "shell.execute_reply": "2022-08-01T02:40:43.735074Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -87,15 +77,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:40:43.739320Z", - "iopub.status.busy": "2022-08-01T02:40:43.738943Z", - "iopub.status.idle": "2022-08-01T02:40:50.648379Z", - "shell.execute_reply": "2022-08-01T02:40:50.647603Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "_res = minimize(problem,\n", @@ -109,15 +91,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:40:50.651828Z", - "iopub.status.busy": "2022-08-01T02:40:50.651562Z", - "iopub.status.idle": "2022-08-01T02:40:50.925887Z", - "shell.execute_reply": "2022-08-01T02:40:50.924799Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -137,25 +111,33 @@ }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.moo.unsga3.UNSGA3\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/brkga.ipynb b/docs/source/algorithms/soo/brkga.ipynb index 6b4ac2dde..dba377716 100644 --- a/docs/source/algorithms/soo/brkga.ipynb +++ b/docs/source/algorithms/soo/brkga.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_brkga:" ] @@ -45,15 +43,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:35.740726Z", - "iopub.status.busy": "2022-08-01T02:43:35.740369Z", - "iopub.status.idle": "2022-08-01T02:43:35.767030Z", - "shell.execute_reply": "2022-08-01T02:43:35.766163Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -84,15 +74,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:35.770716Z", - "iopub.status.busy": "2022-08-01T02:43:35.770423Z", - "iopub.status.idle": "2022-08-01T02:43:35.775275Z", - "shell.execute_reply": "2022-08-01T02:43:35.774583Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.duplicate import ElementwiseDuplicateElimination\n", @@ -114,16 +96,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "algorithms/usage_brkga.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:43:35.778652Z", - "iopub.status.busy": "2022-08-01T02:43:35.778360Z", - "iopub.status.idle": "2022-08-01T02:43:35.783128Z", - "shell.execute_reply": "2022-08-01T02:43:35.782532Z" - }, - "section": "problem" - }, + "metadata": {}, "outputs": [], "source": [ "np.random.seed(2)\n", @@ -142,15 +115,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:35.786491Z", - "iopub.status.busy": "2022-08-01T02:43:35.786225Z", - "iopub.status.idle": "2022-08-01T02:43:47.539174Z", - "shell.execute_reply": "2022-08-01T02:43:47.538573Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.brkga import BRKGA\n", @@ -183,16 +148,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.brkga.BRKGA\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/cmaes.ipynb b/docs/source/algorithms/soo/cmaes.ipynb index 7d2f24aaf..911219cb8 100644 --- a/docs/source/algorithms/soo/cmaes.ipynb +++ b/docs/source/algorithms/soo/cmaes.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_cmaes:" ] @@ -42,15 +40,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:51.984928Z", - "iopub.status.busy": "2022-08-01T02:42:51.984512Z", - "iopub.status.idle": "2022-08-01T02:42:52.495245Z", - "shell.execute_reply": "2022-08-01T02:42:52.494538Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -81,15 +71,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:52.499497Z", - "iopub.status.busy": "2022-08-01T02:42:52.499166Z", - "iopub.status.idle": "2022-08-01T02:42:52.528408Z", - "shell.execute_reply": "2022-08-01T02:42:52.527724Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res = minimize(problem,\n", @@ -104,15 +86,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:52.532288Z", - "iopub.status.busy": "2022-08-01T02:42:52.531939Z", - "iopub.status.idle": "2022-08-01T02:42:52.554711Z", - "shell.execute_reply": "2022-08-01T02:42:52.554080Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res = minimize(problem,\n", @@ -134,14 +108,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:52.558531Z", - "iopub.status.busy": "2022-08-01T02:42:52.558233Z", - "iopub.status.idle": "2022-08-01T02:42:52.966052Z", - "shell.execute_reply": "2022-08-01T02:42:52.965427Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"rastrigin\")\n", @@ -168,14 +135,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:52.969686Z", - "iopub.status.busy": "2022-08-01T02:42:52.969346Z", - "iopub.status.idle": "2022-08-01T02:42:53.412717Z", - "shell.execute_reply": "2022-08-01T02:42:53.411591Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -212,25 +172,33 @@ }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.cmaes.CMAES\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/de.ipynb b/docs/source/algorithms/soo/de.ipynb index 2a1471d3d..bca283539 100644 --- a/docs/source/algorithms/soo/de.ipynb +++ b/docs/source/algorithms/soo/de.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_de:" ] @@ -78,15 +76,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:32.165406Z", - "iopub.status.busy": "2022-08-01T02:42:32.164895Z", - "iopub.status.idle": "2022-08-01T02:42:34.859580Z", - "shell.execute_reply": "2022-08-01T02:42:34.858677Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.de import DE\n", @@ -124,16 +114,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.de.DE\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/es.ipynb b/docs/source/algorithms/soo/es.ipynb index 28dca7340..18e50b8ac 100644 --- a/docs/source/algorithms/soo/es.ipynb +++ b/docs/source/algorithms/soo/es.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_es:" ] @@ -44,15 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:42.089822Z", - "iopub.status.busy": "2022-08-01T02:42:42.089478Z", - "iopub.status.idle": "2022-08-01T02:42:44.451924Z", - "shell.execute_reply": "2022-08-01T02:42:44.451168Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.es import ES\n", @@ -81,16 +71,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.es.ES\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/g3pcx.ipynb b/docs/source/algorithms/soo/g3pcx.ipynb index da4e7c84d..9538d99b1 100644 --- a/docs/source/algorithms/soo/g3pcx.ipynb +++ b/docs/source/algorithms/soo/g3pcx.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_g3pcx:" ] @@ -28,12 +26,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:51.052247Z", - "iopub.status.busy": "2022-08-01T02:43:51.051496Z", - "iopub.status.idle": "2022-08-01T02:43:52.690858Z", - "shell.execute_reply": "2022-08-01T02:43:52.690248Z" - }, "tags": [] }, "outputs": [], @@ -63,9 +55,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.g3pcx.G3PCX\n", " :noindex:\n", @@ -73,7 +63,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/ga.ipynb b/docs/source/algorithms/soo/ga.ipynb index 25f958b24..8053bcf90 100644 --- a/docs/source/algorithms/soo/ga.ipynb +++ b/docs/source/algorithms/soo/ga.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_ga:" ] @@ -53,15 +51,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:56.920242Z", - "iopub.status.busy": "2022-08-01T02:42:56.919870Z", - "iopub.status.idle": "2022-08-01T02:42:58.480007Z", - "shell.execute_reply": "2022-08-01T02:42:58.479008Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -91,16 +81,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.algorithms.soo.nonconvex.ga.GA\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/isres.ipynb b/docs/source/algorithms/soo/isres.ipynb index dde6f44fe..ec29db835 100644 --- a/docs/source/algorithms/soo/isres.ipynb +++ b/docs/source/algorithms/soo/isres.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_isres:" ] @@ -42,15 +40,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:01.999249Z", - "iopub.status.busy": "2022-08-01T02:43:01.998607Z", - "iopub.status.idle": "2022-08-01T02:43:14.366442Z", - "shell.execute_reply": "2022-08-01T02:43:14.365662Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.isres import ISRES\n", @@ -79,16 +69,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.isres.ISRES\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/nelder.ipynb b/docs/source/algorithms/soo/nelder.ipynb index 5944a669b..5a287aab6 100644 --- a/docs/source/algorithms/soo/nelder.ipynb +++ b/docs/source/algorithms/soo/nelder.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_nelder_mead:" ] @@ -22,15 +20,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:56.210201Z", - "iopub.status.busy": "2022-08-01T02:43:56.209589Z", - "iopub.status.idle": "2022-08-01T02:43:56.520704Z", - "shell.execute_reply": "2022-08-01T02:43:56.519914Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.nelder import NelderMead\n", @@ -58,16 +48,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.nelder.NelderMead\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/pattern.ipynb b/docs/source/algorithms/soo/pattern.ipynb index aa5e731e3..178bfced5 100644 --- a/docs/source/algorithms/soo/pattern.ipynb +++ b/docs/source/algorithms/soo/pattern.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_pattern_search:" ] @@ -27,15 +25,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:38.404703Z", - "iopub.status.busy": "2022-08-01T02:42:38.404290Z", - "iopub.status.idle": "2022-08-01T02:42:38.557754Z", - "shell.execute_reply": "2022-08-01T02:42:38.556883Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.pattern import PatternSearch\n", @@ -64,16 +54,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.pattern.PatternSearch\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/pso.ipynb b/docs/source/algorithms/soo/pso.ipynb index 8bbf8b09b..8b06e911e 100644 --- a/docs/source/algorithms/soo/pso.ipynb +++ b/docs/source/algorithms/soo/pso.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_pso:" ] @@ -88,15 +86,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:42:48.076384Z", - "iopub.status.busy": "2022-08-01T02:42:48.075980Z", - "iopub.status.idle": "2022-08-01T02:42:48.444798Z", - "shell.execute_reply": "2022-08-01T02:42:48.443890Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.pso import PSO\n", @@ -124,9 +114,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.pso.PSO\n", " :noindex:\n", @@ -134,7 +122,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/soo/sres.ipynb b/docs/source/algorithms/soo/sres.ipynb index 6f36b5a05..b148367bc 100644 --- a/docs/source/algorithms/soo/sres.ipynb +++ b/docs/source/algorithms/soo/sres.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_sres:" ] @@ -61,15 +59,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:43:17.871687Z", - "iopub.status.busy": "2022-08-01T02:43:17.871244Z", - "iopub.status.idle": "2022-08-01T02:43:32.165071Z", - "shell.execute_reply": "2022-08-01T02:43:32.164461Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.sres import SRES\n", @@ -105,16 +95,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.algorithms.soo.nonconvex.sres.SRES\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/algorithms/usage.ipynb b/docs/source/algorithms/usage.ipynb index 942a1e27c..94c339750 100644 --- a/docs/source/algorithms/usage.ipynb +++ b/docs/source/algorithms/usage.ipynb @@ -3,10 +3,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -15,11 +11,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Usage" ] @@ -27,10 +19,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -45,10 +33,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -57,22 +41,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Functional" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "As you might be used to executing algorithms from other frameworks, pymoo offers a functional interface. It requires to pass the problem to be solved, the algorithm to be used, and optionally (but for most algorithms recommend) a termination condition. Other important arguments are discussed in the [Interface](../interface/index.ipynb) tutorial. For executing custom code in between iterations the [Callback](../interface/callback.ipynb) object can be useful. Moreover, it is worth noting that the algorithm object is cloned before being modified. Thus, two calls with the same algorithm object and random seed lead to the same result." ] @@ -80,20 +56,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:40.097490Z", - "iopub.status.busy": "2022-08-01T02:36:40.096831Z", - "iopub.status.idle": "2022-08-01T02:36:40.450301Z", - "shell.execute_reply": "2022-08-01T02:36:40.449563Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -117,10 +80,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -129,22 +88,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Object-oriented" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Instead of passing the algorithm to the `minimize` function, it can be used directly for optimization. The first way using the `next` function is available for all algorithms in pymoo. The second way provides a convenient **Ask and Tell** interface, available for most evolutionary algorithms. The reason to use one or the other interface is to have more control during an algorithm execution or even modify the algorithm object while injecting new solutions." ] @@ -152,10 +103,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -164,22 +111,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Next Function" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Directly using the `algorithm` object will modify its state during runtime. This allows to ask the object if one more iteration shall be executed or not by calling `algorithm.has_next()`. As soon as the termination criterion has been satisfied, this will return `False`, ending the run. \n", "Here, we show a custom printout in each iteration (from the second iteration on). Of course, more sophisticated procedures can be incorporated." @@ -188,20 +127,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:40.454106Z", - "iopub.status.busy": "2022-08-01T02:36:40.453766Z", - "iopub.status.idle": "2022-08-01T02:36:40.664458Z", - "shell.execute_reply": "2022-08-01T02:36:40.663770Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import datetime\n", @@ -236,10 +162,6 @@ { "cell_type": "raw", "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -248,33 +170,21 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Ask and Tell" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "The `next` method already provides much more control over the algorithm executing than the functional interface. However, the call of the `next` function on the algorithm object still is considered a black box. This is where the **Ask and Tell** interface comes into play. Instead of calling one function, two function calls are executed. First, `algorithm.ask()` returns a solution set to be evaluated, and second, `algorithm.tell(solutions)` receives the evaluated solutions to proceed to the next generation. This gives even further control over the run. " ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### Problem-Depdendent\n", "\n", @@ -284,20 +194,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:40.667774Z", - "iopub.status.busy": "2022-08-01T02:36:40.667516Z", - "iopub.status.idle": "2022-08-01T02:36:40.932269Z", - "shell.execute_reply": "2022-08-01T02:36:40.931620Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -334,11 +231,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### Problem-independent\n", "\n", @@ -348,20 +241,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:40.935772Z", - "iopub.status.busy": "2022-08-01T02:36:40.935480Z", - "iopub.status.idle": "2022-08-01T02:36:41.153440Z", - "shell.execute_reply": "2022-08-01T02:36:41.152668Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -417,7 +297,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/case_studies/index.ipynb b/docs/source/case_studies/index.ipynb index a25784f35..c59db13d8 100644 --- a/docs/source/case_studies/index.ipynb +++ b/docs/source/case_studies/index.ipynb @@ -2,28 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_case_studies:" ] }, { "cell_type": "markdown", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "# Case Studies" ] }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext", - "tags": [] - }, + "metadata": {}, "source": [ "\n", ".. toctree::\n", @@ -38,9 +31,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -51,7 +42,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/case_studies/portfolio_allocation.ipynb b/docs/source/case_studies/portfolio_allocation.ipynb index d41b3f086..c6ca1ef9c 100644 --- a/docs/source/case_studies/portfolio_allocation.ipynb +++ b/docs/source/case_studies/portfolio_allocation.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_portfolio_allocation:" ] @@ -34,14 +32,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:53.033075Z", - "iopub.status.busy": "2022-08-01T02:45:53.032574Z", - "iopub.status.idle": "2022-08-01T02:45:54.348859Z", - "shell.execute_reply": "2022-08-01T02:45:54.347743Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -61,9 +52,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -74,14 +63,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:54.352867Z", - "iopub.status.busy": "2022-08-01T02:45:54.352559Z", - "iopub.status.idle": "2022-08-01T02:45:55.126929Z", - "shell.execute_reply": "2022-08-01T02:45:55.126234Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "returns = df.pct_change().dropna(how=\"all\")\n", @@ -120,14 +102,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:55.130509Z", - "iopub.status.busy": "2022-08-01T02:45:55.130210Z", - "iopub.status.idle": "2022-08-01T02:45:55.149978Z", - "shell.execute_reply": "2022-08-01T02:45:55.149119Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.problem import ElementwiseProblem\n", @@ -161,14 +136,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:55.153273Z", - "iopub.status.busy": "2022-08-01T02:45:55.153009Z", - "iopub.status.idle": "2022-08-01T02:45:55.164231Z", - "shell.execute_reply": "2022-08-01T02:45:55.163140Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.repair import Repair\n", @@ -191,14 +159,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:55.170086Z", - "iopub.status.busy": "2022-08-01T02:45:55.169503Z", - "iopub.status.idle": "2022-08-01T02:46:07.365915Z", - "shell.execute_reply": "2022-08-01T02:46:07.365010Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.sms import SMSEMOA\n", @@ -224,14 +185,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:07.370130Z", - "iopub.status.busy": "2022-08-01T02:46:07.369774Z", - "iopub.status.idle": "2022-08-01T02:46:07.543999Z", - "shell.execute_reply": "2022-08-01T02:46:07.543197Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "X, F, sharpe = res.opt.get(\"X\", \"F\", \"sharpe\")\n", @@ -257,14 +211,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:07.547816Z", - "iopub.status.busy": "2022-08-01T02:46:07.547441Z", - "iopub.status.idle": "2022-08-01T02:46:07.553072Z", - "shell.execute_reply": "2022-08-01T02:46:07.552193Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import operator\n", @@ -278,7 +225,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/case_studies/subset_selection.ipynb b/docs/source/case_studies/subset_selection.ipynb index b33c1445f..5dca04be6 100644 --- a/docs/source/case_studies/subset_selection.ipynb +++ b/docs/source/case_studies/subset_selection.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_subset_selection:" ] @@ -44,14 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:11.254406Z", - "iopub.status.busy": "2022-08-01T02:46:11.254011Z", - "iopub.status.idle": "2022-08-01T02:46:11.279481Z", - "shell.execute_reply": "2022-08-01T02:46:11.278587Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -90,14 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:11.282972Z", - "iopub.status.busy": "2022-08-01T02:46:11.282700Z", - "iopub.status.idle": "2022-08-01T02:46:11.293091Z", - "shell.execute_reply": "2022-08-01T02:46:11.292480Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.crossover import Crossover\n", @@ -164,14 +148,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:11.296340Z", - "iopub.status.busy": "2022-08-01T02:46:11.296078Z", - "iopub.status.idle": "2022-08-01T02:46:12.439555Z", - "shell.execute_reply": "2022-08-01T02:46:12.438774Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -204,14 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:12.443481Z", - "iopub.status.busy": "2022-08-01T02:46:12.443134Z", - "iopub.status.idle": "2022-08-01T02:46:12.447830Z", - "shell.execute_reply": "2022-08-01T02:46:12.447110Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "opt = np.sort(np.argsort(L)[:n_max])\n", @@ -220,7 +190,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/as_obj.ipynb b/docs/source/constraints/as_obj.ipynb index 64f6b8b16..353aee16b 100644 --- a/docs/source/constraints/as_obj.ipynb +++ b/docs/source/constraints/as_obj.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_feas_first:" ] @@ -13,13 +11,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:50.179088Z", - "iopub.status.busy": "2022-08-01T02:34:50.178722Z", - "iopub.status.idle": "2022-08-01T02:34:51.054508Z", - "shell.execute_reply": "2022-08-01T02:34:51.053573Z" - }, - "nbsphinx": "hidden", "tags": [] }, "outputs": [], @@ -46,12 +37,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:51.060099Z", - "iopub.status.busy": "2022-08-01T02:34:51.059652Z", - "iopub.status.idle": "2022-08-01T02:34:57.292396Z", - "shell.execute_reply": "2022-08-01T02:34:57.291442Z" - }, "tags": [] }, "outputs": [], @@ -90,14 +75,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:57.296232Z", - "iopub.status.busy": "2022-08-01T02:34:57.295890Z", - "iopub.status.idle": "2022-08-01T02:34:57.301459Z", - "shell.execute_reply": "2022-08-01T02:34:57.300836Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.evaluator import Evaluator\n", @@ -114,7 +92,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/as_penalty.ipynb b/docs/source/constraints/as_penalty.ipynb index 043a7d6c5..b4dfb36f8 100644 --- a/docs/source/constraints/as_penalty.ipynb +++ b/docs/source/constraints/as_penalty.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints_penalty:" ] @@ -12,16 +10,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:15.254641Z", - "iopub.status.busy": "2022-08-01T02:35:15.254266Z", - "iopub.status.idle": "2022-08-01T02:35:16.131213Z", - "shell.execute_reply": "2022-08-01T02:35:16.130343Z" - }, - "nbsphinx": "hidden", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -45,15 +34,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:16.136119Z", - "iopub.status.busy": "2022-08-01T02:35:16.135409Z", - "iopub.status.idle": "2022-08-01T02:35:18.167893Z", - "shell.execute_reply": "2022-08-01T02:35:18.167280Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.de import DE\n", @@ -78,9 +59,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints_no_feas_found:" ] @@ -102,14 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:18.171667Z", - "iopub.status.busy": "2022-08-01T02:35:18.171245Z", - "iopub.status.idle": "2022-08-01T02:35:19.146221Z", - "shell.execute_reply": "2022-08-01T02:35:19.145228Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.de import DE\n", @@ -138,14 +110,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:19.150054Z", - "iopub.status.busy": "2022-08-01T02:35:19.149708Z", - "iopub.status.idle": "2022-08-01T02:35:19.433936Z", - "shell.execute_reply": "2022-08-01T02:35:19.433302Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.sampling.lhs import LHS\n", @@ -161,7 +126,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/eps.ipynb b/docs/source/constraints/eps.ipynb index 3ddb671f8..55aaa1036 100644 --- a/docs/source/constraints/eps.ipynb +++ b/docs/source/constraints/eps.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints_eps:" ] @@ -12,16 +10,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:00.877444Z", - "iopub.status.busy": "2022-08-01T02:35:00.877064Z", - "iopub.status.idle": "2022-08-01T02:35:01.763102Z", - "shell.execute_reply": "2022-08-01T02:35:01.762194Z" - }, - "nbsphinx": "hidden", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -44,9 +33,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -64,15 +51,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:01.767062Z", - "iopub.status.busy": "2022-08-01T02:35:01.766793Z", - "iopub.status.idle": "2022-08-01T02:35:08.171985Z", - "shell.execute_reply": "2022-08-01T02:35:08.171232Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.de import DE\n", @@ -94,7 +73,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/feas_first.ipynb b/docs/source/constraints/feas_first.ipynb index e77d4ad4f..1b8d238c3 100644 --- a/docs/source/constraints/feas_first.ipynb +++ b/docs/source/constraints/feas_first.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints_as_obj:" ] @@ -12,16 +10,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:44.701658Z", - "iopub.status.busy": "2022-08-01T02:34:44.700923Z", - "iopub.status.idle": "2022-08-01T02:34:45.681246Z", - "shell.execute_reply": "2022-08-01T02:34:45.680052Z" - }, - "nbsphinx": "hidden", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -52,15 +41,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:45.685296Z", - "iopub.status.busy": "2022-08-01T02:34:45.684988Z", - "iopub.status.idle": "2022-08-01T02:34:46.615628Z", - "shell.execute_reply": "2022-08-01T02:34:46.614634Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -79,7 +60,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/index.ipynb b/docs/source/constraints/index.ipynb index 1c82df196..b6bccb724 100644 --- a/docs/source/constraints/index.ipynb +++ b/docs/source/constraints/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints:" ] @@ -20,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Info\n", " :class: myOwnStyle\n", @@ -33,7 +29,6 @@ { "cell_type": "raw", "metadata": { - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -84,12 +79,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:28.116654Z", - "iopub.status.busy": "2022-08-01T02:35:28.116294Z", - "iopub.status.idle": "2022-08-01T02:35:28.145336Z", - "shell.execute_reply": "2022-08-01T02:35:28.144457Z" - }, "tags": [] }, "outputs": [], @@ -116,14 +105,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:28.148888Z", - "iopub.status.busy": "2022-08-01T02:35:28.148620Z", - "iopub.status.idle": "2022-08-01T02:35:28.611743Z", - "shell.execute_reply": "2022-08-01T02:35:28.611006Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -173,7 +155,6 @@ { "cell_type": "raw", "metadata": { - "raw_mimetype": "text/restructuredtext", "tags": [] }, "source": [ @@ -199,14 +180,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:28.615991Z", - "iopub.status.busy": "2022-08-01T02:35:28.615619Z", - "iopub.status.idle": "2022-08-01T02:35:28.620890Z", - "shell.execute_reply": "2022-08-01T02:35:28.620234Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "class ConstrainedProblemWithEquality(ElementwiseProblem):\n", @@ -230,14 +204,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:28.624088Z", - "iopub.status.busy": "2022-08-01T02:35:28.623846Z", - "iopub.status.idle": "2022-08-01T02:35:28.968375Z", - "shell.execute_reply": "2022-08-01T02:35:28.967688Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -280,9 +247,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -301,7 +266,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/constraints/problem.ipynb b/docs/source/constraints/problem.ipynb index 8e606b76c..31aba7f32 100644 --- a/docs/source/constraints/problem.ipynb +++ b/docs/source/constraints/problem.ipynb @@ -3,9 +3,7 @@ { "cell_type": "raw", "id": "c23dfa57-d50b-4b8a-bfa3-917993a5a7ad", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_constraints_problem:" ] @@ -19,7 +17,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/docs/source/constraints/repair.ipynb b/docs/source/constraints/repair.ipynb index e79851dcc..94c95e0e0 100644 --- a/docs/source/constraints/repair.ipynb +++ b/docs/source/constraints/repair.ipynb @@ -3,9 +3,7 @@ { "cell_type": "raw", "id": "d8b54188-9c5d-494d-8435-aea1ccacb125", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_repair:" ] @@ -14,16 +12,7 @@ "cell_type": "code", "execution_count": null, "id": "d2e220b4-b2af-4278-bb4f-e5936312ced3", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:23.014767Z", - "iopub.status.busy": "2022-08-01T02:35:23.014408Z", - "iopub.status.idle": "2022-08-01T02:35:23.895825Z", - "shell.execute_reply": "2022-08-01T02:35:23.894946Z" - }, - "nbsphinx": "hidden", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -33,9 +22,7 @@ { "cell_type": "markdown", "id": "be5e07d8-23af-4361-9f4e-5982a8a1ab40", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "## Repair Operator " ] @@ -60,15 +47,7 @@ "cell_type": "code", "execution_count": null, "id": "c0ef1df3-f2d9-4a20-92a4-5684e5032e23", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:23.899739Z", - "iopub.status.busy": "2022-08-01T02:35:23.899404Z", - "iopub.status.idle": "2022-08-01T02:35:23.904380Z", - "shell.execute_reply": "2022-08-01T02:35:23.903672Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.repair import Repair\n", @@ -92,15 +71,7 @@ "cell_type": "code", "execution_count": null, "id": "54068131-6224-48b0-9608-01546a096b38", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:23.908051Z", - "iopub.status.busy": "2022-08-01T02:35:23.907788Z", - "iopub.status.idle": "2022-08-01T02:35:24.260751Z", - "shell.execute_reply": "2022-08-01T02:35:24.259657Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -129,15 +100,7 @@ "cell_type": "code", "execution_count": null, "id": "18e818b8-73cd-4a48-9567-21f76ac9cf3d", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:24.265524Z", - "iopub.status.busy": "2022-08-01T02:35:24.264980Z", - "iopub.status.idle": "2022-08-01T02:35:24.480013Z", - "shell.execute_reply": "2022-08-01T02:35:24.478845Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -156,7 +119,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/docs/source/contribute.ipynb b/docs/source/contribute.ipynb index bd46e9b88..20b12cc06 100644 --- a/docs/source/contribute.ipynb +++ b/docs/source/contribute.ipynb @@ -37,7 +37,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/binary.ipynb b/docs/source/customization/binary.ipynb index aae98b500..5f8da7815 100644 --- a/docs/source/customization/binary.ipynb +++ b/docs/source/customization/binary.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_binary:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:19.688801Z", - "iopub.status.busy": "2022-08-01T02:36:19.688442Z", - "iopub.status.idle": "2022-08-01T02:36:21.709415Z", - "shell.execute_reply": "2022-08-01T02:36:21.708556Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -67,7 +57,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/custom.ipynb b/docs/source/customization/custom.ipynb index 402069977..9c56ae468 100644 --- a/docs/source/customization/custom.ipynb +++ b/docs/source/customization/custom.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_custom:" ] @@ -40,14 +38,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.241364Z", - "iopub.status.busy": "2022-08-01T02:36:25.240980Z", - "iopub.status.idle": "2022-08-01T02:36:25.266977Z", - "shell.execute_reply": "2022-08-01T02:36:25.266242Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -100,14 +91,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.271668Z", - "iopub.status.busy": "2022-08-01T02:36:25.271196Z", - "iopub.status.idle": "2022-08-01T02:36:25.276501Z", - "shell.execute_reply": "2022-08-01T02:36:25.275795Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.sampling import Sampling\n", @@ -141,14 +125,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.279804Z", - "iopub.status.busy": "2022-08-01T02:36:25.279526Z", - "iopub.status.idle": "2022-08-01T02:36:25.287524Z", - "shell.execute_reply": "2022-08-01T02:36:25.286501Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.crossover import Crossover\n", @@ -209,14 +186,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.290828Z", - "iopub.status.busy": "2022-08-01T02:36:25.290559Z", - "iopub.status.idle": "2022-08-01T02:36:25.296797Z", - "shell.execute_reply": "2022-08-01T02:36:25.296187Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.mutation import Mutation\n", @@ -264,14 +234,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.299803Z", - "iopub.status.busy": "2022-08-01T02:36:25.299543Z", - "iopub.status.idle": "2022-08-01T02:36:25.304049Z", - "shell.execute_reply": "2022-08-01T02:36:25.303431Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.duplicate import ElementwiseDuplicateElimination\n", @@ -294,14 +257,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.307117Z", - "iopub.status.busy": "2022-08-01T02:36:25.306828Z", - "iopub.status.idle": "2022-08-01T02:36:25.636193Z", - "shell.execute_reply": "2022-08-01T02:36:25.635580Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import string\n", @@ -327,14 +283,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:25.640542Z", - "iopub.status.busy": "2022-08-01T02:36:25.639845Z", - "iopub.status.idle": "2022-08-01T02:36:26.046543Z", - "shell.execute_reply": "2022-08-01T02:36:26.045747Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.scatter import Scatter\n", @@ -344,14 +293,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:26.050897Z", - "iopub.status.busy": "2022-08-01T02:36:26.050604Z", - "iopub.status.idle": "2022-08-01T02:36:26.055771Z", - "shell.execute_reply": "2022-08-01T02:36:26.055122Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "results = res.X[np.argsort(res.F[:, 0])]\n", @@ -360,7 +302,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/discrete.ipynb b/docs/source/customization/discrete.ipynb index 434b9a83d..0e341f972 100644 --- a/docs/source/customization/discrete.ipynb +++ b/docs/source/customization/discrete.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_discrete:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:30.696001Z", - "iopub.status.busy": "2022-08-01T02:36:30.695388Z", - "iopub.status.idle": "2022-08-01T02:36:31.622471Z", - "shell.execute_reply": "2022-08-01T02:36:31.621374Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -84,15 +74,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:31.626266Z", - "iopub.status.busy": "2022-08-01T02:36:31.625953Z", - "iopub.status.idle": "2022-08-01T02:36:31.921654Z", - "shell.execute_reply": "2022-08-01T02:36:31.920458Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -106,7 +88,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/initialization.ipynb b/docs/source/customization/initialization.ipynb index ad495f784..0683cf2d7 100644 --- a/docs/source/customization/initialization.ipynb +++ b/docs/source/customization/initialization.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_initialization:" ] @@ -37,15 +35,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:35.639276Z", - "iopub.status.busy": "2022-08-01T02:36:35.638633Z", - "iopub.status.idle": "2022-08-01T02:36:36.188432Z", - "shell.execute_reply": "2022-08-01T02:36:36.187478Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -77,15 +67,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:36.191840Z", - "iopub.status.busy": "2022-08-01T02:36:36.191541Z", - "iopub.status.idle": "2022-08-01T02:36:36.621974Z", - "shell.execute_reply": "2022-08-01T02:36:36.621355Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -113,7 +95,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/mixed.ipynb b/docs/source/customization/mixed.ipynb index 0819ceebd..7e87f2956 100644 --- a/docs/source/customization/mixed.ipynb +++ b/docs/source/customization/mixed.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mixed_variable:" ] @@ -21,15 +19,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:59.555534Z", - "iopub.status.busy": "2022-08-01T02:35:59.555179Z", - "iopub.status.idle": "2022-08-01T02:35:59.590515Z", - "shell.execute_reply": "2022-08-01T02:35:59.589442Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.problem import ElementwiseProblem\n", @@ -70,15 +60,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:59.594048Z", - "iopub.status.busy": "2022-08-01T02:35:59.593763Z", - "iopub.status.idle": "2022-08-01T02:36:00.047577Z", - "shell.execute_reply": "2022-08-01T02:36:00.046553Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.mixed import MixedVariableGA\n", @@ -108,14 +90,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:00.051336Z", - "iopub.status.busy": "2022-08-01T02:36:00.051019Z", - "iopub.status.idle": "2022-08-01T02:36:04.648797Z", - "shell.execute_reply": "2022-08-01T02:36:04.647934Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.optuna import Optuna\n", @@ -145,14 +120,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:04.653137Z", - "iopub.status.busy": "2022-08-01T02:36:04.652753Z", - "iopub.status.idle": "2022-08-01T02:36:04.658504Z", - "shell.execute_reply": "2022-08-01T02:36:04.657839Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "class MultiObjectiveMixedVariableProblem(ElementwiseProblem):\n", @@ -184,14 +152,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:04.661972Z", - "iopub.status.busy": "2022-08-01T02:36:04.661359Z", - "iopub.status.idle": "2022-08-01T02:36:05.544988Z", - "shell.execute_reply": "2022-08-01T02:36:05.544101Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.scatter import Scatter\n", @@ -216,7 +177,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/permutation.ipynb b/docs/source/customization/permutation.ipynb index 0593ceeaa..dce00623a 100644 --- a/docs/source/customization/permutation.ipynb +++ b/docs/source/customization/permutation.ipynb @@ -2,18 +2,14 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_perm:" ] }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "# Permutations" ] @@ -45,15 +41,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:09.438144Z", - "iopub.status.busy": "2022-08-01T02:36:09.437792Z", - "iopub.status.idle": "2022-08-01T02:36:09.453378Z", - "shell.execute_reply": "2022-08-01T02:36:09.452016Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -82,15 +70,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:09.457766Z", - "iopub.status.busy": "2022-08-01T02:36:09.457452Z", - "iopub.status.idle": "2022-08-01T02:36:10.334989Z", - "shell.execute_reply": "2022-08-01T02:36:10.333362Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -126,15 +106,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:10.338809Z", - "iopub.status.busy": "2022-08-01T02:36:10.338460Z", - "iopub.status.idle": "2022-08-01T02:36:10.343180Z", - "shell.execute_reply": "2022-08-01T02:36:10.342452Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "print(\"Traveling Time:\", np.round(res.F[0], 3))\n", @@ -144,15 +116,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:10.347700Z", - "iopub.status.busy": "2022-08-01T02:36:10.347319Z", - "iopub.status.idle": "2022-08-01T02:36:10.687683Z", - "shell.execute_reply": "2022-08-01T02:36:10.686551Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.single.traveling_salesman import visualize\n", @@ -176,15 +140,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:10.692819Z", - "iopub.status.busy": "2022-08-01T02:36:10.691850Z", - "iopub.status.idle": "2022-08-01T02:36:10.984144Z", - "shell.execute_reply": "2022-08-01T02:36:10.983469Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.single.flowshop_scheduling import create_random_flowshop_problem\n", @@ -214,15 +170,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:10.987476Z", - "iopub.status.busy": "2022-08-01T02:36:10.987012Z", - "iopub.status.idle": "2022-08-01T02:36:10.990812Z", - "shell.execute_reply": "2022-08-01T02:36:10.990180Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "print(\"Maximum Span:\", np.round(res.F[0], 3))\n", @@ -232,15 +180,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:10.993819Z", - "iopub.status.busy": "2022-08-01T02:36:10.993556Z", - "iopub.status.idle": "2022-08-01T02:36:11.331680Z", - "shell.execute_reply": "2022-08-01T02:36:11.330912Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.single.flowshop_scheduling import visualize\n", @@ -255,7 +195,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/customization/subset.ipynb b/docs/source/customization/subset.ipynb index 904311f88..5dca04be6 100644 --- a/docs/source/customization/subset.ipynb +++ b/docs/source/customization/subset.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_subset_selection:" ] @@ -44,14 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:15.088637Z", - "iopub.status.busy": "2022-08-01T02:36:15.088143Z", - "iopub.status.idle": "2022-08-01T02:36:15.114194Z", - "shell.execute_reply": "2022-08-01T02:36:15.113610Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -90,14 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:15.117534Z", - "iopub.status.busy": "2022-08-01T02:36:15.117253Z", - "iopub.status.idle": "2022-08-01T02:36:15.127188Z", - "shell.execute_reply": "2022-08-01T02:36:15.126300Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.crossover import Crossover\n", @@ -164,14 +148,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:15.130479Z", - "iopub.status.busy": "2022-08-01T02:36:15.130211Z", - "iopub.status.idle": "2022-08-01T02:36:16.207499Z", - "shell.execute_reply": "2022-08-01T02:36:16.206643Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -204,14 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:36:16.210854Z", - "iopub.status.busy": "2022-08-01T02:36:16.210494Z", - "iopub.status.idle": "2022-08-01T02:36:16.215263Z", - "shell.execute_reply": "2022-08-01T02:36:16.214580Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "opt = np.sort(np.argsort(L)[:n_max])\n", @@ -220,7 +190,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/faq.ipynb b/docs/source/faq.ipynb index 8b850ac20..438adb15f 100644 --- a/docs/source/faq.ipynb +++ b/docs/source/faq.ipynb @@ -33,7 +33,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/index.ipynb b/docs/source/getting_started/index.ipynb index 3771d5f45..760b84dc7 100644 --- a/docs/source/getting_started/index.ipynb +++ b/docs/source/getting_started/index.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started:" ] @@ -34,9 +32,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :maxdepth: 1\n", @@ -64,9 +60,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -80,7 +74,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/part_1.ipynb b/docs/source/getting_started/part_1.ipynb index 254f5e5f8..0b30a4114 100644 --- a/docs/source/getting_started/part_1.ipynb +++ b/docs/source/getting_started/part_1.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_part1:" ] @@ -95,9 +93,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. note::\n", " Next, we derive the optimum for the given optimization problem. It is worth pointing out that this is not a requirement for pymoo and is just done for verification purposes here. Moreover, this is a valuable exercise to understand the design and objective space mapping." @@ -121,16 +117,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:36.898723Z", - "iopub.status.busy": "2022-08-01T02:46:36.898350Z", - "iopub.status.idle": "2022-08-01T02:46:37.460915Z", - "shell.execute_reply": "2022-08-01T02:46:37.459964Z" - }, - "nbsphinx": "hide_input", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -202,15 +189,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:37.464865Z", - "iopub.status.busy": "2022-08-01T02:46:37.464593Z", - "iopub.status.idle": "2022-08-01T02:46:37.731253Z", - "shell.execute_reply": "2022-08-01T02:46:37.730482Z" - }, - "nbsphinx": "hide_input" - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -245,9 +224,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Hint\n", " :class: myOwnStyle\n", @@ -256,7 +233,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/part_2.ipynb b/docs/source/getting_started/part_2.ipynb index b07d7b095..7d9f212da 100644 --- a/docs/source/getting_started/part_2.ipynb +++ b/docs/source/getting_started/part_2.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_part2:" ] @@ -65,9 +63,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Problem Definition\n", " :class: myOwnStyle\n", @@ -124,14 +120,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:56.845802Z", - "iopub.status.busy": "2022-08-01T02:46:56.845129Z", - "iopub.status.idle": "2022-08-01T02:46:56.872835Z", - "shell.execute_reply": "2022-08-01T02:46:56.871898Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -162,9 +151,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. tip::\n", " A problem can be defined in a couple of different ways. Above, the implementation of an **element-wise** implementation is demonstrated, which means the `_evaluate` is called for each solution `x` at a time. Other ways of implementing a problem are **vectorized**, where `x` represents a whole set of solutions or a **functional** and probably more pythonic way by providing for each objective and constraint as a function. For more details, please have a look at the Problem tutorial." @@ -218,14 +205,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:56.876675Z", - "iopub.status.busy": "2022-08-01T02:46:56.876389Z", - "iopub.status.idle": "2022-08-01T02:46:56.903318Z", - "shell.execute_reply": "2022-08-01T02:46:56.902697Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -253,9 +233,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. tip::\n", " The documentation is designed to make it easy to get started and to copy code for each of the algorithms. However, please be aware that each algorithm comes with all kinds of hyper-parameters to be considered. If an algorithm turns out not to show a good convergence behavior, we encourage you to try different algorithm configurations. For instance, for population-based approaches the population size and number of offsprings, as well as the parameters used for recombination operators are a good starting point." @@ -275,14 +253,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:56.906392Z", - "iopub.status.busy": "2022-08-01T02:46:56.906132Z", - "iopub.status.idle": "2022-08-01T02:46:56.910223Z", - "shell.execute_reply": "2022-08-01T02:46:56.909611Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.termination import get_termination\n", @@ -322,14 +293,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:56.913231Z", - "iopub.status.busy": "2022-08-01T02:46:56.912969Z", - "iopub.status.idle": "2022-08-01T02:46:57.385314Z", - "shell.execute_reply": "2022-08-01T02:46:57.384640Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.optimize import minimize\n", @@ -354,9 +318,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. tip::\n", " An algorithm can be executed by using the **minimize** interface as shown below. In order to have more control over the algorithm execution, pymoo also offers an **object-oriented** execution. For an example and a discussion of each's pros and cons, please consult or algorithm tutorial. " @@ -379,14 +341,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:57.389110Z", - "iopub.status.busy": "2022-08-01T02:46:57.388813Z", - "iopub.status.idle": "2022-08-01T02:46:57.573120Z", - "shell.execute_reply": "2022-08-01T02:46:57.571994Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -402,15 +357,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:57.578808Z", - "iopub.status.busy": "2022-08-01T02:46:57.578539Z", - "iopub.status.idle": "2022-08-01T02:46:57.748367Z", - "shell.execute_reply": "2022-08-01T02:46:57.747635Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(7, 5))\n", @@ -422,7 +369,15 @@ ], "metadata": { "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/docs/source/getting_started/part_3.ipynb b/docs/source/getting_started/part_3.ipynb index e052bfec1..8c45b709b 100644 --- a/docs/source/getting_started/part_3.ipynb +++ b/docs/source/getting_started/part_3.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_part3:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:41.317242Z", - "iopub.status.busy": "2022-08-01T02:46:41.316864Z", - "iopub.status.idle": "2022-08-01T02:46:42.467955Z", - "shell.execute_reply": "2022-08-01T02:46:42.466976Z" - }, - "nbsphinx": "hidden" - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -67,14 +57,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.472528Z", - "iopub.status.busy": "2022-08-01T02:46:42.472040Z", - "iopub.status.idle": "2022-08-01T02:46:42.637903Z", - "shell.execute_reply": "2022-08-01T02:46:42.637121Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "F = res.F\n", @@ -95,14 +78,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.641318Z", - "iopub.status.busy": "2022-08-01T02:46:42.641019Z", - "iopub.status.idle": "2022-08-01T02:46:42.645994Z", - "shell.execute_reply": "2022-08-01T02:46:42.645252Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "fl = F.min(axis=0)\n", @@ -120,9 +96,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. warning::\n", " Without normalization, we are comparing **oranges with apples**. The first objective will dominate any distance calculation in the objective space because of its larger scale. Handling different scales of objectives is an inherent part of any multi-objective algorithms, and, thus, we need to do the same for post-processing. " @@ -139,14 +113,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.649297Z", - "iopub.status.busy": "2022-08-01T02:46:42.649036Z", - "iopub.status.idle": "2022-08-01T02:46:42.652445Z", - "shell.execute_reply": "2022-08-01T02:46:42.651884Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "approx_ideal = F.min(axis=0)\n", @@ -156,14 +123,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.655551Z", - "iopub.status.busy": "2022-08-01T02:46:42.655285Z", - "iopub.status.idle": "2022-08-01T02:46:42.836667Z", - "shell.execute_reply": "2022-08-01T02:46:42.835405Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(7, 5))\n", @@ -185,14 +145,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.840293Z", - "iopub.status.busy": "2022-08-01T02:46:42.839997Z", - "iopub.status.idle": "2022-08-01T02:46:42.990294Z", - "shell.execute_reply": "2022-08-01T02:46:42.989547Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "nF = (F - approx_ideal) / (approx_nadir - approx_ideal)\n", @@ -227,14 +180,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:42.993745Z", - "iopub.status.busy": "2022-08-01T02:46:42.993477Z", - "iopub.status.idle": "2022-08-01T02:46:42.997025Z", - "shell.execute_reply": "2022-08-01T02:46:42.996240Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "weights = np.array([0.2, 0.8])" @@ -250,14 +196,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:43.000717Z", - "iopub.status.busy": "2022-08-01T02:46:43.000414Z", - "iopub.status.idle": "2022-08-01T02:46:43.005502Z", - "shell.execute_reply": "2022-08-01T02:46:43.004839Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.asf import ASF\n", @@ -275,14 +214,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:43.008758Z", - "iopub.status.busy": "2022-08-01T02:46:43.008493Z", - "iopub.status.idle": "2022-08-01T02:46:43.012150Z", - "shell.execute_reply": "2022-08-01T02:46:43.011561Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "i = decomp.do(nF, 1/weights).argmin()" @@ -298,14 +230,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:43.015173Z", - "iopub.status.busy": "2022-08-01T02:46:43.014905Z", - "iopub.status.idle": "2022-08-01T02:46:43.178804Z", - "shell.execute_reply": "2022-08-01T02:46:43.178147Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "print(\"Best regarding ASF: Point \\ni = %s\\nF = %s\" % (i, F[i]))\n", @@ -319,9 +244,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. tip::\n", " One benefit of this approach is that any kind of decomposition function can be used." @@ -350,14 +273,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:43.182343Z", - "iopub.status.busy": "2022-08-01T02:46:43.182005Z", - "iopub.status.idle": "2022-08-01T02:46:43.188364Z", - "shell.execute_reply": "2022-08-01T02:46:43.187797Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.mcdm.pseudo_weights import PseudoWeights\n", @@ -368,15 +284,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:43.196452Z", - "iopub.status.busy": "2022-08-01T02:46:43.196145Z", - "iopub.status.idle": "2022-08-01T02:46:43.363586Z", - "shell.execute_reply": "2022-08-01T02:46:43.362634Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "print(\"Best regarding Pseudo Weights: Point \\ni = %s\\nF = %s\" % (i, F[i]))\n", @@ -391,7 +299,15 @@ ], "metadata": { "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/docs/source/getting_started/part_4.ipynb b/docs/source/getting_started/part_4.ipynb index 17ff761c0..f9215f894 100644 --- a/docs/source/getting_started/part_4.ipynb +++ b/docs/source/getting_started/part_4.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_part4:" ] @@ -28,16 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:47.595936Z", - "iopub.status.busy": "2022-08-01T02:46:47.595526Z", - "iopub.status.idle": "2022-08-01T02:46:49.340133Z", - "shell.execute_reply": "2022-08-01T02:46:49.339222Z" - }, - "nbsphinx": "hidden", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "%%capture\n", @@ -75,15 +64,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.344697Z", - "iopub.status.busy": "2022-08-01T02:46:49.343946Z", - "iopub.status.idle": "2022-08-01T02:46:49.351511Z", - "shell.execute_reply": "2022-08-01T02:46:49.350356Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.misc import stack\n", @@ -122,15 +103,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.360979Z", - "iopub.status.busy": "2022-08-01T02:46:49.360210Z", - "iopub.status.idle": "2022-08-01T02:46:49.367963Z", - "shell.execute_reply": "2022-08-01T02:46:49.366863Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pf_a, pf_b = problem.pareto_front(use_cache=False, flatten=False)" @@ -139,15 +112,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.373602Z", - "iopub.status.busy": "2022-08-01T02:46:49.373148Z", - "iopub.status.idle": "2022-08-01T02:46:49.377970Z", - "shell.execute_reply": "2022-08-01T02:46:49.376949Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pf = problem.pareto_front(use_cache=False, flatten=True)" @@ -156,15 +121,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.381432Z", - "iopub.status.busy": "2022-08-01T02:46:49.381155Z", - "iopub.status.idle": "2022-08-01T02:46:49.605760Z", - "shell.execute_reply": "2022-08-01T02:46:49.604555Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "plt.figure(figsize=(7, 5))\n", @@ -208,15 +165,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.610702Z", - "iopub.status.busy": "2022-08-01T02:46:49.610346Z", - "iopub.status.idle": "2022-08-01T02:46:49.909128Z", - "shell.execute_reply": "2022-08-01T02:46:49.908344Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.optimize import minimize\n", @@ -244,15 +193,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.912580Z", - "iopub.status.busy": "2022-08-01T02:46:49.912316Z", - "iopub.status.idle": "2022-08-01T02:46:49.930576Z", - "shell.execute_reply": "2022-08-01T02:46:49.929688Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "n_evals = [] # corresponding number of function evaluations\\\n", @@ -294,15 +235,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.933888Z", - "iopub.status.busy": "2022-08-01T02:46:49.933619Z", - "iopub.status.idle": "2022-08-01T02:46:49.938204Z", - "shell.execute_reply": "2022-08-01T02:46:49.937503Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "k = np.where(np.array(hist_cv) <= 0.0)[0].min()\n", @@ -319,15 +252,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:49.943251Z", - "iopub.status.busy": "2022-08-01T02:46:49.942495Z", - "iopub.status.idle": "2022-08-01T02:46:50.138276Z", - "shell.execute_reply": "2022-08-01T02:46:50.137100Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "# replace this line by `hist_cv` if you like to analyze the least feasible optimal solution and not the population \n", @@ -386,15 +311,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:50.145235Z", - "iopub.status.busy": "2022-08-01T02:46:50.144900Z", - "iopub.status.idle": "2022-08-01T02:46:50.150061Z", - "shell.execute_reply": "2022-08-01T02:46:50.148728Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "approx_ideal = F.min(axis=0)\n", @@ -404,15 +321,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:50.156225Z", - "iopub.status.busy": "2022-08-01T02:46:50.155770Z", - "iopub.status.idle": "2022-08-01T02:46:50.361818Z", - "shell.execute_reply": "2022-08-01T02:46:50.361077Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.hv import Hypervolume\n", @@ -466,15 +375,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:50.366653Z", - "iopub.status.busy": "2022-08-01T02:46:50.366345Z", - "iopub.status.idle": "2022-08-01T02:46:51.259632Z", - "shell.execute_reply": "2022-08-01T02:46:51.258536Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.running_metric import RunningMetricAnimation\n", @@ -498,15 +399,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:51.269651Z", - "iopub.status.busy": "2022-08-01T02:46:51.268761Z", - "iopub.status.idle": "2022-08-01T02:46:52.411336Z", - "shell.execute_reply": "2022-08-01T02:46:52.410659Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.running_metric import RunningMetric\n", @@ -551,15 +444,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:52.414588Z", - "iopub.status.busy": "2022-08-01T02:46:52.414317Z", - "iopub.status.idle": "2022-08-01T02:46:52.744798Z", - "shell.execute_reply": "2022-08-01T02:46:52.743753Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.igd import IGD\n", @@ -582,15 +467,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:52.748970Z", - "iopub.status.busy": "2022-08-01T02:46:52.748669Z", - "iopub.status.idle": "2022-08-01T02:46:53.082341Z", - "shell.execute_reply": "2022-08-01T02:46:53.081530Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.igd_plus import IGDPlus\n", @@ -611,7 +488,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/part_5.ipynb b/docs/source/getting_started/part_5.ipynb index 6272b5cd8..e3302a68e 100644 --- a/docs/source/getting_started/part_5.ipynb +++ b/docs/source/getting_started/part_5.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_part5:" ] @@ -41,9 +39,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -74,9 +70,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "If you have used our framework for research purposes, you can cite our publication by:\n", "\n", @@ -99,7 +93,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/preface.ipynb b/docs/source/getting_started/preface.ipynb index 956e46619..2523ed855 100644 --- a/docs/source/getting_started/preface.ipynb +++ b/docs/source/getting_started/preface.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_preface:" ] @@ -66,9 +64,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. tip::\n", " If you are new to multi-objective optimization and are not familiar with essential concepts, a look into \"Multi-Objective Optimization Using Evolutionary Algorithms \" by Kalyanmoy Deb might be a good starting point." @@ -148,7 +144,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/getting_started/source_code.ipynb b/docs/source/getting_started/source_code.ipynb index f6eaae0da..3e523f195 100644 --- a/docs/source/getting_started/source_code.ipynb +++ b/docs/source/getting_started/source_code.ipynb @@ -18,9 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_getting_started_source_code:" ] @@ -44,12 +42,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:46:26.312227Z", - "iopub.status.busy": "2022-08-01T02:46:26.311862Z", - "iopub.status.idle": "2022-08-01T02:46:29.274817Z", - "shell.execute_reply": "2022-08-01T02:46:29.273985Z" - }, "tags": [] }, "outputs": [], @@ -98,7 +90,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/gradients/index.ipynb b/docs/source/gradients/index.ipynb index 0f0384571..53117dc51 100644 --- a/docs/source/gradients/index.ipynb +++ b/docs/source/gradients/index.ipynb @@ -3,9 +3,7 @@ { "cell_type": "raw", "id": "de9db017-6072-448e-9642-765c49c4aac9", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_gradients:" ] @@ -31,12 +29,6 @@ "execution_count": null, "id": "5e480925-4e01-48dd-9316-3e48410c3ca6", "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:49.425499Z", - "iopub.status.busy": "2022-08-01T02:45:49.424865Z", - "iopub.status.idle": "2022-08-01T02:45:49.458131Z", - "shell.execute_reply": "2022-08-01T02:45:49.457118Z" - }, "tags": [] }, "outputs": [], @@ -72,12 +64,6 @@ "execution_count": null, "id": "8e332e32-0d76-412d-aaaf-f4a24511f96a", "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:49.463725Z", - "iopub.status.busy": "2022-08-01T02:45:49.463418Z", - "iopub.status.idle": "2022-08-01T02:45:49.469154Z", - "shell.execute_reply": "2022-08-01T02:45:49.468389Z" - }, "tags": [] }, "outputs": [], @@ -99,12 +85,6 @@ "execution_count": null, "id": "8f137a00-2f29-4ef2-ba2e-a4f5b1aa3d84", "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:49.472373Z", - "iopub.status.busy": "2022-08-01T02:45:49.472097Z", - "iopub.status.idle": "2022-08-01T02:45:49.476781Z", - "shell.execute_reply": "2022-08-01T02:45:49.476153Z" - }, "tags": [] }, "outputs": [], @@ -123,7 +103,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/docs/source/home/portfolio.html b/docs/source/home/portfolio.html index 203087899..1f66a6971 100644 --- a/docs/source/home/portfolio.html +++ b/docs/source/home/portfolio.html @@ -124,7 +124,7 @@

Dynamic: - DF + DF

@@ -184,20 +184,20 @@ U-NSGA-III, MOEA/D, AGE-MOEA, - AGE-MOEA2, - RVEA, - SMS-EMOA + AGE-MOEA2, + RVEA, + SMS-EMOA
Dynamic: - D-NSGA-II - + D-NSGA-II, + KGB

Related: Reference Directions, - Constraints, + Constraints, Convergence, Hyperparameters diff --git a/docs/source/index.rst b/docs/source/index.rst index e8eaef252..acb54ed8e 100755 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -38,20 +38,6 @@ pymoo: Multi-objective Optimization in Python ------------------------------------------------------------------------------ -.. admonition:: Overview - :class: myOwnStyle - - The things to check out in **pymoo 0.6.0**. - - - The new version is available pre-compiled for Python 3.7-3.10 for Linux, Mac, and Windows. - - The module *pymoo.factory* has been deprecated. Please instantiate the objects directly. - - The number of constraints is now defined by n_ieq_constr and n_eq_constr to distinguish between equality and inequality constraints (also the correct amount of objectives and constraints is checked now) - - Do not forget to look at the features flagged with *new* for further changes: Mixed Variable Optimization, Hyperparameter Optimization, Updated Constrained Handling Methods, and more. - - Enjoy our new release! - - - Our framework offers state of the art single- and multi-objective optimization algorithms and many more features related to multi-objective optimization such as visualization and decision making. **pymoo** is available on PyPi and can be installed by: diff --git a/docs/source/installation.ipynb b/docs/source/installation.ipynb index 7e74776bd..4c0a4876e 100644 --- a/docs/source/installation.ipynb +++ b/docs/source/installation.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _installation:" ] @@ -55,9 +53,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -80,9 +76,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -105,9 +99,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -130,9 +122,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "\n", ".. code:: bash\n", @@ -164,9 +154,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -182,9 +170,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -200,9 +186,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -239,9 +223,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -260,9 +242,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. code:: bash\n", "\n", @@ -280,7 +260,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/algorithm.ipynb b/docs/source/interface/algorithm.ipynb index 13da8ac8e..687261494 100644 --- a/docs/source/interface/algorithm.ipynb +++ b/docs/source/interface/algorithm.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface_algorithm:" ] @@ -33,14 +31,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:37.687564Z", - "iopub.status.busy": "2022-08-01T02:34:37.687148Z", - "iopub.status.idle": "2022-08-01T02:34:37.734206Z", - "shell.execute_reply": "2022-08-01T02:34:37.733460Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -56,7 +47,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/callback.ipynb b/docs/source/interface/callback.ipynb index 768da24c3..0c2cce632 100644 --- a/docs/source/interface/callback.ipynb +++ b/docs/source/interface/callback.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_callback:" ] @@ -29,9 +27,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Tip\n", " :class: myOwnStyle\n", @@ -43,12 +39,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:02.807951Z", - "iopub.status.busy": "2022-08-01T02:34:02.807560Z", - "iopub.status.idle": "2022-08-01T02:34:03.270379Z", - "shell.execute_reply": "2022-08-01T02:34:03.269590Z" - }, "tags": [] }, "outputs": [], @@ -106,14 +96,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:03.273916Z", - "iopub.status.busy": "2022-08-01T02:34:03.273601Z", - "iopub.status.idle": "2022-08-01T02:34:03.671794Z", - "shell.execute_reply": "2022-08-01T02:34:03.670953Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "res = minimize(problem,\n", @@ -128,7 +111,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/display.ipynb b/docs/source/interface/display.ipynb index 6a6b46042..fd379aa4f 100644 --- a/docs/source/interface/display.ipynb +++ b/docs/source/interface/display.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_custom_output:" ] @@ -25,9 +23,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. csv-table:: Types of Output\n", " :header: \"Name\", \"Description\"\n", @@ -55,12 +51,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:26.247011Z", - "iopub.status.busy": "2022-08-01T02:34:26.246394Z", - "iopub.status.idle": "2022-08-01T02:34:26.648587Z", - "shell.execute_reply": "2022-08-01T02:34:26.647562Z" - }, "tags": [] }, "outputs": [], @@ -109,7 +99,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/index.ipynb b/docs/source/interface/index.ipynb index 85bbda8af..64681b93a 100644 --- a/docs/source/interface/index.ipynb +++ b/docs/source/interface/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "\n", ".. toctree::\n", @@ -46,9 +42,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -70,7 +64,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/minimize.ipynb b/docs/source/interface/minimize.ipynb index 4374d0c1d..715e6773e 100644 --- a/docs/source/interface/minimize.ipynb +++ b/docs/source/interface/minimize.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface_minimize:" ] @@ -73,15 +71,25 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.optimize.minimize" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/problem.ipynb b/docs/source/interface/problem.ipynb index 1d195787c..8f8366fe4 100644 --- a/docs/source/interface/problem.ipynb +++ b/docs/source/interface/problem.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface_problem:" ] @@ -26,9 +24,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -48,14 +44,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:34.170659Z", - "iopub.status.busy": "2022-08-01T02:34:34.170232Z", - "iopub.status.idle": "2022-08-01T02:34:34.201840Z", - "shell.execute_reply": "2022-08-01T02:34:34.200838Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -86,14 +75,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:34.205358Z", - "iopub.status.busy": "2022-08-01T02:34:34.205070Z", - "iopub.status.idle": "2022-08-01T02:34:34.211174Z", - "shell.execute_reply": "2022-08-01T02:34:34.210509Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -124,9 +106,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Tip\n", " :class: myOwnStyle\n", @@ -135,7 +115,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/result.ipynb b/docs/source/interface/result.ipynb index 744481479..a01c88a0f 100644 --- a/docs/source/interface/result.ipynb +++ b/docs/source/interface/result.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface_results:" ] @@ -26,15 +24,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.146063Z", - "iopub.status.busy": "2022-08-01T02:34:30.145684Z", - "iopub.status.idle": "2022-08-01T02:34:30.319559Z", - "shell.execute_reply": "2022-08-01T02:34:30.318726Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -73,15 +63,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.323355Z", - "iopub.status.busy": "2022-08-01T02:34:30.323002Z", - "iopub.status.idle": "2022-08-01T02:34:30.329571Z", - "shell.execute_reply": "2022-08-01T02:34:30.328930Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.X" @@ -90,15 +72,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.332904Z", - "iopub.status.busy": "2022-08-01T02:34:30.332583Z", - "iopub.status.idle": "2022-08-01T02:34:30.337550Z", - "shell.execute_reply": "2022-08-01T02:34:30.336859Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.F" @@ -107,15 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.340733Z", - "iopub.status.busy": "2022-08-01T02:34:30.340450Z", - "iopub.status.idle": "2022-08-01T02:34:30.344994Z", - "shell.execute_reply": "2022-08-01T02:34:30.344404Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.G" @@ -124,15 +90,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.347736Z", - "iopub.status.busy": "2022-08-01T02:34:30.347487Z", - "iopub.status.idle": "2022-08-01T02:34:30.351727Z", - "shell.execute_reply": "2022-08-01T02:34:30.351130Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.CV" @@ -141,15 +99,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.354463Z", - "iopub.status.busy": "2022-08-01T02:34:30.354222Z", - "iopub.status.idle": "2022-08-01T02:34:30.358315Z", - "shell.execute_reply": "2022-08-01T02:34:30.357795Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.algorithm" @@ -158,15 +108,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.361184Z", - "iopub.status.busy": "2022-08-01T02:34:30.360912Z", - "iopub.status.idle": "2022-08-01T02:34:30.363970Z", - "shell.execute_reply": "2022-08-01T02:34:30.363464Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pop = res.pop" @@ -182,15 +124,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.366814Z", - "iopub.status.busy": "2022-08-01T02:34:30.366567Z", - "iopub.status.idle": "2022-08-01T02:34:30.371132Z", - "shell.execute_reply": "2022-08-01T02:34:30.370426Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pop.get(\"X\")" @@ -199,15 +133,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.374098Z", - "iopub.status.busy": "2022-08-01T02:34:30.373833Z", - "iopub.status.idle": "2022-08-01T02:34:30.378087Z", - "shell.execute_reply": "2022-08-01T02:34:30.377516Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pop.get(\"F\")" @@ -231,15 +157,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.380828Z", - "iopub.status.busy": "2022-08-01T02:34:30.380591Z", - "iopub.status.idle": "2022-08-01T02:34:30.394022Z", - "shell.execute_reply": "2022-08-01T02:34:30.393448Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"g1\")\n", @@ -254,15 +172,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.397032Z", - "iopub.status.busy": "2022-08-01T02:34:30.396659Z", - "iopub.status.idle": "2022-08-01T02:34:30.401423Z", - "shell.execute_reply": "2022-08-01T02:34:30.400840Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.X, res.F, res.G, res.CV" @@ -278,15 +188,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.404241Z", - "iopub.status.busy": "2022-08-01T02:34:30.404003Z", - "iopub.status.idle": "2022-08-01T02:34:30.417444Z", - "shell.execute_reply": "2022-08-01T02:34:30.416846Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"g1\")\n", @@ -302,15 +204,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.420261Z", - "iopub.status.busy": "2022-08-01T02:34:30.419997Z", - "iopub.status.idle": "2022-08-01T02:34:30.425027Z", - "shell.execute_reply": "2022-08-01T02:34:30.424414Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.X, res.F, res.G, res.CV" @@ -335,15 +229,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.427971Z", - "iopub.status.busy": "2022-08-01T02:34:30.427720Z", - "iopub.status.idle": "2022-08-01T02:34:30.696333Z", - "shell.execute_reply": "2022-08-01T02:34:30.695465Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -359,22 +245,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:30.700304Z", - "iopub.status.busy": "2022-08-01T02:34:30.699982Z", - "iopub.status.idle": "2022-08-01T02:34:30.705618Z", - "shell.execute_reply": "2022-08-01T02:34:30.704781Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "res.F" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/interface/termination.ipynb b/docs/source/interface/termination.ipynb index bc3d9bb49..64ecaa665 100644 --- a/docs/source/interface/termination.ipynb +++ b/docs/source/interface/termination.ipynb @@ -2,34 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_interface_termination:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Termination Criterion" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Whenever an algorithm is executed, it needs to be decided in each iteration whether the optimization run shall be continued or not.\n", "Many different ways exist of how to determine when a run of an algorithm should be terminated. Next, termination criteria specifically developed for single or multi-objective optimization as well as more generalized, for instance, limiting the number of iterations of an algorithm, are described " @@ -37,12 +24,7 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Tip\n", " :class: myOwnStyle\n", @@ -52,22 +34,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Default Termination ('default')" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "We have added recently developed a termination criterion set if no termination is supplied to the `minimize()` method:" ] @@ -75,17 +49,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:07.238034Z", - "iopub.status.busy": "2022-08-01T02:34:07.237647Z", - "iopub.status.idle": "2022-08-01T02:34:15.225269Z", - "shell.execute_reply": "2022-08-01T02:34:15.224463Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -104,12 +68,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "This allows you to terminated based on a couple of criteria also explained later on this page. \n", "Commonly used are the movement in the design space `f_tol` and the convergence in the constraint `cv_tol` and objective space `f_tol`.\n", @@ -120,12 +79,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "By default for multi-objective problems, the termination will be set to" ] @@ -133,17 +87,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:15.228748Z", - "iopub.status.busy": "2022-08-01T02:34:15.228486Z", - "iopub.status.idle": "2022-08-01T02:34:15.232528Z", - "shell.execute_reply": "2022-08-01T02:34:15.231872Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.termination.default import DefaultMultiObjectiveTermination\n", @@ -160,12 +104,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "And for single-optimization to" ] @@ -173,17 +112,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:15.235759Z", - "iopub.status.busy": "2022-08-01T02:34:15.235472Z", - "iopub.status.idle": "2022-08-01T02:34:15.239249Z", - "shell.execute_reply": "2022-08-01T02:34:15.238584Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.termination.default import DefaultSingleObjectiveTermination\n", @@ -200,36 +129,21 @@ }, { "cell_type": "raw", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% raw\n" - } - }, + "metadata": {}, "source": [ ".. _nb_n_eval:" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Number of Evaluations ('n_eval')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "The termination can simply be reached by providing an upper bound for the number of function evaluations. Whenever in an iteration, the number of function evaluations is greater than this upper bound the algorithm terminates." ] @@ -237,17 +151,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:15.242548Z", - "iopub.status.busy": "2022-08-01T02:34:15.242274Z", - "iopub.status.idle": "2022-08-01T02:34:15.307871Z", - "shell.execute_reply": "2022-08-01T02:34:15.306978Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -269,36 +173,21 @@ }, { "cell_type": "raw", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% raw\n" - } - }, + "metadata": {}, "source": [ ".. _nb_n_gen:" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Number of Generations ('n_gen')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Moreover, the number of generations / iterations can be limited as well. " ] @@ -306,17 +195,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:15.311630Z", - "iopub.status.busy": "2022-08-01T02:34:15.311287Z", - "iopub.status.idle": "2022-08-01T02:34:15.537314Z", - "shell.execute_reply": "2022-08-01T02:34:15.536523Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -338,36 +217,21 @@ }, { "cell_type": "raw", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% raw\n" - } - }, + "metadata": {}, "source": [ ".. _nb_time:" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Based on Time ('time')" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "The termination can also be based on the time of the algorithm to be executed. For instance, to run an algorithm for 3 seconds the termination can be defined by `get_termination(\"time\", \"00:00:03\")` or for 1 hour and 30 minutes by `get_termination(\"time\", \"01:30:00\")`." ] @@ -375,17 +239,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:15.540915Z", - "iopub.status.busy": "2022-08-01T02:34:15.540616Z", - "iopub.status.idle": "2022-08-01T02:34:18.550589Z", - "shell.execute_reply": "2022-08-01T02:34:18.549640Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -409,36 +263,21 @@ }, { "cell_type": "raw", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% raw\n" - } - }, + "metadata": {}, "source": [ ".. _nb_xtol:" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Design Space Tolerance ('xtol')\n" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Also, we can track the change in the design space. For a parameter explanation, please have a look at 'ftol'." ] @@ -446,17 +285,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:18.554937Z", - "iopub.status.busy": "2022-08-01T02:34:18.554489Z", - "iopub.status.idle": "2022-08-01T02:34:20.603612Z", - "shell.execute_reply": "2022-08-01T02:34:20.602975Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -481,24 +310,14 @@ }, { "cell_type": "raw", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% raw\n" - } - }, + "metadata": {}, "source": [ ".. _nb_ftol:" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Objective Space Tolerance ('ftol')\n", "\n", @@ -518,17 +337,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:34:20.606988Z", - "iopub.status.busy": "2022-08-01T02:34:20.606733Z", - "iopub.status.idle": "2022-08-01T02:34:22.772449Z", - "shell.execute_reply": "2022-08-01T02:34:22.771637Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.moo.nsga2 import NSGA2\n", @@ -562,7 +371,15 @@ ], "metadata": { "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" } }, "nbformat": 4, diff --git a/docs/source/mcdm/index.ipynb b/docs/source/mcdm/index.ipynb index 6da61c63b..654569bfa 100644 --- a/docs/source/mcdm/index.ipynb +++ b/docs/source/mcdm/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_decision_making:" ] @@ -41,9 +39,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_compromise:" ] @@ -65,15 +61,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:44.290703Z", - "iopub.status.busy": "2022-08-01T02:45:44.289922Z", - "iopub.status.idle": "2022-08-01T02:45:44.384493Z", - "shell.execute_reply": "2022-08-01T02:45:44.383843Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -91,15 +79,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:44.388082Z", - "iopub.status.busy": "2022-08-01T02:45:44.387814Z", - "iopub.status.idle": "2022-08-01T02:45:44.393866Z", - "shell.execute_reply": "2022-08-01T02:45:44.393231Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -120,15 +100,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:44.397072Z", - "iopub.status.busy": "2022-08-01T02:45:44.396828Z", - "iopub.status.idle": "2022-08-01T02:45:44.401440Z", - "shell.execute_reply": "2022-08-01T02:45:44.400793Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "I = decomp(F, weights).argmin()\n", @@ -145,15 +117,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:44.404889Z", - "iopub.status.busy": "2022-08-01T02:45:44.404629Z", - "iopub.status.idle": "2022-08-01T02:45:44.776015Z", - "shell.execute_reply": "2022-08-01T02:45:44.775146Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.scatter import Scatter\n", @@ -169,9 +133,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_pseudo_weights:" ] @@ -199,15 +161,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:44.779523Z", - "iopub.status.busy": "2022-08-01T02:45:44.779249Z", - "iopub.status.idle": "2022-08-01T02:45:45.131420Z", - "shell.execute_reply": "2022-08-01T02:45:45.130546Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.mcdm.pseudo_weights import PseudoWeights\n", @@ -230,9 +184,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_high_tradeoff:" ] @@ -254,17 +206,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "decision_making/usage_high_tradeoff.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:45.135224Z", - "iopub.status.busy": "2022-08-01T02:45:45.134792Z", - "iopub.status.idle": "2022-08-01T02:45:45.394870Z", - "shell.execute_reply": "2022-08-01T02:45:45.393991Z" - }, - "section": "high_tradeoff_2d", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import os\n", @@ -287,17 +229,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "decision_making/usage_high_tradeoff.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:45.398560Z", - "iopub.status.busy": "2022-08-01T02:45:45.398279Z", - "iopub.status.idle": "2022-08-01T02:45:45.740946Z", - "shell.execute_reply": "2022-08-01T02:45:45.740188Z" - }, - "section": "high_tradeoff_3d", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "pf = np.loadtxt(\"knee-3d.out\")\n", @@ -311,7 +243,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/checkpoint.ipynb b/docs/source/misc/checkpoint.ipynb index fa5c9564f..64b951325 100644 --- a/docs/source/misc/checkpoint.ipynb +++ b/docs/source/misc/checkpoint.ipynb @@ -2,34 +2,21 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_checkpoint:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Checkpoints" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Sometimes, it might be useful to store some checkpoints while executing an algorithm. In particular, if a run is very time-consuming. \n", "**pymoo** offers to resume a run by serializing the algorithm object and loading it. Resuming runs from checkpoints is possible \n", @@ -41,11 +28,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Functional" ] @@ -53,17 +36,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:43.777919Z", - "iopub.status.busy": "2022-08-01T02:33:43.777460Z", - "iopub.status.idle": "2022-08-01T02:33:44.484736Z", - "shell.execute_reply": "2022-08-01T02:33:44.483911Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import dill\n", @@ -103,12 +76,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Object Oriented" ] @@ -116,17 +84,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:44.488928Z", - "iopub.status.busy": "2022-08-01T02:33:44.488565Z", - "iopub.status.idle": "2022-08-01T02:33:45.120678Z", - "shell.execute_reply": "2022-08-01T02:33:45.119808Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import dill\n", @@ -159,22 +117,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## From a Text File" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "First, load the data from a file. Usually, this will include the variables `X`, the objective values `F` (and the constraints `G`). Here, they are created randomly. Always make sure the `Problem` you are solving would return the same values for the given `X` values. Otherwise the data might be misleading for the algorithm.\n", "\n", @@ -185,15 +135,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:45.124410Z", - "iopub.status.busy": "2022-08-01T02:33:45.124055Z", - "iopub.status.idle": "2022-08-01T02:33:45.129004Z", - "shell.execute_reply": "2022-08-01T02:33:45.128460Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -213,11 +154,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Then, create a population object using your data:" ] @@ -226,15 +163,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:45.132235Z", - "iopub.status.busy": "2022-08-01T02:33:45.131943Z", - "iopub.status.idle": "2022-08-01T02:33:45.147786Z", - "shell.execute_reply": "2022-08-01T02:33:45.146617Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -250,11 +178,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "And finally run it with a non-random initial population `sampling=pop`:" ] @@ -263,15 +187,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:45.151532Z", - "iopub.status.busy": "2022-08-01T02:33:45.151224Z", - "iopub.status.idle": "2022-08-01T02:33:45.270443Z", - "shell.execute_reply": "2022-08-01T02:33:45.269568Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -290,7 +205,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/convergence.ipynb b/docs/source/misc/convergence.ipynb index bedb8747a..1d3246cd2 100644 --- a/docs/source/misc/convergence.ipynb +++ b/docs/source/misc/convergence.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_convergence:" ] @@ -41,12 +39,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:13.324699Z", - "iopub.status.busy": "2022-08-01T02:33:13.324332Z", - "iopub.status.idle": "2022-08-01T02:33:13.769751Z", - "shell.execute_reply": "2022-08-01T02:33:13.768325Z" - }, "tags": [] }, "outputs": [], @@ -76,12 +68,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:13.774193Z", - "iopub.status.busy": "2022-08-01T02:33:13.773768Z", - "iopub.status.idle": "2022-08-01T02:33:13.780601Z", - "shell.execute_reply": "2022-08-01T02:33:13.779965Z" - }, "tags": [] }, "outputs": [], @@ -100,12 +86,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:13.783621Z", - "iopub.status.busy": "2022-08-01T02:33:13.783362Z", - "iopub.status.idle": "2022-08-01T02:33:14.311385Z", - "shell.execute_reply": "2022-08-01T02:33:14.310422Z" - }, "tags": [] }, "outputs": [], @@ -141,12 +121,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:14.315333Z", - "iopub.status.busy": "2022-08-01T02:33:14.314969Z", - "iopub.status.idle": "2022-08-01T02:33:14.433523Z", - "shell.execute_reply": "2022-08-01T02:33:14.432614Z" - }, "tags": [] }, "outputs": [], @@ -190,12 +164,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:14.437195Z", - "iopub.status.busy": "2022-08-01T02:33:14.436899Z", - "iopub.status.idle": "2022-08-01T02:33:14.898482Z", - "shell.execute_reply": "2022-08-01T02:33:14.897698Z" - }, "tags": [] }, "outputs": [], @@ -207,7 +175,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/decomposition.ipynb b/docs/source/misc/decomposition.ipynb index ba62cd3b7..13ee73fc2 100644 --- a/docs/source/misc/decomposition.ipynb +++ b/docs/source/misc/decomposition.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_decomposition:" ] @@ -29,15 +27,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.651604Z", - "iopub.status.busy": "2022-08-01T02:33:08.651098Z", - "iopub.status.idle": "2022-08-01T02:33:08.667516Z", - "shell.execute_reply": "2022-08-01T02:33:08.666018Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -64,15 +54,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.671442Z", - "iopub.status.busy": "2022-08-01T02:33:08.671126Z", - "iopub.status.idle": "2022-08-01T02:33:08.676203Z", - "shell.execute_reply": "2022-08-01T02:33:08.675469Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "def plot_contour(X, F):\n", @@ -96,15 +78,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.679520Z", - "iopub.status.busy": "2022-08-01T02:33:08.679236Z", - "iopub.status.idle": "2022-08-01T02:33:08.682491Z", - "shell.execute_reply": "2022-08-01T02:33:08.681852Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "weights = [0.5, 0.5]" @@ -112,9 +86,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_weighted_sum:" ] @@ -129,15 +101,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.685563Z", - "iopub.status.busy": "2022-08-01T02:33:08.685307Z", - "iopub.status.idle": "2022-08-01T02:33:08.836827Z", - "shell.execute_reply": "2022-08-01T02:33:08.836002Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.weighted_sum import WeightedSum\n", @@ -148,9 +112,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_tchebyshev:" ] @@ -165,15 +127,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.840645Z", - "iopub.status.busy": "2022-08-01T02:33:08.840058Z", - "iopub.status.idle": "2022-08-01T02:33:08.973157Z", - "shell.execute_reply": "2022-08-01T02:33:08.971983Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.tchebicheff import Tchebicheff\n", @@ -184,9 +138,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_asf:" ] @@ -208,15 +160,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:08.978997Z", - "iopub.status.busy": "2022-08-01T02:33:08.977720Z", - "iopub.status.idle": "2022-08-01T02:33:09.114734Z", - "shell.execute_reply": "2022-08-01T02:33:09.113826Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.asf import ASF\n", @@ -228,9 +172,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_aasf:" ] @@ -252,15 +194,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:09.118494Z", - "iopub.status.busy": "2022-08-01T02:33:09.118107Z", - "iopub.status.idle": "2022-08-01T02:33:09.255106Z", - "shell.execute_reply": "2022-08-01T02:33:09.254290Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.aasf import AASF\n", @@ -273,15 +207,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:09.259031Z", - "iopub.status.busy": "2022-08-01T02:33:09.258769Z", - "iopub.status.idle": "2022-08-01T02:33:09.443220Z", - "shell.execute_reply": "2022-08-01T02:33:09.442256Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "dm = AASF(eps=0.0, beta=25)\n", @@ -291,9 +217,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_pbi:" ] @@ -308,15 +232,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:09.446829Z", - "iopub.status.busy": "2022-08-01T02:33:09.446521Z", - "iopub.status.idle": "2022-08-01T02:33:09.586560Z", - "shell.execute_reply": "2022-08-01T02:33:09.585592Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.decomposition.pbi import PBI\n", @@ -329,15 +245,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:09.590278Z", - "iopub.status.busy": "2022-08-01T02:33:09.590014Z", - "iopub.status.idle": "2022-08-01T02:33:09.714613Z", - "shell.execute_reply": "2022-08-01T02:33:09.713682Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "dm = PBI(eps=0.0, theta=1.0)\n", @@ -347,15 +255,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:09.718653Z", - "iopub.status.busy": "2022-08-01T02:33:09.718164Z", - "iopub.status.idle": "2022-08-01T02:33:09.848017Z", - "shell.execute_reply": "2022-08-01T02:33:09.847343Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "dm = PBI(eps=0.0, theta=5.0)\n", @@ -363,7 +263,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/index.ipynb b/docs/source/misc/index.ipynb index 698eee45b..822ea411d 100644 --- a/docs/source/misc/index.ipynb +++ b/docs/source/misc/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_misc:" ] @@ -25,9 +23,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ "\n", ".. toctree::\n", @@ -43,7 +39,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/indicators.ipynb b/docs/source/misc/indicators.ipynb index 5543beb95..b29a9fb7d 100644 --- a/docs/source/misc/indicators.ipynb +++ b/docs/source/misc/indicators.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_performance_indicator:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.355107Z", - "iopub.status.busy": "2022-08-01T02:33:55.354389Z", - "iopub.status.idle": "2022-08-01T02:33:55.815673Z", - "shell.execute_reply": "2022-08-01T02:33:55.814772Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -55,9 +45,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_gd:" ] @@ -82,15 +70,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.819667Z", - "iopub.status.busy": "2022-08-01T02:33:55.819359Z", - "iopub.status.idle": "2022-08-01T02:33:55.825210Z", - "shell.execute_reply": "2022-08-01T02:33:55.824596Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.gd import GD\n", @@ -101,9 +81,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_gd_plus:" ] @@ -128,15 +106,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.828223Z", - "iopub.status.busy": "2022-08-01T02:33:55.827960Z", - "iopub.status.idle": "2022-08-01T02:33:55.839326Z", - "shell.execute_reply": "2022-08-01T02:33:55.838511Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.gd_plus import GDPlus\n", @@ -147,9 +117,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_igd:" ] @@ -174,15 +142,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.843164Z", - "iopub.status.busy": "2022-08-01T02:33:55.842857Z", - "iopub.status.idle": "2022-08-01T02:33:55.847889Z", - "shell.execute_reply": "2022-08-01T02:33:55.847156Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.igd import IGD\n", @@ -193,9 +153,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_igd_plus:" ] @@ -220,15 +178,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.850937Z", - "iopub.status.busy": "2022-08-01T02:33:55.850668Z", - "iopub.status.idle": "2022-08-01T02:33:55.855939Z", - "shell.execute_reply": "2022-08-01T02:33:55.855248Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.igd_plus import IGDPlus\n", @@ -239,9 +189,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_hv:" ] @@ -280,15 +228,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:55.858871Z", - "iopub.status.busy": "2022-08-01T02:33:55.858605Z", - "iopub.status.idle": "2022-08-01T02:33:55.866157Z", - "shell.execute_reply": "2022-08-01T02:33:55.865390Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.indicators.hv import HV\n", @@ -300,7 +240,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/kktpm.ipynb b/docs/source/misc/kktpm.ipynb index e88d6fc2e..0cc9ce73b 100644 --- a/docs/source/misc/kktpm.ipynb +++ b/docs/source/misc/kktpm.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_kktpm:" ] @@ -48,12 +46,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:44.791772Z", - "iopub.status.busy": "2022-08-01T02:32:44.791106Z", - "iopub.status.idle": "2022-08-01T02:32:44.896796Z", - "shell.execute_reply": "2022-08-01T02:32:44.896123Z" - }, "tags": [] }, "outputs": [], @@ -76,12 +68,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:44.900311Z", - "iopub.status.busy": "2022-08-01T02:32:44.899950Z", - "iopub.status.idle": "2022-08-01T02:32:45.589827Z", - "shell.execute_reply": "2022-08-01T02:32:45.589056Z" - }, "tags": [] }, "outputs": [], @@ -104,12 +90,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:45.593179Z", - "iopub.status.busy": "2022-08-01T02:32:45.592925Z", - "iopub.status.idle": "2022-08-01T02:32:50.855290Z", - "shell.execute_reply": "2022-08-01T02:32:50.854218Z" - }, "tags": [] }, "outputs": [], @@ -139,12 +119,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:50.859517Z", - "iopub.status.busy": "2022-08-01T02:32:50.859056Z", - "iopub.status.idle": "2022-08-01T02:33:04.399471Z", - "shell.execute_reply": "2022-08-01T02:33:04.398809Z" - }, "tags": [] }, "outputs": [], @@ -167,12 +141,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:04.402853Z", - "iopub.status.busy": "2022-08-01T02:33:04.402600Z", - "iopub.status.idle": "2022-08-01T02:33:04.952424Z", - "shell.execute_reply": "2022-08-01T02:33:04.951569Z" - }, "tags": [] }, "outputs": [], @@ -188,7 +156,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/misc/reference_directions.ipynb b/docs/source/misc/reference_directions.ipynb index cc185d419..00775ef4d 100644 --- a/docs/source/misc/reference_directions.ipynb +++ b/docs/source/misc/reference_directions.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_ref_dirs:" ] @@ -151,15 +149,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:18.483142Z", - "iopub.status.busy": "2022-08-01T02:33:18.482698Z", - "iopub.status.idle": "2022-08-01T02:33:20.943009Z", - "shell.execute_reply": "2022-08-01T02:33:20.942196Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.ref_dirs import get_reference_directions\n", @@ -173,15 +163,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:20.947445Z", - "iopub.status.busy": "2022-08-01T02:33:20.947163Z", - "iopub.status.idle": "2022-08-01T02:33:25.211126Z", - "shell.execute_reply": "2022-08-01T02:33:25.210152Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ref_dirs = get_reference_directions(\"energy\", 3, 250, seed=1)\n", @@ -207,15 +189,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:25.216298Z", - "iopub.status.busy": "2022-08-01T02:33:25.215924Z", - "iopub.status.idle": "2022-08-01T02:33:25.422344Z", - "shell.execute_reply": "2022-08-01T02:33:25.421630Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ref_dirs = get_reference_directions(\"uniform\", 3, n_partitions=12)\n", @@ -232,15 +206,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:25.426544Z", - "iopub.status.busy": "2022-08-01T02:33:25.426077Z", - "iopub.status.idle": "2022-08-01T02:33:26.343411Z", - "shell.execute_reply": "2022-08-01T02:33:26.342606Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -291,15 +257,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:26.347172Z", - "iopub.status.busy": "2022-08-01T02:33:26.346903Z", - "iopub.status.idle": "2022-08-01T02:33:26.560537Z", - "shell.execute_reply": "2022-08-01T02:33:26.559523Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ref_dirs = get_reference_directions(\n", @@ -321,14 +279,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:26.564430Z", - "iopub.status.busy": "2022-08-01T02:33:26.564130Z", - "iopub.status.idle": "2022-08-01T02:33:27.066421Z", - "shell.execute_reply": "2022-08-01T02:33:27.065542Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.ref_dirs import get_reference_directions\n", @@ -353,14 +304,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:27.071555Z", - "iopub.status.busy": "2022-08-01T02:33:27.071185Z", - "iopub.status.idle": "2022-08-01T02:33:33.035071Z", - "shell.execute_reply": "2022-08-01T02:33:33.034360Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "partitions = [3, 2, 1, 1]\n", @@ -379,14 +323,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:33.040947Z", - "iopub.status.busy": "2022-08-01T02:33:33.040638Z", - "iopub.status.idle": "2022-08-01T02:33:38.605440Z", - "shell.execute_reply": "2022-08-01T02:33:38.604553Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.util.ref_dirs.energy_layer import LayerwiseRieszEnergyReferenceDirectionFactory\n", @@ -400,15 +337,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:33:38.609703Z", - "iopub.status.busy": "2022-08-01T02:33:38.609336Z", - "iopub.status.idle": "2022-08-01T02:33:40.192089Z", - "shell.execute_reply": "2022-08-01T02:33:40.191312Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "ref_dirs = get_reference_directions(\"layer-energy\", 3, [9, 5, 2, 1])\n", @@ -416,7 +345,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/crossover.ipynb b/docs/source/operators/crossover.ipynb index 7f1c6cb32..966f19f3c 100644 --- a/docs/source/operators/crossover.ipynb +++ b/docs/source/operators/crossover.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover_sbx:" ] @@ -39,15 +35,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:40.911593Z", - "iopub.status.busy": "2022-08-01T02:35:40.910928Z", - "iopub.status.idle": "2022-08-01T02:35:40.927249Z", - "shell.execute_reply": "2022-08-01T02:35:40.926437Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.crossover.sbx import SBX\n", @@ -69,14 +57,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:40.931088Z", - "iopub.status.busy": "2022-08-01T02:35:40.930789Z", - "iopub.status.idle": "2022-08-01T02:35:41.482497Z", - "shell.execute_reply": "2022-08-01T02:35:41.481711Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -107,15 +88,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:41.485752Z", - "iopub.status.busy": "2022-08-01T02:35:41.485490Z", - "iopub.status.idle": "2022-08-01T02:35:41.986787Z", - "shell.execute_reply": "2022-08-01T02:35:41.986154Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "show(30)" @@ -131,15 +104,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:41.990044Z", - "iopub.status.busy": "2022-08-01T02:35:41.989782Z", - "iopub.status.idle": "2022-08-01T02:35:42.294511Z", - "shell.execute_reply": "2022-08-01T02:35:42.293712Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -170,9 +135,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover_point:" ] @@ -187,15 +150,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:42.298515Z", - "iopub.status.busy": "2022-08-01T02:35:42.298135Z", - "iopub.status.idle": "2022-08-01T02:35:42.700091Z", - "shell.execute_reply": "2022-08-01T02:35:42.698830Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -239,9 +194,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover_exponential:" ] @@ -264,15 +217,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:42.704086Z", - "iopub.status.busy": "2022-08-01T02:35:42.703773Z", - "iopub.status.idle": "2022-08-01T02:35:42.821816Z", - "shell.execute_reply": "2022-08-01T02:35:42.821021Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.crossover.expx import ExponentialCrossover\n", @@ -284,9 +229,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover_uniform:" ] @@ -309,15 +252,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:42.825607Z", - "iopub.status.busy": "2022-08-01T02:35:42.825218Z", - "iopub.status.idle": "2022-08-01T02:35:42.945308Z", - "shell.execute_reply": "2022-08-01T02:35:42.944582Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.crossover.ux import UniformCrossover\n", @@ -328,9 +263,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_crossover_half_uniform:" ] @@ -352,14 +285,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:42.948753Z", - "iopub.status.busy": "2022-08-01T02:35:42.948401Z", - "iopub.status.idle": "2022-08-01T02:35:43.085824Z", - "shell.execute_reply": "2022-08-01T02:35:43.085180Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.crossover.hux import HalfUniformCrossover\n", @@ -394,9 +320,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.factory.get_crossover\n", " :noindex:\n", @@ -406,7 +330,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/index.ipynb b/docs/source/operators/index.ipynb index 5050faa13..2925396c9 100644 --- a/docs/source/operators/index.ipynb +++ b/docs/source/operators/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_operators:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :maxdepth: 1\n", @@ -121,7 +117,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/mutation.ipynb b/docs/source/operators/mutation.ipynb index 162c1f6dd..857f854b9 100644 --- a/docs/source/operators/mutation.ipynb +++ b/docs/source/operators/mutation.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mutation:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mutation_pm:" ] @@ -38,12 +34,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:46.580740Z", - "iopub.status.busy": "2022-08-01T02:35:46.580129Z", - "iopub.status.idle": "2022-08-01T02:35:47.081434Z", - "shell.execute_reply": "2022-08-01T02:35:47.080628Z" - }, "tags": [] }, "outputs": [], @@ -79,12 +69,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:47.086268Z", - "iopub.status.busy": "2022-08-01T02:35:47.085999Z", - "iopub.status.idle": "2022-08-01T02:35:47.484583Z", - "shell.execute_reply": "2022-08-01T02:35:47.483852Z" - }, "tags": [] }, "outputs": [], @@ -103,12 +87,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:47.487995Z", - "iopub.status.busy": "2022-08-01T02:35:47.487731Z", - "iopub.status.idle": "2022-08-01T02:35:47.766599Z", - "shell.execute_reply": "2022-08-01T02:35:47.765843Z" - }, "tags": [] }, "outputs": [], @@ -142,9 +120,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mutation_bitflip:" ] @@ -162,12 +138,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:47.770461Z", - "iopub.status.busy": "2022-08-01T02:35:47.770107Z", - "iopub.status.idle": "2022-08-01T02:35:47.894714Z", - "shell.execute_reply": "2022-08-01T02:35:47.893650Z" - }, "tags": [] }, "outputs": [], @@ -203,9 +173,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.factory.get_mutation\n", " :noindex:\n", @@ -215,7 +183,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/repair.ipynb b/docs/source/operators/repair.ipynb index a07524319..d9d7da3e4 100644 --- a/docs/source/operators/repair.ipynb +++ b/docs/source/operators/repair.ipynb @@ -2,23 +2,14 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_repair:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Repair\n", "\n", @@ -27,11 +18,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "In the well-known **Knapsack Problem**. In this problem, a knapsack has to be filled with items without violating the maximum weight constraint. Each item $j$ has a value $b_j \\geq 0$ and a weight $w_j \\geq 0$ where $j \\in \\{1, .., m\\}$. The binary decision vector $z = (z_1, .., z_m)$ defines, if an item is picked or not. The aim is to maximize the profit $g(z)$:\n", "\n", @@ -50,15 +37,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:51.499040Z", - "iopub.status.busy": "2022-08-01T02:35:51.498660Z", - "iopub.status.idle": "2022-08-01T02:35:52.004043Z", - "shell.execute_reply": "2022-08-01T02:35:52.003353Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -88,11 +66,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "\n", "Because the constraint $\\sum_{j=1}^m z_j \\, w_j \\leq Q$ is fairly easy to satisfy. Therefore, we can make sure that this constraint is not violated by repairing the individual before evaluating the objective function.\n", @@ -103,15 +77,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:52.007226Z", - "iopub.status.busy": "2022-08-01T02:35:52.006958Z", - "iopub.status.idle": "2022-08-01T02:35:52.012048Z", - "shell.execute_reply": "2022-08-01T02:35:52.011257Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -155,15 +120,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:52.014979Z", - "iopub.status.busy": "2022-08-01T02:35:52.014735Z", - "iopub.status.idle": "2022-08-01T02:35:52.356550Z", - "shell.execute_reply": "2022-08-01T02:35:52.355912Z" - }, - "pycharm": { - "name": "#%%\n" - }, "tags": [] }, "outputs": [], @@ -184,17 +140,25 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "As demonstrated, the repair operator makes sure no infeasible solution is evaluated. Even though this example seems to be quite easy, the repair operator makes especially sense for more complex constraints where domain-specific knowledge is known." ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/sampling.ipynb b/docs/source/operators/sampling.ipynb index 960da118a..0f1b44f36 100644 --- a/docs/source/operators/sampling.ipynb +++ b/docs/source/operators/sampling.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_sampling:" ] @@ -25,9 +23,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_sampling_random:" ] @@ -42,15 +38,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:36.859235Z", - "iopub.status.busy": "2022-08-01T02:35:36.858851Z", - "iopub.status.idle": "2022-08-01T02:35:37.056453Z", - "shell.execute_reply": "2022-08-01T02:35:37.055714Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.core.problem import Problem\n", @@ -67,9 +55,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_sampling_lhs:" ] @@ -84,15 +70,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:37.060357Z", - "iopub.status.busy": "2022-08-01T02:35:37.060015Z", - "iopub.status.idle": "2022-08-01T02:35:37.318270Z", - "shell.execute_reply": "2022-08-01T02:35:37.317132Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.sampling.lhs import LHS\n", @@ -112,9 +90,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.factory.get_sampling\n", " :noindex:\n", @@ -124,7 +100,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/selection.ipynb b/docs/source/operators/selection.ipynb index d3ae0e60e..81eb4fd3a 100644 --- a/docs/source/operators/selection.ipynb +++ b/docs/source/operators/selection.ipynb @@ -2,23 +2,14 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_selection:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## Selection\n", "\n", @@ -28,11 +19,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ " \n", " \n", @@ -42,34 +29,21 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_selection_random:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Random Selection" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "Here, we randomly pick solutions from the current population to be used for recombination. The implementation uses a permutation to avoid repetitive individuals. For instance, let us consider the case where only two parents are desired to be selected: The permutation (5,2,3,4,1,0), will lead to the parent selection of (5,2), (3,4), (1,0), where no parent can participate twice for mating." ] @@ -77,18 +51,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:32.498941Z", - "iopub.status.busy": "2022-08-01T02:35:32.498266Z", - "iopub.status.idle": "2022-08-01T02:35:32.514499Z", - "shell.execute_reply": "2022-08-01T02:35:32.513452Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.operators.selection.rnd import RandomSelection\n", @@ -98,45 +61,28 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ " " ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_selection_tournament:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Tournament Selection" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "It has been shown that tournament pressure is helpful for faster convergence. This implementation provides the functionality to define a tournament selection very generic. \n", "Below we show a binary tournament selection (two individuals are participating in each competition).\n", @@ -147,18 +93,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:35:32.518336Z", - "iopub.status.busy": "2022-08-01T02:35:32.518028Z", - "iopub.status.idle": "2022-08-01T02:35:33.381014Z", - "shell.execute_reply": "2022-08-01T02:35:33.380196Z" - }, - "pycharm": { - "name": "#%%\n" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.algorithms.soo.nonconvex.ga import GA\n", @@ -206,23 +141,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### API" ] }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autofunction:: pymoo.factory.get_selection\n", " :noindex:\n", @@ -232,7 +158,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/operators/survival.ipynb b/docs/source/operators/survival.ipynb index e966d4b3c..17c171a11 100644 --- a/docs/source/operators/survival.ipynb +++ b/docs/source/operators/survival.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "raw", "metadata": {}, "source": [ @@ -9,7 +8,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -17,7 +15,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -25,11 +22,10 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ - "The original survival strategy proposed in [NSGA-II](../algorithms/moo/nsga2.ipynb#nsga-ii-non-dominated-sorting-genetic-algorithm) ranks solutions in fronts by dominance criterion and uses a diversity metric denoted crowding distances to sort individuals in each front. This is used as criterion to compare individuals in elitist parent selection schemes and to truncate the population in the survival selection stage of algorithms.\n", + "The original survival strategy proposed in [NSGA-II](../algorithms/moo/nsga2.ipynb) ranks solutions in fronts by dominance criterion and uses a diversity metric denoted crowding distances to sort individuals in each front. This is used as criterion to compare individuals in elitist parent selection schemes and to truncate the population in the survival selection stage of algorithms.\n", "\n", "Variants of the original algorithm have been proposed in the literature to address different performance aspects. Therefore the class ``RankAndCrowding`` from pymoo is a generalization of NSGA-II's survival in which several crowding metrics can be used. Some are already implemented and can be parsed as strings in the ``crowding_func`` argument, while others might be defined from scratch and parsed as callables. The ones available are:\n", "\n", @@ -47,7 +43,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -56,23 +51,20 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Pymoo imports\n", "from pymoo.algorithms.moo.nsga2 import NSGA2\n", "from pymoo.operators.survival.rank_and_crowding import RankAndCrowding\n", "from pymoo.problems import get_problem\n", "from pymoo.optimize import minimize\n", - "\n", - "# External imports\n", "from plots import plot_pairs_2d, plot_pairs_3d" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -102,20 +94,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKYAAAHqCAYAAAA+vEZWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAACLb0lEQVR4nOzde1hc5bn38d8wSZiYAImMMJMQjK02IkStgkloyatX2RmrbbWRemhq1aZl74qaaOuhqUGbaGy1rYkV60atWo2HSqlN1TpJrElQQiTRNIJ4aLcRjRyERCAqSVys9w9gysAMDGSYE9/PdXHpWuueNfcM6DzcPM/9WEzTNAUAAAAAAACEWFy4EwAAAAAAAMDYRGEKAAAAAAAAYUFhCgAAAAAAAGFBYQoAAAAAAABhQWEKAAAAAAAAYUFhCgAAAAAAAGFBYQoAAAAAAABhQWEKAAAAAAAAYTEu3AmMVV1dXfrwww+VkJAgi8US7nQAAIAfpmmqo6ND06ZNU1wcf9MLN8ZQAABEvuGMnyhMhcmHH36oGTNmhDsNAAAQoPfff19paWnhTmPMYwwFAED0CGT8RGEqTBISEiR1f5MSExPDnA0AAPCnvb1dM2bM8Hx2I7wYQwEAEPmGM36iMBUmvVPPExMTGVQBABAFWDYWGRhDAQAQPQIZP9EoAQAAAAAAAGFBYQoAAAAAAABhQWEKAAAAAAAAYUGPKQBAyBiGoUOHDoU7DcDL+PHjZbVaw50GAAADMHZCpArm+InCFABg1JmmqcbGRn388cfhTgXwacqUKXI4HDQ4BwBEBMZOiAbBGj9RmAIAjLregVVKSoqOOOIIfvlHxDBNU59++qmam5slSU6nM8wZAQDA2AmRLdjjJwpTAIBRZRiGZ2CVnJwc7nSAASZOnChJam5uVkpKCsv6AABhxdgJ0SCY4yeanwMARlVvX4QjjjgizJkA/vX+fNLHAwAQboydEC2CNX6iMAUACAmmoCOS8fMJAIg0fDYh0gXrZ5TCFAAAAAAAAMKCwhQAAGPcxRdfrFWrVh32fS699FKde+65w3rMzJkztXr16sN+7sHyuPDCC/Wb3/wmqM8BAADGrmCNnYLl9NNP19KlS4N6zzfeeENpaWn65JNPgnpfXyhMxRjD6NKuTbu1+fEa7dq0W4bRFe6UACBqXXrppbJYLPrlL3/pdf7pp58eMHX5vvvu00knnaTJkydrypQp+vKXv6zbbrvNK6a9vV3Lly9XZmamJk6cqOTkZOXk5Oj222/Xvn37Bjz/448/LqvVqqKiooDz7VuQCaRQ9M9//lPPPfecrrrqqoCeYzBr1qzRQw89NKzHVFdXq7Cw8LCfezA33nijbr31VrW1tY3q8yB6mYahlqoq7Vm3Ti1VVTINI9wpAUBUYuwUHuXl5Vq5cmVQ73nCCSdo7ty5+u1vfxvU+/oSUYWpLVu26Jvf/KamTZsmi8Wip59+2uu6aZoqLi6W0+nUxIkTlZ+fr3feeccrZu/evVq0aJESExM1ZcoULV68WPv37/eK2bVrl/Ly8mSz2TRjxgzdfvvtA3J56qmndPzxx8tms2n27Nl67rnnhp1LqFWW12nxzLu07IxHdMd3/6JlZzyixTPvUmV5XVjzAoBgCUfx3Waz6Ve/+pXPwU+vP/zhD1q6dKmuuuoq7dy5Uy+//LKuu+46r8+fvXv3au7cuXrwwQf105/+VNu2bdOrr76qW2+9Va+99poee+yxAfd94IEHdN111+nxxx9XZ2fnqLy+3/3ud/rOd76jyZMnj/gehmGoq6tLSUlJmjJlyrAee9RRR416c9esrCx98Ytf1KOPPjqqzxMujJ8OT4PbrY3z52vrokV69eqrtXXRIm2cP18NbndY8wKAYAhH4Z2xU2CCueHKkUceqYSEhKDdr9dll12m3//+9/r888+Dfu++Iqow9cknn+ikk05SSUmJz+u333677rrrLt17773atm2bJk2aJJfL5fUDt2jRItXW1mrDhg165plntGXLFq+/xLa3t2vBggU6+uijtWPHDt1xxx26+eabVVpa6omprKzURRddpMWLF+u1117Tueeeq3PPPVc1NTXDyiWUKsvrtKqgTC0fdHidb9nToVUFZRSnAES9cBXf8/Pz5XA4BvwFr69169bp/PPP1+LFi3XssccqMzNTF110kW699VZPzLJly1RfX69XXnlFl112mU488UQdffTRWrBggR5//HFdfvnlXvd89913VVlZqRtuuEFf+tKXVF5eHvTXZhiGysrK9M1vftPr/L59+/T9739fU6dO1RFHHKGvf/3rXsWDhx56SFOmTNG6det0wgknKD4+XvX19QP+ytjR0aFFixZp0qRJcjqduvPOOwdMNe+/lM9isej+++/Xt7/9bR1xxBE6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9B8UphA2LS0tMgxDqampXudTU1PV2Njo8zGNjY3Dioe3ULznnZ2duv7663XRRRcpMTExOIlHudF835955hlNnjxZNptNd955pzZs2CC73R7cFxCFRus9/9WvfqVx48bpqquuCn7SUW603vMzzzxTf/zjH/XCCy/oV7/6lTZv3qyvf/3rMgwj+C8CiAKMn0KP8VPoMXYKPcZOocfY6T/GhTsBALHj0KFDOv/882Wapn7/+9+HO50x4YwzztDOnTvV0tKi++67T+eff762bdumlJSUcKcWc3bs2KE1a9bo1VdflcViCXc6Y8aFF17o+ffZs2frxBNP1Be/+EVt2rRJX/va18KYGQAEB+On0GLsFDqMncIjGsdOzJhC2NjtdlmtVjU1NXmdb2pqksPh8PkYh8MxrHh4G833vHdQ9d5772nDhg38ta+P0XzfJ02apGOPPVZz587VAw88oHHjxumBBx4I7guIQqPxnldUVKi5uVnp6ekaN26cxo0bp/fee08/+clPNHPmzFF5HdEkVP9P/8IXviC73a5//etfh580EIUYP4Ue46fQY+wUeoydQo+x039QmELYTJgwQaeeeqpeeOEFz7muri698MILmjdvns/HzJs3zytekjZs2OA3Ht5G6z3vHVS988472rhxo5KTk0fnBUSpUP6sd3V16cCBA4efdJQbjff84osv1q5du7Rz507P17Rp03TttdfK7XaP3ouJEqH6Of/ggw/U2toq5/9v7+5Zo1jDMAA/yrqBuOIHCImIaaKNiB9IIBDQQiwsAoKli1goWNmk0Cp/wC4/QLEKWgVMJ1hJQghko6KVmE4RrDR+FT4WssHogcM5u2fe3eN1wRTLTPG8bzHc3DvMDA93Z3DoM/JT9eSn6slO1ZOdqic7/aT029f5s83OzubAwEDeuXMnnz9/nlevXs1du3blmzdvMjOz2WzmjRs3Nq5//Phx1mq1vHXrVr548SKnp6d/+zzmu3fvcmVlJefn5zMicnZ2NldWVvL169eVr68XdXvPv379mpOTk7l///5stVqbPkv65cuXImvsRd3e9w8fPuTNmzdzYWEh19bWcnl5OS9fvpwDAwP57NmzImvsNf/F/eVXviyzWbf3/P379zk1NZULCwv56tWrfPjwYZ44cSIPHjyYnz9/LrJG6AXyU/Xkp+rJTtWTnaonO/2gmKK4mZmZPHDgQNbr9RwbG8vFxcWNc6dOncpLly5tuv7evXt56NChrNfrefjw4Zyfn990/vbt2xkRvx3T09MVrKY/dHPP25+V/qvj0aNHFa2oP3Rz3z99+pTnz5/Pffv2Zb1ez+Hh4ZycnMylpaWqltMXun1/+ZVw9btu7vnHjx/z7NmzuXfv3ty2bVuOjIzklStXNsIa/Mnkp+rJT9WTnaonO1VPdsrckplZ3fNZAAAAAPCDd0wBAAAAUIRiCgAAAIAiFFMAAAAAFKGYAgAAAKAIxRQAAAAARSimAAAAAChCMQUAAABAEYopAAAAAIpQTAEAAABQhGIKoAtmZmZiZGQkarVaTE1NlR4HAKAvyFDAlszM0kMA9LPV1dU4efJkzM3NxfHjx2Pnzp0xODhYeiwAgJ4mQwEREbXSAwD0uwcPHsTY2FicO3eu9CgAAH1DhgIiPDEF0JHR0dF4+fLlxu9msxl3794tOBEAQO+ToYA2xRRAB96+fRvj4+Nx7dq1uHjxYjQajWg0GqXHAgDoaTIU0Obl5wAdaDQasba2FhMTEzE0NBTNZjN2794dFy5cKD0aAEDPkqGANsUUQAeePHkSERFHjhyJiIjr1697DB0A4G/IUECbYgqgA61WK0ZHR2P79u0REXH69OnYsWNH4akAAHqbDAW0KaYAOtBqteLo0aOlxwAA6CsyFNCmmALoQKvVimPHjpUeAwCgr8hQQJtiCuBf+vbtWzx9+tS/fQAA/4AMBfysVnoAgH61devWWF9fLz0GAEBfkaGAn23JzCw9BMD/xZkzZ2J1dTXW19djz549cf/+/RgfHy89FgBAT5Oh4M+lmAIAAACgCO+YAgAAAKAIxRQAAAAARSimAAAAAChCMQUAAABAEYopAAAAAIpQTAEAAABQhGIKAAAAgCIUUwAAAAAUoZgCAAAAoAjFFAAAAABFKKYAAAAAKEIxBQAAAEAR3wGN20o7aMX08wAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plot_pairs_2d(\n", " (\"NSGA-II (original)\", res_nsga2.F),\n", @@ -124,163 +105,11 @@ " dpi=100,\n", ")" ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# Problem definition DTLZ2 - a three-objective problem\n", - "problem = get_problem(\"dtlz2\")\n", - "\n", - "# Algorithms\n", - "nsga2 = NSGA2(130, survival=RankAndCrowding(crowding_func=\"cd\"))\n", - "nsga2_mnn = NSGA2(130, survival=RankAndCrowding(crowding_func=\"mnn\"))\n", - "\n", - "# Minimization results\n", - "res_nsga2 = minimize(\n", - " problem,\n", - " nsga2,\n", - " ('n_gen', 150),\n", - " seed=12,\n", - ")\n", - "\n", - "# Minimization results\n", - "res_nsga2_mnn = minimize(\n", - " problem,\n", - " nsga2_mnn,\n", - " ('n_gen', 150),\n", - " seed=12,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABDQAAAHqCAYAAAD74h6CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9d5wkd3Xujz/VOefJOW3OuzNaZQEChCRMzkkY29jgr8315WLsixM/g8HggHG4JgqwAZNZbLAAWUJhpd2Vdle73ZNzDh1mpnN3hd8fs1Wq7umZ6TzdO+f9egmhnu7+VKc6p57POc9hBEEQQBAEQRAEQRAEQRAEUUUodvsACIIgCIIgCIIgCIIgcoUEDYIgCIIgCIIgCIIgqg4SNAiCIAiCIAiCIAiCqDpI0CAIgiAIgiAIgiAIouogQYMgCIIgCIIgCIIgiKqDBA2CIAiCIAiCIAiCIKoOEjQIgiAIgiAIgiAIgqg6SNAgCIIgCIIgCIIgCKLqIEGDIAiCIAiCIAiCIIiqgwQNgiAIgiAIgiAIgiCqDhI0CIIgCIIgCIIgCIKoOkjQIAiCIAiCIAiCIAii6iBBgyAIgiAIgiAIgiCIqoMEDYIgCIIgCIIgCIIgqg4SNAiCIAiCIAiCIAiCqDpUu30ABEEQ5YbjOCSTyd0+DIJIQa1WQ6lU7vZhEARBEMSOUC5FFIpGo4FCUXh9BQkaBEHsGQRBwOLiIlZXV3f7UAgiIzabDfX19WAYZrcPhSAIgiA2QbkUUSwUCgU6Ojqg0WgKeh5GEAShSMdEEARR0SwsLGB1dRW1tbUwGAx00UhUDIIgIBKJYHl5GTabDQ0NDbt9SARBEASxCcqliGLA8zzm5+ehVqvR2tpa0PeIKjQIgtgTcBwnBWCn07nbh0MQm9Dr9QCA5eVl1NbWUvsJQRAEUVFQLkUUk5qaGszPz4NlWajV6ryfh0xBCYLYE4h9ngaDYZePhCC2Rvx+Ul8yQRAEUWlQLkUUE7HVhOO4gp6HBA2CIPYUVBpJVDL0/SQIgiAqHYpVRDEo1veIBA2CIAiCIAiCIAiCIKoOEjQIgiCIiuBd73oXPvnJTxb8PA899BBe+9rX5vSY9vZ2/P3f/33Ba293HG9961vxN3/zN0VdgyAIgiAIQqRYuVQxOHv2LL7//e+XfB0SNAiCICqchx56CAzD4FOf+lTK7T/60Y82let98YtfxPHjx2EymWCz2XDy5En81V/9Vcp91tfX8Sd/8ic4fPgw9Ho9nE4nent78dd//dcIBAKb1v/Wt74FpVKJD37wg1kfr/xCPhuB4YUXXsBPf/pT/N7v/V5Wa2zH5z73OTz88MM5PebSpUv4rd/6rYLX3o6Pfexj+MQnPoG1tbWSrkMQBEEQRCqUS5Wfj33sY/joRz8KnudLug4JGgRBEFWATqfDpz/96YxBUuQrX/kKPvShD+H3fu/3cPXqVTz99NP4yEc+glAoJN3H7/fj7Nmz+OpXv4oPf/jDuHDhAi5fvoxPfOITuHLlCr75zW9uet4vf/nL+MhHPoJvfetbiMViJXl9n//85/GmN70JJpMp7+fgOA48z8NqtcJms+X02JqampKbnB05cgRdXV34t3/7t5KuQxAEQRDEZiiXKi+vetWrEAwG8bOf/ayk65CgQRAEkQdzwz4897NRzI34yrLevffei/r6+k07BHLOnTuHN7/5zXjf+96H7u5uHD58GG9729vwiU98QrrPH//xH2N6ehoXL17Ee9/7Xhw7dgxtbW14xStegW9961v4wAc+kPKcExMTOH/+PD760Y9i3759+MEPflD018ZxHL73ve/h1a9+dcrtgUAA7373u2G322EwGPCqV70KIyMj0t8ffvhh2Gw2nDt3DocOHYJWq8X09PSmXYxgMIh3vOMdMBqNaGhowN/93d/hnnvuwYc+9CHpPuktJwzD4Etf+hJe97rXwWAwoKenB+fOnUs55ve9733o6OiAXq/H/v378bnPfW7H1/rqV78a3/72t3N/kwiCIAjiJiM0MYGlxx9HaGKiLOvtxVyqvb0df/mXf4l3v/vdMJlMaGtrw7lz57CysoLXvOY1MJlMOHbsGJ577jnpMWJ+9cgjj+DgwYMwmUy47777sLCwIN1HzLU++9nPoqGhAU6nEx/84AdTprQplUrcf//9Jc97SNAgCILIgaA/ij+975t4//5/xp/f/y28f98/40/v+yZCgWhJ11UqlfjkJz+Jz3/+85idnc14n/r6ejz77LOYmprK+Hee5/Ef//EfeOc734nGxsaM90kvu/zqV7+KBx54AFarFe985zvx5S9/ubAXkoFr165hbW0NZ86cSbn9oYcewnPPPYdz587hmWeegSAIuP/++1OCZSQSwac//Wl86UtfgsfjQW1t7abn/4M/+AM8/fTTOHfuHH7xi1/gySefxOXLl3c8rr/4i7/Am9/8Zly7dg33338/3vGOd8Dv9wPYeC+bm5vx3e9+F/39/fjTP/1T/PEf/zG+853vbPucfX19uHjxIuLxeDZvDUEQBEHcdCRWV/HsQw/hsXvvxcX3vQ+P3Xsvnn3oISRK3JK5F3MpAPi7v/s73H777bhy5QoeeOABvOtd78K73/1uvPOd78Tly5fR1dWFd7/73RAEQXpMJBLBZz/7WXzjG9/AE088genpaXz4wx9Oed7HHnsMY2NjeOyxx/C1r30NDz/88KaW376+Pjz55JNFf71ySNAgCILIgc+8/Ye4+svxlNuu/nIcf/22H5Z87de97nU4ceIE/uzP/izj3//sz/4MNpsN7e3t2L9/Px566CF85zvfkXoXV1ZWsLq6iv3796c87vTp0zCZTDCZTHjb294m3c7zPB5++GG8853vBLBhavnUU09hosg7KVNTU1AqlSlixMjICM6dO4cvfelLuPPOO3H8+HH8+7//O+bm5vCjH/1Iul8ymcQ///M/47bbbsP+/fs3tY0Eg0F87Wtfw2c/+1m87GUvw5EjR/DVr341q5nnDz30EN72trehu7sbn/zkJxEKhXDx4kUAgFqtxl/8xV/gzJkz6OjowDve8Q68973v3VHQaGxsRCKRwOLiYg7vEEEQBEHcPFz+0IfgPX8+5Tbv+fO4/Pu/X/K191IuJXL//ffj/e9/P3p6evCnf/qnWF9fR29vL970pjdh3759+MM//EMMDAxgaWlJekwymcT/+3//D2fOnMGpU6fwu7/7u3j00UdTntdut+Mf//EfceDAATz44IN44IEHNt2nsbERMzMzJfXRIEGDIAgiS+aGfbj8yBh4Tki5necEXH5krCztJ5/+9Kfxta99DQMDA5v+1tDQgGeeeQbXr1/H7//+74NlWbznPe/Bfffdt20g+eEPf4irV6/ila98JaLRFytNfvGLXyAcDuP+++8HALhcLrz85S/HV77yFQDAk08+KQVvk8mEf//3f8/rNUWjUWi12pQdjYGBAahUKtxyyy3SbU6nE/v370957RqNBseOHdvyucfHx5FMJtHX1yfdZrVaNyUimZA/r9FohMViwfLysnTbP/3TP+H06dOoqamByWTCF77wBUxPT2/7nHq9HsDGzgdBEARB7DVCExNY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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_pairs_3d(\n", - " (\"NSGA-II (original)\", res_nsga2.F),\n", - " (\"NSGA-II (mnn)\", res_nsga2_mnn.F),\n", - " figsize=[12, 5],\n", - " dpi=100,\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### API" - ] - }, - { - "cell_type": "raw", - "metadata": {}, - "source": [ - ".. autoclass:: pymoo.operators.survival.rank_and_crowding.RankAndCrowding\n", - " :noindex:\n", - "\n", - ".. autoclass:: pymoo.operators.survival.rank_and_crowding.ConstrRankAndCrowding\n", - " :noindex:" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Plots" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "```python\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "def plot_pairs_3d(first, second, colors=(\"indigo\", \"firebrick\"), **kwargs):\n", - " \n", - " fig, ax = plt.subplots(1, 2, subplot_kw={'projection':'3d'}, **kwargs)\n", - "\n", - " ax[0].scatter(\n", - " *first[1].T,\n", - " color=colors[0], label=first[0], marker=\"o\",\n", - " )\n", - " ax[0].set_ylabel(\"$f_2$\")\n", - " ax[0].set_xlabel(\"$f_1$\")\n", - " ax[0].set_zlabel(\"$f_3$\")\n", - " ax[0].legend()\n", - "\n", - " ax[1].scatter(\n", - " *second[1].T,\n", - " color=colors[1], label=second[0], marker=\"o\",\n", - " )\n", - " ax[1].set_ylabel(\"$f_2$\")\n", - " ax[1].set_xlabel(\"$f_1$\")\n", - " ax[1].set_zlabel(\"$f_3$\")\n", - " ax[1].legend()\n", - "\n", - " ax[0].view_init(elev=30, azim=30)\n", - " ax[1].view_init(elev=30, azim=30)\n", - "\n", - " fig.tight_layout()\n", - " plt.show()\n", - "\n", - "\n", - "def plot_pairs_2d(first, second, colors=(\"indigo\", \"firebrick\"), **kwargs):\n", - " \n", - " fig, ax = plt.subplots(1, 2, **kwargs)\n", - "\n", - " ax[0].scatter(\n", - " *first[1].T,\n", - " color=colors[0], label=first[0], marker=\"o\",\n", - " )\n", - " ax[0].set_ylabel(\"$f_2$\")\n", - " ax[0].set_xlabel(\"$f_1$\")\n", - " ax[0].legend()\n", - "\n", - " ax[1].scatter(\n", - " *second[1].T,\n", - " color=colors[1], label=second[0], marker=\"o\",\n", - " )\n", - " ax[1].set_ylabel(\"$f_2$\")\n", - " ax[1].set_xlabel(\"$f_1$\")\n", - " ax[1].legend()\n", - "\n", - " fig.tight_layout()\n", - " plt.show()\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "venv", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -293,10 +122,8 @@ "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.7" + "pygments_lexer": "ipython3" }, - "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "8ec0d6c9b8d50a94217d7ab4804e268ea3c783f3ca99db20a683c9c8ae9602ac" @@ -304,5 +131,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/source/problems/constrained/mw.ipynb b/docs/source/problems/constrained/mw.ipynb index ddd475060..42a15ca4e 100755 --- a/docs/source/problems/constrained/mw.ipynb +++ b/docs/source/problems/constrained/mw.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mw:" ] @@ -23,14 +21,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:36.220879Z", - "iopub.status.busy": "2022-08-01T02:45:36.220478Z", - "iopub.status.idle": "2022-08-01T02:45:36.315923Z", - "shell.execute_reply": "2022-08-01T02:45:36.315105Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -42,9 +33,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_mw1:" ] @@ -60,14 +49,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:36.319436Z", - "iopub.status.busy": "2022-08-01T02:45:36.319177Z", - "iopub.status.idle": "2022-08-01T02:45:36.475470Z", - "shell.execute_reply": "2022-08-01T02:45:36.474539Z" - }, - "section": "zdt1", "tags": [] }, "outputs": [], @@ -88,14 +69,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:36.479358Z", - "iopub.status.busy": "2022-08-01T02:45:36.478790Z", - "iopub.status.idle": "2022-08-01T02:45:36.609460Z", - "shell.execute_reply": "2022-08-01T02:45:36.608559Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw2\")\n", @@ -112,14 +86,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:36.613362Z", - "iopub.status.busy": "2022-08-01T02:45:36.612941Z", - "iopub.status.idle": "2022-08-01T02:45:36.801508Z", - "shell.execute_reply": "2022-08-01T02:45:36.800668Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw3\")\n", @@ -137,12 +104,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:36.805656Z", - "iopub.status.busy": "2022-08-01T02:45:36.805130Z", - "iopub.status.idle": "2022-08-01T02:45:37.187626Z", - "shell.execute_reply": "2022-08-01T02:45:37.186971Z" - }, "tags": [] }, "outputs": [], @@ -162,14 +123,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:37.191850Z", - "iopub.status.busy": "2022-08-01T02:45:37.191574Z", - "iopub.status.idle": "2022-08-01T02:45:37.540499Z", - "shell.execute_reply": "2022-08-01T02:45:37.539468Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw5\")\n", @@ -186,14 +140,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:37.544266Z", - "iopub.status.busy": "2022-08-01T02:45:37.544000Z", - "iopub.status.idle": "2022-08-01T02:45:37.678602Z", - "shell.execute_reply": "2022-08-01T02:45:37.677791Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw6\")\n", @@ -210,14 +157,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:37.682556Z", - "iopub.status.busy": "2022-08-01T02:45:37.682290Z", - "iopub.status.idle": "2022-08-01T02:45:38.057918Z", - "shell.execute_reply": "2022-08-01T02:45:38.057197Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw7\")\n", @@ -235,12 +175,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:38.061527Z", - "iopub.status.busy": "2022-08-01T02:45:38.061228Z", - "iopub.status.idle": "2022-08-01T02:45:38.277828Z", - "shell.execute_reply": "2022-08-01T02:45:38.276843Z" - }, "tags": [] }, "outputs": [], @@ -260,14 +194,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:38.282093Z", - "iopub.status.busy": "2022-08-01T02:45:38.281792Z", - "iopub.status.idle": "2022-08-01T02:45:38.659469Z", - "shell.execute_reply": "2022-08-01T02:45:38.658813Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw9\")\n", @@ -284,14 +211,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:38.665990Z", - "iopub.status.busy": "2022-08-01T02:45:38.665727Z", - "iopub.status.idle": "2022-08-01T02:45:39.057508Z", - "shell.execute_reply": "2022-08-01T02:45:39.056201Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw10\")\n", @@ -308,14 +228,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:39.062188Z", - "iopub.status.busy": "2022-08-01T02:45:39.061887Z", - "iopub.status.idle": "2022-08-01T02:45:39.485311Z", - "shell.execute_reply": "2022-08-01T02:45:39.484469Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw11\")\n", @@ -332,14 +245,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:39.489281Z", - "iopub.status.busy": "2022-08-01T02:45:39.489015Z", - "iopub.status.idle": "2022-08-01T02:45:39.634832Z", - "shell.execute_reply": "2022-08-01T02:45:39.634026Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw12\")\n", @@ -356,14 +262,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:39.638689Z", - "iopub.status.busy": "2022-08-01T02:45:39.638287Z", - "iopub.status.idle": "2022-08-01T02:45:40.046049Z", - "shell.execute_reply": "2022-08-01T02:45:40.044994Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = get_problem(\"mw13\")\n", @@ -381,12 +280,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:40.050572Z", - "iopub.status.busy": "2022-08-01T02:45:40.050304Z", - "iopub.status.idle": "2022-08-01T02:45:40.588543Z", - "shell.execute_reply": "2022-08-01T02:45:40.587552Z" - }, "tags": [] }, "outputs": [], @@ -404,7 +297,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/definition.ipynb b/docs/source/problems/definition.ipynb index 196818893..865139b02 100755 --- a/docs/source/problems/definition.ipynb +++ b/docs/source/problems/definition.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_problem_definition:" ] @@ -27,9 +25,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. csv-table:: Types of Output\n", " :header: \"Argument\", \"Description\"\n", @@ -52,9 +48,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -66,9 +60,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_problem_definition_vectorized:" ] @@ -90,9 +82,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Tip\n", " :class: myOwnStyle\n", @@ -111,12 +101,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:03.781016Z", - "iopub.status.busy": "2022-08-01T02:44:03.780267Z", - "iopub.status.idle": "2022-08-01T02:44:03.811691Z", - "shell.execute_reply": "2022-08-01T02:44:03.810731Z" - }, "tags": [] }, "outputs": [], @@ -144,9 +128,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_problem_definition_elementwise:" ] @@ -162,12 +144,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:03.815453Z", - "iopub.status.busy": "2022-08-01T02:44:03.815161Z", - "iopub.status.idle": "2022-08-01T02:44:03.820649Z", - "shell.execute_reply": "2022-08-01T02:44:03.819994Z" - }, "tags": [] }, "outputs": [], @@ -202,9 +178,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_problem_definition_functional:" ] @@ -227,14 +201,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:03.823832Z", - "iopub.status.busy": "2022-08-01T02:44:03.823553Z", - "iopub.status.idle": "2022-08-01T02:44:03.832296Z", - "shell.execute_reply": "2022-08-01T02:44:03.831692Z" - }, - "section": "from_function", "tags": [] }, "outputs": [], @@ -285,12 +251,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:03.835388Z", - "iopub.status.busy": "2022-08-01T02:44:03.835120Z", - "iopub.status.idle": "2022-08-01T02:44:03.840392Z", - "shell.execute_reply": "2022-08-01T02:44:03.839751Z" - }, "tags": [] }, "outputs": [], @@ -321,9 +281,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. class:: pymoo.core.problem.Problem\n", "\n", @@ -332,7 +290,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/dynamic/df.ipynb b/docs/source/problems/dynamic/df.ipynb index c9f3631ba..1c9cfd76e 100644 --- a/docs/source/problems/dynamic/df.ipynb +++ b/docs/source/problems/dynamic/df.ipynb @@ -3,9 +3,7 @@ { "cell_type": "raw", "id": "0b19416f-038c-4013-a26f-c996f0a21c99", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df:" ] @@ -29,9 +27,7 @@ { "cell_type": "raw", "id": "1ff63dec-92f8-4627-b398-6afbbb146d61", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df1:" ] @@ -48,14 +44,7 @@ "cell_type": "code", "execution_count": null, "id": "cc2a8e46-9611-4786-9c46-fd53378f16b2", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:10.911632Z", - "iopub.status.busy": "2022-08-01T02:44:10.911235Z", - "iopub.status.idle": "2022-08-01T02:44:11.413239Z", - "shell.execute_reply": "2022-08-01T02:44:11.412253Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -75,9 +64,7 @@ { "cell_type": "raw", "id": "7cdfca4b-e260-4456-866d-4db79a4dae4f", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df2:" ] @@ -94,14 +81,7 @@ "cell_type": "code", "execution_count": null, "id": "ad09fb5c-2a66-46fc-b17f-63ca86ca6ca5", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:11.427102Z", - "iopub.status.busy": "2022-08-01T02:44:11.426220Z", - "iopub.status.idle": "2022-08-01T02:44:11.769918Z", - "shell.execute_reply": "2022-08-01T02:44:11.768899Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF2\n", @@ -118,9 +98,7 @@ { "cell_type": "raw", "id": "a496b361-ffe6-45aa-86c9-f607db96acfa", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df3:" ] @@ -137,14 +115,7 @@ "cell_type": "code", "execution_count": null, "id": "2d143d62-3d39-4329-8358-f3b44b937081", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:11.773274Z", - "iopub.status.busy": "2022-08-01T02:44:11.773001Z", - "iopub.status.idle": "2022-08-01T02:44:12.102377Z", - "shell.execute_reply": "2022-08-01T02:44:12.101363Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF3\n", @@ -161,9 +132,7 @@ { "cell_type": "raw", "id": "c9a068fa-e717-4eb7-939c-5d4cec944dc6", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df4:" ] @@ -180,14 +149,7 @@ "cell_type": "code", "execution_count": null, "id": "6ef691c9-cf12-4b22-94b0-b3c576745be2", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:12.108077Z", - "iopub.status.busy": "2022-08-01T02:44:12.107800Z", - "iopub.status.idle": "2022-08-01T02:44:12.408144Z", - "shell.execute_reply": "2022-08-01T02:44:12.407271Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF4\n", @@ -204,9 +166,7 @@ { "cell_type": "raw", "id": "e5f0fef8-b281-4631-82b8-6641d45cacd2", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df5:" ] @@ -223,14 +183,7 @@ "cell_type": "code", "execution_count": null, "id": "562a58b8-b1ec-4994-b912-41720ed97702", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:12.414587Z", - "iopub.status.busy": "2022-08-01T02:44:12.414309Z", - "iopub.status.idle": "2022-08-01T02:44:12.799894Z", - "shell.execute_reply": "2022-08-01T02:44:12.799234Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF5\n", @@ -247,9 +200,7 @@ { "cell_type": "raw", "id": "6ec043e6-eb79-46c4-a1b3-6d3fecaf0511", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df6:" ] @@ -266,14 +217,7 @@ "cell_type": "code", "execution_count": null, "id": "d92b7233-345e-4eaa-a736-e22e1f0006cc", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:12.805778Z", - "iopub.status.busy": "2022-08-01T02:44:12.805505Z", - "iopub.status.idle": "2022-08-01T02:44:13.154175Z", - "shell.execute_reply": "2022-08-01T02:44:13.153164Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF6\n", @@ -290,9 +234,7 @@ { "cell_type": "raw", "id": "64a0e30e-104d-4624-abaa-f750075c2f92", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df7:" ] @@ -309,14 +251,7 @@ "cell_type": "code", "execution_count": null, "id": "4444cf90-d3cd-438f-b8b1-33931e7b85d4", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:13.161733Z", - "iopub.status.busy": "2022-08-01T02:44:13.161413Z", - "iopub.status.idle": "2022-08-01T02:44:13.406301Z", - "shell.execute_reply": "2022-08-01T02:44:13.405642Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF7\n", @@ -333,9 +268,7 @@ { "cell_type": "raw", "id": "fe4a71ab-e9fa-448a-b734-73bb7f7d2506", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df8:" ] @@ -352,14 +285,7 @@ "cell_type": "code", "execution_count": null, "id": "35553c26-8991-4bf5-be70-be3c5e0ef1af", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:13.410596Z", - "iopub.status.busy": "2022-08-01T02:44:13.410295Z", - "iopub.status.idle": "2022-08-01T02:44:13.621224Z", - "shell.execute_reply": "2022-08-01T02:44:13.620605Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF8\n", @@ -376,9 +302,7 @@ { "cell_type": "raw", "id": "ee324a14-d36f-46f1-a169-dc01a917833b", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_df9:" ] @@ -395,14 +319,7 @@ "cell_type": "code", "execution_count": null, "id": "64d62bcd-fd1f-4cd9-ae02-327297d3389d", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:13.624801Z", - "iopub.status.busy": "2022-08-01T02:44:13.624534Z", - "iopub.status.idle": "2022-08-01T02:44:13.925832Z", - "shell.execute_reply": "2022-08-01T02:44:13.924897Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF9\n", @@ -428,14 +345,7 @@ "cell_type": "code", "execution_count": null, "id": "9acd5bd6-5296-4edb-9eba-a9438ab495de", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:13.929371Z", - "iopub.status.busy": "2022-08-01T02:44:13.928940Z", - "iopub.status.idle": "2022-08-01T02:44:14.844710Z", - "shell.execute_reply": "2022-08-01T02:44:14.843898Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF10\n", @@ -464,14 +374,7 @@ "cell_type": "code", "execution_count": null, "id": "c8b384b7-878c-4b5a-b991-a96256ae6847", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:14.850861Z", - "iopub.status.busy": "2022-08-01T02:44:14.850457Z", - "iopub.status.idle": "2022-08-01T02:44:15.760854Z", - "shell.execute_reply": "2022-08-01T02:44:15.759911Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF11\n", @@ -500,14 +403,7 @@ "cell_type": "code", "execution_count": null, "id": "3140e251-eb2a-4f45-8582-50d863aaa3a9", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:15.767545Z", - "iopub.status.busy": "2022-08-01T02:44:15.767177Z", - "iopub.status.idle": "2022-08-01T02:44:16.603851Z", - "shell.execute_reply": "2022-08-01T02:44:16.603163Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF12\n", @@ -527,9 +423,7 @@ { "cell_type": "markdown", "id": "8d152672-a9bc-4e47-9fbf-250b6a50e5f0", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "### DF13" ] @@ -538,14 +432,7 @@ "cell_type": "code", "execution_count": null, "id": "4bb1f484-6063-4b69-b286-949a6da67263", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:16.608883Z", - "iopub.status.busy": "2022-08-01T02:44:16.608497Z", - "iopub.status.idle": "2022-08-01T02:44:17.759579Z", - "shell.execute_reply": "2022-08-01T02:44:17.758683Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF13\n", @@ -565,9 +452,7 @@ { "cell_type": "markdown", "id": "f64515d8-5e91-4205-ab11-99d9b65ffb62", - "metadata": { - "tags": [] - }, + "metadata": {}, "source": [ "### DF14" ] @@ -576,14 +461,7 @@ "cell_type": "code", "execution_count": null, "id": "b1625ff5-9094-4e74-bc01-919972180976", - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:17.764663Z", - "iopub.status.busy": "2022-08-01T02:44:17.764312Z", - "iopub.status.idle": "2022-08-01T02:44:18.827322Z", - "shell.execute_reply": "2022-08-01T02:44:18.826568Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.dynamic.df import DF14\n", @@ -601,7 +479,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/docs/source/problems/index.ipynb b/docs/source/problems/index.ipynb index c5feb5c24..83643821e 100755 --- a/docs/source/problems/index.ipynb +++ b/docs/source/problems/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_problem:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :hidden:\n", @@ -41,9 +37,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. admonition:: Overview\n", " :class: myOwnStyle\n", @@ -54,7 +48,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/many/dtlz.ipynb b/docs/source/problems/many/dtlz.ipynb index ed9f48725..55476a78c 100644 --- a/docs/source/problems/many/dtlz.ipynb +++ b/docs/source/problems/many/dtlz.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz:" ] @@ -19,9 +17,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz1:" ] @@ -102,14 +98,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:26.452084Z", - "iopub.status.busy": "2022-08-01T02:44:26.451726Z", - "iopub.status.idle": "2022-08-01T02:44:27.003299Z", - "shell.execute_reply": "2022-08-01T02:44:27.002644Z" - }, - "section": "zdt1", "tags": [] }, "outputs": [], @@ -127,9 +115,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz2:" ] @@ -195,14 +181,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:27.008985Z", - "iopub.status.busy": "2022-08-01T02:44:27.008664Z", - "iopub.status.idle": "2022-08-01T02:44:27.220174Z", - "shell.execute_reply": "2022-08-01T02:44:27.219189Z" - }, - "section": "zdt2", "tags": [] }, "outputs": [], @@ -213,9 +191,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz3:" ] @@ -280,14 +256,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:27.224367Z", - "iopub.status.busy": "2022-08-01T02:44:27.224066Z", - "iopub.status.idle": "2022-08-01T02:44:27.429066Z", - "shell.execute_reply": "2022-08-01T02:44:27.428107Z" - }, - "section": "zdt3", "tags": [] }, "outputs": [], @@ -298,9 +266,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz4:" ] @@ -366,14 +332,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:27.433404Z", - "iopub.status.busy": "2022-08-01T02:44:27.433080Z", - "iopub.status.idle": "2022-08-01T02:44:27.651990Z", - "shell.execute_reply": "2022-08-01T02:44:27.651055Z" - }, - "section": "zdt4", "tags": [] }, "outputs": [], @@ -384,9 +342,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz5:" ] @@ -452,12 +408,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:27.656798Z", - "iopub.status.busy": "2022-08-01T02:44:27.656431Z", - "iopub.status.idle": "2022-08-01T02:44:28.660542Z", - "shell.execute_reply": "2022-08-01T02:44:28.659696Z" - }, "tags": [] }, "outputs": [], @@ -468,9 +418,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz6:" ] @@ -529,12 +477,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:28.664703Z", - "iopub.status.busy": "2022-08-01T02:44:28.664189Z", - "iopub.status.idle": "2022-08-01T02:44:29.615650Z", - "shell.execute_reply": "2022-08-01T02:44:29.614925Z" - }, "tags": [] }, "outputs": [], @@ -545,9 +487,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_dtlz7:" ] @@ -612,12 +552,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:29.619501Z", - "iopub.status.busy": "2022-08-01T02:44:29.619120Z", - "iopub.status.idle": "2022-08-01T02:44:30.474157Z", - "shell.execute_reply": "2022-08-01T02:44:30.472224Z" - }, "tags": [] }, "outputs": [], @@ -627,7 +561,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/many/wfg.ipynb b/docs/source/problems/many/wfg.ipynb index a179f8dc1..ff66d282d 100644 --- a/docs/source/problems/many/wfg.ipynb +++ b/docs/source/problems/many/wfg.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_wfg:" ] @@ -21,14 +19,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:22.686061Z", - "iopub.status.busy": "2022-08-01T02:44:22.685291Z", - "iopub.status.idle": "2022-08-01T02:44:22.911445Z", - "shell.execute_reply": "2022-08-01T02:44:22.910896Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.many.wfg import WFG1\n", @@ -36,7 +27,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/bnh.ipynb b/docs/source/problems/multi/bnh.ipynb index cfa5fee01..08bd77919 100755 --- a/docs/source/problems/multi/bnh.ipynb +++ b/docs/source/problems/multi/bnh.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_bnh:" ] @@ -73,16 +71,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:49.828406Z", - "iopub.status.busy": "2022-08-01T02:44:49.827972Z", - "iopub.status.idle": "2022-08-01T02:44:50.076418Z", - "shell.execute_reply": "2022-08-01T02:44:50.075570Z" - }, - "section": "bnh" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -93,7 +82,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/omni_test.ipynb b/docs/source/problems/multi/omni_test.ipynb index 921f0b138..8ef87f299 100644 --- a/docs/source/problems/multi/omni_test.ipynb +++ b/docs/source/problems/multi/omni_test.ipynb @@ -2,11 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# Omni-test\n", "The Omni-test problem is a multi-modal multi-objective optimization problem proposed by Deb in . It has two objective\n", @@ -16,11 +12,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## 2-dimensional case\n", "### Pareto front" @@ -29,20 +21,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:40.872611Z", - "iopub.status.busy": "2022-08-01T02:44:40.872232Z", - "iopub.status.idle": "2022-08-01T02:44:41.343923Z", - "shell.execute_reply": "2022-08-01T02:44:41.343069Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.multi.omnitest import OmniTest\n", @@ -55,11 +34,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Pareto set" ] @@ -67,20 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:41.347997Z", - "iopub.status.busy": "2022-08-01T02:44:41.347632Z", - "iopub.status.idle": "2022-08-01T02:44:41.572105Z", - "shell.execute_reply": "2022-08-01T02:44:41.571276Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "ps = problem.pareto_set(1000)\n", @@ -89,11 +51,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## 3-dimensional case\n", "### Pareto front" @@ -102,20 +60,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:41.576747Z", - "iopub.status.busy": "2022-08-01T02:44:41.576309Z", - "iopub.status.idle": "2022-08-01T02:44:41.787659Z", - "shell.execute_reply": "2022-08-01T02:44:41.787011Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "problem = OmniTest(n_var=3)\n", @@ -133,20 +78,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:41.797397Z", - "iopub.status.busy": "2022-08-01T02:44:41.796900Z", - "iopub.status.idle": "2022-08-01T02:44:41.999558Z", - "shell.execute_reply": "2022-08-01T02:44:41.998639Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -160,7 +92,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/osy.ipynb b/docs/source/problems/multi/osy.ipynb index 08eeaa3ff..66f24471a 100644 --- a/docs/source/problems/multi/osy.ipynb +++ b/docs/source/problems/multi/osy.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_osy:" ] @@ -72,9 +70,7 @@ }, { "cell_type": "markdown", - "metadata": { - "raw_mimetype": "text/html" - }, + "metadata": {}, "source": [ "
\n", " \n", @@ -91,16 +87,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:07.799394Z", - "iopub.status.busy": "2022-08-01T02:45:07.799020Z", - "iopub.status.idle": "2022-08-01T02:45:08.275884Z", - "shell.execute_reply": "2022-08-01T02:45:08.274963Z" - }, - "section": "bnh" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -111,7 +98,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/sym_part.ipynb b/docs/source/problems/multi/sym_part.ipynb index 655662899..4613e3efc 100644 --- a/docs/source/problems/multi/sym_part.ipynb +++ b/docs/source/problems/multi/sym_part.ipynb @@ -2,11 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "# SYM-PART\n", "\n", @@ -20,22 +16,14 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "## 1. SYM-PART Simple" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Pareto subsets" ] @@ -43,20 +31,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:58.291949Z", - "iopub.status.busy": "2022-08-01T02:44:58.291257Z", - "iopub.status.idle": "2022-08-01T02:44:58.734151Z", - "shell.execute_reply": "2022-08-01T02:44:58.733475Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems.multi.sympart import SYMPART, SYMPARTRotated\n", @@ -69,11 +44,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Pareto front" ] @@ -81,20 +52,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:58.737804Z", - "iopub.status.busy": "2022-08-01T02:44:58.737537Z", - "iopub.status.idle": "2022-08-01T02:44:58.998541Z", - "shell.execute_reply": "2022-08-01T02:44:58.997633Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "pf = problem.pareto_front()\n", @@ -113,20 +71,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:59.002159Z", - "iopub.status.busy": "2022-08-01T02:44:59.001816Z", - "iopub.status.idle": "2022-08-01T02:44:59.203937Z", - "shell.execute_reply": "2022-08-01T02:44:59.203238Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "from numpy import pi\n", @@ -139,11 +84,7 @@ }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "### Pareto front" ] @@ -151,20 +92,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:44:59.208109Z", - "iopub.status.busy": "2022-08-01T02:44:59.207767Z", - "iopub.status.idle": "2022-08-01T02:44:59.422745Z", - "shell.execute_reply": "2022-08-01T02:44:59.422032Z" - }, - "jupyter": { - "outputs_hidden": false - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ "pf = problem.pareto_front()\n", @@ -172,7 +100,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/tnk.ipynb b/docs/source/problems/multi/tnk.ipynb index 3b23b8b7c..84e7600a7 100644 --- a/docs/source/problems/multi/tnk.ipynb +++ b/docs/source/problems/multi/tnk.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_tnk:" ] @@ -81,16 +79,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:45.649820Z", - "iopub.status.busy": "2022-08-01T02:44:45.649207Z", - "iopub.status.idle": "2022-08-01T02:44:46.124810Z", - "shell.execute_reply": "2022-08-01T02:44:46.123802Z" - }, - "section": "bnh" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -101,7 +90,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/truss2d.ipynb b/docs/source/problems/multi/truss2d.ipynb index 8fc919764..20dbe991b 100644 --- a/docs/source/problems/multi/truss2d.ipynb +++ b/docs/source/problems/multi/truss2d.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_truss2d:" ] @@ -21,16 +19,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:53.632531Z", - "iopub.status.busy": "2022-08-01T02:44:53.631891Z", - "iopub.status.idle": "2022-08-01T02:44:54.114735Z", - "shell.execute_reply": "2022-08-01T02:44:54.114088Z" - }, - "section": "truss2d" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -47,16 +36,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:54.118226Z", - "iopub.status.busy": "2022-08-01T02:44:54.117942Z", - "iopub.status.idle": "2022-08-01T02:44:54.588148Z", - "shell.execute_reply": "2022-08-01T02:44:54.587314Z" - }, - "section": "truss2d_log" - }, + "metadata": {}, "outputs": [], "source": [ "sc.reset()\n", @@ -67,7 +47,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/welded_beam.ipynb b/docs/source/problems/multi/welded_beam.ipynb index d0db4b1d7..78a49a9af 100644 --- a/docs/source/problems/multi/welded_beam.ipynb +++ b/docs/source/problems/multi/welded_beam.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_welded_beam:" ] @@ -19,16 +17,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:34.144400Z", - "iopub.status.busy": "2022-08-01T02:44:34.144020Z", - "iopub.status.idle": "2022-08-01T02:44:34.654447Z", - "shell.execute_reply": "2022-08-01T02:44:34.653514Z" - }, - "section": "bnh" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -39,7 +28,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/multi/zdt.ipynb b/docs/source/problems/multi/zdt.ipynb index e4e9aa6c9..90744f548 100755 --- a/docs/source/problems/multi/zdt.ipynb +++ b/docs/source/problems/multi/zdt.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt:" ] @@ -29,9 +27,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt1:" ] @@ -92,16 +88,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.086373Z", - "iopub.status.busy": "2022-08-01T02:45:03.085955Z", - "iopub.status.idle": "2022-08-01T02:45:03.330909Z", - "shell.execute_reply": "2022-08-01T02:45:03.329827Z" - }, - "section": "zdt1" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -113,9 +100,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt2:" ] @@ -176,16 +161,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.338193Z", - "iopub.status.busy": "2022-08-01T02:45:03.337861Z", - "iopub.status.idle": "2022-08-01T02:45:03.469692Z", - "shell.execute_reply": "2022-08-01T02:45:03.468823Z" - }, - "section": "zdt2" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -197,9 +173,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt3:" ] @@ -265,16 +239,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.472990Z", - "iopub.status.busy": "2022-08-01T02:45:03.472730Z", - "iopub.status.idle": "2022-08-01T02:45:03.664240Z", - "shell.execute_reply": "2022-08-01T02:45:03.663433Z" - }, - "section": "zdt3" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -286,9 +251,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt4:" ] @@ -350,16 +313,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.667928Z", - "iopub.status.busy": "2022-08-01T02:45:03.667570Z", - "iopub.status.idle": "2022-08-01T02:45:03.799211Z", - "shell.execute_reply": "2022-08-01T02:45:03.798309Z" - }, - "section": "zdt4" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -371,9 +325,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt5:" ] @@ -436,16 +388,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.803110Z", - "iopub.status.busy": "2022-08-01T02:45:03.802740Z", - "iopub.status.idle": "2022-08-01T02:45:03.934311Z", - "shell.execute_reply": "2022-08-01T02:45:03.933456Z" - }, - "section": "zdt5_no_norm" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -465,16 +408,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:03.938246Z", - "iopub.status.busy": "2022-08-01T02:45:03.937826Z", - "iopub.status.idle": "2022-08-01T02:45:04.068184Z", - "shell.execute_reply": "2022-08-01T02:45:04.067263Z" - }, - "section": "zdt5" - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -486,9 +420,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zdt6:" ] @@ -549,17 +481,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:04.071607Z", - "iopub.status.busy": "2022-08-01T02:45:04.071306Z", - "iopub.status.idle": "2022-08-01T02:45:04.207922Z", - "shell.execute_reply": "2022-08-01T02:45:04.207205Z" - }, - "section": "zdt6", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -570,7 +492,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/single/ackley.ipynb b/docs/source/problems/single/ackley.ipynb index 25e4333e0..28225df3f 100755 --- a/docs/source/problems/single/ackley.ipynb +++ b/docs/source/problems/single/ackley.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_ackley:" ] @@ -63,14 +61,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:11.859206Z", - "iopub.status.busy": "2022-08-01T02:45:11.858840Z", - "iopub.status.idle": "2022-08-01T02:45:12.794943Z", - "shell.execute_reply": "2022-08-01T02:45:12.794254Z" - }, - "section": "ackley", "tags": [] }, "outputs": [], @@ -88,21 +78,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:12.799797Z", - "iopub.status.busy": "2022-08-01T02:45:12.799529Z", - "iopub.status.idle": "2022-08-01T02:45:13.295147Z", - "shell.execute_reply": "2022-08-01T02:45:13.294272Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "FitnessLandscape(problem, _type=\"contour\", colorbar=True).show()" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/single/griewank.ipynb b/docs/source/problems/single/griewank.ipynb index aee265c9b..c132316b4 100755 --- a/docs/source/problems/single/griewank.ipynb +++ b/docs/source/problems/single/griewank.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_griewank:" ] @@ -61,17 +59,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:27.032486Z", - "iopub.status.busy": "2022-08-01T02:45:27.032057Z", - "iopub.status.idle": "2022-08-01T02:45:27.332515Z", - "shell.execute_reply": "2022-08-01T02:45:27.331530Z" - }, - "section": "griewank", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -86,7 +74,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/single/rastrigin.ipynb b/docs/source/problems/single/rastrigin.ipynb index 6b2092b38..3627e4326 100755 --- a/docs/source/problems/single/rastrigin.ipynb +++ b/docs/source/problems/single/rastrigin.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_rastrigin:" ] @@ -61,14 +59,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:21.911753Z", - "iopub.status.busy": "2022-08-01T02:45:21.911382Z", - "iopub.status.idle": "2022-08-01T02:45:22.846413Z", - "shell.execute_reply": "2022-08-01T02:45:22.845492Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -85,14 +76,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:22.851798Z", - "iopub.status.busy": "2022-08-01T02:45:22.851493Z", - "iopub.status.idle": "2022-08-01T02:45:23.354857Z", - "shell.execute_reply": "2022-08-01T02:45:23.353961Z" - }, - "section": "rastrigin", "tags": [] }, "outputs": [], @@ -101,7 +84,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/single/rosenbrock.ipynb b/docs/source/problems/single/rosenbrock.ipynb index c6b1889f8..8b5674363 100755 --- a/docs/source/problems/single/rosenbrock.ipynb +++ b/docs/source/problems/single/rosenbrock.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_rosenbrock:" ] @@ -61,14 +59,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:16.962520Z", - "iopub.status.busy": "2022-08-01T02:45:16.962050Z", - "iopub.status.idle": "2022-08-01T02:45:17.840230Z", - "shell.execute_reply": "2022-08-01T02:45:17.839519Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -84,24 +75,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:17.847342Z", - "iopub.status.busy": "2022-08-01T02:45:17.846604Z", - "iopub.status.idle": "2022-08-01T02:45:18.231177Z", - "shell.execute_reply": "2022-08-01T02:45:18.230280Z" - }, - "section": "rosenbrock", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "FitnessLandscape(problem, _type=\"contour\", colorbar=True).show()" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/single/zakharov.ipynb b/docs/source/problems/single/zakharov.ipynb index 929057669..e5fcec5c9 100755 --- a/docs/source/problems/single/zakharov.ipynb +++ b/docs/source/problems/single/zakharov.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_zakharov:" ] @@ -61,14 +59,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:45:31.048006Z", - "iopub.status.busy": "2022-08-01T02:45:31.047229Z", - "iopub.status.idle": "2022-08-01T02:45:31.953614Z", - "shell.execute_reply": "2022-08-01T02:45:31.952948Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -84,24 +75,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:45:31.960465Z", - "iopub.status.busy": "2022-08-01T02:45:31.960162Z", - "iopub.status.idle": "2022-08-01T02:45:32.541554Z", - "shell.execute_reply": "2022-08-01T02:45:32.539701Z" - }, - "section": "zakharov", - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "FitnessLandscape(problem, _type=\"contour\", contour_levels = 200, colorbar=True).show()" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/problems/test_problems.ipynb b/docs/source/problems/test_problems.ipynb index b87333732..8ca713580 100644 --- a/docs/source/problems/test_problems.ipynb +++ b/docs/source/problems/test_problems.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_test_problems:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :hidden:\n", @@ -71,14 +67,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "code": "usage_problem.py", - "execution": { - "iopub.execute_input": "2022-08-01T02:44:00.166200Z", - "iopub.status.busy": "2022-08-01T02:44:00.165757Z", - "iopub.status.idle": "2022-08-01T02:44:00.250919Z", - "shell.execute_reply": "2022-08-01T02:44:00.250252Z" - }, - "section": "from_string", "tags": [] }, "outputs": [], @@ -440,7 +428,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/versions.ipynb b/docs/source/versions.ipynb index 2697b5793..d6a9c897f 100644 --- a/docs/source/versions.ipynb +++ b/docs/source/versions.ipynb @@ -2,12 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_version:" ] @@ -15,9 +10,6 @@ { "cell_type": "markdown", "metadata": { - "pycharm": { - "name": "#%% md\n" - }, "tags": [] }, "source": [ @@ -26,12 +18,7 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_6_0:" ] @@ -39,9 +26,6 @@ { "cell_type": "markdown", "metadata": { - "pycharm": { - "name": "#%% md\n" - }, "tags": [] }, "source": [ @@ -59,12 +43,7 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_5_0:" ] @@ -72,9 +51,6 @@ { "cell_type": "markdown", "metadata": { - "pycharm": { - "name": "#%% md\n" - }, "tags": [] }, "source": [ @@ -90,23 +66,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_4_2:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.4.2 [[Documentation](http://data.pymoo.org/docs/pymoo-0.4.2-doc.zip)]\n", "\n", @@ -122,23 +89,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_4_1:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.4.1 [[Documentation](http://data.pymoo.org/docs/pymoo-0.4.1-doc.zip)]\n", "\n", @@ -152,23 +110,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_4_0:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.4.0 [[Documentation](http://data.pymoo.org/docs/pymoo-0.4.0-doc.zip)]\n", "\n", @@ -187,23 +136,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_3_2:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.3.2 [[Documentation](http://data.pymoo.org/docs/pymoo-0.3.2-doc.zip)]\n", "\n", @@ -217,23 +157,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_3_1:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.3.1 [[Documentation](http://data.pymoo.org/docs/pymoo-0.3.1-doc.zip)]\n", "\n", @@ -253,23 +184,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_3_0:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.3.0\n", "\n", @@ -281,23 +203,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_2_2:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.2.2\n", "\n", @@ -308,23 +221,14 @@ }, { "cell_type": "raw", - "metadata": { - "pycharm": { - "name": "#%% raw\n" - }, - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _version_0_2_1:" ] }, { "cell_type": "markdown", - "metadata": { - "pycharm": { - "name": "#%% md\n" - } - }, + "metadata": {}, "source": [ "#### 0.2.1\n", "\n", @@ -332,7 +236,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/heatmap.ipynb b/docs/source/visualization/heatmap.ipynb index 27a221c91..2ad320d6f 100644 --- a/docs/source/visualization/heatmap.ipynb +++ b/docs/source/visualization/heatmap.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_heat:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:39.773175Z", - "iopub.status.busy": "2022-08-01T02:32:39.772760Z", - "iopub.status.idle": "2022-08-01T02:32:39.784209Z", - "shell.execute_reply": "2022-08-01T02:32:39.783358Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -55,15 +45,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:39.789392Z", - "iopub.status.busy": "2022-08-01T02:32:39.788818Z", - "iopub.status.idle": "2022-08-01T02:32:40.192622Z", - "shell.execute_reply": "2022-08-01T02:32:40.191808Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.heatmap import Heatmap\n", @@ -80,14 +62,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:40.196414Z", - "iopub.status.busy": "2022-08-01T02:32:40.196054Z", - "iopub.status.idle": "2022-08-01T02:32:40.371650Z", - "shell.execute_reply": "2022-08-01T02:32:40.370969Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "Heatmap(bounds=[0,1]).add(np.ones((1, 6))).show() " @@ -103,14 +78,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:40.374769Z", - "iopub.status.busy": "2022-08-01T02:32:40.374513Z", - "iopub.status.idle": "2022-08-01T02:32:40.498010Z", - "shell.execute_reply": "2022-08-01T02:32:40.497196Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "Heatmap(bounds=[0,1],reverse=False).add(np.ones((1, 6))).show() " @@ -126,15 +94,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:40.501286Z", - "iopub.status.busy": "2022-08-01T02:32:40.500973Z", - "iopub.status.idle": "2022-08-01T02:32:40.696905Z", - "shell.execute_reply": "2022-08-01T02:32:40.695854Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "plot = Heatmap(title=(\"Optimization\", {'pad': 15}),\n", @@ -155,15 +115,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:40.700769Z", - "iopub.status.busy": "2022-08-01T02:32:40.700373Z", - "iopub.status.idle": "2022-08-01T02:32:41.305837Z", - "shell.execute_reply": "2022-08-01T02:32:41.304611Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "F = np.random.random((30, 6))\n", @@ -188,16 +140,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.heatmap.Heatmap\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/index.ipynb b/docs/source/visualization/index.ipynb index f34474f64..762942ef0 100644 --- a/docs/source/visualization/index.ipynb +++ b/docs/source/visualization/index.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_visualization:" ] @@ -18,9 +16,7 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. toctree::\n", " :maxdepth: 1\n", @@ -73,14 +69,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:35.630705Z", - "iopub.status.busy": "2022-08-01T02:32:35.630308Z", - "iopub.status.idle": "2022-08-01T02:32:35.647491Z", - "shell.execute_reply": "2022-08-01T02:32:35.646283Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "# directly using the class\n", @@ -107,14 +96,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:35.651300Z", - "iopub.status.busy": "2022-08-01T02:32:35.650989Z", - "iopub.status.idle": "2022-08-01T02:32:35.976365Z", - "shell.execute_reply": "2022-08-01T02:32:35.975664Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -145,14 +127,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:35.979958Z", - "iopub.status.busy": "2022-08-01T02:32:35.979697Z", - "iopub.status.idle": "2022-08-01T02:32:36.272251Z", - "shell.execute_reply": "2022-08-01T02:32:36.271565Z" - } - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.petal import Petal\n", @@ -207,7 +182,19 @@ ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/pcp.ipynb b/docs/source/visualization/pcp.ipynb index 2a5cc0f81..dab92ecef 100755 --- a/docs/source/visualization/pcp.ipynb +++ b/docs/source/visualization/pcp.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_pcp:" ] @@ -30,12 +28,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:06.172276Z", - "iopub.status.busy": "2022-08-01T02:32:06.171796Z", - "iopub.status.idle": "2022-08-01T02:32:06.409292Z", - "shell.execute_reply": "2022-08-01T02:32:06.408606Z" - }, "tags": [] }, "outputs": [], @@ -58,12 +50,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:06.412640Z", - "iopub.status.busy": "2022-08-01T02:32:06.412349Z", - "iopub.status.idle": "2022-08-01T02:32:07.221897Z", - "shell.execute_reply": "2022-08-01T02:32:07.221132Z" - }, "tags": [] }, "outputs": [], @@ -84,12 +70,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:07.227757Z", - "iopub.status.busy": "2022-08-01T02:32:07.227436Z", - "iopub.status.idle": "2022-08-01T02:32:07.766018Z", - "shell.execute_reply": "2022-08-01T02:32:07.765199Z" - }, "tags": [] }, "outputs": [], @@ -120,12 +100,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:07.772409Z", - "iopub.status.busy": "2022-08-01T02:32:07.772040Z", - "iopub.status.idle": "2022-08-01T02:32:08.358618Z", - "shell.execute_reply": "2022-08-01T02:32:08.357856Z" - }, "tags": [] }, "outputs": [], @@ -154,12 +128,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:08.363432Z", - "iopub.status.busy": "2022-08-01T02:32:08.363127Z", - "iopub.status.idle": "2022-08-01T02:32:08.858837Z", - "shell.execute_reply": "2022-08-01T02:32:08.857966Z" - }, "tags": [] }, "outputs": [], @@ -179,16 +147,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.pcp.PCP\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/petal.ipynb b/docs/source/visualization/petal.ipynb index 647849c52..c2620ee22 100644 --- a/docs/source/visualization/petal.ipynb +++ b/docs/source/visualization/petal.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_petal:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:26.796799Z", - "iopub.status.busy": "2022-08-01T02:32:26.796417Z", - "iopub.status.idle": "2022-08-01T02:32:26.809287Z", - "shell.execute_reply": "2022-08-01T02:32:26.808395Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -56,15 +46,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:26.813306Z", - "iopub.status.busy": "2022-08-01T02:32:26.812995Z", - "iopub.status.idle": "2022-08-01T02:32:27.151610Z", - "shell.execute_reply": "2022-08-01T02:32:27.150807Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.petal import Petal\n", @@ -82,15 +64,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:27.156284Z", - "iopub.status.busy": "2022-08-01T02:32:27.155154Z", - "iopub.status.idle": "2022-08-01T02:32:27.393666Z", - "shell.execute_reply": "2022-08-01T02:32:27.392837Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "Petal(bounds=[0, 1], reverse=True).add(F).show()" @@ -99,15 +73,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:27.397598Z", - "iopub.status.busy": "2022-08-01T02:32:27.397254Z", - "iopub.status.idle": "2022-08-01T02:32:27.555955Z", - "shell.execute_reply": "2022-08-01T02:32:27.555002Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "plot = Petal(bounds=[0, 1],\n", @@ -129,15 +95,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:27.559618Z", - "iopub.status.busy": "2022-08-01T02:32:27.559318Z", - "iopub.status.idle": "2022-08-01T02:32:27.971698Z", - "shell.execute_reply": "2022-08-01T02:32:27.971063Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "F = np.random.random((6, 6))\n", @@ -156,16 +114,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.petal.Petal\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/radar.ipynb b/docs/source/visualization/radar.ipynb index aecf97d0f..90630de3e 100755 --- a/docs/source/visualization/radar.ipynb +++ b/docs/source/visualization/radar.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_radar:" ] @@ -28,12 +26,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:22.375094Z", - "iopub.status.busy": "2022-08-01T02:32:22.374693Z", - "iopub.status.idle": "2022-08-01T02:32:22.390211Z", - "shell.execute_reply": "2022-08-01T02:32:22.389289Z" - }, "tags": [] }, "outputs": [], @@ -61,12 +53,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:22.396399Z", - "iopub.status.busy": "2022-08-01T02:32:22.396040Z", - "iopub.status.idle": "2022-08-01T02:32:22.723594Z", - "shell.execute_reply": "2022-08-01T02:32:22.722932Z" - }, "tags": [] }, "outputs": [], @@ -89,12 +75,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:22.727009Z", - "iopub.status.busy": "2022-08-01T02:32:22.726747Z", - "iopub.status.idle": "2022-08-01T02:32:22.947802Z", - "shell.execute_reply": "2022-08-01T02:32:22.946828Z" - }, "tags": [] }, "outputs": [], @@ -108,12 +88,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:22.955722Z", - "iopub.status.busy": "2022-08-01T02:32:22.955053Z", - "iopub.status.idle": "2022-08-01T02:32:23.338904Z", - "shell.execute_reply": "2022-08-01T02:32:23.338266Z" - }, "tags": [] }, "outputs": [], @@ -137,16 +111,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.radar.Radar\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/radviz.ipynb b/docs/source/visualization/radviz.ipynb index dfe84e0de..56b485926 100755 --- a/docs/source/visualization/radviz.ipynb +++ b/docs/source/visualization/radviz.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_radviz:" ] @@ -28,12 +26,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:31.465472Z", - "iopub.status.busy": "2022-08-01T02:32:31.464825Z", - "iopub.status.idle": "2022-08-01T02:32:31.558995Z", - "shell.execute_reply": "2022-08-01T02:32:31.558313Z" - }, "tags": [] }, "outputs": [], @@ -57,12 +49,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:31.562468Z", - "iopub.status.busy": "2022-08-01T02:32:31.562206Z", - "iopub.status.idle": "2022-08-01T02:32:31.936892Z", - "shell.execute_reply": "2022-08-01T02:32:31.936213Z" - }, "tags": [] }, "outputs": [], @@ -82,12 +68,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:31.940380Z", - "iopub.status.busy": "2022-08-01T02:32:31.940075Z", - "iopub.status.idle": "2022-08-01T02:32:32.147359Z", - "shell.execute_reply": "2022-08-01T02:32:32.146515Z" - }, "tags": [] }, "outputs": [], @@ -119,16 +99,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.radviz.Radviz\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/scatter.ipynb b/docs/source/visualization/scatter.ipynb index 3be43eaac..e000c14ce 100644 --- a/docs/source/visualization/scatter.ipynb +++ b/docs/source/visualization/scatter.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_scatter:" ] @@ -34,12 +32,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:12.384830Z", - "iopub.status.busy": "2022-08-01T02:32:12.384459Z", - "iopub.status.idle": "2022-08-01T02:32:12.851935Z", - "shell.execute_reply": "2022-08-01T02:32:12.851147Z" - }, "tags": [] }, "outputs": [], @@ -62,12 +54,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:12.855388Z", - "iopub.status.busy": "2022-08-01T02:32:12.855092Z", - "iopub.status.idle": "2022-08-01T02:32:13.112665Z", - "shell.execute_reply": "2022-08-01T02:32:13.111840Z" - }, "tags": [] }, "outputs": [], @@ -90,12 +76,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:13.116270Z", - "iopub.status.busy": "2022-08-01T02:32:13.115921Z", - "iopub.status.idle": "2022-08-01T02:32:13.356012Z", - "shell.execute_reply": "2022-08-01T02:32:13.355110Z" - }, "tags": [] }, "outputs": [], @@ -122,12 +102,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:13.360921Z", - "iopub.status.busy": "2022-08-01T02:32:13.360510Z", - "iopub.status.idle": "2022-08-01T02:32:14.702697Z", - "shell.execute_reply": "2022-08-01T02:32:14.701992Z" - }, "tags": [] }, "outputs": [], @@ -150,16 +124,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.scatter.Scatter\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/docs/source/visualization/star.ipynb b/docs/source/visualization/star.ipynb index 052cbc9c2..9117491a9 100644 --- a/docs/source/visualization/star.ipynb +++ b/docs/source/visualization/star.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. _nb_star:" ] @@ -28,15 +26,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:18.261588Z", - "iopub.status.busy": "2022-08-01T02:32:18.261205Z", - "iopub.status.idle": "2022-08-01T02:32:18.354738Z", - "shell.execute_reply": "2022-08-01T02:32:18.354064Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.problems import get_problem\n", @@ -56,15 +46,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:18.358123Z", - "iopub.status.busy": "2022-08-01T02:32:18.357871Z", - "iopub.status.idle": "2022-08-01T02:32:18.720477Z", - "shell.execute_reply": "2022-08-01T02:32:18.719592Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "from pymoo.visualization.star_coordinate import StarCoordinate\n", @@ -82,15 +64,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "execution": { - "iopub.execute_input": "2022-08-01T02:32:18.723659Z", - "iopub.status.busy": "2022-08-01T02:32:18.723394Z", - "iopub.status.idle": "2022-08-01T02:32:18.916858Z", - "shell.execute_reply": "2022-08-01T02:32:18.916125Z" - }, - "tags": [] - }, + "metadata": {}, "outputs": [], "source": [ "plot = StarCoordinate(title=\"Optimization\",\n", @@ -113,16 +87,26 @@ }, { "cell_type": "raw", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "metadata": {}, "source": [ ".. autoclass:: pymoo.visualization.star_coordinate.StarCoordinate\n", " :noindex:" ] } ], - "metadata": {}, + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, "nbformat": 4, "nbformat_minor": 4 } diff --git a/examples/algorithms/moo/dynamic_comparison.py b/examples/algorithms/moo/dynamic_comparison.py index ce4e0d82b..0ed52355d 100644 --- a/examples/algorithms/moo/dynamic_comparison.py +++ b/examples/algorithms/moo/dynamic_comparison.py @@ -34,7 +34,7 @@ def get(self): problem = DF1(taut=2, n_var=2) -n_time = 100 +n_time = 10 dnsga2 = DNSGA2(version="A") dnsga2_migd = DynamicIGD() diff --git a/pymoo/version.py b/pymoo/version.py index a5a833a05..43c4ab005 100644 --- a/pymoo/version.py +++ b/pymoo/version.py @@ -1 +1 @@ -__version__ = "0.6.0.1" +__version__ = "0.6.1" diff --git a/tests/test_docs.py b/tests/test_docs.py index 607595510..4b2ee629a 100644 --- a/tests/test_docs.py +++ b/tests/test_docs.py @@ -15,7 +15,7 @@ @pytest.mark.long @pytest.mark.parametrize('ipynb', IPYNBS) def test_docs(ipynb, pytestconfig): - overwrite = pytestconfig.getoption("overwrite", False) + overwrite = pytestconfig.getoption("overwrite", True) KERNEL = start_new_kernel(kernel_name='python3') run_ipynb(KERNEL, ipynb, overwrite=overwrite, remove_trailing_empty_cells=True) assert True