miOSQP solves an mixed-integer quadratic programs (MIQPs) of the form
minimize 0.5 x' P x + q' x
subject to l <= A x <= u
x[i] in Z for i in i_idx
i_l[i] <= x[i] <= i_u[i] for i in i_idx
where i_idx
is a vector of indices of which variables are integer and i_l
, i_u
are the lower and upper bounds on the integer variables respectively.
To install the package simply run
python setup.py install
it depends on OSQP, numpy and scipy.
To solve a MIQP we need to run
import miosqp
m = miosqp.MIOSQP()
m.setup(P, q, A, l, u, i_idx, i_l, i_u)
results = m.solve()
where P
is a symmetric positive semidefinite matrix and A
a matrix.
P
and A
are both in the scipy sparse CSC format.
The returned object results
contains
x
: the solutionupper_glob
: the cost function upper boundrun_time
: the solution timestatus
: the statusosqp_solve_time
: the OSQP solve time as a percentage of the total solution timeosqp_iter_avg
: the OSQP average number of iterations for each QP sub-problem solutionProblem vectors can be updated without running the setup again. It can be done with
m.update_vectors(q=q_new, l=l_new, u=u_new)
The initial guess can speedup the branch-and-bound algorithm significantly.
To set an initial feasible solution x0
we can run
m.set_x0(x0)
If you are using this package for your work, please cite the following paper:
@inproceedings{stellato2018,
author = {Stellato, B. and Naik, V. V. and Bemporad, A. and Goulart, P. and Boyd, S.},
title = {Embedded Mixed-Integer Quadratic Optimization Using the {OSQP} Solver},
booktitle = {European Control Conference ({ECC})},
year = {2018},
code = {https://github.com/oxfordcontrol/miosqp},
month = jul,
groups = {power electronics, integer programs}
}
In order to run the examples from to compare with GUROBI, after installing the python insterface, you need to install mathprogbasepy. Examples can be found in the examples
folder.
Note that you need pandas package for storing the results dataframe and tqdm package for the progress bar.