.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/formulations/plot_doe_sobieski_mdf_example.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_formulations_plot_doe_sobieski_mdf_example.py: MDF-based DOE on the Sobieski SSBJ test case ============================================ .. GENERATED FROM PYTHON SOURCE LINES 24-36 .. code-block:: default from __future__ import annotations from os import name as os_name from gemseo import configure_logger from gemseo import create_discipline from gemseo import create_scenario from gemseo import generate_n2_plot from gemseo.problems.sobieski.core.problem import SobieskiProblem configure_logger() .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 37-44 Instantiate the disciplines ---------------------------- First, we instantiate the four disciplines of the use case: :class:`.SobieskiPropulsion`, :class:`.SobieskiAerodynamics`, :class:`.SobieskiMission` and :class:`.SobieskiStructure`. .. GENERATED FROM PYTHON SOURCE LINES 44-53 .. code-block:: default disciplines = create_discipline( [ "SobieskiPropulsion", "SobieskiAerodynamics", "SobieskiMission", "SobieskiStructure", ] ) .. GENERATED FROM PYTHON SOURCE LINES 54-57 We can quickly access the most relevant information of any discipline (name, inputs, and outputs) with Python's ``print()`` function. Moreover, we can get the default input values of a discipline with the attribute :attr:`.MDODiscipline.default_inputs` .. GENERATED FROM PYTHON SOURCE LINES 57-61 .. code-block:: default for discipline in disciplines: print(discipline) print(f"Default inputs: {discipline.default_inputs}") .. rst-class:: sphx-glr-script-out .. code-block:: none SobieskiPropulsion Default inputs: {'y_23': array([12562.01206488]), 'x_shared': array([5.0e-02, 4.5e+04, 1.6e+00, 5.5e+00, 5.5e+01, 1.0e+03]), 'c_3': array([4360.]), 'x_3': array([0.5])} SobieskiAerodynamics Default inputs: {'x_2': array([1.]), 'c_4': array([0.01375]), 'y_32': array([0.50279625]), 'x_shared': array([5.0e-02, 4.5e+04, 1.6e+00, 5.5e+00, 5.5e+01, 1.0e+03]), 'y_12': array([5.06069742e+04, 9.50000000e-01])} SobieskiMission Default inputs: {'y_34': array([1.10754577]), 'x_shared': array([5.0e-02, 4.5e+04, 1.6e+00, 5.5e+00, 5.5e+01, 1.0e+03]), 'y_14': array([50606.9741711 , 7306.20262124]), 'y_24': array([4.15006276])} SobieskiStructure Default inputs: {'c_0': array([2000.]), 'c_1': array([25000.]), 'y_31': array([6354.32430691]), 'x_shared': array([5.0e-02, 4.5e+04, 1.6e+00, 5.5e+00, 5.5e+01, 1.0e+03]), 'c_2': array([6.]), 'y_21': array([50606.9741711]), 'x_1': array([0.25, 1. ])} .. GENERATED FROM PYTHON SOURCE LINES 62-66 You may also be interested in plotting the couplings of your disciplines. A quick way of getting this information is the high-level function :func:`.generate_n2_plot`. A much more detailed explanation of coupling visualization is available :ref:`here `. .. GENERATED FROM PYTHON SOURCE LINES 66-68 .. code-block:: default generate_n2_plot(disciplines, save=False, show=True) .. image-sg:: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_001.png :alt: plot doe sobieski mdf example :srcset: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 69-77 Build, execute and post-process the scenario -------------------------------------------- Then, we build the scenario which links the disciplines with the formulation and the optimization algorithm. Here, we use the :class:`.BiLevel` formulation. We tell the scenario to minimize -y_4 instead of minimizing y_4 (range), which is the default option. We need to define the design space. .. GENERATED FROM PYTHON SOURCE LINES 77-80 .. code-block:: default design_space = SobieskiProblem().design_space print(design_space) .. rst-class:: sphx-glr-script-out .. code-block:: none Design space: +-------------+-------------+--------------------+-------------+-------+ | name | lower_bound | value | upper_bound | type | +-------------+-------------+--------------------+-------------+-------+ | x_shared[0] | 0.01 | 0.05 | 0.09 | float | | x_shared[1] | 30000 | 45000 | 60000 | float | | x_shared[2] | 1.4 | 1.6 | 1.8 | float | | x_shared[3] | 2.5 | 5.5 | 8.5 | float | | x_shared[4] | 40 | 55 | 70 | float | | x_shared[5] | 500 | 1000 | 1500 | float | | x_1[0] | 0.1 | 0.25 | 0.4 | float | | x_1[1] | 0.75 | 1 | 1.25 | float | | x_2 | 0.75 | 1 | 1.25 | float | | x_3 | 0.1 | 0.5 | 1 | float | | y_14[0] | 24850 | 50606.9741711 | 77100 | float | | y_14[1] | -7700 | 7306.20262124 | 45000 | float | | y_32 | 0.235 | 0.5027962499999999 | 0.795 | float | | y_31 | 2960 | 6354.32430691 | 10185 | float | | y_24 | 0.44 | 4.15006276 | 11.13 | float | | y_34 | 0.44 | 1.10754577 | 1.98 | float | | y_23 | 3365 | 12194.2671934 | 26400 | float | | y_21 | 24850 | 50606.9741711 | 77250 | float | | y_12[0] | 24850 | 50606.9742 | 77250 | float | | y_12[1] | 0.45 | 0.95 | 1.5 | float | +-------------+-------------+--------------------+-------------+-------+ .. GENERATED FROM PYTHON SOURCE LINES 81-83 Instantiate the scenario ^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 83-92 .. code-block:: default scenario = create_scenario( disciplines, formulation="MDF", objective_name="y_4", design_space=design_space, maximize_objective=True, scenario_type="DOE", ) .. GENERATED FROM PYTHON SOURCE LINES 93-95 Set the design constraints ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 95-98 .. code-block:: default for constraint in ["g_1", "g_2", "g_3"]: scenario.add_constraint(constraint, "ineq") .. GENERATED FROM PYTHON SOURCE LINES 99-106 Visualize the XDSM ^^^^^^^^^^^^^^^^^^ Generate the XDSM on the fly: - ``log_workflow_status=True`` will log the status of the workflow in the console, - ``save_html`` (default ``True``) will generate a self-contained HTML file, that can be automatically opened using ``show_html=True``. .. GENERATED FROM PYTHON SOURCE LINES 106-108 .. code-block:: default scenario.xdsmize(save_html=False) .. raw:: html


