MATLAB Optimization Toolbox Overloads

It is expected many users will be experienced with the MATLAB Optimization Toolbox. Therefore to minimize the transition of code between the two, OPTI provides several overloads. Note these are not overloads in the object-orientated sense, merely the same function names with 'opti_' in front of it.

The following table lists the Optimization Toolbox and corresponding OPTI functions:

Problem TypeMATLAB FunctionOPTI Function
LPlinprogopti_linprog
BILPbintprogopti_bintprog
MILPintlinprogopti_intlinprog
QPquadprogopti_quadprog
NLSlsqcurvefitopti_lsqcurvefit
SNLEfsolveopti_fsolve
UNOfminuncopti_fminunc
NLPfminconopti_fmincon

Each function uses exactly the same calling syntax as the MATLAB equivalent, including dual outputs for nonlinear callbacks (not an OPTI convention).

Example 1: LP

Using the same LP from the Basic Usage example page, the problem can be constructed and solved as follows:

% Problem
f = -[6 5]';                %Objective Function (min f'x)
A = [1,4; 6,4; 2, -5];      %Linear Inequality Constraints (Ax <= b)
b = [16;28;6];    
lb = [0;0];                 %Bounds on x (lb <= x <= ub)
ub = [10;10];

% Solve using MATLAB's linprog:
x = linprog(f,A,b,[],[],lb,ub)

% Solve using corresponding OPTI overload:
x = opti_linprog(f,A,b,[],[],lb,ub)

Note OPTI is not intended to replace the Optimization Toolbox. It in fact interfaces with it, and you can choose 'matlab' as the solver for any problem type you wish to attempt to solve using the Optimization Toolbox. In my experience the Optimization Toolbox is a suite of robust solvers and can typically solve problems others can't. It is just not always that fast, which can be a problem on large-scale problems.

Example 2: MILP

From MATLAB 2014a you can now solve mixed-integer linear programs. However if you want to try one of OPTI's solvers, use the overload below:

% Objective
f = [2, 3, 7, 7]';        
% Constraints      
A = [-1, -1, 2, 5;1, -2, -1, -4];
b = [-2; -3];  
lb = zeros(4,1);
ub = [30 100 20 1]';  

% Integer Constraints
xtype = [2 4];  %variables 1, 3 are continuous, 2, 4 are integer

% Solve using OPTI overload:
x = opti_intlinprog(f,xtype,A,b,[],[],lb,ub)

Note an earlier overload exists, opti_mintprog, which contains the same functionality. This function existed before intlinprog was released.

Example 3: NLP

You may be wondering how to change the solver using the overloaded methods. I can assure you this is easy! Just as you can pass optimset options to a MATLAB function, you can pass optiset options (including the solver) to a OPTI overload. The following example details this:

% Objective
fun = @(x) sin(x(1) + x(2)) + (x(1) - x(2))^2 - 1.5*x(1) + 2.5*x(2) + 1;          
% Constraints      
lb = [-1.5;-3];
ub = [4;3];  

% Starting Guess
x0 = [0;0];

% Setup Options
opts = optiset('solver','nomad');

% Solve using OPTI overload:
[x,fval] = opti_fmincon(fun,x0,[],[],[],[],lb,ub,[],opts)

Summary

These overloads are provided for convenience only. They do not represent the full functionality of either the Optimization Toolbox or OPTI, just a small subset so you can interchange between them easily for testing purposes. It is strongly recommended you follow standard OPTI syntax for normal use.