.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/optimization/direct_search/plot_01_nelder_mead.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_api_gallery_optimization_direct_search_plot_01_nelder_mead.py: Nelder-Mead: minimizing without derivatives ================================================= The Nelder-Mead simplex method uses function values only. On the Rosenbrock function it needs more function evaluations than BFGS, which uses gradients, but it also works on objectives that have no gradient at all. .. GENERATED FROM PYTHON SOURCE LINES 12-15 .. code-block:: Python from mathematicskit.optimization import BFGS, NelderMead, rosenbrock, rosenbrock_grad from mathematicskit.optimization.visualizers.plots import plot_contour_path .. GENERATED FROM PYTHON SOURCE LINES 16-18 Nelder-Mead vs. BFGS on the Rosenbrock function ----------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 18-28 .. code-block:: Python x0 = [-1.2, 1.0] nm = NelderMead(tol=1e-8, max_iter=5000).minimize(rosenbrock, None, x0) bfgs = BFGS(tol=1e-8).minimize(rosenbrock, rosenbrock_grad, x0) print(f"Nelder-Mead: x = {nm.x.round(6)}, {nm.iterations} iterations, {nm.extra['nfev']} function evaluations") print(f"BFGS: x = {bfgs.x.round(6)}, {bfgs.iterations} iterations") ax = plot_contour_path(rosenbrock, nm, x_range=(-2.0, 2.0), y_range=(-1.0, 3.0), label="Nelder-Mead (1965)") plot_contour_path(rosenbrock, bfgs, ax=ax, x_range=(-2.0, 2.0), y_range=(-1.0, 3.0), label="BFGS") .. image-sg:: /api/gallery/optimization/direct_search/images/sphx_glr_plot_01_nelder_mead_001.png :alt: Optimizer iterate path :srcset: /api/gallery/optimization/direct_search/images/sphx_glr_plot_01_nelder_mead_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none Nelder-Mead: x = [1. 1.], 117 iterations, 219 function evaluations BFGS: x = [1. 1.], 34 iterations .. GENERATED FROM PYTHON SOURCE LINES 29-31 A non-smooth objective ----------------------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 31-34 .. code-block:: Python result = NelderMead(tol=1e-10).minimize(lambda x: abs(x[0] - 1.0) + 2.0 * abs(x[1] + 0.5), None, [0.0, 0.0]) print(f"minimizer of |x - 1| + 2|y + 0.5|: {result.x.round(6)}") .. rst-class:: sphx-glr-script-out .. code-block:: none minimizer of |x - 1| + 2|y + 0.5|: [ 1. -0.5] .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.259 seconds) .. _sphx_glr_download_api_gallery_optimization_direct_search_plot_01_nelder_mead.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_01_nelder_mead.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_01_nelder_mead.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_01_nelder_mead.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_