Skip to content

Releases: madsuite-org/MadNLP.jl

v0.10.1

Choose a tag to compare

@github-actions github-actions released this 31 May 11:24
fab5b29

MadNLP v0.10.1

Diff since v0.10.0

Merged pull requests:

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 29 May 15:14

MadNLP v0.10.0

Diff since v0.9.2

Highlights: the main solve! loop is now allocation-free in steady state — ~99% of per-iteration allocations have been removed by replacing mapreduce-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 for MadNLPGPU.

Performance

  • Remove ~99% of per-iteration allocations from solve!. get_varphi, get_inf_du, get_inf_compl, get_min_complementarity, and friends in src/IPM/kernels.jl are rewritten as explicit loops instead of mapreduce. count_lu_bounds replaces the boolean-mask + sum pattern in get_vars_info / get_cons_info. Indexed updates in _set_aug_diagonal! are wrapped in @views to avoid temporary copies. The unused dense jac_buffer allocation 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

  • RR field on MadNLPSolver is now typed Union{Nothing,RobustRestorer{T,VT}} (was RobustRestorer{T}). Downstream code that holds a typed reference to RobustRestorer needs the extra type parameter. (#603)
  • get_vars_info and get_cons_info are now restricted to AbstractMadNLPSolver. (#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-phase get_*_R variants, populate_RR_nn!, count_lu_bounds, SubVector) are exported from MadNLP for 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 the CUDA meta-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, restoration populate_RR_nn!, etc.), dispatched on AbstractGPUVectorOrSubVector. The GPU path keeps using mapreduce while 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:

v0.9.2

Choose a tag to compare

@github-actions github-actions released this 20 May 15:40

MadNLP v0.9.2

Diff since v0.9.1

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 SchurComplementKKTSystem for exploiting the block-arrowhead structure of two-stage stochastic programs. Reduces each Newton step to a dense nd × nd design-variable system via per-scenario eliminations. CPU variant uses Umfpack for the per-scenario blocks by default; GPU variant lives in the MadNLPGPU CUDA 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 MadNLPSolver fields will need to migrate. (#497)
  • Wrapper models use getters for inner-model access. (#595)
  • solve is now re-exported from SolverCore, aligning MadNLP with the broader JuliaSmoothOptimizers ecosystem. (#601)

Fixes

  • Update MUMPS bindings for the 5.8.x ABI. (#613)

Documentation

  • Fix mu_init in 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 the MadNLPGPUCUDAExt extension and loads only when both CUDA.jl and CUDSS.jl are present. The AMDGPU backend follows the same pattern via MadNLPGPUAMDGPUExt. (#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 works

Alternatively, pin CUDA = "~5.9" in your project's Project.toml.


MadNLPTests v0.6.1

  • Add Schur-complement two-stage stochastic test fixtures used by MadNLP and MadNLPGPU Schur 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

Choose a tag to compare

@github-actions github-actions released this 25 Feb 22:28
375467d

MadNLP v0.9.1

Diff since v0.9.0

Merged pull requests:

Closed issues:

  • Release 0.9 (#545)
  • QuadraticModel and multi precision (#591)

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 24 Feb 20:31
c440cc5

MadNLP v0.9.0

Diff since v0.8.12

Breaking changes

  • Update to MadNLP 0.9

Merged pull requests:

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, and zu, to a first call of solve! 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

Choose a tag to compare

@github-actions github-actions released this 08 Sep 08:18

MadNLP v0.8.12

Diff since v0.8.11

Merged pull requests:

v0.8.11

Choose a tag to compare

@github-actions github-actions released this 07 Sep 17:09
bdb4fd2

MadNLP v0.8.11

Diff since v0.8.10

Merged pull requests:

Closed issues:

  • Support AMDGPU.jl in MadNLPGPU.jl (#380)
  • breakage in OptimalControl.jl v1.1 (#443)

v0.8.10

Choose a tag to compare

@github-actions github-actions released this 24 Aug 22:12
f29cfc4

MadNLP v0.8.10

Diff since v0.8.9

Merged pull requests:

Closed issues:

  • [MadNLPGPU] Update the interface for CUSOLVER (#460)

v0.8.9

Choose a tag to compare

@github-actions github-actions released this 12 Aug 18:21
c870f10

MadNLP v0.8.9

Diff since v0.8.8

Merged pull requests:

Closed issues:

  • Unable to use CompactLBGS in Float32 (#420)
  • Allow Setting bound_relax_factor to zero (#430)

v0.8.8

Choose a tag to compare

@github-actions github-actions released this 23 Jun 15:15
c2bfe39

MadNLP v0.8.8

Diff since v0.8.7

Merged pull requests:

Closed issues:

  • Issue with UMFPack for large sparse matrices (#368)
  • Don't allocate vectors of size nnzj or nnzh if not needed (#422)
  • Float32 in BFGS (#423)
  • Add violations of complementary constraints to the logs (#432)