intfminunc
Solves an unconstrainted multi-variable mixed integer non linear programming optimization problem
Calling Sequence
xopt = intfminunc(f,x0)
xopt = intfminunc(f,x0,intcon)
xopt = intfminunc(f,x0,intcon,options)
[xopt,fopt] = intfminunc(.....)
[xopt,fopt,exitflag]= intfminunc(.....)
[xopt,fopt,exitflag,gradient,hessian]= intfminunc(.....)
Input Parameters
f :
A function, representing the objective function of the problem.
x0 :
A vector of doubles, containing the starting values of variables of size (1 X n) or (n X 1) where 'n' is the number of Variables.
intcon :
A vector of integers, representing the variables that are constrained to be integers.
options :
A list, containing the option for user to specify. See below for details.
Outputs
xopt :
A vector of doubles, containing the computed solution of the optimization problem.
fopt :
A double, containing the the function value at x.
exitflag :
An integer, containing the flag which denotes the reason for termination of algorithm. See below for details.
gradient :
A vector of doubles, containing the objective's gradient of the solution.
hessian :
A matrix of doubles, containing the Lagrangian's hessian of the solution.
Description
Search the minimum of a multi-variable mixed integer non linear programming unconstrained optimization problem specified by :
Find the minimum of f(x) such that
\begin{eqnarray}
&\mbox{min}_{x}
& f(x)
& x_{i} \in \!\, \mathbb{Z}, i \in \!\, I
\end{eqnarray}
intfminunc calls Bonmin, which is an optimization library written in C++, to solve the bound optimization problem.
Options
The options allow the user to set various parameters of the Optimization problem. The syntax for the options is given by:
options= list("IntegerTolerance", [---], "MaxNodes",[---], "MaxIter", [---], "AllowableGap",[---] "CpuTime", [---],"gradobj", "off", "hessian", "off" );
IntegerTolerance : A Scalar, a number with that value of an integer is considered integer.
MaxNodes : A Scalar, containing the maximum number of nodes that the solver should search.
CpuTime : A scalar, specifying the maximum amount of CPU Time in seconds that the solver should take.
AllowableGap : A scalar, that specifies the gap between the computed solution and the the objective value of the best known solution stop, at which the tree search can be stopped.
MaxIter : A scalar, specifying the maximum number of iterations that the solver should take.
gradobj : A string, to turn on or off the user supplied objective gradient.
hessian : A scalar, to turn on or off the user supplied objective hessian.
The default values for the various items are given as:
options = list('integertolerance',1d-06,'maxnodes',2147483647,'cputime',1d10,'allowablegap',0,'maxiter',2147483647,'gradobj',"off",'hessian',"off")
The exitflag allows to know the status of the optimization which is given back by Ipopt.
0 : Optimal Solution Found
1 : InFeasible Solution.
2 : Objective Function is Continuous Unbounded.
3 : Limit Exceeded.
4 : User Interrupt.
5 : MINLP Error.
For more details on exitflag, see the Bonmin documentation which can be found on http://www.coin-or.org/Bonmin
A few examples displaying the various functionalities of intfminunc have been provided below. You will find a series of problems and the appropriate code snippets to solve them.
Example
We begin with the minimization of a simple non-linear function.
Find x in R^2 such that it minimizes:
\begin{eqnarray}
\mbox{min}_{x}\ f(x) = x_{1}^{2} + x_{2}^{2}
\end{eqnarray}\\
\text{With integer constraints as: } \\
\begin{eqnarray}
\begin{array}{c}
[1] \\
\end{array}
\end{eqnarray}
Example
We now look at the Rosenbrock function, a non-convex performance test problem for optimization routines. We use this example to illustrate how we can enhance the functionality of intfminunc by setting input options. We can pre-define the gradient of the objective function and/or the hessian of the lagrange function and thereby improve the speed of computation. This is elaborated on in example 2. We also set solver parameters using the options.
\begin{eqnarray}
\mbox{min}_{x}\ f(x) = 100\boldsymbol{\cdot} (x_{2} - x_{1}^{2})^{2} + (1-x_{1})^{2}
\end{eqnarray}\\
\text{With integer constraints as: } \\
\begin{eqnarray}
\begin{array}{c}
[2] \\
\end{array}
\end{eqnarray}
Example
Unbounded Problems: Find x in R^2 such that it minimizes:
\begin{eqnarray}
f(x) = -x_{1}^{2} - x_{2}^{2}
\end{eqnarray}\\
\text{With integer constraints as: } \\
\begin{eqnarray}
\begin{array}{c}
[1] \\
\end{array}
\end{eqnarray}