.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "advanced/mathematical_optimization/auto_examples/plot_non_bounds_constraints.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_advanced_mathematical_optimization_auto_examples_plot_non_bounds_constraints.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_advanced_mathematical_optimization_auto_examples_plot_non_bounds_constraints.py:


Optimization with constraints
================================

An example showing how to do optimization with general constraints using
SLSQP and cobyla.

.. GENERATED FROM PYTHON SOURCE LINES 8-59



.. image-sg:: /advanced/mathematical_optimization/auto_examples/images/sphx_glr_plot_non_bounds_constraints_001.png
   :alt: plot non bounds constraints
   :srcset: /advanced/mathematical_optimization/auto_examples/images/sphx_glr_plot_non_bounds_constraints_001.png
   :class: sphx-glr-single-img





.. code-block:: Python


    import numpy as np
    import matplotlib.pyplot as plt
    import scipy as sp

    x, y = np.mgrid[-2.03:4.2:0.04, -1.6:3.2:0.04]  # type: ignore[misc]
    x = x.T
    y = y.T

    plt.figure(1, figsize=(3, 2.5))
    plt.clf()
    plt.axes((0, 0, 1, 1))

    contours = plt.contour(
        np.sqrt((x - 3) ** 2 + (y - 2) ** 2),
        extent=[-2.03, 4.2, -1.6, 3.2],
        cmap="gnuplot",
    )
    plt.clabel(contours, inline=1, fmt="%1.1f", fontsize=14)
    plt.plot([-1.5, 0, 1.5, 0, -1.5], [0, 1.5, 0, -1.5, 0], "k", linewidth=2)
    plt.fill_between([-1.5, 0, 1.5], [0, -1.5, 0], [0, 1.5, 0], color=".8")
    plt.axvline(0, color="k")
    plt.axhline(0, color="k")

    plt.text(-0.9, 2.8, "$x_2$", size=20)
    plt.text(3.6, -0.6, "$x_1$", size=20)
    plt.axis("tight")
    plt.axis("off")

    # And now plot the optimization path
    accumulator = []


    def f(x):
        # Store the list of function calls
        accumulator.append(x)
        return np.sqrt((x[0] - 3) ** 2 + (x[1] - 2) ** 2)


    def constraint(x):
        return np.atleast_1d(1.5 - np.sum(np.abs(x)))


    sp.optimize.minimize(
        f, np.array([0, 0]), method="SLSQP", constraints={"fun": constraint, "type": "ineq"}
    )

    accumulated = np.array(accumulator)
    plt.plot(accumulated[:, 0], accumulated[:, 1])

    plt.show()


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 0.049 seconds)


.. _sphx_glr_download_advanced_mathematical_optimization_auto_examples_plot_non_bounds_constraints.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_non_bounds_constraints.ipynb <plot_non_bounds_constraints.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_non_bounds_constraints.py <plot_non_bounds_constraints.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_non_bounds_constraints.zip <plot_non_bounds_constraints.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_