.. 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 - 10:53:53: INFO - 10:53:53: *** Start MDOScenario execution *** INFO - 10:53:53: MDOScenario INFO - 10:53:53: Disciplines: MainDiscipline ScalableDiscipline[1] ScalableDiscipline[2] INFO - 10:53:53: MDO formulation: MDF INFO - 10:53:53: Optimization problem: INFO - 10:53:53: minimize f(x_0, x_1, x_2) INFO - 10:53:53: with respect to x_0, x_1, x_2 INFO - 10:53:53: subject to constraints: INFO - 10:53:53: c_1(x_0, x_1, x_2) <= 0.0 INFO - 10:53:53: c_2(x_0, x_1, x_2) <= 0.0 INFO - 10:53:53: over the design space: INFO - 10:53:53: +--------+-------------+-------+-------------+-------+ INFO - 10:53:53: | Name | Lower bound | Value | Upper bound | Type | INFO - 10:53:53: +--------+-------------+-------+-------------+-------+ INFO - 10:53:53: | x_0 | 0 | 0.5 | 1 | float | INFO - 10:53:53: | x_1 | 0 | 0.5 | 1 | float | INFO - 10:53:53: | x_2[0] | 0 | 0.5 | 1 | float | INFO - 10:53:53: | x_2[1] | 0 | 0.5 | 1 | float | INFO - 10:53:53: | x_2[2] | 0 | 0.5 | 1 | float | INFO - 10:53:53: +--------+-------------+-------+-------------+-------+ INFO - 10:53:53: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 10:53:53: 1%| | 1/100 [00:00<00:05, 18.62 it/sec, obj=3.07] WARNING - 10:53:54: MDAJacobi has reached its maximum number of iterations but the normed residual 2.1168696116299354e-06 is still above the tolerance 1e-06. INFO - 10:53:54: 2%|▏ | 2/100 [00:00<00:12, 7.63 it/sec, obj=1.21] INFO - 10:53:54: 3%|▎ | 3/100 [00:00<00:11, 8.74 it/sec, obj=0.991] INFO - 10:53:54: 4%|▍ | 4/100 [00:00<00:10, 9.48 it/sec, obj=0.986] INFO - 10:53:54: 5%|▌ | 5/100 [00:00<00:09, 9.97 it/sec, obj=0.982] INFO - 10:53:54: 6%|▌ | 6/100 [00:00<00:09, 10.31 it/sec, obj=0.971] INFO - 10:53:54: 7%|▋ | 7/100 [00:00<00:08, 10.53 it/sec, obj=0.97] INFO - 10:53:54: 8%|▊ | 8/100 [00:00<00:08, 10.75 it/sec, obj=0.969] INFO - 10:53:54: 9%|▉ | 9/100 [00:00<00:08, 10.90 it/sec, obj=0.969] INFO - 10:53:54: 10%|█ | 10/100 [00:00<00:08, 11.02 it/sec, obj=0.969] INFO - 10:53:54: 11%|█ | 11/100 [00:00<00:07, 12.11 it/sec, obj=Not evaluated] INFO - 10:53:54: Optimization result: INFO - 10:53:54: Optimizer info: INFO - 10:53:54: Status: None INFO - 10:53:54: Message: Successive iterates of the design variables are closer than xtol_rel or xtol_abs. GEMSEO Stopped the driver INFO - 10:53:54: Number of calls to the objective function by the optimizer: 11 INFO - 10:53:54: Solution: INFO - 10:53:54: The solution is feasible. INFO - 10:53:54: Objective: 0.9692177673322132 INFO - 10:53:54: Standardized constraints: INFO - 10:53:54: c_1 = [-0.68664086 -0.21340455] INFO - 10:53:54: c_2 = [-7.31227816e-01 -1.68967484e-01 -2.32695971e-01 1.19959598e-12] INFO - 10:53:54: Design space: INFO - 10:53:54: +--------+-------------+-----------------------+-------------+-------+ INFO - 10:53:54: | Name | Lower bound | Value | Upper bound | Type | INFO - 10:53:54: +--------+-------------+-----------------------+-------------+-------+ INFO - 10:53:54: | x_0 | 0 | 0.7071349698120486 | 1 | float | INFO - 10:53:54: | x_1 | 0 | 0.999999999999994 | 1 | float | INFO - 10:53:54: | x_2[0] | 0 | 1.149355539667889e-15 | 1 | float | INFO - 10:53:54: | x_2[1] | 0 | 0.5233175560073939 | 1 | float | INFO - 10:53:54: | x_2[2] | 0 | 7.693613505196677e-16 | 1 | float | INFO - 10:53:54: +--------+-------------+-----------------------+-------------+-------+ INFO - 10:53:54: *** End MDOScenario execution (time: 0:00:00.925638) *** {'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 - 10:53:55: Optimization problem: INFO - 10:53:55: minimize f = 0.5x'Qx + c'x + d INFO - 10:53:55: with respect to x INFO - 10:53:55: subject to constraints: INFO - 10:53:55: g: Ax-b <= 0 <= 0.0 INFO - 10:53:55: over the design space: INFO - 10:53:55: +------+-------------+-------+-------------+-------+ INFO - 10:53:55: | Name | Lower bound | Value | Upper bound | Type | INFO - 10:53:55: +------+-------------+-------+-------------+-------+ INFO - 10:53:55: | x[0] | 0 | 0.5 | 1 | float | INFO - 10:53:55: | x[1] | 0 | 0.5 | 1 | float | INFO - 10:53:55: | x[2] | 0 | 0.5 | 1 | float | INFO - 10:53:55: | x[3] | 0 | 0.5 | 1 | float | INFO - 10:53:55: | x[4] | 0 | 0.5 | 1 | float | INFO - 10:53:55: +------+-------------+-------+-------------+-------+ INFO - 10:53:55: Solving optimization problem with algorithm NLOPT_SLSQP: INFO - 10:53:55: 1%| | 1/100 [00:00<00:00, 2098.20 it/sec, obj=3.07] INFO - 10:53:55: 2%|▏ | 2/100 [00:00<00:00, 530.76 it/sec, obj=1.21] INFO - 10:53:55: 3%|▎ | 3/100 [00:00<00:00, 534.44 it/sec, obj=0.991] INFO - 10:53:55: 4%|▍ | 4/100 [00:00<00:00, 547.88 it/sec, obj=0.986] INFO - 10:53:55: 5%|▌ | 5/100 [00:00<00:00, 553.98 it/sec, obj=0.982] INFO - 10:53:55: 6%|▌ | 6/100 [00:00<00:00, 555.92 it/sec, obj=0.971] INFO - 10:53:55: 7%|▋ | 7/100 [00:00<00:00, 552.47 it/sec, obj=0.97] ERROR - 10:53:55: NLopt run failed: NLopt roundoff-limited, RoundoffLimited Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.2.0/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.2.0/lib/python3.9/site-packages/nlopt/nlopt.py", line 335, in optimize return _nlopt.opt_optimize(self, *args) nlopt.RoundoffLimited: NLopt roundoff-limited INFO - 10:53:55: 8%|▊ | 8/100 [00:00<00:00, 533.36 it/sec, obj=0.969] INFO - 10:53:55: Optimization result: INFO - 10:53:55: Optimizer info: INFO - 10:53:55: Status: None INFO - 10:53:55: Message: GEMSEO Stopped the driver INFO - 10:53:55: Number of calls to the objective function by the optimizer: 9 INFO - 10:53:55: Solution: INFO - 10:53:55: The solution is feasible. INFO - 10:53:55: Objective: 0.9692176254005034 INFO - 10:53:55: Standardized constraints: INFO - 10:53:55: g = [-6.86640980e-01 -2.13404451e-01 -7.31227677e-01 -1.68967471e-01 INFO - 10:53:55: -2.32695870e-01 -2.22044605e-15] INFO - 10:53:55: Design space: INFO - 10:53:55: +------+-------------+--------------------+-------------+-------+ INFO - 10:53:55: | Name | Lower bound | Value | Upper bound | Type | INFO - 10:53:55: +------+-------------+--------------------+-------------+-------+ INFO - 10:53:55: | x[0] | 0 | 0.7071348743877915 | 1 | float | INFO - 10:53:55: | x[1] | 0 | 1 | 1 | float | INFO - 10:53:55: | x[2] | 0 | 0 | 1 | float | INFO - 10:53:55: | x[3] | 0 | 0.5233180438726639 | 1 | float | INFO - 10:53:55: | x[4] | 0 | 0 | 1 | float | INFO - 10:53:55: +------+-------------+--------------------+-------------+-------+ .. 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 3.857 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 `_