oj! Algorithms v40.0.0 Release Notes

Release Date: 2016-06-20 // over 6 years ago
  • ๐Ÿ”„ Changed


    • ๐Ÿ— The Access1D.Builder, Access2D.Builder and AccessAnyD.Builder interfaces have been removed. The API of the BasicMatrix builder have changed slightly as a consequence of this.
    • ๐Ÿšš Many of the nested interfaces within Access1D, Access2D and AccessAnyD have been moved/renamed to be normal top level interfaces (declared in their own files). Typically this just means that import, implements and extends declarations within ojAlgo have changed.
    • ๐Ÿ†• New nested interface Access1D.Aggregatable defining a new method N aggregateAll(Aggregator)
    • ๐Ÿ†• New methods in Access1D - dot(Access1D<?>) and daxpy(double,Mutate1D) that bring basic (primitive double) linear algebra functionality to any/all Access1D implementation. Those are very useful operations to "always" have available.


    • ๐Ÿ“œ It is now possible to specify the initial capacity (the number of nonzeros) of a SparseArray, and a SparseArray can now be emptied / reset to all zeros.


    • ๐Ÿ›  Fixed a bug that erroneously set null constraints (unbounded) to zero with the MarkowitzModel and PortfolioMixer classes. This was mostly a problem when defining custom constraints on MarkowitzModel instances with lower limits only (the upper limit was erroneously set to 0.0).
    • ๐Ÿ›  Fixed a bug in MarkowitzModel: Portfolios with shorting allowed and a target return/variance were not always calculated correctly.


    • ๐Ÿ—„ Deprecated org.ojalgo.function.aggregator.AggregationResults as well as the snapshot() method of org.ojalgo.function.aggregator.AggregationFunction.


    • ๐Ÿ— There is a new interface BasicMatrix.Builder that specifies the API of the BasicMatrix builder. Previously this was specified by Access2D.Builder that is now removed. The API changed in that the various builder methods no longer return the builder instance, but void.
    • ๐Ÿ‘Œ Improved performance with sparse and/or structured matrices - refactored existing multiplication code to actually make use of the firstInRow/Column and limitOfRow/Column methods. (Also fixed a couple of bugs related to implementations of those methods.)
    • ๐Ÿ†• New package org.ojalgo.matrix.task.iterative containing interative equation system solvers such as JacobiSolver, GaussSeidelSolver and ConjugateGradientSolver.
    • ๐Ÿ— Two new methods in MatrixStore.Builder - limits(int,int) and offsets(int,int) - that lets you treat a subregion of a matrix as a (full) matrix.
    • ๐Ÿ”„ Changes to BasicMatrix:
      • The method add(int,int,Number) has been removed. BasicMatrix instances are immutable! Use copyToBuilder() instead.
      • It now extends as much as possible from the org.ojalgo.access and org.ojalgo.algebra packages. Similar methods previously defined in BasicMatrix are now replaced by whatever is in the superinterfaces resulting in some (api-breaking) signature changes.
      • As much as possible has been moved up from BasicMatrix to the various interfaces in org.ojalgo.access
      • Lots of things have been deprecated to enabled changes (possible) changes in the next version.
    • ๐Ÿ†• New matrix decomposition factory instances. There is now one factory interface for each of the matrix decompositions as well as standard instantiations for "BIG", "COMPLEX" and "PRIMITIVE".
    • The method MatrixStore#multiplyLeft(Access1D) has been renamed premultiply(Access1D), and the signature of MatrixStore#multiply(Access1D) has changed to multiply(MatrixStore). That's because it is now declared in org.ojalgo.algebra.Opreation.Multiplication.
    • ๐Ÿ— The class MatrixStore.Builder has been renamed MatrixStore.LogicalBuilder and the method in MatrixStore that returned an instance of it has been renamed from MatrixStore.builder() to MatrixStore.logical(). Further the MatrixStore.LogicalBuilder#build() method has been deprecated in favor of get().
    • ๐Ÿ›  Fixed accuracy problem with the SVD and pseudoinverse for larger matrices, as well as a problem that could cause indefinite iterations with the SVD decomposition.
    • The multiply-method where you supply a target (product) matrix has changed signature. It now returns void, and the target is an ElementsConsumer rather than a PhysicalStore.
    • ๐Ÿ“œ SparseStore now implements ElementsConsumer.
    • The signature of the MatrixTask factory methods have changed. You now have to specify boolean flags for symmetric/hermitian and positive definite independantly.


    • ๐Ÿ‘Œ Improved ConvexSolver. It now has much better performance with larger models. Current tests indicate a 50x speed improvement on a model of roughly 4k variables. With smaller models, < 100 variables, there's no significant difference between the old and new versions. These are internal changes only, but "significant". All unit test pass, but you should expect some changed behaviour.
    • Some internal modifications to LinearSolver.


    • ๐Ÿ›  Fixed bugs in CoordinationSet related to pruning and resampling when the series did not have specified names.


    • ๐Ÿ“‡ Renamed Colour to ColourData
    • ๐Ÿ›  Fixed a bug in CalendarDate#toSqlDate(). The Date was 70 years off. (The bug was introduced in v39.)
    • CalendarDate now implements Temporal
    • CalendarDateUnit now implements TemporalUnit
    • CalendarDateDuration now implements TemporalAmount