.. 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.mdo.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-46 .. code-block:: Python from __future__ import annotations from gemseo import execute_algo from gemseo import execute_post from gemseo import generate_n2_plot from gemseo.problems.mdo.scalable.parametric.core.scalable_discipline_settings import ( ScalableDisciplineSettings, ) from gemseo.problems.mdo.scalable.parametric.scalable_problem import ScalableProblem .. GENERATED FROM PYTHON SOURCE LINES 47-49 Instantiation of the scalable problem ------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 49-53 .. code-block:: Python problem = ScalableProblem( [ScalableDisciplineSettings(1, 2), ScalableDisciplineSettings(3, 4)], 1 ) .. GENERATED FROM PYTHON SOURCE LINES 54-56 Display the coupling structure ------------------------------ .. GENERATED FROM PYTHON SOURCE LINES 56-58 .. 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 59-61 Solve the MDO using an MDF formulation -------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 61-64 .. code-block:: Python scenario = problem.create_scenario() scenario.execute(algo_name="NLOPT_SLSQP", max_iter=100) .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 16:21:35: *** Start MDOScenario execution *** INFO - 16:21:35: MDOScenario INFO - 16:21:35: Disciplines: MainDiscipline ScalableDiscipline[1] ScalableDiscipline[2] INFO - 16:21:35: MDO formulation: MDF INFO - 16:21:35: Optimization problem: INFO - 16:21:35: minimize f(x_0, x_1, x_2) INFO - 16:21:35: with respect to x_0, x_1, x_2 INFO - 16:21:35: under the inequality constraints INFO - 16:21:35: c_1(x_0, x_1, x_2) <= 0 INFO - 16:21:35: c_2(x_0, x_1, x_2) <= 0 INFO - 16:21:35: over the design space: INFO - 16:21:35: +--------+-------------+-------+-------------+-------+ INFO - 16:21:35: | Name | Lower bound | Value | Upper bound | Type | INFO - 16:21:35: +--------+-------------+-------+-------------+-------+ INFO - 16:21:35: | x_0 | 0 | 0.5 | 1 | float | INFO - 16:21:35: | x_1 | 0 | 0.5 | 1 | float | INFO - 16:21:35: | x_2[0] | 0 | 0.5 | 1 | float | INFO - 16:21:35: | x_2[1] | 0 | 0.5 | 1 | float | INFO - 16:21:35: | x_2[2] | 0 | 0.5 | 1 | float | INFO - 16:21:35: +--------+-------------+-------+-------------+-------+ INFO - 16:21:35: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 16:21:35: 1%| | 1/100 [00:00<00:02, 37.33 it/sec, feas=True, obj=3.07] INFO - 16:21:35: 2%|▏ | 2/100 [00:00<00:02, 47.01 it/sec, feas=True, obj=1.21] WARNING - 16:21:35: MDAJacobi has reached its maximum number of iterations, but the normalized residual norm 2.7151398445206794e-06 is still above the tolerance 1e-06. INFO - 16:21:35: 3%|▎ | 3/100 [00:00<00:01, 49.61 it/sec, feas=True, obj=0.991] INFO - 16:21:35: 4%|▍ | 4/100 [00:00<00:01, 51.63 it/sec, feas=True, obj=0.986] INFO - 16:21:35: 5%|▌ | 5/100 [00:00<00:01, 53.28 it/sec, feas=True, obj=0.982] INFO - 16:21:35: 6%|▌ | 6/100 [00:00<00:01, 53.30 it/sec, feas=True, obj=0.971] INFO - 16:21:35: 7%|▋ | 7/100 [00:00<00:01, 54.21 it/sec, feas=True, obj=0.97] WARNING - 16:21:35: MDAJacobi has reached its maximum number of iterations, but the normalized residual norm 1.1427901203368072e-06 is still above the tolerance 1e-06. INFO - 16:21:35: 8%|▊ | 8/100 [00:00<00:01, 54.59 it/sec, feas=True, obj=0.969] WARNING - 16:21:35: MDAJacobi has reached its maximum number of iterations, but the normalized residual norm 1.1427840078240745e-06 is still above the tolerance 1e-06. INFO - 16:21:35: 9%|▉ | 9/100 [00:00<00:01, 54.79 it/sec, feas=True, obj=0.969] WARNING - 16:21:35: MDAJacobi has reached its maximum number of iterations, but the normalized residual norm 1.1427840073629847e-06 is still above the tolerance 1e-06. INFO - 16:21:35: 10%|█ | 10/100 [00:00<00:01, 55.14 it/sec, feas=True, obj=0.969] WARNING - 16:21:35: MDAJacobi has reached its maximum number of iterations, but the normalized residual norm 1.1427840071115847e-06 is still above the tolerance 1e-06. INFO - 16:21:35: 11%|█ | 11/100 [00:00<00:01, 55.37 it/sec, feas=True, obj=0.969] INFO - 16:21:35: Optimization result: INFO - 16:21:35: Optimizer info: INFO - 16:21:35: Status: None INFO - 16:21:35: Message: Successive iterates of the objective function are closer than ftol_rel or ftol_abs. GEMSEO stopped the driver. INFO - 16:21:35: Solution: INFO - 16:21:35: The solution is feasible. INFO - 16:21:35: Objective: 0.9692147822181947 INFO - 16:21:35: Standardized constraints: INFO - 16:21:35: c_1 = [-0.68663938 -0.21340355] INFO - 16:21:35: c_2 = [-7.31227901e-01 -1.68967318e-01 -2.32696422e-01 7.82707232e-15] INFO - 16:21:35: Design space: INFO - 16:21:35: +--------+-------------+--------------------+-------------+-------+ INFO - 16:21:35: | Name | Lower bound | Value | Upper bound | Type | INFO - 16:21:35: +--------+-------------+--------------------+-------------+-------+ INFO - 16:21:35: | x_0 | 0 | 0.7071335797308679 | 1 | float | INFO - 16:21:35: | x_1 | 0 | 1 | 1 | float | INFO - 16:21:35: | x_2[0] | 0 | 0 | 1 | float | INFO - 16:21:35: | x_2[1] | 0 | 0.5233182522437052 | 1 | float | INFO - 16:21:35: | x_2[2] | 0 | 0 | 1 | float | INFO - 16:21:35: +--------+-------------+--------------------+-------------+-------+ INFO - 16:21:35: *** End MDOScenario execution *** .. GENERATED FROM PYTHON SOURCE LINES 65-67 Post-process the results ------------------------ .. GENERATED FROM PYTHON SOURCE LINES 67-69 .. code-block:: Python scenario.post_process(post_name="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: Evolution of the 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: Evolution of the inequality constraints :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_005.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 70-72 Solve the associated quadratic programming problem -------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 72-75 .. 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 - 16:21:36: Optimization problem: INFO - 16:21:36: minimize f = 0.5x'Qx + c'x + d INFO - 16:21:36: with respect to x INFO - 16:21:36: under the inequality constraints INFO - 16:21:36: g: Ax-b <= 0 <= 0.0 INFO - 16:21:36: over the design space: INFO - 16:21:36: +------+-------------+-------+-------------+-------+ INFO - 16:21:36: | Name | Lower bound | Value | Upper bound | Type | INFO - 16:21:36: +------+-------------+-------+-------------+-------+ INFO - 16:21:36: | x[0] | 0 | 0.5 | 1 | float | INFO - 16:21:36: | x[1] | 0 | 0.5 | 1 | float | INFO - 16:21:36: | x[2] | 0 | 0.5 | 1 | float | INFO - 16:21:36: | x[3] | 0 | 0.5 | 1 | float | INFO - 16:21:36: | x[4] | 0 | 0.5 | 1 | float | INFO - 16:21:36: +------+-------------+-------+-------------+-------+ INFO - 16:21:36: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 16:21:36: 1%| | 1/100 [00:00<00:00, 1001.74 it/sec, feas=True, obj=3.07] INFO - 16:21:36: 2%|▏ | 2/100 [00:00<00:00, 1165.41 it/sec, feas=True, obj=1.21] INFO - 16:21:36: 3%|▎ | 3/100 [00:00<00:00, 1250.79 it/sec, feas=True, obj=0.991] INFO - 16:21:36: 4%|▍ | 4/100 [00:00<00:00, 1204.83 it/sec, feas=True, obj=0.986] INFO - 16:21:36: 5%|▌ | 5/100 [00:00<00:00, 1199.47 it/sec, feas=True, obj=0.982] INFO - 16:21:36: 6%|▌ | 6/100 [00:00<00:00, 1195.24 it/sec, feas=True, obj=0.971] INFO - 16:21:36: 7%|▋ | 7/100 [00:00<00:00, 1192.24 it/sec, feas=True, obj=0.97] ERROR - 16:21:36: NLopt run failed: NLopt roundoff-limited, RoundoffLimited Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/6.3.0/lib/python3.12/site-packages/gemseo/algos/opt/nlopt/nlopt.py", line 399, in _run nlopt_problem.optimize(x_0.real) File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/6.3.0/lib/python3.12/site-packages/nlopt/nlopt.py", line 454, in optimize return _nlopt.opt_optimize(self, *args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ nlopt.RoundoffLimited: NLopt roundoff-limited INFO - 16:21:36: Optimization result: INFO - 16:21:36: Optimizer info: INFO - 16:21:36: Status: None INFO - 16:21:36: Message: GEMSEO stopped the driver. INFO - 16:21:36: Solution: INFO - 16:21:36: The solution is feasible. INFO - 16:21:36: Objective: 0.9692176254005034 INFO - 16:21:36: Standardized constraints: INFO - 16:21:36: g = [-6.86640980e-01 -2.13404451e-01 -7.31227677e-01 -1.68967471e-01 INFO - 16:21:36: -2.32695870e-01 -2.22044605e-15] INFO - 16:21:36: Design space: INFO - 16:21:36: +------+-------------+--------------------+-------------+-------+ INFO - 16:21:36: | Name | Lower bound | Value | Upper bound | Type | INFO - 16:21:36: +------+-------------+--------------------+-------------+-------+ INFO - 16:21:36: | x[0] | 0 | 0.7071348743877915 | 1 | float | INFO - 16:21:36: | x[1] | 0 | 1 | 1 | float | INFO - 16:21:36: | x[2] | 0 | 0 | 1 | float | INFO - 16:21:36: | x[3] | 0 | 0.5233180438726639 | 1 | float | INFO - 16:21:36: | x[4] | 0 | 0 | 1 | float | INFO - 16:21:36: +------+-------------+--------------------+-------------+-------+ .. 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 76-78 Post-process the results ------------------------ .. GENERATED FROM PYTHON SOURCE LINES 78-79 .. code-block:: Python execute_post(problem, post_name="OptHistoryView", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_006.png :alt: Evolution of the optimization variables :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_006.png :class: sphx-glr-multi-img * .. image-sg:: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_007.png :alt: Evolution of the objective value :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 distance to the optimum :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: Evolution of the inequality constraints :srcset: /examples/scalable/images/sphx_glr_plot_scalable_param_mdf_009.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 1.562 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 ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_scalable_param_mdf.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_