.. 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_auto_numerical_methods_optimization_plot_optimization_bonmin.py:
Optimization using bonmin
=========================
In this example we are going to explore mixed-integer non linear problems optimization using OpenTURNS' `bonmin `_ interface.
%%
.. code-block:: default
from __future__ import print_function
import openturns as ot
ot.Log.Show(ot.Log.NONE)
List available algorithms
.. code-block:: default
for algo in ot.Bonmin.GetAlgorithmNames():
print(algo)
.. rst-class:: sphx-glr-script-out
Out:
.. code-block:: none
B-BB
B-OA
B-QG
B-Hyb
B-iFP
Details and references on bonmin algorithms are available `here `_ .
Setting up and solving a simple problem
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The following example will demonstrate the use of bonmin "BB" algorithm to solve the following problem:
.. math::
\min - x_0 - x_1 - x_2
such that:
.. math::
\begin{array}{l}
(x_1 - \frac{1}{2})^2 + (x_2 - \frac{1}{2})^2 \leq \frac{1}{4} \\
x_0 - x_1 \leq 0 \\
x_0 + x_2 + x_3 \leq 2\\
x_0 \in \{0,1\}^n\\
(x_1, x_2) \in \mathbb{R}^2\\
x_3 \in \mathbb{N}
\end{array}
The theoretical minimum is reached for :math:`x = [1,1,0.5,0]`. At this point, the objective function value is :math:`-2.5`
N.B.: OpenTURNS requires equality and inequality constraints to be stated as :math:`g(x) = 0` and :math:`h(x) \geq 0`, respectively. Thus the inequalities above will have to be restated to match this requirement:
.. math::
\begin{array}{l}
-(x_1 - \frac{1}{2})^2 - (x_2 - \frac{1}{2})^2 + \frac{1}{4} \geq 0\\
-x_0 + x_1 \geq 0 \\
-x_0 - x_2 - x_3 + 2 \geq 0\\
\end{array}
Definition of objective function
.. code-block:: default
objectiveFunction = ot.SymbolicFunction(['x0','x1','x2','x3'], ['-x0 -x1 -x2'])
# Definition of variables bounds
bounds = ot.Interval([0,0,0,0],[1,1e99,1e99,5],[True,True,True,True],[True,False,False,True])
# Definition of constraints
# Constraints in OpenTURNS are defined as g(x) = 0 and h(x) >= 0
# No equality constraint -> nothing to do
# Inequality constraints:
h = ot.SymbolicFunction(['x0','x1','x2','x3'], ['-(x1-0.5)^2 - (x2-0.5)^2 + 0.25', 'x1 - x0', '-x0 - x2 - x3 + 2'])
# Definition of variables types
variablesType = [ot.OptimizationProblemImplementation.BINARY,ot.OptimizationProblemImplementation.CONTINUOUS,ot.OptimizationProblemImplementation.CONTINUOUS,ot.OptimizationProblemImplementation.INTEGER]
# Setting up Bonmin problem
problem = ot.OptimizationProblem(objectiveFunction)
problem.setBounds(bounds)
problem.setVariablesType(variablesType)
problem.setInequalityConstraint(h)
bonminAlgorithm = ot.Bonmin(problem,'B-BB')
bonminAlgorithm.setMaximumEvaluationNumber(10000)
bonminAlgorithm.setMaximumIterationNumber(1000)
bonminAlgorithm.setStartingPoint([0,0,0,0])
ot.ResourceMap.AddAsString('Bonmin-mu_oracle','loqo')
ot.ResourceMap.AddAsScalar('Bonmin-bonmin.time_limit',5)
Running the solver
.. code-block:: default
bonminAlgorithm.run()
# Retrieving the results
result = bonminAlgorithm.getResult()
print(" -- Optimal point = " + result.getOptimalPoint().__str__())
print(" -- Optimal value = " + result.getOptimalValue().__str__())
print(" -- Evaluation number = " + result.getInputSample().getSize().__str__())
.. rst-class:: sphx-glr-script-out
Out:
.. code-block:: none
-- Optimal point = [1,1,0.500141,0]
-- Optimal value = [-2.50014]
-- Evaluation number = 147
.. rst-class:: sphx-glr-timing
**Total running time of the script:** ( 0 minutes 0.052 seconds)
.. _sphx_glr_download_auto_numerical_methods_optimization_plot_optimization_bonmin.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_optimization_bonmin.py `
.. container:: sphx-glr-download sphx-glr-download-jupyter
:download:`Download Jupyter notebook: plot_optimization_bonmin.ipynb `
.. only:: html
.. rst-class:: sphx-glr-signature
`Gallery generated by Sphinx-Gallery `_