oj! Algorithms v45.0.0 Release Notes

Release Date: 2018-03-30 // about 6 years ago
  • 🔄 Changed

    Switced to using JUnit 5!

    org.ojalgo.access

    • Methods Access1D.wrapAccess1D(...) has been renamed simply Access1D.wrap(...), and similarly Access2D.wrap(...)
    • ➕ Add/restore fillMatching(...) methods to the Mutate1D.Fillable interface.

    org.ojalgo.function

    • 🆕 New method getLinearFactors() in MultiaryFunction.TwiceDifferentiable that returns the gradient at 0.

    org.ojalgo.matrix

    Major Changes!!
    • 🔄 Changed matrix multiplication code to be better on modern hardware & JVM:s (not fully verified to be better).
    • 🗄 Everything "Big" has been deprecated: BigMatrix, BigDenseStore and everything else using BigDecimal elements. This is intended to be replaced by the new RationalNumber based implementations.
    • 🔨 The ComplexNumber related code (all of it) has been refactored/generalised to handle any Scalar implementation (ComplexNumber, RationalNumber, Quaternion and any other future implementations). ComplexDenseStore has been deprecated and replaced by GenericDenseStore.
    • 🆕 New interfaces MatrixTransformation and MatrixTransformation.Transformable - an attempt to unify matrix transformation implementations.
    • 🆕 New package org.ojalgo.matrix.geometry containing mutable 3D vector math classes.
    • 🛠 Fixed a bug with sparse matrix multiplication – in some cases the result was wrong (depending on the internal structure of the nonzero elements). The bug was actually in the SparseArray class.
    • 🛠 Fixed a bug with incorrect pseudoinverse in RawSingularValue.
    • 🛠 Fixed correct sign on determinant in QR decompositions

    org.ojalgo.netio

    • ➕ Added default methods to BasicLogger.Printer to simplify creating custom implementations.

    org.ojalgo.optimisation

    • ➕ Added new methods getUnadjustedLowerLimit() and getUnadjustedUpperLimit() to the Variable and Expression classes.
    • 🔧 Optimisation.Options now allow to specify a solver specific configurator method. This is useful when creating 3:d party solvers.
    • 👍 Experimental support for Special Ordered Sets (SOS) in ExpressionsBasedModel.
    • Variable:s are now ordered (compared using) their indices rather than their names.
    • 🆕 New variants of addVariable() and addExpression() methods that don't require you to supply an entity name. (A name is generated for you.)
    • 🔄 Changes to presolver and validation code. Fixed a whole bunch of problems, mainly related to rounding errors.
    • 🔨 Refactoring in the IntegerSolver. It should now be more memory efficient. Also, somewhat, modified the branching strategy.
    • ➕ Added the possibility to get progress logging from the solvers (Currently only implemented in IntegerSolver). model.options.progress(IntegerSolver.class);

    API breaking!

    • The 'slack', 'problem', 'objective' and 'integer' properties of Optimisation.Options have been unified and replaced by a new property 'feasibility'.

    org.ojalgo.random

    • 👀 It is now possible to setSeed(long) on any RandomNumber and Random1D instance.

    org.ojalgo.scalar

    • RationalNumber has been re-implemented using primitive long and numerator and denominator (they used to be BigInteger).
    • RationalNumber can now be instatiated from a double without creating any objevts other than the resulting RationalNumber instance. There is also an alternative implementation using rational approximation.

    org.ojalgo.type

    • 🆕 New TypeContext implementation, named TemporalContext, to handle the classes from Java's new date time API. The older DateContext is still available.
    • 🐛 Bug fixed in a NumberContext factory method - getPercent(int,Locale)