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)