# 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