.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/formulations/plot_sobieski_mdf_example.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_formulations_plot_sobieski_mdf_example.py: MDF-based MDO on the Sobieski SSBJ test case ============================================ .. GENERATED FROM PYTHON SOURCE LINES 26-36 .. code-block:: default from __future__ import absolute_import, division, print_function, unicode_literals from future import standard_library from gemseo.api import configure_logger, create_discipline, create_scenario from gemseo.problems.sobieski.core import SobieskiProblem standard_library.install_aliases() configure_logger() .. rst-class:: sphx-glr-script-out 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:`~gemseo.problems.sobieski.wrappers.SobieskiPropulsion`, :class:`~gemseo.problems.sobieski.wrappers.SobieskiAerodynamics`, :class:`~gemseo.problems.sobieski.wrappers.SobieskiMission` and :class:`~gemseo.problems.sobieski.wrappers.SobieskiStructure`. .. GENERATED FROM PYTHON SOURCE LINES 44-53 .. code-block:: default disciplines = create_discipline( [ "SobieskiPropulsion", "SobieskiAerodynamics", "SobieskiMission", "SobieskiStructure", ] ) .. GENERATED FROM PYTHON SOURCE LINES 54-65 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:`.MDF` formulation. We tell the scenario to minimize -y_4 instead of minimizing y_4 (range), which is the default option. Instantiate the scenario ^^^^^^^^^^^^^^^^^^^^^^^^ During the instantiation of the scenario, we provide some options for the MDF formulations: .. GENERATED FROM PYTHON SOURCE LINES 65-72 .. code-block:: default formulation_options = { "tolerance": 1e-10, "max_mda_iter": 50, "warm_start": True, "use_lu_fact": True, "linear_solver_tolerance": 1e-15, } .. GENERATED FROM PYTHON SOURCE LINES 73-82 - :code:`'warm_start`: warm starts MDA, - :code:`'warm_start`: optimize the adjoints resolution by storing the Jacobian matrix LU factorization for the multiple RHS (objective + constraints). This saves CPU time if you can pay for the memory and have the full Jacobians available, not just matrix vector products. - :code:`'linear_solver_tolerance'`: set the linear solver tolerance, idem we need full convergence .. GENERATED FROM PYTHON SOURCE LINES 83-93 .. code-block:: default design_space = SobieskiProblem().read_design_space() scenario = create_scenario( disciplines, "MDF", objective_name="y_4", design_space=design_space, maximize_objective=True, **formulation_options ) .. GENERATED FROM PYTHON SOURCE LINES 94-96 Set the design constraints ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 96-99 .. code-block:: default for c_name in ["g_1", "g_2", "g_3"]: scenario.add_constraint(c_name, "ineq") .. GENERATED FROM PYTHON SOURCE LINES 100-106 XDSMIZE the scenario ^^^^^^^^^^^^^^^^^^^^ Generate the XDSM file on the fly, setting print_statuses=true will print the status in the console html_output (default True), will generate a self contained html file, that can be automatically open using open_browser=True .. GENERATED FROM PYTHON SOURCE LINES 106-108 .. code-block:: default scenario.xdsmize(html_output=True, print_statuses=False, open_browser=False) .. GENERATED FROM PYTHON SOURCE LINES 109-120 Define the algorithm inputs ^^^^^^^^^^^^^^^^^^^^^^^^^^^ We set the maximum number of iterations, the optimizer and the optimizer options. Algorithm specific options are passed there. Use :meth:`~gemseo.api.get_algorithm_options_schema` API function for more information or read the documentation. Here ftol_rel option is a stop criteria based on the relative difference in the objective between two iterates ineq_tolerance the tolerance determination of the optimum; this is specific to the |g| wrapping and not in the solver. .. GENERATED FROM PYTHON SOURCE LINES 120-127 .. code-block:: default algo_options = { "ftol_rel": 1e-10, "ineq_tolerance": 2e-3, "normalize_design_space": True, } scn_inputs = {"max_iter": 10, "algo": "SLSQP", "algo_options": algo_options} .. GENERATED FROM PYTHON SOURCE LINES 128-142 .. seealso:: We can also generates a backup file for the optimization, as well as plots on the fly of the optimization history if option :code:`generate_opt_plot` is :code:`True`. This slows down a lot the process, here since SSBJ is very light .. code:: scenario.set_optimization_history_backup(file_path="mdf_backup.h5", each_new_iter=True, each_store=False, erase=True, pre_load=False, generate_opt_plot=True) .. GENERATED FROM PYTHON SOURCE LINES 144-146 Execute the scenario ^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 146-148 .. code-block:: default scenario.execute(scn_inputs) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none {'max_iter': 10, 'algo': 'SLSQP', 'algo_options': {'ftol_rel': 1e-10, 'ineq_tolerance': 0.002, 'normalize_design_space': True}} .. GENERATED FROM PYTHON SOURCE LINES 149-153 Save the optimization history ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We can save the whole optimization problem and its history for further post processing: .. GENERATED FROM PYTHON SOURCE LINES 153-154 .. code-block:: default scenario.save_optimization_history("mdf_history.h5", file_format="hdf5") .. GENERATED FROM PYTHON SOURCE LINES 155-156 We can also save only calls to functions and design variables history: .. GENERATED FROM PYTHON SOURCE LINES 156-158 .. code-block:: default scenario.save_optimization_history("mdf_history.xml", file_format="ggobi") .. GENERATED FROM PYTHON SOURCE LINES 159-161 Print optimization metrics ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 161-163 .. code-block:: default scenario.print_execution_metrics() .. GENERATED FROM PYTHON SOURCE LINES 164-169 Post-process the results ------------------------ Plot the optimization history view ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 169-171 .. code-block:: default scenario.post_process("OptHistoryView", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_001.png :alt: Evolution of the optimization variables :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_002.png :alt: Evolution of the objective value :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_003.png :alt: Distance to the optimum :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_004.png :alt: Hessian diagonal approximation :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_005.png :alt: Evolution of the inequality constraints :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/opt_history_view.py:312: UserWarning: FixedFormatter should only be used together with FixedLocator ax1.set_yticklabels(y_labels) /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/opt_history_view.py:716: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=linthresh, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/opt_history_view.py:626: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/opt_history_view.py:619: MatplotlibDeprecationWarning: Passing parameters norm and vmin/vmax simultaneously is deprecated since 3.3 and will become an error two minor releases later. Please pass vmin/vmax directly to the norm when creating it. im1 = ax1.imshow( .. GENERATED FROM PYTHON SOURCE LINES 172-174 Plot the basic history view ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 174-176 .. code-block:: default scenario.post_process("BasicHistory", data_list=["x_shared"], save=False, show=True) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_006.png :alt: History plot :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 177-179 Plot the constraints and objective history ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 179-181 .. code-block:: default scenario.post_process("ObjConstrHist", save=False, show=True) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_007.png :alt: Evolution of the objective value and maximal constraint :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/obj_constr_hist.py:139: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=vmin * 0.75, vmax=vmax * 0.75), .. GENERATED FROM PYTHON SOURCE LINES 182-184 Plot the constraints history ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 184-188 .. code-block:: default scenario.post_process( "ConstraintsHistory", save=False, show=True, constraints_list=["g_1", "g_2", "g_3"] ) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_008.png :alt: Evolution of the constraints w.r.t. iterations, g_1_1, g_1_2, g_1_3, g_1_4, g_1_5, g_1_6, g_1_7, g_2, g_3_1, g_3_2, g_3_3, g_3_4 :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/constraints_history.py:152: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=1.0, vmin=-vmax, vmax=vmax), .. GENERATED FROM PYTHON SOURCE LINES 189-191 Plot the constraints history using a radar chart ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 191-195 .. code-block:: default scenario.post_process( "RadarChart", save=False, show=True, constraints_list=["g_1", "g_2", "g_3"] ) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_009.png :alt: Constraints at last iteration :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 196-198 Plot the quadratic approximation of the objective ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 198-200 .. code-block:: default scenario.post_process("QuadApprox", function="-y_4", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_010.png :alt: Hessian matrix SR1 approximation of -y_4 :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_011.png :alt: plot sobieski mdf example :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/quad_approx.py:151: MatplotlibDeprecationWarning: default base will change from np.e to 10 in 3.4. To suppress this warning specify the base keyword argument. norm=SymLogNorm(linthresh=linthresh, vmin=-vmax, vmax=vmax), .. GENERATED FROM PYTHON SOURCE LINES 201-203 Plot the functions using a SOM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 203-205 .. code-block:: default scenario.post_process("SOM", save=False, show=True) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_012.png :alt: Self Organizing Maps of the design space, -y_4, g_1_0, g_1_1, g_1_2, g_1_3, g_1_4, g_1_5, g_1_6, g_2, g_3_0, g_3_1, g_3_2, g_3_3 :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 206-208 Plot the scatter matrix of variables of interest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 208-217 .. code-block:: default scenario.post_process( "ScatterPlotMatrix", save=False, show=True, variables_list=["-y_4", "g_1"], figsize_x=14, figsize_y=14, ) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_013.png :alt: plot sobieski mdf example :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 218-220 Plot the variables using the parallel coordinates ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 220-222 .. code-block:: default scenario.post_process("ParallelCoordinates", save=False, show=True) .. rst-class:: sphx-glr-horizontal * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_014.png :alt: Design variables history colored by '-y_4' value :class: sphx-glr-multi-img * .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_015.png :alt: Objective function and constraints history colored by '-y_4' value :class: sphx-glr-multi-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 223-225 Plot the robustness of the solution ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 225-227 .. code-block:: default scenario.post_process("Robustness", save=False, show=True) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_016.png :alt: Box plot of the optimization functions with normalized stddev 0.01 :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 228-230 Plot the influence of the design variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 230-233 .. code-block:: default scenario.post_process( "VariableInfluence", save=False, show=True, figsize_x=14, figsize_y=14 ) .. image:: /examples/formulations/images/sphx_glr_plot_sobieski_mdf_example_017.png :alt: Partial variation of the functions wrt design variables, 9 variables required to explain 99% of -y_4 variations, 5 variables required to explain 99% of g_1_0 variations, 5 variables required to explain 99% of g_1_1 variations, 5 variables required to explain 99% of g_1_2 variations, 5 variables required to explain 99% of g_1_3 variations, 5 variables required to explain 99% of g_1_4 variations, 4 variables required to explain 99% of g_1_5 variations, 4 variables required to explain 99% of g_1_6 variations, 1 variables required to explain 99% of g_2 variations, 7 variables required to explain 99% of g_3_0 variations, 7 variables required to explain 99% of g_3_1 variations, 3 variables required to explain 99% of g_3_2 variations, 3 variables required to explain 99% of g_3_3 variations :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/gemseo/conda/3.0.3/lib/python3.8/site-packages/gemseo/post/variable_influence.py:242: UserWarning: FixedFormatter should only be used together with FixedLocator axe.set_xticklabels(x_labels, fontsize=14) .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 9.097 seconds) .. _sphx_glr_download_examples_formulations_plot_sobieski_mdf_example.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_sobieski_mdf_example.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_sobieski_mdf_example.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_