.. GENERATED FROM PYTHON SOURCE LINES 109-112 Execute the scenario ^^^^^^^^^^^^^^^^^^^^ Use provided analytic derivatives .. GENERATED FROM PYTHON SOURCE LINES 112-114 .. code-block:: default scenario.set_differentiation_method() .. GENERATED FROM PYTHON SOURCE LINES 115-120 Multiprocessing ^^^^^^^^^^^^^^^ It is possible to run a DOE in parallel using multiprocessing, in order to do this, we specify the number of processes to be used for the computation of the samples. .. GENERATED FROM PYTHON SOURCE LINES 122-129 .. warning:: The multiprocessing option has some limitations on Windows. Due to problems with sphinx, we disable it in this example. The features :class:`.MemoryFullCache` and :class:`.HDF5Cache` are not available for multiprocessing on Windows. As an alternative, we recommend the method :meth:`.DOEScenario.set_optimization_history_backup`. .. GENERATED FROM PYTHON SOURCE LINES 131-133 We define the algorithm options. Here the criterion = center option of pyDOE centers the points within the sampling intervals. .. GENERATED FROM PYTHON SOURCE LINES 133-144 .. code-block:: default algo_options = { "criterion": "center", # Evaluate gradient of the MDA # with coupled adjoint "eval_jac": True, # Run in parallel on 1 or 4 processors "n_processes": 1 if os_name == "nt" else 4, } scenario.execute({"n_samples": 30, "algo": "lhs", "algo_options": algo_options}) .. rst-class:: sphx-glr-script-out .. code-block:: none INFO - 16:26:32: INFO - 16:26:32: *** Start DOEScenario execution *** INFO - 16:26:32: DOEScenario INFO - 16:26:32: Disciplines: SobieskiAerodynamics SobieskiMission SobieskiPropulsion SobieskiStructure INFO - 16:26:32: MDO formulation: MDF INFO - 16:26:32: Optimization problem: INFO - 16:26:32: minimize -y_4(x_shared, x_1, x_2, x_3) INFO - 16:26:32: with respect to x_1, x_2, x_3, x_shared INFO - 16:26:32: subject to constraints: INFO - 16:26:32: g_1(x_shared, x_1, x_2, x_3) <= 0.0 INFO - 16:26:32: g_2(x_shared, x_1, x_2, x_3) <= 0.0 INFO - 16:26:32: g_3(x_shared, x_1, x_2, x_3) <= 0.0 INFO - 16:26:32: over the design space: INFO - 16:26:32: +-------------+-------------+-------+-------------+-------+ INFO - 16:26:32: | name | lower_bound | value | upper_bound | type | INFO - 16:26:32: +-------------+-------------+-------+-------------+-------+ INFO - 16:26:32: | x_shared[0] | 0.01 | 0.05 | 0.09 | float | INFO - 16:26:32: | x_shared[1] | 30000 | 45000 | 60000 | float | INFO - 16:26:32: | x_shared[2] | 1.4 | 1.6 | 1.8 | float | INFO - 16:26:32: | x_shared[3] | 2.5 | 5.5 | 8.5 | float | INFO - 16:26:32: | x_shared[4] | 40 | 55 | 70 | float | INFO - 16:26:32: | x_shared[5] | 500 | 1000 | 1500 | float | INFO - 16:26:32: | x_1[0] | 0.1 | 0.25 | 0.4 | float | INFO - 16:26:32: | x_1[1] | 0.75 | 1 | 1.25 | float | INFO - 16:26:32: | x_2 | 0.75 | 1 | 1.25 | float | INFO - 16:26:32: | x_3 | 0.1 | 0.5 | 1 | float | INFO - 16:26:32: +-------------+-------------+-------+-------------+-------+ INFO - 16:26:32: Solving optimization problem with algorithm lhs: INFO - 16:26:32: ... 0%| | 0/30 [00:00 .. GENERATED FROM PYTHON SOURCE LINES 166-173 .. tip:: Each post-processing method requires different inputs and offers a variety of customization options. Use the high-level function :func:`.get_post_processing_options_schema` to print a table with the attributes for any post-processing algo. Or refer to our dedicated page: :ref:`gen_post_algos`. .. GENERATED FROM PYTHON SOURCE LINES 175-177 Plot the scatter matrix ^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 177-184 .. code-block:: default scenario.post_process( "ScatterPlotMatrix", save=False, show=True, variable_names=["y_4", "x_shared"], ) .. image-sg:: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_007.png :alt: plot doe sobieski mdf example :srcset: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_007.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 185-187 Plot correlations ^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 187-188 .. code-block:: default scenario.post_process("Correlations", save=False, show=True) .. image-sg:: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_008.png :alt: R=0.98987, R=0.97511, R=0.99671, R=0.96235, R=0.99119, R=0.99866, R=0.95205, R=0.98584, R=0.99618, R=0.99936 :srcset: /examples/formulations/images/sphx_glr_plot_doe_sobieski_mdf_example_008.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/envs/5.0.0/lib/python3.9/site-packages/genson/schema/strategies/base.py:42: UserWarning: Schema incompatible. Keyword 'description' has conflicting values ('The width and height of the figure in inches, e.g. ``(w, h)``.\nIf ``None``, use the :attr:`.OptPostProcessor.DEFAULT_FIG_SIZE`\nof the post-processor.' vs. 'The width and height of the figure in inches, e.g. `(w, h)`.\nIf ``None``, use the :attr:`.OptPostProcessor.DEFAULT_FIG_SIZE`\nof the post-processor.'). Using 'The width and height of the figure in inches, e.g. ``(w, h)``.\nIf ``None``, use the :attr:`.OptPostProcessor.DEFAULT_FIG_SIZE`\nof the post-processor.' warn(('Schema incompatible. Keyword {0!r} has conflicting ' INFO - 16:26:40: Detected 10 correlations > 0.95 .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 9.339 seconds) .. _sphx_glr_download_examples_formulations_plot_doe_sobieski_mdf_example.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_doe_sobieski_mdf_example.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_doe_sobieski_mdf_example.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_