All Projects → asherikov → qpmad

asherikov / qpmad

Licence: Apache-2.0 License
ROS-compatible Eigen-based Goldfarb-Idnani quadratic programming solver

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
Makefile
30231 projects
matlab
3953 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to qpmad

Cppnumericalsolvers
a lightweight C++17 library of numerical optimization methods for nonlinear functions (Including L-BFGS-B for TensorFlow)
Stars: ✭ 638 (+1456.1%)
Mutual labels:  optimization, solver, eigen, optimization-algorithms
gibbous
Convex optimization for java and scala, built on Apache Commons Math
Stars: ✭ 17 (-58.54%)
Mutual labels:  optimization, optimization-algorithms, quadratic-programming
osqp
The Operator Splitting QP Solver
Stars: ✭ 929 (+2165.85%)
Mutual labels:  optimization, solver, quadratic-programming
Optim
OptimLib: a lightweight C++ library of numerical optimization methods for nonlinear functions
Stars: ✭ 411 (+902.44%)
Mutual labels:  optimization, eigen, optimization-algorithms
osqp-cpp
A C++ interface for the OSQP quadratic programming solver.
Stars: ✭ 160 (+290.24%)
Mutual labels:  eigen, quadratic-programming
procrustes
Python library for finding the optimal transformation(s) that makes two matrices as close as possible to each other.
Stars: ✭ 48 (+17.07%)
Mutual labels:  optimization, optimization-algorithms
optaplanner-quickstarts
OptaPlanner quick starts for AI optimization: many use cases shown in many different technologies.
Stars: ✭ 226 (+451.22%)
Mutual labels:  solver, optimization-algorithms
ProxSDP.jl
Semidefinite programming optimization solver
Stars: ✭ 69 (+68.29%)
Mutual labels:  optimization, solver
Python Mip
Collection of Python tools for the modeling and solution of Mixed-Integer Linear programs
Stars: ✭ 202 (+392.68%)
Mutual labels:  optimization, optimization-algorithms
portfolio allocation js
A JavaScript library to allocate and optimize financial portfolios.
Stars: ✭ 145 (+253.66%)
Mutual labels:  optimization-algorithms, quadratic-programming
geneal
A genetic algorithm implementation in python
Stars: ✭ 47 (+14.63%)
Mutual labels:  optimization, optimization-algorithms
FrankWolfe.jl
Julia implementation for various Frank-Wolfe and Conditional Gradient variants
Stars: ✭ 47 (+14.63%)
Mutual labels:  optimization, optimization-algorithms
Argmin
Mathematical optimization in pure Rust
Stars: ✭ 234 (+470.73%)
Mutual labels:  optimization, optimization-algorithms
Fewshotlearning
Pytorch implementation of the paper "Optimization as a Model for Few-Shot Learning"
Stars: ✭ 223 (+443.9%)
Mutual labels:  optimization, optimization-algorithms
nuxt-prune-html
🔌⚡ Nuxt module to prune html before sending it to the browser (it removes elements matching CSS selector(s)), useful for boosting performance showing a different HTML for bots/audits by removing all the scripts with dynamic rendering
Stars: ✭ 69 (+68.29%)
Mutual labels:  optimization, optimization-algorithms
CSDP.jl
Julia Wrapper for CSDP (https://projects.coin-or.org/Csdp/)
Stars: ✭ 18 (-56.1%)
Mutual labels:  optimization, solver
zoofs
zoofs is a python library for performing feature selection using a variety of nature-inspired wrapper algorithms. The algorithms range from swarm-intelligence to physics-based to Evolutionary. It's easy to use , flexible and powerful tool to reduce your feature size.
Stars: ✭ 142 (+246.34%)
Mutual labels:  optimization, optimization-algorithms
Nonlinear-Optimization-Algorithms
MATLAB implementations of a variety of nonlinear programming algorithms.
Stars: ✭ 86 (+109.76%)
Mutual labels:  optimization, optimization-algorithms
a-tour-of-pytorch-optimizers
A tour of different optimization algorithms in PyTorch.
Stars: ✭ 46 (+12.2%)
Mutual labels:  optimization, optimization-algorithms
Mathtoolbox
Mathematical tools (interpolation, dimensionality reduction, optimization, etc.) written in C++11 with Eigen
Stars: ✭ 172 (+319.51%)
Mutual labels:  optimization, eigen

qpmad

CI status Debian package
Build Status Latest version of 'qpmad' @ Cloudsmith

Eigen-based, header-only C++ implementation of Goldfarb-Idnani dual active set algorithm for quadratic programming. The package is ROS compatible.

The solver is optimized for performance, for this reason some of the computations are omitted as described below. See https://github.com/asherikov/qpmad_benchmark for comparison with qpOASES and eiQuadProg.

Contents

Links

Features:

  • Double sided inequality constraints: lb <= A*x <= ub. Such constraints can be handled in a more efficient way than lb <= A*x commonly used in other implementations of the algorithm.

  • Simple bounds: lb <= x <= ub.

  • Lazy data initialization, e.g., perform inversion of the Cholesky factor only if some of the constraints are activated.

  • Works with positive-definite problems only (add regularization if necessary).

  • Performs in-place factorization of Hessian and can reuse it on subsequent iterations. Can optionally store inverted Cholesky factor in the Hessian matrix for additional performance gain.

  • Does not compute value of the objective function.

  • Does not compute/update Lagrange multipliers for equality constraints.

  • Solver can be instantiated with static dimensions in order to avoid memory allocations.

Dependencies:

  • C++11 compatible compiler
  • cmake >= 3.0
  • Eigen >= 3.3.0
  • Boost (for C++ tests)

Notes:

  1. Before computing the full step length I check that the dot product of the chosen constraint with the step direction is not zero instead of checking the norm of the step direction. The former approach makes more sense since the said dot product appears later as a divisor and we can avoid computation of a useless norm.

  2. I am aware that activation of simple bounds zeroes out parts of matrix 'J'. Unfortunately, I don't see a way to exploit this on modern hardware -- updating the whole 'J' at once is computationally cheaper than doing this line by line selectively or permuting 'J' to collect sparse rows in one place.

  3. Since the solver may arbitrarily choose violated constraints for activation, it always prefers the cheapest ones, i.e., the simple bounds. In particular, this allows to avoid computation of violations of general constraints if there are violated bounds.

  4. Vector 'd' and primal step direction are updated during partial steps instead of being computed from scratch. This, however, does not result in a significant performance improvement.

Documentation and examples

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].