.. 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 `_