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