A package for modeling Quadratic Program Networks (QPNets), and computing corresponding equilibrium points. Examples can be found in the examples subdirectory. This package is under active development. Medium and Large-scale problems may be difficult or impossible to solve using the algorithms implemented in this package at this time. Bug reports are welcomed and appreciated!
The paper introducing QPNets can be found here. If you use this package in your research, please use the following citation.
@misc{laine2024mathematical,
title={Mathematical Program Networks},
author={Forrest Laine},
year={2024},
eprint={2404.03767},
archivePrefix={arXiv},
primaryClass={math.OC}
}
This package is not yet publically registered. To install, simply clone this repository locally, navigate to the directory, and run the following:
julia --project
# hit `]` to enter "pkg"-mode of the REPL
pkg> instantiate
# hit `delete` or `backspace` to exit "pkg"-mode of the REPL
julia> using QuadraticProgramNetworks
QPNets relies on the PATHSolver for some of the necessary computations. Make sure to add a valid PATH_LICENSE_STRING to your shell environment variables. More details can be found at this link.
Examples from the above-linked paper can be run using the following interface.
# remember to set PATHSolver license as instructed above
julia> qpn = setup(:robust_avoid_simple);
julia> ret = solve(qpn);
New QPNets can be constructed by following the template provided in the examples
directory. Every QPNet should define a setup
function, which defines the decision variables, QP nodes, and edges of the network, and returns a QPNet object. A default initialization can be assigned to the QPNet, in which case an equilibrium can be computed by simply calling solve
on the QPNet. If not specified, the default initialization is the zero vector. A custom initialization can be passed to the solver by calling
solve(qpn, init)
.
A formal documentation of this package is in the works.