intfminbnd
Solves a mixed-integer nonlinear optimization problem on bounded variables.
Calling Sequence
xopt = intfminbnd(f,intcon,x1,x2) xopt = intfminbnd(f,intcon,x1,x2,options) [xopt,fopt] = intfminbnd(.....) [xopt,fopt,exitflag]= intfminbnd(.....) [xopt,fopt,exitflag,output]=intfminbnd(.....) [xopt,fopt,exitflag,gradient,hessian]=intfminbnd(.....)
Input Parameters
- f :
A function, representing the objective function of the problem.
- :
A vector, containing the lower bound of the variables of size (1 X n) or (n X 1) where n is number of variables. If it is empty it means that the lower bound is .
- :
A vector, containing the upper bound of the variables of size (1 X n) or (n X 1) or (0 X 0) where n is the number of variables. If it is empty it means that the upper bound is .
- intcon :
A vector of integers, representing the variables that are constrained to be integers.
- options :
A list, containing the options 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 function on bounded interval specified by : Find the minimum of f(x) such that
intfminbnd 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.
options = list('integertolerance',1d-06,'maxnodes',2147483647,'cputime',1d10,'allowablegap',0,'maxiter',2147483647,'gradobj',"off",'hessian',"off")
The exitflag allows the user to know the status of the optimization which is returned by Bonmin. The values it can take and what they indicate is described below:
- 0 : Optimal Solution Found
- 1 : Maximum Number of Iterations Exceeded. Output may not be optimal.
- 2 : Maximum amount of CPU Time exceeded. Output may not be optimal.
- 3 : Stop at Tiny Step.
- 4 : Solved To Acceptable Level.
- 5 : Converged to a point of local infeasibility.
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 intfminbnd have been provided below. You will find a series of problems and the appropriate code snippets to solve them.
Example
We start with a simple objective function. Find x in R^6 such that it minimizes:
//Example 1: //Objective function to be minimised function y=f(x) y=0 for i =1:6 y=y+sin(x(i)); end endfunction //Variable bounds x1 = [-2, -2, -2, -2, -2, -2]; x2 = [2, 2, 2, 2, 2, 2]; intcon = [2 3 4] [x,fval] =intfminbnd(f ,intcon, x1, x2) // Press ENTER to continue |
Example
Here we solve a bounded objective function in R^6. We use this function to illustrate how we can further enhance the functionality of fminbnd 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.//Example 2: //Objective function to be minimised function y=f(x) y=0 for i =1:6 y=y+sin(x(i)); end endfunction //Variable bounds x1 = [-2, -2, -2, -2, -2, -2]; x2 = [2, 2, 2, 2, 2, 2]; intcon = [2 3 4] //Options options=list("MaxIter",[1500],"CpuTime", [100]) [x,fval] =intfminbnd(f ,intcon, x1, x2, options) // Press ENTER to continue |
Example
Unbounded Problems: Find x in R^2 such that it minimizes:
///Example 3: Unbounded problem: //Objective function to be minimised function y=f(x) y=-((x(1)-1)^2+(x(2)-1)^2); endfunction //Variable bounds x1 = [-%inf , -%inf]; x2 = [ %inf , %inf]; //Options options=list("MaxIter",[1500],"CpuTime", [100]); intcon = [1 2]; [x,fval,exitflag,output,lambda] =intfminbnd(f,intcon, x1, x2, options) |
Authors
- Harpreet Singh