intquadprog

Solves an integer quadratic optimization problem.

Calling Sequence

xopt = intquadprog(H,f)
xopt = intquadprog(H,f,intcon)
xopt = intquadprog(H,f,intcon,A,b)
xopt = intquadprog(H,f,intcon,A,b,Aeq,beq)
xopt = intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub)
xopt = intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub,x0)
xopt = intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub,x0,options)
xopt = intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub,x0,options,"file_path")
[xopt,fopt,exitflag,output] = intquadprog( ... )

Input Parameters

H :

A symmetric matrix of doubles, representing the Hessian of the quadratic problem.

f :

A vector of doubles, representing coefficients of the linear terms in the quadratic problem.

intcon :

A vector of integers, representing the variables that are constrained to be integers.

A :

A matrix of doubles, containing the coefficients of linear inequality constraints of size (m X n) where 'm' is the number of linear inequality constraints.

b :

A vector of doubles, related to 'A' and represents the linear coefficients in the linear inequality constraints of size (m X 1).

Aeq :

A matrix of doubles, containing the coefficients of linear equality constraints of size (m1 X n) where 'm1' is the number of linear equality constraints.

beq :

A vector of double, vector of doubles, related to 'Aeq' and represents the linear coefficients in the equality constraints of size (m1 X 1).

lb :

A vector of doubles, containing the lower bounds of the variables of size (1 X n) or (n X 1) where 'n' is the number of variables.

ub :

A vector of doubles, containing the upper bounds of the variables of size (1 X n) or (n X 1) where 'n' is the number of variables.

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.

options :

A list, containing the option for user to specify. See below for details.

file_path :

path to bonmin opt file if used.

Outputs

xopt :

A vector of doubles, containing the computed solution of the optimization problem.

fopt :

A double, containing the value of the function at xopt.

exitflag :

An integer, containing the flag which denotes the reason for termination of algorithm. See below for details.

output :

A structure, containing the information about the optimization. See below for details.

Description

Search the minimum of a constrained linear quadratic optimization problem specified by :

intquadprog calls Bonmin, a library written in C++ to solve the quadratic problem.

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

The output data structure contains detailed information about the optimization process. It is of type "struct" and contains the following fields.

  • output.constrviolation: The max-norm of the constraint violation.

A few examples displaying the various functionalities of intquadprog have been provided below. You will find a series of problems and the appropriate code snippets to solve them.

Example

Here we solve a simple objective function.

Find x in R^6 such that it minimizes:

//Example 1:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon)

Example

We proceed to add simple linear inequality constraints.

//Example 2:
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b)

Example

Here we build up on the previous example by adding linear equality constraints. We add the following constraints to the problem specified above:

//Example 3:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Equality constraints
Aeq= [1,-1,1,0,3,1;
-1,0,-3,-4,5,6;
2,5,3,0,1,0];
beq=[1; 2; 3];
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b,Aeq,beq)

Example

In this example, we proceed to add the upper and lower bounds to the objective function.

//Example 4:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Equality constraints
Aeq= [1,-1,1,0,3,1;
-1,0,-3,-4,5,6;
2,5,3,0,1,0];
beq=[1; 2; 3];
//Variable bounds
lb=[-1000; -10000; 0; -1000; -1000; -1000];
ub=[10000; 100; 1.5; 100; 100; 1000];
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub)

Example

In this example, we initialize the values of x to speed up the computation. We further enhance the functionality of qpipoptmat by setting input options.

//Example 5:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Equality constraints
Aeq= [1,-1,1,0,3,1;
-1,0,-3,-4,5,6;
2,5,3,0,1,0];
beq=[1; 2; 3];
//Variable bounds
lb=[-1000; -10000; 0; -1000; -1000; -1000];
ub=[10000; 100; 1.5; 100; 100; 1000];
//Initial guess and options
x0 = repmat(0,6,1);
options = list("MaxIter", 300, "CpuTime", 100);
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b,Aeq,beq,lb,ub,x0,options)

Example

Infeasible Problems: Find x in R^6 such that it minimizes the objective function used above under the following constraints:

//Example 6:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6);
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Equality constraints
Aeq= [0,1,0,1,2,-1;
-1,0,-3,-4,5,6];
beq=[4; 2];
//Integer Constraints
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b,Aeq,beq)

Example

Unbounded Problems: Find x in R^6 such that it minimizes the objective function used above under the following constraints:

//Example 7:
//Minimize 0.5*x'*H*x + f'*x with
f=[1; 2; 3; 4; 5; 6]; H=eye(6,6); H(1,1) = -1;
//Inequality constraints
A= [0,1,0,1,2,-1;
-1,0,2,1,1,0];
b = [-1; 2.5];
//Equality constraints
Aeq= [1,-1,1,0,3,1;
-1,0,-3,-4,5,6];
beq=[1; 2];
intcon = [2 ,4];
//Running intquadprog
[xopt,fopt,exitflag,output]=intquadprog(H,f,intcon,A,b,Aeq,beq)

Authors

  • Akshay Miterani and Pranav Deshpande