CurrentModule = GeNIOS
GeNIOS
is an efficient large-scale operator splitting solver for convex
optimization problems.
Pages = ["index.md", "method.md", "guide.md", "api.md"]
Depth = 1
Pages = [
"examples/constrained-ls.md",
"examples/huber.md",
"examples/lasso.md",
"examples/logistic.md",
"examples/portfolio.md",
]
Depth = 1
Pages = [
"advanced/lasso.md",
"advanced/portfolio.md",
"advanced/signal.md"
]
Depth = 1
GeNIOS solves convex optimization problems of the form
where
Compared to conic form programs, the form we use in GeNIOS facilitates custom subroutines that often provide significant speedups. To ameliorate the extra complexity, we provide a few interfaces that take advantage of special problem structure.
Many important problems in machine learning, finance, operations research, and control can be formulated as QPs. Examples include
- Lasso regression
- Portfolio optimization
- Trajectory optimization
- Model predictive control
- And many more...
GeNIOS accepts QPs of the form
which can be constructed using
solver = GeNIOS.QPSolver(P, q, M, l, u)
In machine learning problems, we can take advantage of additional structure.
In our MLSolver
, we assume the problem is of the form
where MLSolver
is constructed via
solver = GeNIOS.MLSolver(f, df, d2f, λ1, λ2, A, b)
where df
, and d2f
are scalar functions giving the first and second derivative
of
In the future, we may extend this interface to allow constraints on
For power users, we expose a fully generic interface for the problem
Users must specify HessianOperator
),
GeNIOS follows a similar approach to OSQP 1, solving the convex optimization
problem using ADMM 2. Note that the problem form of GeNIOS is, however, more
general than conic form solvers. The key algorithmic differences lies in the
The JuMP interface is the easiest way to use GeNIOS. A simple Markowitz portfolio example is below.
using JuMP, GeNIOS
# TODO:
However, the native interfaces can be called directly by specifying the problem data.
Using the QPSolver
, is it written as
# TODO:
And, finally, using the fully general interface, it is written as
# TODO:
Please see the User Guide for a full explanation of the solver parameter options. Check out the examples as well.
Footnotes
-
Stellato, B., Banjac, G., Goulart, P., Bemporad, A., & Boyd, S. (2020). OSQP: An operator splitting solver for quadratic programs. ↩
-
Boyd, S., Parikh, N., Chu, E., Peleato, B., & Eckstein, J. (2011). Distributed optimization and statistical learning via the alternating direction method of multipliers. ↩
-
Frangella, Z., Zhao, S., Diamandis, T., Stellato, B., & Udell, M. (2023). On the (linear) convergence of Generalized Newton Inexact ADMM. ↩
-
Frangella, Z., Tropp, J. A., & Udell, M. (2021). Randomized Nyström Preconditioning. ↩