.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/scalable/plot_scalable_param_mdf.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_scalable_plot_scalable_param_mdf.py: Parametric scalable MDO problem - MDF ===================================== We define a :class:`~.gemseo.problems.scalable.parametric.scalable_problem.ScalableProblem` with a shared design variable of size 1 and 2 strongly coupled disciplines. The first one has a local design variable of size 1 and a coupling variable of size 2 while the second one has a local design variable of size 3 and a coupling variable of size 4. We would like to solve this MDO problem by means of an MDF formulation. .. GENERATED FROM PYTHON SOURCE LINES 35-49 .. code-block:: Python from __future__ import annotations from gemseo import configure_logger from gemseo import execute_algo from gemseo import execute_post from gemseo import generate_n2_plot from gemseo.problems.scalable.parametric.core.scalable_discipline_settings import ( ScalableDisciplineSettings, ) from gemseo.problems.scalable.parametric.scalable_problem import ScalableProblem configure_logger() .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 50-52 Instantiation of the scalable problem ------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 52-56 .. code-block:: Python problem = ScalableProblem( [ScalableDisciplineSettings(1, 2), ScalableDisciplineSettings(3, 4)], 1 ) .. GENERATED FROM PYTHON SOURCE LINES 57-59 Display the coupling structure ------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 59-61 .. code-block:: Python generate_n2_plot(problem.disciplines, save=False, show=True) .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_001.png :alt: plot scalable param mdf :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 62-64 Solve the MDO using an MDF formulation -------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 64-67 .. code-block:: Python scenario = problem.create_scenario() scenario.execute({"algo": "NLOPT_SLSQP", "max_iter": 100}) .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 13:08:52: INFO - 13:08:52: *** Start MDOScenario execution *** INFO - 13:08:52: MDOScenario INFO - 13:08:52: Disciplines: MainDiscipline ScalableDiscipline[1] ScalableDiscipline[2] INFO - 13:08:52: MDO formulation: MDF INFO - 13:08:52: Optimization problem: INFO - 13:08:52: minimize f(x_0, x_1, x_2) INFO - 13:08:52: with respect to x_0, x_1, x_2 INFO - 13:08:52: subject to constraints: INFO - 13:08:52: c_1(x_0, x_1, x_2) <= 0.0 INFO - 13:08:52: c_2(x_0, x_1, x_2) <= 0.0 INFO - 13:08:52: over the design space: INFO - 13:08:52: +--------+-------------+-------+-------------+-------+ INFO - 13:08:52: | Name | Lower bound | Value | Upper bound | Type | INFO - 13:08:52: +--------+-------------+-------+-------------+-------+ INFO - 13:08:52: | x_0 | 0 | 0.5 | 1 | float | INFO - 13:08:52: | x_1 | 0 | 0.5 | 1 | float | INFO - 13:08:52: | x_2[0] | 0 | 0.5 | 1 | float | INFO - 13:08:52: | x_2[1] | 0 | 0.5 | 1 | float | INFO - 13:08:52: | x_2[2] | 0 | 0.5 | 1 | float | INFO - 13:08:52: +--------+-------------+-------+-------------+-------+ INFO - 13:08:52: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 13:08:52: 1%| | 1/100 [00:00<00:05, 17.71 it/sec, obj=3.07] WARNING - 13:08:52: MDAJacobi has reached its maximum number of iterations but the normed residual 2.7151398467835046e-06 is still above the tolerance 1e-06. INFO - 13:08:52: 2%|▏ | 2/100 [00:00<00:14, 6.90 it/sec, obj=1.21] INFO - 13:08:52: 3%|▎ | 3/100 [00:00<00:12, 7.89 it/sec, obj=0.991] INFO - 13:08:52: 4%|▍ | 4/100 [00:00<00:11, 8.55 it/sec, obj=0.986] INFO - 13:08:52: 5%|▌ | 5/100 [00:00<00:10, 8.97 it/sec, obj=0.982] INFO - 13:08:52: 6%|▌ | 6/100 [00:00<00:10, 9.23 it/sec, obj=0.971] WARNING - 13:08:53: MDAJacobi has reached its maximum number of iterations but the normed residual 1.1427901205848047e-06 is still above the tolerance 1e-06. INFO - 13:08:53: 7%|▋ | 7/100 [00:00<00:09, 9.44 it/sec, obj=0.97] WARNING - 13:08:53: MDAJacobi has reached its maximum number of iterations but the normed residual 1.1427840082052262e-06 is still above the tolerance 1e-06. INFO - 13:08:53: 8%|▊ | 8/100 [00:00<00:09, 9.66 it/sec, obj=0.969] WARNING - 13:08:53: MDAJacobi has reached its maximum number of iterations but the normed residual 1.1427840072918856e-06 is still above the tolerance 1e-06. INFO - 13:08:53: 9%|▉ | 9/100 [00:00<00:09, 9.83 it/sec, obj=0.969] ERROR - 13:08:53: NLopt run failed: NLopt roundoff-limited, RoundoffLimited Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.3.2/lib/python3.9/site-packages/gemseo/algos/opt/lib_nlopt.py", line 498, in _run nlopt_problem.optimize(x_0.real) File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.3.2/lib/python3.9/site-packages/nlopt/nlopt.py", line 335, in optimize return _nlopt.opt_optimize(self, *args) nlopt.RoundoffLimited: NLopt roundoff-limited INFO - 13:08:53: 10%|█ | 10/100 [00:00<00:08, 10.86 it/sec, obj=0.969] INFO - 13:08:53: Optimization result: INFO - 13:08:53: Optimizer info: INFO - 13:08:53: Status: None INFO - 13:08:53: Message: GEMSEO Stopped the driver INFO - 13:08:53: Number of calls to the objective function by the optimizer: 11 INFO - 13:08:53: Solution: INFO - 13:08:53: The solution is feasible. INFO - 13:08:53: Objective: 0.969214782218196 INFO - 13:08:53: Standardized constraints: INFO - 13:08:53: c_1 = [-0.68663938 -0.21340355] INFO - 13:08:53: c_2 = [-7.31227901e-01 -1.68967318e-01 -2.32696422e-01 7.32747196e-15] INFO - 13:08:53: Design space: INFO - 13:08:53: +--------+-------------+--------------------+-------------+-------+ INFO - 13:08:53: | Name | Lower bound | Value | Upper bound | Type | INFO - 13:08:53: +--------+-------------+--------------------+-------------+-------+ INFO - 13:08:53: | x_0 | 0 | 0.7071335797308678 | 1 | float | INFO - 13:08:53: | x_1 | 0 | 1 | 1 | float | INFO - 13:08:53: | x_2[0] | 0 | 0 | 1 | float | INFO - 13:08:53: | x_2[1] | 0 | 0.5233182522437062 | 1 | float | INFO - 13:08:53: | x_2[2] | 0 | 0 | 1 | float | INFO - 13:08:53: +--------+-------------+--------------------+-------------+-------+ INFO - 13:08:53: *** End MDOScenario execution (time: 0:00:00.940144) *** {'max_iter': 100, 'algo': 'NLOPT_SLSQP'} .. GENERATED FROM PYTHON SOURCE LINES 68-70 Post-process the results ------------------------ .. GENERATED FROM PYTHON SOURCE LINES 70-72 .. code-block:: Python scenario.post_process("OptHistoryView", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_002.png :alt: Evolution of the optimization variables :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_002.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_003.png :alt: Evolution of the objective value :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_003.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_004.png :alt: Distance to the optimum :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_004.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_005.png :alt: Hessian diagonal approximation :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_005.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_006.png :alt: Evolution of the inequality constraints :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_006.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 73-75 Solve the associated quadratic programming problem -------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 75-78 .. code-block:: Python problem = problem.create_quadratic_programming_problem() execute_algo(problem, algo_name="NLOPT_SLSQP", max_iter=100) .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 13:08:54: Optimization problem: INFO - 13:08:54: minimize f = 0.5x'Qx + c'x + d INFO - 13:08:54: with respect to x INFO - 13:08:54: subject to constraints: INFO - 13:08:54: g: Ax-b <= 0 <= 0.0 INFO - 13:08:54: over the design space: INFO - 13:08:54: +------+-------------+-------+-------------+-------+ INFO - 13:08:54: | Name | Lower bound | Value | Upper bound | Type | INFO - 13:08:54: +------+-------------+-------+-------------+-------+ INFO - 13:08:54: | x[0] | 0 | 0.5 | 1 | float | INFO - 13:08:54: | x[1] | 0 | 0.5 | 1 | float | INFO - 13:08:54: | x[2] | 0 | 0.5 | 1 | float | INFO - 13:08:54: | x[3] | 0 | 0.5 | 1 | float | INFO - 13:08:54: | x[4] | 0 | 0.5 | 1 | float | INFO - 13:08:54: +------+-------------+-------+-------------+-------+ INFO - 13:08:54: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 13:08:54: 1%| | 1/100 [00:00<00:00, 1894.45 it/sec, obj=3.07] INFO - 13:08:54: 2%|▏ | 2/100 [00:00<00:00, 591.75 it/sec, obj=1.21] INFO - 13:08:54: 3%|▎ | 3/100 [00:00<00:00, 584.73 it/sec, obj=0.991] INFO - 13:08:54: 4%|▍ | 4/100 [00:00<00:00, 580.87 it/sec, obj=0.986] INFO - 13:08:54: 5%|▌ | 5/100 [00:00<00:00, 584.64 it/sec, obj=0.982] INFO - 13:08:54: 6%|▌ | 6/100 [00:00<00:00, 585.48 it/sec, obj=0.971] INFO - 13:08:54: 7%|▋ | 7/100 [00:00<00:00, 588.05 it/sec, obj=0.97] ERROR - 13:08:54: NLopt run failed: NLopt roundoff-limited, RoundoffLimited Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.3.2/lib/python3.9/site-packages/gemseo/algos/opt/lib_nlopt.py", line 498, in _run nlopt_problem.optimize(x_0.real) File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.3.2/lib/python3.9/site-packages/nlopt/nlopt.py", line 335, in optimize return _nlopt.opt_optimize(self, *args) nlopt.RoundoffLimited: NLopt roundoff-limited INFO - 13:08:54: 8%|▊ | 8/100 [00:00<00:00, 563.88 it/sec, obj=0.969] INFO - 13:08:54: Optimization result: INFO - 13:08:54: Optimizer info: INFO - 13:08:54: Status: None INFO - 13:08:54: Message: GEMSEO Stopped the driver INFO - 13:08:54: Number of calls to the objective function by the optimizer: 9 INFO - 13:08:54: Solution: INFO - 13:08:54: The solution is feasible. INFO - 13:08:54: Objective: 0.9692176254005034 INFO - 13:08:54: Standardized constraints: INFO - 13:08:54: g = [-6.86640980e-01 -2.13404451e-01 -7.31227677e-01 -1.68967471e-01 INFO - 13:08:54: -2.32695870e-01 -2.22044605e-15] INFO - 13:08:54: Design space: INFO - 13:08:54: +------+-------------+--------------------+-------------+-------+ INFO - 13:08:54: | Name | Lower bound | Value | Upper bound | Type | INFO - 13:08:54: +------+-------------+--------------------+-------------+-------+ INFO - 13:08:54: | x[0] | 0 | 0.7071348743877915 | 1 | float | INFO - 13:08:54: | x[1] | 0 | 1 | 1 | float | INFO - 13:08:54: | x[2] | 0 | 0 | 1 | float | INFO - 13:08:54: | x[3] | 0 | 0.5233180438726639 | 1 | float | INFO - 13:08:54: | x[4] | 0 | 0 | 1 | float | INFO - 13:08:54: +------+-------------+--------------------+-------------+-------+ .. raw:: html
Optimization result:
  • Design variables: [0.70713487 1. 0. 0.52331804 0. ]
  • Objective function: 0.9692176254005034
  • Feasible solution: True


.. GENERATED FROM PYTHON SOURCE LINES 79-81 Post-process the results ------------------------ .. GENERATED FROM PYTHON SOURCE LINES 81-82 .. code-block:: Python execute_post(problem, "OptHistoryView", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_007.png :alt: Evolution of the optimization variables :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_007.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_008.png :alt: Evolution of the objective value :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_008.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_009.png :alt: Distance to the optimum :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_009.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_010.png :alt: Hessian diagonal approximation :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_010.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_011.png :alt: Evolution of the inequality constraints :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_011.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 4.080 seconds) .. _sphx_glr_download_examples_scalable_plot_scalable_param_mdf.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_scalable_param_mdf.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_scalable_param_mdf.py ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_