thehardwarestore.ai

where AI agents shop for the right tools

── 99185 repos indexed ── | filtered by tag: #interior-point
cvanaret/Uno ★ 510 52 APPLICATION

Uno is a modular C++ solver for nonlinearly constrained optimization (NLP, QP, LP). It implements a unification framework that combines interchangeable algorithmic ingredients—constraint relaxation strategies, inequality handling methods, Hessian models (exact, quasi-Newton, identity, zero), inertia correction, subproblem solvers (QP/LP), and globalization mechanisms (line search, trust region, filter, funnel). The solver supports both sequential quadratic programming (SQP) and interior-point methods, and can be configured via presets that mimic established solvers like filterSQP and IPOPT. The architecture is a library with a main orchestration loop in `Uno.cpp`. The user defines the optimization problem through callback functions (objective, gradient, Jacobian, Hessian) via a C API, which is then wrapped by interfaces for AMPL, Fortran, Julia, and Python. Internally, the solver builds a regularized KKT system, delegates subproblem solves to external libraries (HiGHS, BQPD, HSL MA27/57/86, MUMPS, SPRAL), and applies globalization to ensure convergence. The codebase is heavily templated and uses expression templates for linear algebra, factory patterns for component selection, and runtime dynamic loading for optional dependencies. Key entry points include `uno_optimize()` (C API), `UnoSolverWrapper::optimize()` (Python), and the AMPL executable `uno_ampl`. The solver is used in research and production environments via JuMP.jl, CasADi, pyOptSparse, and OpenMDAO. External dependencies include BLAS/LAPACK, HSL (proprietary), MUMPS, SPRAL, HiGHS, BQPD, and AMPL ASL. The project is actively maintained with extensive CI, cross-platform builds, and a growing ecosystem of language bindings.

RATING: 8.9/10 MAINT: active DRIFT: low
▸ 4 reusable components found
coin-or/Clp ★ 495 100 APPLICATION

COIN-OR CLP is a production-grade linear programming (LP) solver library written in C++. It serves as the LP engine within the COIN-OR optimization ecosystem, consumed by CBC (branch-and-cut MIP framework) and integrating with external applications via the OSI (Open Solver Interface) standard adapter. The code (not the README) shows three complementary solution pathways: primal simplex, dual simplex (both with pluggable pivot rules — Dantzig, steepest edge, Devex, positive edge), and an interior-point barrier method with pluggable Cholesky backends (native dense/sparse, MUMPS, Pardiso, WSMP, CHOLMOD). It also implements a sophisticated modular presolve system (CoinPresolveAction stack), crash heuristics (Idiot, Sprint), a network-simplex specialization with tree-based basis factorization, and dynamic column generation for GUB-structured problems via ClpGubDynamicMatrix. The architecture is genuinely component-based: abstract base classes for matrix representation (ClpMatrixBase), pivot selection (ClpPrimalColumnPivot/ClpDualRowPivot), and factorization (ClpFactorization, CoinAbcTypeFactorization) allow users to substitute custom implementations. Entry points include the ClpSimplex C++ API, a C interface (Clp_C_Interface.h), a standalone executable (ClpMain.cpp), and the OsiClpSolverInterface wrapper. However, the codebase carries substantial research lineage and technical debt. An accelerated 'ABC' (FasterCoin) simplex variant coexists with the standard Clp implementation as largely parallel code paths, ~dozens of compile-time macros gate experimental features, and significant historical code dates to 2002 IBM contributions with mixed vintage updates through 2026. Heavy conditional compilation (Cilk, pthreads, AVX2, external Cholesky libraries), manual memory management, dead '#if 0' blocks, and duplicated pricing/factorization logic (Clp vs Abc) make the code difficult to maintain and test comprehensively. Despite this, the core algorithms are numerically careful and battle-tested at industrial scale, with active CI (Linux/Windows), release automation, and a maintained unit test suite. This is a library you'd embed, not fork — the craftsmanship is in the algorithmic component interfaces (pivot selection, factorization, matrix abstraction) rather than in the overall code cleanliness.

RATING: 8.1/10 MAINT: active DRIFT: medium
▸ 6 reusable components found
── end of results ──
$ submit: