.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/exterior_penalty/plot_exterior_penalty_sobieski.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_exterior_penalty_plot_exterior_penalty_sobieski.py: Example for exterior penalty applied to the Sobieski test case. =============================================================== .. GENERATED FROM PYTHON SOURCE LINES 22-55 This section describes how to set up and solve the MDO problem relative to the :ref:`Sobieski test case ` with |g| applying external penalty. .. seealso:: To start with a simpler MDO problem, and for a detailed description of how to plug a test case into |g|, see :ref:`sphx_glr_examples_mdo_plot_sellar.py`. .. _sobieski_exterior_penalty: Solving with an :ref:`MDF formulation ` -------------------------------------------------------- In this example, we solve the range optimization using the following :ref:`MDF formulation `: - The :ref:`MDF formulation ` couples all the disciplines during the :ref:`mda` at each optimization iteration. - All the :term:`design variables` are equally treated, concatenated in a single vector and given to a single :term:`optimization algorithm` as the unknowns of the problem. - There is no specific :term:`constraint` due to the :ref:`MDF formulation `. - Only the design :term:`constraints` :math:`g\_1`, :math:`g\_2` and :math:`g\_3` are added to the problem. - The :term:`objective function` is the range (the :math:`y\_4` variable in the model), computed after the :ref:`mda`. Imports ------- All the imports needed for the tutorials are performed here. .. GENERATED FROM PYTHON SOURCE LINES 55-68 .. code-block:: Python from __future__ import annotations from gemseo import configure_logger from gemseo import create_discipline from gemseo import create_scenario from gemseo import get_available_formulations from gemseo.problems.mdo.sobieski.core.design_space import SobieskiDesignSpace from gemseo.settings.formulations import MDF_Settings from gemseo.utils.discipline import get_all_inputs from gemseo.utils.discipline import get_all_outputs configure_logger() .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 69-75 Step 1: Creation of :class:`.Discipline` ------------------------------------------- To build the scenario, we first instantiate the disciplines. Here, the disciplines themselves have already been developed and interfaced with |g| (see :ref:`benchmark_problems`). .. GENERATED FROM PYTHON SOURCE LINES 75-83 .. code-block:: Python disciplines = create_discipline([ "SobieskiPropulsion", "SobieskiAerodynamics", "SobieskiMission", "SobieskiStructure", ]) .. GENERATED FROM PYTHON SOURCE LINES 84-91 .. tip:: For the disciplines that are not interfaced with |g|, the |g|'s :mod:`~gemseo` eases the creation of disciplines without having to import them. See :ref:`api`. .. GENERATED FROM PYTHON SOURCE LINES 93-109 Step 2: Creation of :class:`.Scenario` -------------------------------------- The scenario delegates the creation of the optimization problem to the :ref:`MDO formulation `. Therefore, it needs the list of ``disciplines``, the name of the formulation (or its settings model), the name of the objective function and the design space. - The ``design_space`` (shown below for reference) defines the unknowns of the optimization problem, and their bounds. It contains all the design variables needed by the :ref:`MDF formulation `. It can be imported from a text file, or created from scratch with the methods :func:`.create_design_space` and :meth:`~gemseo.algos.design_space.DesignSpace.add_variable`. In this case, we will use ``SobieskiDesignSpace`` already defined in |g|. .. GENERATED FROM PYTHON SOURCE LINES 109-111 .. code-block:: Python design_space = SobieskiDesignSpace() x_0 = design_space.get_current_value(as_dict=True) .. GENERATED FROM PYTHON SOURCE LINES 112-143 .. code:: name lower_bound value upper_bound type x_shared 0.01 0.05 0.09 float x_shared 30000.0 45000.0 60000.0 float x_shared 1.4 1.6 1.8 float x_shared 2.5 5.5 8.5 float x_shared 40.0 55.0 70.0 float x_shared 500.0 1000.0 1500.0 float x_1 0.1 0.25 0.4 float x_1 0.75 1.0 1.25 float x_2 0.75 1.0 1.25 float x_3 0.1 0.5 1.0 float y_14 24850.0 50606.9741711 77100.0 float y_14 -7700.0 7306.20262124 45000.0 float y_32 0.235 0.50279625 0.795 float y_31 2960.0 6354.32430691 10185.0 float y_24 0.44 4.15006276 11.13 float y_34 0.44 1.10754577 1.98 float y_23 3365.0 12194.2671934 26400.0 float y_21 24850.0 50606.9741711 77250.0 float y_12 24850.0 50606.9742 77250.0 float y_12 0.45 0.95 1.5 float - The available :ref:`MDO formulations ` are located in the **gemseo.formulations** package, see :ref:`extending-gemseo` for extending GEMSEO with other formulations. - The ``formulation`` name (here, ``"MDF"``) shall be passed to the scenario to select them. - The list of available formulations can be obtained by using :func:`.get_available_formulations`. .. GENERATED FROM PYTHON SOURCE LINES 143-144 .. code-block:: Python get_available_formulations() .. rst-class:: sphx-glr-script-out .. code-block:: none ['BiLevel', 'BiLevelBCD', 'DisciplinaryOpt', 'IDF', 'MDF'] .. GENERATED FROM PYTHON SOURCE LINES 145-149 - :math:`y\_4` corresponds to the ``objective_name``. This name must be one of the disciplines outputs, here the ``SobieskiMission`` discipline. The list of all outputs of the disciplines can be obtained by using :meth:`~gemseo.disciplines.utils.get_all_outputs`: .. GENERATED FROM PYTHON SOURCE LINES 149-151 .. code-block:: Python get_all_outputs(disciplines) get_all_inputs(disciplines) .. rst-class:: sphx-glr-script-out .. code-block:: none ['c_0', 'c_1', 'c_2', 'c_3', 'c_4', 'x_1', 'x_2', 'x_3', 'x_shared', 'y_12', 'y_14', 'y_21', 'y_23', 'y_24', 'y_31', 'y_32', 'y_34'] .. GENERATED FROM PYTHON SOURCE LINES 152-155 From these :class:`.Discipline`, design space, :ref:`MDO formulation ` name and objective function name, we build the scenario: .. GENERATED FROM PYTHON SOURCE LINES 155-163 .. code-block:: Python scenario = create_scenario( disciplines, "y_4", design_space, maximize_objective=True, formulation_name="MDF", ) .. GENERATED FROM PYTHON SOURCE LINES 164-166 Note that both the formulation settings passed to :func:`.create_scenario` can be provided via a Pydantic model. For more information, see :ref:`formulation_settings`. .. GENERATED FROM PYTHON SOURCE LINES 168-182 The range function (:math:`y\_4`) should be maximized. However, optimizers minimize functions by default. Which is why, when creating the scenario, the argument ``maximize_objective`` shall be set to ``True``. Differentiation method ~~~~~~~~~~~~~~~~~~~~~~ We may choose the way derivatives are computed: **Function derivatives.** As analytical disciplinary derivatives are available for the Sobieski test-case, they can be used instead of computing the derivatives with finite-differences or with the complex-step method. The easiest way to set a method is to let the optimizer determine it: .. GENERATED FROM PYTHON SOURCE LINES 182-183 .. code-block:: Python scenario.set_differentiation_method() .. GENERATED FROM PYTHON SOURCE LINES 184-209 The default behavior of the optimizer triggers :term:`finite differences`. It corresponds to: .. code:: scenario.set_differentiation_method("finite_differences",1e-7) It is also possible to differentiate functions by means of the :term:`complex step` method: .. code:: scenario.set_differentiation_method("complex_step",1e-30j) Constraints ~~~~~~~~~~~ Similarly to the objective function, the constraints names are a subset of the disciplines' outputs. They can be obtained by using :meth:`~gemseo.disciplines.utils.get_all_outputs`. The formulation has a powerful feature to automatically dispatch the constraints (:math:`g\_1, g\_2, g\_3`) and plug them to the optimizers depending on the formulation. To do that, we use the method :meth:`~gemseo.scenarios.scenario.Scenario.add_constraint`: .. GENERATED FROM PYTHON SOURCE LINES 210-212 .. code-block:: Python for constraint in ["g_1", "g_2", "g_3"]: scenario.add_constraint(constraint, constraint_type="ineq") .. GENERATED FROM PYTHON SOURCE LINES 213-215 Step 3: Apply the exterior penalty and execute the scenario ----------------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 215-218 .. code-block:: Python scenario.formulation.optimization_problem.apply_exterior_penalty( objective_scale=10.0, scale_inequality=10.0 ) .. GENERATED FROM PYTHON SOURCE LINES 219-221 In this way the L-BFGS-B algorithm can be used to solve the optimization problem. Note that this algorithm is not suited for constrained optimization problems. .. GENERATED FROM PYTHON SOURCE LINES 221-223 .. code-block:: Python scenario.execute(algo_name="L-BFGS-B", max_iter=10) .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 20:38:33: *** Start MDOScenario execution *** INFO - 20:38:33: MDOScenario INFO - 20:38:33: Disciplines: SobieskiAerodynamics SobieskiMission SobieskiPropulsion SobieskiStructure INFO - 20:38:33: MDO formulation: MDF INFO - 20:38:33: Optimization problem: INFO - 20:38:33: minimize [[[[-y_4/10.0]+pos_sum_g_1]+pos_sum_g_2]+pos_sum_g_3](x_1, x_2, x_3, x_shared) = -y_4(x_shared, x_1, x_2, x_3)/10.0+sum(heaviside()***2)+sum(heaviside()***2)+sum(heaviside()***2) INFO - 20:38:33: with respect to x_1, x_2, x_3, x_shared INFO - 20:38:33: over the design space: INFO - 20:38:33: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:33: | Name | Lower bound | Value | Upper bound | Type | INFO - 20:38:33: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:33: | x_shared[0] | 0.01 | 0.05 | 0.09 | float | INFO - 20:38:33: | x_shared[1] | 30000 | 45000 | 60000 | float | INFO - 20:38:33: | x_shared[2] | 1.4 | 1.6 | 1.8 | float | INFO - 20:38:33: | x_shared[3] | 2.5 | 5.5 | 8.5 | float | INFO - 20:38:33: | x_shared[4] | 40 | 55 | 70 | float | INFO - 20:38:33: | x_shared[5] | 500 | 1000 | 1500 | float | INFO - 20:38:33: | x_1[0] | 0.1 | 0.25 | 0.4 | float | INFO - 20:38:33: | x_1[1] | 0.75 | 1 | 1.25 | float | INFO - 20:38:33: | x_2 | 0.75 | 1 | 1.25 | float | INFO - 20:38:33: | x_3 | 0.1 | 0.5 | 1 | float | INFO - 20:38:33: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:33: Solving optimization problem with algorithm L-BFGS-B: INFO - 20:38:33: 10%|█ | 1/10 [00:00<00:00, 15.41 it/sec, obj=-53.3] INFO - 20:38:34: 20%|██ | 2/10 [00:00<00:00, 12.10 it/sec, obj=-401] INFO - 20:38:34: 30%|███ | 3/10 [00:00<00:00, 11.88 it/sec, obj=103] INFO - 20:38:34: 40%|████ | 4/10 [00:00<00:00, 11.28 it/sec, obj=-488] INFO - 20:38:34: 50%|█████ | 5/10 [00:00<00:00, 10.93 it/sec, obj=-489] INFO - 20:38:34: 60%|██████ | 6/10 [00:00<00:00, 10.62 it/sec, obj=-489] INFO - 20:38:34: 70%|███████ | 7/10 [00:00<00:00, 10.48 it/sec, obj=-489] INFO - 20:38:34: 80%|████████ | 8/10 [00:00<00:00, 10.36 it/sec, obj=-489] INFO - 20:38:34: 90%|█████████ | 9/10 [00:00<00:00, 10.27 it/sec, obj=-489] INFO - 20:38:34: 100%|██████████| 10/10 [00:00<00:00, 10.19 it/sec, obj=-489] INFO - 20:38:34: Optimization result: INFO - 20:38:34: Optimizer info: INFO - 20:38:34: Status: None INFO - 20:38:34: Message: Maximum number of iterations reached. GEMSEO stopped the driver. INFO - 20:38:34: Number of calls to the objective function by the optimizer: 0 INFO - 20:38:34: Solution: INFO - 20:38:34: Objective: -489.2416290389579 INFO - 20:38:34: Design space: INFO - 20:38:34: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:34: | Name | Lower bound | Value | Upper bound | Type | INFO - 20:38:34: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:34: | x_shared[0] | 0.01 | 0.09 | 0.09 | float | INFO - 20:38:34: | x_shared[1] | 30000 | 60000 | 60000 | float | INFO - 20:38:34: | x_shared[2] | 1.4 | 1.4 | 1.8 | float | INFO - 20:38:34: | x_shared[3] | 2.5 | 2.5 | 8.5 | float | INFO - 20:38:34: | x_shared[4] | 40 | 70 | 70 | float | INFO - 20:38:34: | x_shared[5] | 500 | 1500 | 1500 | float | INFO - 20:38:34: | x_1[0] | 0.1 | 0.2486534942780023 | 0.4 | float | INFO - 20:38:34: | x_1[1] | 0.75 | 0.75 | 1.25 | float | INFO - 20:38:34: | x_2 | 0.75 | 0.75 | 1.25 | float | INFO - 20:38:34: | x_3 | 0.1 | 0.258406178367566 | 1 | float | INFO - 20:38:34: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:34: *** End MDOScenario execution (time: 0:00:01.021656) *** .. GENERATED FROM PYTHON SOURCE LINES 224-226 Note that the algorithm settings passed to :class:`~.BaseDriverLibrary.execute` can be provided via a Pydantic model. For more information, :ref:`algorithm_settings`. .. GENERATED FROM PYTHON SOURCE LINES 228-232 Post-processing options ~~~~~~~~~~~~~~~~~~~~~~~ To visualize the optimization history of the constraint violation one can use the :class:`.BasicHistory`: .. GENERATED FROM PYTHON SOURCE LINES 232-238 .. code-block:: Python scenario.post_process( post_name="BasicHistory", variable_names=["g_1", "g_2", "g_3"], save=False, show=True, ) .. image-sg:: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_001.png :alt: History plot :srcset: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 239-244 This solution is almost feasible. The solution can better approximate the original problem solution increasing the value of `objective_scale` and `scale_inequality` parameters. Step 4: Rerun the scenario with increased penalty and objective scaling. ------------------------------------------------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 244-246 .. code-block:: Python design_space.set_current_value(x_0) .. GENERATED FROM PYTHON SOURCE LINES 247-250 Here, we use the :class:`.MDF_Settings` model to define the formulation instead of passing the settings one by one as we did the first time. Both ways of defining the settings are equally valid. .. GENERATED FROM PYTHON SOURCE LINES 250-265 .. code-block:: Python scenario_2 = create_scenario( disciplines, "y_4", design_space, formulation_settings_model=MDF_Settings(), maximize_objective=True, ) for constraint in ["g_1", "g_2", "g_3"]: scenario_2.add_constraint(constraint, constraint_type="ineq") scenario_2.set_differentiation_method() scenario_2.formulation.optimization_problem.apply_exterior_penalty( objective_scale=1000.0, scale_inequality=1000.0 ) .. GENERATED FROM PYTHON SOURCE LINES 266-269 Here, we use the :class:`.L_BFGS_B_Settings` model to define the algorithm settings instead of passing them one by one as we did the first time. Both ways of defining the settings are equally valid. .. GENERATED FROM PYTHON SOURCE LINES 269-276 .. code-block:: Python from gemseo.settings.opt import L_BFGS_B_Settings # noqa: E402 scenario_2.execute(L_BFGS_B_Settings(max_iter=1000)) scenario_2.post_process( post_name="BasicHistory", variable_names=["-y_4"], save=False, show=True ) .. image-sg:: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_002.png :alt: History plot :srcset: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 20:38:35: *** Start MDOScenario execution *** INFO - 20:38:35: MDOScenario INFO - 20:38:35: Disciplines: SobieskiAerodynamics SobieskiMission SobieskiPropulsion SobieskiStructure INFO - 20:38:35: MDO formulation: MDF INFO - 20:38:35: Optimization problem: INFO - 20:38:35: minimize [[[[-y_4/1000.0]+pos_sum_g_1]+pos_sum_g_2]+pos_sum_g_3](x_1, x_2, x_3, x_shared) = -y_4(x_shared, x_1, x_2, x_3)/1000.0+sum(heaviside()***2)+sum(heaviside()***2)+sum(heaviside()***2) INFO - 20:38:35: with respect to x_1, x_2, x_3, x_shared INFO - 20:38:35: over the design space: INFO - 20:38:35: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:35: | Name | Lower bound | Value | Upper bound | Type | INFO - 20:38:35: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:35: | x_shared[0] | 0.01 | 0.05 | 0.09 | float | INFO - 20:38:35: | x_shared[1] | 30000 | 45000 | 60000 | float | INFO - 20:38:35: | x_shared[2] | 1.4 | 1.6 | 1.8 | float | INFO - 20:38:35: | x_shared[3] | 2.5 | 5.5 | 8.5 | float | INFO - 20:38:35: | x_shared[4] | 40 | 55 | 70 | float | INFO - 20:38:35: | x_shared[5] | 500 | 1000 | 1500 | float | INFO - 20:38:35: | x_1[0] | 0.1 | 0.25 | 0.4 | float | INFO - 20:38:35: | x_1[1] | 0.75 | 1 | 1.25 | float | INFO - 20:38:35: | x_2 | 0.75 | 1 | 1.25 | float | INFO - 20:38:35: | x_3 | 0.1 | 0.5 | 1 | float | INFO - 20:38:35: +-------------+-------------+-------+-------------+-------+ INFO - 20:38:35: Solving optimization problem with algorithm L-BFGS-B: INFO - 20:38:35: 1%| | 6/1000 [00:00<01:31, 10.88 it/sec, obj=-0.428] INFO - 20:38:35: 1%| | 7/1000 [00:00<01:30, 10.95 it/sec, obj=-0.504] INFO - 20:38:35: 1%| | 8/1000 [00:00<01:29, 11.14 it/sec, obj=-0.413] INFO - 20:38:35: 1%| | 9/1000 [00:00<01:28, 11.25 it/sec, obj=-0.521] INFO - 20:38:35: 1%| | 10/1000 [00:00<01:26, 11.44 it/sec, obj=-0.537] INFO - 20:38:36: 1%| | 11/1000 [00:00<01:25, 11.59 it/sec, obj=-0.54] INFO - 20:38:36: 1%| | 12/1000 [00:01<01:24, 11.71 it/sec, obj=-0.541] INFO - 20:38:36: 1%|▏ | 13/1000 [00:01<01:23, 11.84 it/sec, obj=-0.521] INFO - 20:38:36: 1%|▏ | 14/1000 [00:01<01:22, 11.94 it/sec, obj=-0.541] INFO - 20:38:36: 2%|▏ | 15/1000 [00:01<01:22, 11.95 it/sec, obj=4.92] INFO - 20:38:36: 2%|▏ | 16/1000 [00:01<01:21, 12.03 it/sec, obj=-0.542] INFO - 20:38:36: 2%|▏ | 17/1000 [00:01<01:21, 12.10 it/sec, obj=-0.542] INFO - 20:38:36: 2%|▏ | 18/1000 [00:01<01:20, 12.14 it/sec, obj=0.751] INFO - 20:38:36: 2%|▏ | 19/1000 [00:01<01:20, 12.20 it/sec, obj=-0.542] INFO - 20:38:36: 2%|▏ | 20/1000 [00:01<01:20, 12.22 it/sec, obj=-0.589] INFO - 20:38:36: 2%|▏ | 21/1000 [00:01<01:20, 12.16 it/sec, obj=28.5] INFO - 20:38:36: 2%|▏ | 22/1000 [00:01<01:20, 12.18 it/sec, obj=-0.601] INFO - 20:38:36: 2%|▏ | 23/1000 [00:01<01:19, 12.21 it/sec, obj=-0.609] INFO - 20:38:37: 2%|▏ | 24/1000 [00:01<01:19, 12.21 it/sec, obj=2.4] INFO - 20:38:37: 2%|▎ | 25/1000 [00:02<01:19, 12.22 it/sec, obj=-0.625] INFO - 20:38:37: 3%|▎ | 26/1000 [00:02<01:19, 12.23 it/sec, obj=-0.639] INFO - 20:38:37: 3%|▎ | 27/1000 [00:02<01:19, 12.24 it/sec, obj=-0.311] INFO - 20:38:37: 3%|▎ | 28/1000 [00:02<01:19, 12.24 it/sec, obj=-0.645] INFO - 20:38:37: 3%|▎ | 29/1000 [00:02<01:19, 12.24 it/sec, obj=-0.65] INFO - 20:38:37: 3%|▎ | 30/1000 [00:02<01:19, 12.25 it/sec, obj=-0.611] INFO - 20:38:37: 3%|▎ | 31/1000 [00:02<01:19, 12.25 it/sec, obj=2.98] INFO - 20:38:37: 3%|▎ | 32/1000 [00:02<01:18, 12.25 it/sec, obj=-0.651] INFO - 20:38:37: 3%|▎ | 33/1000 [00:02<01:18, 12.25 it/sec, obj=0.77] INFO - 20:38:37: 3%|▎ | 34/1000 [00:02<01:18, 12.25 it/sec, obj=-0.652] INFO - 20:38:37: 4%|▎ | 35/1000 [00:02<01:18, 12.26 it/sec, obj=-0.103] INFO - 20:38:38: 4%|▎ | 36/1000 [00:02<01:18, 12.25 it/sec, obj=-0.654] INFO - 20:38:38: 4%|▎ | 37/1000 [00:03<01:18, 12.26 it/sec, obj=-0.444] INFO - 20:38:38: 4%|▍ | 38/1000 [00:03<01:18, 12.26 it/sec, obj=-0.655] INFO - 20:38:38: 4%|▍ | 39/1000 [00:03<01:18, 12.26 it/sec, obj=-0.574] INFO - 20:38:38: 4%|▍ | 40/1000 [00:03<01:18, 12.26 it/sec, obj=-0.656] INFO - 20:38:38: 4%|▍ | 41/1000 [00:03<01:18, 12.26 it/sec, obj=-0.624] INFO - 20:38:38: 4%|▍ | 42/1000 [00:03<01:18, 12.27 it/sec, obj=-0.657] INFO - 20:38:38: 4%|▍ | 43/1000 [00:03<01:17, 12.27 it/sec, obj=-0.658] INFO - 20:38:38: 4%|▍ | 44/1000 [00:03<01:17, 12.28 it/sec, obj=-0.669] INFO - 20:38:38: 4%|▍ | 45/1000 [00:03<01:17, 12.28 it/sec, obj=-0.68] INFO - 20:38:38: 5%|▍ | 46/1000 [00:03<01:17, 12.29 it/sec, obj=-0.686] INFO - 20:38:38: 5%|▍ | 47/1000 [00:03<01:17, 12.30 it/sec, obj=-0.694] INFO - 20:38:39: 5%|▍ | 48/1000 [00:03<01:17, 12.26 it/sec, obj=-0.774] INFO - 20:38:39: 5%|▍ | 49/1000 [00:04<01:17, 12.21 it/sec, obj=-1.19] INFO - 20:38:39: 5%|▌ | 50/1000 [00:04<01:18, 12.11 it/sec, obj=-1.69] INFO - 20:38:39: 5%|▌ | 51/1000 [00:04<01:19, 12.00 it/sec, obj=-1.7] INFO - 20:38:39: 5%|▌ | 52/1000 [00:04<01:19, 11.91 it/sec, obj=-1.71] INFO - 20:38:39: 5%|▌ | 53/1000 [00:04<01:20, 11.83 it/sec, obj=-1.75] INFO - 20:38:39: 5%|▌ | 54/1000 [00:04<01:20, 11.77 it/sec, obj=-1.93] INFO - 20:38:39: 6%|▌ | 55/1000 [00:04<01:20, 11.73 it/sec, obj=-2.17] INFO - 20:38:39: 6%|▌ | 56/1000 [00:04<01:20, 11.69 it/sec, obj=-2.19] INFO - 20:38:40: 6%|▌ | 57/1000 [00:04<01:20, 11.66 it/sec, obj=-2.28] INFO - 20:38:40: 6%|▌ | 58/1000 [00:04<01:20, 11.63 it/sec, obj=-2.29] INFO - 20:38:40: 6%|▌ | 59/1000 [00:05<01:21, 11.59 it/sec, obj=-2.3] INFO - 20:38:40: 6%|▌ | 60/1000 [00:05<01:21, 11.56 it/sec, obj=-2.35] INFO - 20:38:40: 6%|▌ | 61/1000 [00:05<01:21, 11.53 it/sec, obj=-2.1] INFO - 20:38:40: 6%|▌ | 62/1000 [00:05<01:21, 11.50 it/sec, obj=-2.4] INFO - 20:38:40: 6%|▋ | 63/1000 [00:05<01:21, 11.46 it/sec, obj=25.5] INFO - 20:38:40: 6%|▋ | 64/1000 [00:05<01:21, 11.43 it/sec, obj=-2.41] INFO - 20:38:40: 6%|▋ | 65/1000 [00:05<01:22, 11.39 it/sec, obj=3.96] INFO - 20:38:40: 7%|▋ | 66/1000 [00:05<01:22, 11.37 it/sec, obj=-2.42] INFO - 20:38:41: 7%|▋ | 67/1000 [00:05<01:22, 11.34 it/sec, obj=0.179] INFO - 20:38:41: 7%|▋ | 68/1000 [00:06<01:22, 11.32 it/sec, obj=-2.43] INFO - 20:38:41: 7%|▋ | 69/1000 [00:06<01:22, 11.29 it/sec, obj=-1.35] INFO - 20:38:41: 7%|▋ | 70/1000 [00:06<01:22, 11.27 it/sec, obj=-2.43] INFO - 20:38:41: 7%|▋ | 71/1000 [00:06<01:22, 11.24 it/sec, obj=-2.51] INFO - 20:38:41: 7%|▋ | 72/1000 [00:06<01:22, 11.22 it/sec, obj=-2.9] INFO - 20:38:41: 7%|▋ | 73/1000 [00:06<01:22, 11.19 it/sec, obj=-3.17] INFO - 20:38:41: 7%|▋ | 74/1000 [00:06<01:22, 11.16 it/sec, obj=-3.17] INFO - 20:38:41: 8%|▊ | 75/1000 [00:06<01:23, 11.13 it/sec, obj=-3.2] INFO - 20:38:41: 8%|▊ | 76/1000 [00:06<01:23, 11.10 it/sec, obj=-2.81] INFO - 20:38:42: 8%|▊ | 77/1000 [00:06<01:23, 11.08 it/sec, obj=-3.2] INFO - 20:38:42: 8%|▊ | 78/1000 [00:07<01:23, 11.05 it/sec, obj=-3.23] INFO - 20:38:42: 8%|▊ | 79/1000 [00:07<01:23, 11.03 it/sec, obj=-3.35] INFO - 20:38:42: 8%|▊ | 80/1000 [00:07<01:23, 11.01 it/sec, obj=-3.39] INFO - 20:38:42: 8%|▊ | 81/1000 [00:07<01:23, 10.99 it/sec, obj=-3.67] INFO - 20:38:42: 8%|▊ | 82/1000 [00:07<01:23, 10.98 it/sec, obj=-3.73] INFO - 20:38:42: 8%|▊ | 83/1000 [00:07<01:23, 10.96 it/sec, obj=-3.96] INFO - 20:38:42: 8%|▊ | 84/1000 [00:07<01:23, 10.93 it/sec, obj=-4.24] INFO - 20:38:42: 8%|▊ | 85/1000 [00:07<01:23, 10.91 it/sec, obj=-4.27] INFO - 20:38:43: 9%|▊ | 86/1000 [00:07<01:23, 10.89 it/sec, obj=-4.27] INFO - 20:38:43: 9%|▊ | 87/1000 [00:08<01:24, 10.87 it/sec, obj=-4.28] INFO - 20:38:43: 9%|▉ | 88/1000 [00:08<01:24, 10.85 it/sec, obj=-4.31] INFO - 20:38:43: 9%|▉ | 89/1000 [00:08<01:24, 10.83 it/sec, obj=-4.39] INFO - 20:38:43: 9%|▉ | 90/1000 [00:08<01:24, 10.81 it/sec, obj=-4.39] INFO - 20:38:43: 9%|▉ | 91/1000 [00:08<01:24, 10.79 it/sec, obj=-4.39] INFO - 20:38:43: 9%|▉ | 92/1000 [00:08<01:24, 10.77 it/sec, obj=-4.4] INFO - 20:38:43: 9%|▉ | 93/1000 [00:08<01:24, 10.75 it/sec, obj=-3.7] INFO - 20:38:43: 9%|▉ | 94/1000 [00:08<01:24, 10.73 it/sec, obj=-4.4] INFO - 20:38:43: 10%|▉ | 95/1000 [00:08<01:24, 10.72 it/sec, obj=-4.15] INFO - 20:38:44: 10%|▉ | 96/1000 [00:08<01:24, 10.70 it/sec, obj=-4.41] INFO - 20:38:44: 10%|▉ | 97/1000 [00:09<01:24, 10.68 it/sec, obj=-4.31] INFO - 20:38:44: 10%|▉ | 98/1000 [00:09<01:24, 10.67 it/sec, obj=-4.41] INFO - 20:38:44: 10%|▉ | 99/1000 [00:09<01:24, 10.65 it/sec, obj=-4.37] INFO - 20:38:44: 10%|█ | 100/1000 [00:09<01:24, 10.64 it/sec, obj=-4.41] INFO - 20:38:44: 10%|█ | 101/1000 [00:09<01:24, 10.62 it/sec, obj=-1.73] INFO - 20:38:44: 10%|█ | 102/1000 [00:09<01:24, 10.60 it/sec, obj=-4.41] INFO - 20:38:44: 10%|█ | 103/1000 [00:09<01:24, 10.58 it/sec, obj=-4.41] INFO - 20:38:44: 10%|█ | 104/1000 [00:09<01:24, 10.57 it/sec, obj=-4.41] INFO - 20:38:45: 10%|█ | 105/1000 [00:09<01:24, 10.56 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 106/1000 [00:10<01:24, 10.55 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 107/1000 [00:10<01:24, 10.53 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 108/1000 [00:10<01:24, 10.52 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 109/1000 [00:10<01:24, 10.51 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 110/1000 [00:10<01:24, 10.50 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 111/1000 [00:10<01:24, 10.49 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█ | 112/1000 [00:10<01:24, 10.48 it/sec, obj=-4.41] INFO - 20:38:45: 11%|█▏ | 113/1000 [00:10<01:24, 10.47 it/sec, obj=-4.41] INFO - 20:38:46: 11%|█▏ | 114/1000 [00:10<01:24, 10.46 it/sec, obj=-4.41] INFO - 20:38:46: 12%|█▏ | 115/1000 [00:11<01:24, 10.44 it/sec, obj=-4.41] INFO - 20:38:46: 12%|█▏ | 116/1000 [00:11<01:24, 10.43 it/sec, obj=-4.41] INFO - 20:38:46: Optimization result: INFO - 20:38:46: Optimizer info: INFO - 20:38:46: Status: 0 INFO - 20:38:46: Message: CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL INFO - 20:38:46: Number of calls to the objective function by the optimizer: 0 INFO - 20:38:46: Solution: INFO - 20:38:46: Objective: -4.411696287384013 INFO - 20:38:46: Design space: INFO - 20:38:46: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:46: | Name | Lower bound | Value | Upper bound | Type | INFO - 20:38:46: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:46: | x_shared[0] | 0.01 | 0.09 | 0.09 | float | INFO - 20:38:46: | x_shared[1] | 30000 | 60000 | 60000 | float | INFO - 20:38:46: | x_shared[2] | 1.4 | 1.4 | 1.8 | float | INFO - 20:38:46: | x_shared[3] | 2.5 | 2.5 | 8.5 | float | INFO - 20:38:46: | x_shared[4] | 40 | 70 | 70 | float | INFO - 20:38:46: | x_shared[5] | 500 | 1500 | 1500 | float | INFO - 20:38:46: | x_1[0] | 0.1 | 0.4 | 0.4 | float | INFO - 20:38:46: | x_1[1] | 0.75 | 0.75 | 1.25 | float | INFO - 20:38:46: | x_2 | 0.75 | 0.75 | 1.25 | float | INFO - 20:38:46: | x_3 | 0.1 | 0.1563542074363472 | 1 | float | INFO - 20:38:46: +-------------+-------------+--------------------+-------------+-------+ INFO - 20:38:46: *** End MDOScenario execution (time: 0:00:11.165529) *** .. GENERATED FROM PYTHON SOURCE LINES 277-280 Here, we use the :class:`.BasicHistory_Settings` model to define the post-processor settings instead of passing them one by one as we did the first time. Both ways of defining the settings are equally valid. .. GENERATED FROM PYTHON SOURCE LINES 280-289 .. code-block:: Python from gemseo.settings.post import BasicHistory_Settings # noqa: E402 scenario_2.post_process( BasicHistory_Settings( variable_names=["g_1", "g_2", "g_3"], save=False, show=True, ) ) .. image-sg:: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_003.png :alt: History plot :srcset: /examples/exterior_penalty/images/sphx_glr_plot_exterior_penalty_sobieski_003.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 290-292 The solution feasibility was improved but this comes with a much higher number of iterations. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 12.658 seconds) .. _sphx_glr_download_examples_exterior_penalty_plot_exterior_penalty_sobieski.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_exterior_penalty_sobieski.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_exterior_penalty_sobieski.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_exterior_penalty_sobieski.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_