oj! Algorithms v41.0.0 Release Notes

Release Date: 2016-11-13 // about 6 years ago
  • ๐Ÿ”„ Changed


    • ๐Ÿšš Moved the modifyMatching(...) methods from Mutate1D.Modifiable to a new interface Mutate1D.BiModifiable and only those classes that absolutely need to (to preserve existing functionality) implements that new interface. (Potentially api-breaking, but most likely not.) There are also corresponding interfaces Mutate2D.BiModifiable and MutateAnyD.BiModifiable
    • ๐Ÿ—„ The fillMatching(..) methods in Mutate1D.Fillable are deprecated.
    • ๐Ÿ†• New (functional) interfaces Callback1D, Callback2D & CallbackAnyD. The Access?D and Mutate?D interfaces have also gotten new default methods named passMathing(...) that makes use of those new interfaces.
    • There's a new method elements() in Access1D that returns an Iterable of ElementView1D - it allows to iterate over the instance's element "positions" without actually extracting the elements (unless you explicitly do so). There a corresponding method in Access2D. That interface also has methods rows() and columns() that does similar things but with rows and columns.
    • ElementView1D now implements ListIterator rather than Iterator.
    • ๐Ÿ†• New interface IndexMapper translates back and forth between an arbitrary "key" and a long index. Among other things used to implement the new (time) series classes.


    • ๐Ÿ“ฆ The previously package private class ArrayFactory is now public, and the static factory instances of BigArray, ComplexArray, PrimitiveArray, QuaternionArray and RationalArray are now also public.
    • ๐Ÿ“œ There's been additions to the ArrayFactory regarding how to create sparse or segmented arrays.
    • ๐Ÿ†• New class NumberList - essentially an "ArrayList" backed by ojAlgo's BasicArray hierarchy of classes.
    • ๐Ÿ†• New class LongToNumberMap - a long -> Number map - backed by ojAlgo's array classes.
    • ๐Ÿšš The previously deprecated methods searchAscending() and searchDescending() are now actually deleted, but the corresponding sortAscending() and sortDescending() got new implementation and had their deprecations removed instead.


    • There is now a new class EfficientFrontier to complement MarkowitzModel. If you don't want/need to be able set constraints and/or a target return/variance (like you can with the MarkowitzModel) then this new class is more efficient. Particular in regards to reusing partial results when calculating several points along the efficient frontier.
    • The MarkowitzModel class now has a method optimiser() that return an instance of Optimiser that enable turning validation and debugging of the underlying optimization algorithm on/off.
    • It is now possible to normalize any FinancePortfolio to the precision and scale (NumberContext) of your choice.
    • The optional "cleaning" functionality of FinanceUtils' toCorrelations(...) and toVolatilities(...) methods have been improved.
    • ๐Ÿ“œ The DataSource class now implements the new org.ojalgo.netio.BasicParser interface.


    • โž• Additions to FunctionSet: atan2, cbrt, ceil, floor & rint.
    • Made sure ojAlgo consistently (internally) uses PrimitiveFunction rather than java.lang.Math directly
    • ๐Ÿ‘Œ Improved the BigDecimal implementations of sqrt, root and the new cbrt functions.


    • ๐Ÿ“œ The resolve methods in IterativeSolverTask.SparseDelegate and MutableSolver, respectively, now return double rather than void or MatrixStore - they return the magnitude of the solution error.
    • ๐Ÿ—„ The method factory() in ElementsSupplier is renamed (deprecated) physical(). In MatrixStore you now have methods logical() and physical() returning MatrixStore.LogicalBuilder and PhysicalStore.Factory respectively.
    • ๐Ÿ“ฆ The nested class org.ojalgo.matrix.decomposition.DecompositionStore.HouseholderReference has been moved to the org.ojalgo.matrix.transformation package. Further it is now an interface rather than a class.
    • The method copyToBuilder() in BasicMatrix has been renamed copy()
    • It is now possible to extract complex valued eigenvectors (actually having ComplexNumber elements) using the getEigenvetors() and getEigenvetor(int) methods.
    • The eigenvalue array returned by getEigenvalues() is no longer required to always be sorted. If it is sorted or not is indicated by the isSorted() method.
    • The solve(...) methods in MatrixDecomposition.Solver are renamed getSolution(...)


    • ๐Ÿšš The 2 classes BufferedInputStreamReader and BufferedOutputStreamWriter have been removed - they didn't do anything other/more than the usual streams and reader/writer classes.
    • The getStreamReader() method of ResourceLocator now simply return a Reader rather than a BufferedReader.


    • The model parameter rescaling feature of ExpressionsBasedModel has been modified. Previously it didn't work very well with extremely large or small model parameters. Now with very large or small model parameters the rescaling functionality is turned off.
    • ๐Ÿ‘Œ Improved ExpressionsBasedModel's presolve functionality to identify and handle some cases of unbounded and/or uncorrelated variables.


    • โž• Added quartiles to SampleSet: getQuartile1(), getQuartile2(), getQuartile3() and getInterquartileRange()


    • ๐Ÿ†• New builder instances in the BasicSeries interface. If you use them they will return implementations, new to v41, backed by array classes from the org.ojalgo.array package. It is now possible to use just about any date/time related class as a time series key.
    • ๐Ÿ—„ The methods getDataSeries() and getPrimitiveValues() are deprecated, both replaced by the new method getPrimitiveSeries(). Further the modifyAll(UnaryFunction) method is deprecated. You should do modifications on the series returned by getPrimitiveSeries().