ojAlgo v57

ojAlgo v57.0.0 has been released!

This is also the first release announced on the new ojalgo.org site, which has been rebuilt from the ground up using Eleventy replacing the old WordPress setup. The site is now fully static, fast, and easy to maintain.

New ADMM QP Solver

The highlight of v57 is a new ADMM (OSQP-style) QP solver named AlternatingDirectionSolver. The ConvexSolver.Configuration now lets you specify either the ACTIVE_SET or ADMM algorithm. If you don't specify, simple logic will select for you. The new solver also works with iterative refinement.

Optimisation Environment

A new Optimisation.Environment class holds solver integrations, presolvers, variable/expression factories, and 3rd-party configurators. Use Optimisation.newEnvironment() to create isolated configurations and Environment.newModel() as the model factory.

Revised Simplex Improvements

The revised simplex solver now freezes the constraint matrix to R064CSC before solving and uses raw double[] working vectors, reducing per-iteration allocations and improving cache locality. The SparseDecomposition (backed by SparseLU) is now the default basis engine, with an adaptive refactorisation heuristic that triggers re-decomposition based on fill-in.

Integer Solver Enhancements

The IntegerSolver gained root-phase strong-branching probes, a true global dual bound, and warm-start support for bound-only changes. Together these significantly improve branch-and-bound performance and the quality of solutions found early.

Matrix Decomposition Factors

Decompositions now expose individual factors via MatrixDecomposition.Solver.getFactors() returning List<InvertibleFactor>. Each factor supports ftran/btran operations on both PhysicalStore and raw double[] arrays.

Breaking Changes

A few changes require attention when upgrading:

  • ModelStrategy.initialise(...) signature simplified to no-arg. Any third-party ModelStrategy subclass needs updating.
  • ExpressionsBasedModel.getVariableValues() is now a cheap extraction only and returns State.UNEXPLORED. Code that relied on validated state/objective behaviour must call getVariableValuesValidated() instead.
  • UpdatableSolver.getEntityMap() now returns Optional<EntityMap>.
  • The ExpressionsBasedModel.Validator class and setKnownSolution(...) methods have been removed.
  • Optimisation.Result multiplier methods are deprecated in favour of getDualSolution() and getDualValues().

Read the complete change log for all the details:

https://github.com/optimatika/ojAlgo/blob/develop/CHANGELOG.md

<dependency>
    <groupId>org.ojalgo</groupId>
    <artifactId>ojalgo</artifactId>
    <version>57.0.0</version>
</dependency>