Releases: madsuite-org/MadNLP.jl
Release list
v0.10.1
MadNLP v0.10.1
Merged pull requests:
- [MadNLPTests] v0.6.2 (#619) (@michel2323)
- [MadNLP] Upgrade MUMPS to v5.9.0 (#620) (@amontoison)
v0.10.0
MadNLP v0.10.0
Highlights: the main
solve!loop is now allocation-free in steady state — ~99% of per-iteration allocations have been removed by replacingmapreduce-based reductions with explicit loops and extracting backend-specific kernels so that GPU code paths can plug in without touching the core. Plus a CUDA.jl v6 / CUDSS 0.7 / Julia 1.12 update forMadNLPGPU.
Performance
- Remove ~99% of per-iteration allocations from
solve!.get_varphi,get_inf_du,get_inf_compl,get_min_complementarity, and friends insrc/IPM/kernels.jlare rewritten as explicit loops instead ofmapreduce.count_lu_boundsreplaces the boolean-mask +sumpattern inget_vars_info/get_cons_info. Indexed updates in_set_aug_diagonal!are wrapped in@viewsto avoid temporary copies. The unused densejac_bufferallocation in the NLPModels callback is removed. (#603) - New
populate_RR_nn!kernel for restoration-phase initialization, factored out so backends can override it. (#603)
Breaking changes
RRfield onMadNLPSolveris now typedUnion{Nothing,RobustRestorer{T,VT}}(wasRobustRestorer{T}). Downstream code that holds a typed reference toRobustRestorerneeds the extra type parameter. (#603)get_vars_infoandget_cons_infoare now restricted toAbstractMadNLPSolver. (#603)- New extension points (
_get_varphi,get_varphi,get_inf_du,get_inf_compl,get_min_complementarity,get_varphi_d,get_alpha_max,get_alpha_z, restoration-phaseget_*_Rvariants,populate_RR_nn!,count_lu_bounds,SubVector) are exported fromMadNLPfor backends to specialize. (#603)
MadNLPGPU v0.10.0
Highlights: bumped to CUDA.jl v6 and CUDSS 0.7, and GPU specializations of the new MadNLP core kernels.
Dependencies
- Require CUDA.jl ≥ 6.0.0 and CUDSS ≥ 0.7. (#615)
- Depend on the CUDA subpackages (
CUDACore,cuBLAS,cuSOLVER,cuSPARSE) instead of theCUDAmeta-package. The CUDA extension now activates from these subpackages directly, so MadNLPGPU works alongside any CUDA.jl v6.x without forcing the meta-package into the project. (#615) - AMDGPU.jl ≥ 2.
New features
- GPU specializations of the IPM kernels refactored out in MadNLP #603 (
get_varphi,get_inf_du,get_inf_compl,get_min_complementarity, restorationpopulate_RR_nn!, etc.), dispatched onAbstractGPUVectorOrSubVector. The GPU path keeps usingmapreducewhile the CPU path uses explicit loops — both avoid the per-iteration allocations that the prior code had. (#603)
Fixes
- Work around a Julia 1.12 regression with the global solver state in
MadNLPGPU.jl. (#615)
Compatibility
- Requires MadNLP ≥ 0.10.0.
Merged pull requests:
- Removing 99% of allocations in
solve!(#603) (@apozharski) - compat CUDA@6.0.0 CUDSS@0.7 (#615) (@michel2323)
v0.9.2
MadNLP v0.9.2
Highlights: new SchurComplementKKTSystem for two-stage stochastic programs (CPU + GPU), an API cleanup so solver and wrapper internals are accessed through getter functions, and a MUMPS 5.8.x fix.
New features
- Add
SchurComplementKKTSystemfor exploiting the block-arrowhead structure of two-stage stochastic programs. Reduces each Newton step to a densend × nddesign-variable system via per-scenario eliminations. CPU variant uses Umfpack for the per-scenario blocks by default; GPU variant lives in theMadNLPGPUCUDA extension and uses batched cuDSS + strided-batched CUBLAS. (#598)
API changes
- Solver member access is now through getter functions instead of direct field access. Downstream code that reaches into
MadNLPSolverfields will need to migrate. (#497) - Wrapper models use getters for inner-model access. (#595)
solveis now re-exported fromSolverCore, aligning MadNLP with the broader JuliaSmoothOptimizers ecosystem. (#601)
Fixes
- Update MUMPS bindings for the 5.8.x ABI. (#613)
Documentation
- Fix
mu_initin the warm-start tutorial. (#607)
MadNLPGPU v0.9.0
Highlights: CUDA/CUDSS and AMDGPU are now weak dependencies, and the new Schur-complement KKT system has a GPU backend.
- CUDA/CUDSS moved to weak deps, GPU backend code deduplicated. Installing MadNLPGPU no longer pulls CUDA on machines without it; the CUDA-specific code (
LapackCUDASolver,CUDSSSolver, GPU Schur) lives in theMadNLPGPUCUDAExtextension and loads only when both CUDA.jl and CUDSS.jl are present. The AMDGPU backend follows the same pattern viaMadNLPGPUAMDGPUExt. (#596) - GPU SchurComplementKKTSystem: batched per-scenario factorizations via cuDSS, Schur accumulation via CUBLAS strided-batched GEMM. (#598)
- Requires MadNLP ≥ 0.9.2.
Known issue — V100 / Volta (sm_70):
CUDA Toolkit 13 dropped support for Volta GPUs. Starting at CUDA.jl v5.10 (March 2026), Pkg may resolve to a CUDA.jl that auto-selects the CUDA 13 runtime, which then fails on V100. MadNLPGPU's compat allows this. Until JuliaGPU/CUDA.jl#3134 ships in a tagged release, V100 users should pin to a CUDA 12.x toolkit by running once per environment:
using CUDA
CUDA.set_runtime_version!(v"12.9") # any 12.x worksAlternatively, pin CUDA = "~5.9" in your project's Project.toml.
MadNLPTests v0.6.1
- Add Schur-complement two-stage stochastic test fixtures used by
MadNLPandMadNLPGPUSchur tests. (#598)
Merged pull requests:
- Overhaul solver member access via functions (#497) (@apozharski)
- Wrappers should use getters for nlp models meta (#595) (@apozharski)
- Add SchurComplementKKTSystem for two-stage stochastic programs (#598) (@michel2323)
- Revert and use function solve from SolverCore (#601) (@frapac)
- [doc] Fix mu_init in warm-start tutorial (#607) (@frapac)
- [Mumps] Fix the MUMPS structure for v5.8.x (#613) (@frapac)
Closed issues:
- Documentation (#93)
- Restoration failed when using MadNLP for ODE parameter estimation (#264)
- Using weak dependencies (#265)
- lost of precision in constraints using MadNLP.SparseCondensedKKTSystem? (#593)
- Consider not exporting own
solve!(#597) - Performance regression in v0.9.1 compared to v0.8.12 with Mumps (#602)
- Warm-start Tutorial Appears to be Out-of-Date (#606)
v0.9.1
MadNLP v0.9.1
Merged pull requests:
AbstractWrapperModelapi missing returns (#592) (@apozharski)
Closed issues:
v0.9.0
MadNLP v0.9.0
Breaking changes
- Update to MadNLP 0.9
Merged pull requests:
- Revisit fixed variables treatment (#360) (@frapac)
- Update MadNLPPardiso (#434) (@frapac)
- Using PrecompileTools.jl (#452) (@sshin23)
- Norm replaced with custom-norm for julia v1.12 (#453) (@sshin23)
- Implement adaptive barrier updates (#480) (@frapac)
- Dual regularize diagonal (#481) (@sshin23)
- Mumps tuned and made as default linear solver (#482) (@sshin23)
- Implement minor changes for c interface building (#483) (@apozharski)
- Print improvement (#485) (@sshin23)
- [bug fix] del_c should be determined by zero eig (#486) (@sshin23)
- [bug fix] correct inertia for unreduced systems (#487) (@sshin23)
- [CUDSS] Return dummy inertia if factorization incomplete (#488) (@sshin23)
- update MadNLPTests to use new NL interface in JuMP (#489) (@frapac)
- option treatment and specialization for cudss (#490) (@sshin23)
- fix typos in MadNLP's logs (#492) (@frapac)
- Update MOI extension for the operators (#493) (@amontoison)
- Fix the interface of the operators in MOI (#494) (@amontoison)
- Precompile fix (#495) (@sshin23)
- Fix tests broken in v1.12 (#498) (@apozharski)
- Fixes for AMDGPU (#499) (@apozharski)
- [MadNLPTests] Release 0.5.3 (#500) (@amontoison)
- [MadNLPGPU] Support CUDSS.jl v0.6 (#501) (@amontoison)
- fix type instability bug in dummy_qp (#502) (@apozharski)
- [MadNLPGPU.jl] Upgrade the interface for CUDSS.jl (#507) (@amontoison)
- Refactor default_sparse_solver to only use MumpsSolver (#511) (@amontoison)
- Add formatter (#515) (@michel2323)
- Flip objective in stats when maximizing (#519) (@klamike)
- Add tutorial on how to use MadNLP on the GPU (#520) (@frapac)
- [MadNLPGPU] Support LBFGS on GPU (#524) (@amontoison)
- [MadNLPGPU] Support uniform batch in CUDSSSolver (#527) (@amontoison)
- Move {Sparse,Dense}WrapperModel from MadNLPGPU to MadNLP (#528) (@frapac)
- Abstract stats (#529) (@klamike)
- [MadNLP] Update the implementation of LBFGS (#530) (@amontoison)
- Fix barrier initialization with type conversion (#532) (@amontoison)
- [MadNLPGPU] Fix CUDSS uniform batch syntax (#533) (@klamike)
- Use syr! and symv! in BFGS (#534) (@amontoison)
- Update the implementation of LBFGS in MadNLP (#536) (@amontoison)
- [hotfix] remove symul! in favor of _symv! (#538) (@sshin23)
- Properly map NLP constraint index for MOI dual (#540) (@klamike)
- Fix hessian for dense KKT (#541) (@klamike)
- Removed synchronize(backend) (#542) (@sshin23)
- Remove extra
build_kkt!call (#544) (@klamike) - Update the signature of the function
solve!in MadNLP (#546) (@frapac) - Apply
obj_scaleinunpack_zinMakeParametercase (#547) (@klamike) - Add support for MOI.VectorNonlinearOracle (#548) (@frapac)
- [MOI] Add support for MOI.LagrangeMultiplier (#549) (@amontoison)
- [MOI] Reuse existing data structures from MOI on re-solve (#550) (@amontoison)
- Support precompilation with MOI extension (#551) (@amontoison)
- Add tests for multipliers' values in scaled and max problems (#553) (@frapac)
- [MOI] Optimize MOI.eval_constraint_jacobian_transpose_product when we have oracles (#554) (@amontoison)
- LBFGS is only supported with the KKT formulation SparseKKTSystem (#555) (@amontoison)
- [MOI/MadNLPTests] Add
array_typeto support GPU solve from MOI (#557) (@klamike) - Fix generation of documentation (#558) (@frapac)
- Update the documentation for MadNLP 0.9 (#560) (@amontoison)
- Remove NEWS.md (#561) (@amontoison)
- [MOI] Drop support for
ConstraintDualStartfor variable bounds (#564) (@frapac) - Add a field additional_buffers in CompactLBFGS (#565) (@amontoison)
- Add a function madsuite (#566) (@amontoison)
- Fix LBFGS in single precision (#567) (@amontoison)
- Refactor badge links in README.md (#568) (@amontoison)
- Rename the dense linear solvers on GPU (#569) (@amontoison)
- Update the documentation for MadNLP 0.9 (#570) (@frapac)
- rename solve! function for KKT and linear systems (#571) (@frapac)
- [documentation] Update the tutorial related to the custom KKT system (#572) (@amontoison)
- Default primal-dual regularization (#573) (@sshin23)
- [documentation] Fix a few errors in kkt.md (#574) (@amontoison)
- [documentation] Update algorithm.md (#575) (@amontoison)
- Avoid passing
array_typetoMadNLPSolverin MOI (#576) (@klamike) - Use solve_kkt! instead of solve_kkt_system! (#577) (@amontoison)
- Guard against Julia versions built without GPL libs (#578) (@asinghvi17)
- Use the new API of NLPModels.jl for dense Jacobians and Hessians (#580) (@amontoison)
- Support LBFGS in extended precision (#581) (@amontoison)
- Add suppport for user defined callbacks (#582) (@frapac)
- [MOI] Fix support for MOI.Parameter constraints (#584) (@amontoison)
- Use variable_bounds_analysis and constraint_bounds_analysis in MOIModel (#585) (@amontoison)
- Make options type concrete in MadNLPSolver to prevent some minor type instability (#588) (@apozharski)
- Report the number of KKT factorizations in MadNLP (#589) (@frapac)
- [MadNLP] Release 0.9.0 (#590) (@frapac)
Closed issues:
- Revisiting fixed variable treatment (#70)
- Add different strategies to update the barrier
mu(#96) - LapackGPUSolver goes into feasibility restoration when LapackCPUSolver does not (#205)
- Definition of primal solution? (#212)
- Fixed variable multiplier (#229)
- Wrong solution in QuickStart example (#238)
- README.md simplification (#324)
- Unable to get GPU solver working (#381)
- [MadNLPGPU] Use CHOLESKY insted of LDL by default? (#438)
- Passing
x,y,zl, andzu, to a first call ofsolve!ignores these arguments. (#450) - Allow for LinearSolve.jl linear solver choices? (#479)
- No change to objective over course of optimization (#484)
- [Bug] Linear solver backend (#505)
- [MOI] Support VectorNonlinearOracle (#508)
- Support for user given callback functions (#512)
- [documentation] Explain how to use an AbstractNLPModels to solve NLP problems on GPU (#513)
- Existing options keys (#516)
- Maximization problem and objective value (#517)
- Issue with max (instead of min) with CUDABackend (#518)
- How to use L-BFGS on NVIDIA / AMD GPUs? (#522)
- [documentation] Specify the packages to load for the tutorial on LBFGS (#523)
- [documentation] Explain how to use BFGS in MadNLP (#525)
- [MOI] GPU syntax in readme is not working (#556)
- Should we keep the file NEWS.md? (#559)
- Multi-precision and LBFGS (#562)
- mu_init parameter (#579)
v0.8.12
MadNLP v0.8.12
Merged pull requests:
- Interface the dense EVD on GPU (#474) (@amontoison)
- [hotfix] Fix method overwriting in new Lapack interface (#478) (@frapac)
v0.8.11
MadNLP v0.8.11
Merged pull requests:
- [MadNLPGPU] Add an extension for AMDGPU.jl (#464) (@amontoison)
- Support dense EVD as a LAPACK solver on CPU (#475) (@amontoison)
- Use TRSV instead of TRSM in LAPACK solvers (#477) (@amontoison)
Closed issues:
v0.8.10
MadNLP v0.8.10
Merged pull requests:
- [MadNLPGPU] Update the interface for CUSOLVER (#466) (@amontoison)
- Split the code for the GPU kernels and CUDA.jl (#472) (@amontoison)
- [MadNLP] Update the interface for LapackCPUSolver (#473) (@amontoison)
Closed issues:
- [MadNLPGPU] Update the interface for CUSOLVER (#460)
v0.8.9
MadNLP v0.8.9
Merged pull requests:
- [MadNLPGPU] Upgrade CUDSS.jl (#439) (@amontoison)
- CI fix (#440) (@sshin23)
- Update docs.yml (#444) (@amontoison)
- Update test.yml (#445) (@amontoison)
- [MadNLPGPU] Expose more options in cuDSS wrapper (#446) (@frapac)
- [MadNLPGPU] Support the hybrid execute mode of cuDSS (#447) (@amontoison)
- [MadNLPGPU] Support more ordering (#448) (@amontoison)
- Fix option bound_relax_factor if set to zero (#449) (@frapac)
- Fix scaling of multipliers if nlp_scaling=true (#451) (@frapac)
- fix bug in re-initialize (#454) (@apozharski)
- Implement centering step as done in ipopt (#455) (@apozharski)
- Fix MOI.is_valid for ConstraintIndex{VariableIndex,Parameter} (#456) (@guimarqu)
- Update madnlpgpu_test.jl (#457) (@amontoison)
- Don't support CUDA 5.8.3 (#458) (@amontoison)
- CI fix and clean up (#462) (@sshin23)
Closed issues:
v0.8.8
MadNLP v0.8.8
Merged pull requests:
- Add tutorial for implementing a custom KKT system in MadNLP (#413) (@frapac)
- Fix floating-point for options (#424) (@michel2323)
- Support MUMPS v5.8.0 (#427) (@amontoison)
- Factorize line-search in function
filter_line_search!(#428) (@frapac) - [MadNLPGPU] Update sparse.jl (#429) (@amontoison)
- add helper function to call reduce_rhs! (#431) (@frapac)
- Update utils.jl (#433) (@amontoison)
- Don't call jac_structure! if nnzj == 0 (#435) (@amontoison)
- Add loqo rule and hack arround missing fallback in
robust!(#436) (@apozharski) - Add a kernel for K2.5 IN MadNLPGPU.jl (#437) (@amontoison)
Closed issues: