.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/optimization_problem/plot_simple_opt_2.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_optimization_problem_plot_simple_opt_2.py: Analytical test case # 2 ======================== .. GENERATED FROM PYTHON SOURCE LINES 26-31 In this example, we consider a simple optimization problem to illustrate algorithms interfaces and optimization libraries integration. Imports ------- .. GENERATED FROM PYTHON SOURCE LINES 31-48 .. code-block:: default from __future__ import absolute_import, division, print_function, unicode_literals from future import standard_library from numpy import cos, exp, ones, sin from gemseo.algos.design_space import DesignSpace from gemseo.algos.doe.doe_factory import DOEFactory from gemseo.algos.opt.opt_factory import OptimizersFactory from gemseo.algos.opt_problem import OptimizationProblem from gemseo.api import configure_logger, execute_post from gemseo.core.function import MDOFunction configure_logger() standard_library.install_aliases() .. GENERATED FROM PYTHON SOURCE LINES 49-53 Define the objective function ----------------------------- We define the objective function :math:`f(x)=sin(x)-exp(x)` using a :class:`.MDOFunction` defined by the sum of :class:`.MDOFunction` objects. .. GENERATED FROM PYTHON SOURCE LINES 53-57 .. code-block:: default f_1 = MDOFunction(sin, name="f_1", jac=cos, expr="sin(x)") f_2 = MDOFunction(exp, name="f_2", jac=exp, expr="exp(x)") objective = f_1 - f_2 .. GENERATED FROM PYTHON SOURCE LINES 58-66 .. seealso:: The following operators are implemented: addition, subtraction and multiplication. The minus operator is also defined. Define the design space ----------------------- Then, we define the :class:`.DesignSpace` with |g|. .. GENERATED FROM PYTHON SOURCE LINES 66-69 .. code-block:: default design_space = DesignSpace() design_space.add_variable("x", 1, l_b=-2.0, u_b=2.0, value=-0.5 * ones(1)) .. GENERATED FROM PYTHON SOURCE LINES 70-73 Define the optimization problem ------------------------------- Then, we define the :class:`.OptimizationProblem` with |g|. .. GENERATED FROM PYTHON SOURCE LINES 73-76 .. code-block:: default problem = OptimizationProblem(design_space) problem.objective = objective .. GENERATED FROM PYTHON SOURCE LINES 77-83 Solve the optimization problem using an optimization algorithm -------------------------------------------------------------- Finally, we solve the optimization problems with |g| interface. Solve the problem ^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 83-87 .. code-block:: default opt = OptimizersFactory().execute(problem, "L-BFGS-B", normalize_design_space=True) print("Optimum = ", opt) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Optimum = Optimization result: Objective value = [-1.23610834] The result is feasible. Status: 0 Optimizer message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL' Number of calls to the objective function by the optimizer: 8 Constraints values: .. GENERATED FROM PYTHON SOURCE LINES 88-89 Note that you can get all the optimization algorithms names: .. GENERATED FROM PYTHON SOURCE LINES 89-92 .. code-block:: default algo_list = OptimizersFactory().algorithms print("Available algorithms ", algo_list) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Available algorithms ['NLOPT_MMA', 'NLOPT_COBYLA', 'NLOPT_SLSQP', 'NLOPT_BOBYQA', 'NLOPT_BFGS', 'NLOPT_NEWUOA', 'SLSQP', 'L-BFGS-B', 'TNC'] .. GENERATED FROM PYTHON SOURCE LINES 93-96 Save the optimization results ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We can serialize the results for further exploitation. .. GENERATED FROM PYTHON SOURCE LINES 96-98 .. code-block:: default problem.export_hdf("my_optim.hdf5") .. GENERATED FROM PYTHON SOURCE LINES 99-101 Post-process the results ^^^^^^^^^^^^^^^^^^^^^^^^ .. GENERATED FROM PYTHON SOURCE LINES 101-103 .. code-block:: default execute_post(problem, "OptHistoryView", show=True, save=False) .. rst-class:: sphx-glr-horizontal * .. image:: /examples/optimization_problem/images/sphx_glr_plot_simple_opt_2_001.png :alt: Evolution of the optimization variables :class: sphx-glr-multi-img * .. image:: /examples/optimization_problem/images/sphx_glr_plot_simple_opt_2_002.png :alt: Evolution of the objective value :class: sphx-glr-multi-img * .. image:: /examples/optimization_problem/images/sphx_glr_plot_simple_opt_2_003.png :alt: Distance to the optimum :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) .. GENERATED FROM PYTHON SOURCE LINES 104-108 .. note:: We can also save this plot using the arguments :code:`save=False` and :code:`file_path='file_path'`. .. GENERATED FROM PYTHON SOURCE LINES 110-114 Solve the optimization problem using a DOE algorithm ---------------------------------------------------- We can also see this optimization problem as a trade-off and solve it by means of a design of experiments (DOE). .. GENERATED FROM PYTHON SOURCE LINES 114-116 .. code-block:: default opt = DOEFactory().execute(problem, "lhs", n_samples=10, normalize_design_space=True) print("Optimum = ", opt) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Optimum = Optimization result: Objective value = [-5.34787154] The result is feasible. Status: None Optimizer message: None Number of calls to the objective function by the optimizer: 18 Constraints values: .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.607 seconds) .. _sphx_glr_download_examples_optimization_problem_plot_simple_opt_2.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_simple_opt_2.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_simple_opt_2.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_