intqpipopt Solves a linear quadratic problem. Calling Sequence xopt = intqpipopt(H,f) xopt = intqpipopt(H,f,intcon) xopt = intqpipopt(H,f,intcon,A,b) xopt = intqpipopt(H,f,intcon,A,b,Aeq,beq) xopt = intqpipopt(H,f,intcon,A,b,Aeq,beq,lb,ub) xopt = intqpipopt(H,f,intcon,A,b,Aeq,beq,lb,ub,x0) xopt = intqpipopt(H,f,intcon,A,b,Aeq,beq,lb,ub,x0,options) xopt = intqpipopt(H,f,intcon,A,b,Aeq,beq,lb,ub,x0,options,"file_path") [xopt,fopt,exitflag,output] = intqpipopt( ... ) 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 : \begin{eqnarray} &\mbox{min}_{x} & 1/2⋅x^T⋅H⋅x + f^T⋅x \\ & \text{subject to} & A⋅x \leq b \\ & & Aeq⋅x = beq \\ & & lb \leq x \leq ub \\ & & x_i \in \!\, \mathbb{Z}, i \in \!\, intcon\\ \end{eqnarray} intqpipopt 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 intqpipopt 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: \begin{eqnarray} \mbox{min}_{x}\ f(x) &= \dfrac{1}{2}x'\boldsymbol{\cdot} H\boldsymbol{\cdot}x + f' \boldsymbol{\cdot} x\\ \text{Where: } H &= I_{6}\\ F &= \begin{array}{cccccc} [1 & 2 & 3 & 4 & 5 & 6] \end{array} \end{eqnarray}\\ \text{With integer constraints as: } \\ \begin{eqnarray} \begin{array}{c} [2 & 4] \\ \end{array} \end{eqnarray} Example We proceed to add simple linear inequality constraints. \begin{eqnarray} \&x_{2} + x_{4}+ 2x_{5} - x_{6}&\leq -1\\ \&-x_{1} + 2x_{3} + x_{4} + x_{5}&\leq 2.5\\ \end{eqnarray} Example Here we build up on the previous example by adding linear equality constraints. We add the following constraints to the problem specified above: \begin{eqnarray} &x_{1} - x_{2} + x_{3} + 3x_{5} + x_{6}&= 1 \\ &-x_{1} + 2x_{3}+ x_{4} + x_{5}&= 2\\ &2x_{1} + 5x_{2}+ 3x_{3} + x_{5}&= 3 \end{eqnarray} Example In this example, we proceed to add the upper and lower bounds to the objective function. \begin{eqnarray} -1000 &\leq x_{1} &\leq 10000\\ -10000 &\leq x_{2} &\leq 100\\ 0 &\leq x_{3} &\leq 1.5\\ -1000 &\leq x_{4} &\leq 100\\ -1000 &\leq x_{5} &\leq 100\\ -1000 &\leq x_{6} &\leq 1000 \end{eqnarray} 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 Infeasible Problems: Find x in R^6 such that it minimizes the objective function used above under the following constraints: \begin{eqnarray} begin{eqnarray} \hspace{70pt} &x_{2} + x_{4}+ 2x_{5} - x_{6}&\leq -1\\ \hspace{70pt} &-x_{1} + 2x_{3} + x_{4} + x_{5}&\leq 2.5\\ \hspace{70pt} &x_{2} + x_{4}+ 2x_{5} - x_{6}&= 4 \\ \hspace{70pt} &-x_{1} + 2x_{3}+ x_{4} + x_{5}&= 2\\ \\ \end{eqnarray}\\ \text{With integer constraints as: } \\ \begin{eqnarray} \begin{array}{c} [2 & 4] \\ \end{array} \end{eqnarray} Example Unbounded Problems: Find x in R^6 such that it minimizes the objective function used above under the following constraints: \begin{eqnarray} \mbox{min}_{x}\ f(x) &= \dfrac{1}{2}x'\boldsymbol{\cdot} H\boldsymbol{\cdot}x + f' \boldsymbol{\cdot} x\\ \text{Where H is specified below and} \\ F &= \begin{array}{cccccc} [1 & 2 & 3 & 4 & 5 & 6] \end{array} \end{eqnarray}\\ \text{Subjected to: }\\ \begin{eqnarray} \hspace{70pt} &x_{2} + x_{4}+ 2x_{5} - x_{6}&\leq -1\\ \hspace{70pt} &-x_{1} + 2x_{3} + x_{4} + x_{5}&\leq 2.5\\ \hspace{70pt} &x_{1} - x_{2} + x_{3} + 3x_{5} + x_{6}&= 1 \\ \hspace{70pt} &-x_{1} + 2x_{3}+ x_{4} + x_{5}&= 2\\ \\ \end{eqnarray} Authors Akshay Miterani and Pranav Deshpande