All Versions
46
Latest Version
Avg Release Cycle
41 days
Latest Release
836 days ago

Changelog History
Page 1

  • v51.4.1 Changes

    August 26, 2022

    ๐Ÿ›  Fixed

    org.ojalgo.optimisation
    • ๐Ÿ›  Fixed a problem with the IntegerSolver where you could get an ArrayIndexOutOfBoundsException when concurrently solving multiple problem instances sharing the same IntegerStrategy.
    org.ojalgo.random
    • ๐Ÿ›  Fixed a regression with RandomNumber where it was no longer possible to set a seed for the underlying java.util.Random instance.
  • v51.4.0 Changes

    July 05, 2022

    Last version to target Java 8!

    โž• Added

    org.ojalgo.data
    • ๐Ÿ†• New class org.ojalgo.data.domain.finance.series.FinanceDataReader that implements both FinanceData and DataFetcher. Instead of fetching data from some (web) service it reads and and parses files. Already had some parsers, and since it implements both FinanceData and DataFetcher, it can be used with much of the existing code. In particular DataSource has been updated to include this reader option.
    • ๐Ÿ†• New alternatives to calculate correlations and covariance matrices in DataProcessors.
    org.ojalgo.function
    • AggregatorFunction gained a new method filter(PredicateFunction) that allows to define a filter for which values will be considered in the aggregation.
    org.ojalgo.netio
    • ๐Ÿ†• New methods in BasicLogger to handle logging of exceptions with stacktrace.
    • ๐Ÿ— With a TextLineWriter it is now possible to instantiate a CSV line/row builder to help create "text lines" that are delimited data.
    org.ojalgo.random
    • ๐Ÿ†• New package org.ojalgo.random.scedasticity containing ARCH and GARCH models as well as stochatstic processes based on those.
    org.ojalgo.series
    • ๐Ÿ†• New class SimpleSeries that is the simplest possible BasicSeries implementation.
    • โž• Added capabilities to do things like quotients, log and differences on a CoordinatedSet (of PrimitiveSeries) as well as possibility to get a correlations or cocariance matrix directly.

    ๐Ÿ”„ Changed

    org.ojalgo.data
    • ๐Ÿ”จ Refactoring of the org.ojalgo.data.domain.finance.series package. This package very much depends on org.ojalgo.series which is extensively refactored.
    • FinanceData is now generic and the getHistoricalPrices() method is now declared to contain a specified subclass of DatePrice.
    • ๐Ÿ—„ DatePrice now implements EntryPair.KeyedPrimitive rather than the deprecated KeyValue interface. The public key field has been renamed date (the date is the key). All DatePrice subclasses are now immutable.
    • The getPriceSeries() method of FinanceData changed the return type from BasicSeries<LocalDate, Double> to BasicSeries<LocalDate, PrimitiveNumber> and the BasicSeries implementation used is also changed.
    org.ojalgo.random
    • ๐Ÿšš The Process1D class is now final. It used to have some subclasses that had been depreceted for a while, they're now removed.
    org.ojalgo.series
    • ๐Ÿ”จ Extensive refactoring of all BasicSeries subinterfaces and implementations, including some breaking name changes. The BasicSeries.NaturallySequenced interface still exists, but is not really used for anything. All the useful stuff is in BasicSeries. All methods that used long keys to interact with entries are removed.
    org.ojalgo.type
    • The interface CalendarDate.Resolution now also extends Structure1D.IndexMapper and defines a method to adjustInto for CalendarDate.

    ๐Ÿ›  Fixed

    org.ojalgo.matrix
    • ๐Ÿ›  Fixed problems related to extracting eigenpairs and calculating generalised Eigenvalue decompositions for complex matrices (ComplexNumber elements).
  • v51.3.0 Changes

    May 15, 2022

    โž• Added

    org.ojalgo.data
    • ๐Ÿ†• New batch processising tool BatchNode to do processing of huge data sets on a single machine.
    org.ojalgo.netio
    • ๐Ÿ†• New interfaces FromFileReader and ToFileWriter paired with a wide range of implementations, builders, parsers, interpreters... There is also a new class ShardedFile that describes a set of shards and allow creations of readers and writers of the total set of files.
    org.ojalgo.structure
    • Access1D, Access2D and AccessAnyD each gained additional features to select (view) subsets of the elements and/or to iterate over elements/rows/columns/vectors/matruces...
    org.ojalgo.type
    • ๐Ÿ†• New utilities CloseableList and CloseableMap to simplify handing (closing) multiple readers/writers.
    • ๐Ÿ— Whole new package, org.ojalgo.type.function, with lots of utlities for consumers/suppliers (or readers/writers). A lot of the new stuff in org.ojalgo.netio build on this.
    • โž• Additions to EntryPair. Primarily to allow creation of key-value "pairs" with dual keys.

    ๐Ÿ”„ Changed

    org.ojalgo.concurrent
    • ๐Ÿ‘ The ParallelismSupplier interface had the min and max methods renamed limit and require to better dscribe what they do.
    • ๐Ÿ”จ Refactoring and additions to ProcessingService.
    org.ojalgo.netio
    • ๐Ÿ“œ Reimplemented the IDX file parser in terms of DataInterpreter and DataReader.
    • ๐Ÿ”จ Refactored the BasicParser interface to make use of the new FromFileReader and ToFileWriter.
    • ๐Ÿ”จ Refactored BasicLogger and everything associated with it. There are API-breaking changes, but with stuff mostly used internally.
    org.ojalgo.optimisation
    • ๐Ÿ—„ The default value of the (MIP) gap property in IntegerStrategy changed from NumberContext.of(6,8) to NumberContext.of(7,8). This is to match what the recently deprecated mip_gap option used to be. The default MIP gap used to 1E-6, and that corresponfs to 7 digits precision (not 6).
    org.ojalgo.random
    • ๐Ÿ”จ Refactoring and additions to FrequencyMap.
    org.ojalgo.structure
    • ๐Ÿ”จ The various row, rows, column and columns methods in Structure2D.Logical have been signature-refactored to be more logical. If you used the row or column alternatives to reference more than 1 row/column you need to change your code to instead use rows or columns.
    • ๐Ÿ‘ The previously existing Access2D.RowView, Access2D.ColumnView, AccessAnyD.VectorView and AccessAnyD.MatrixView gained support to "goTo" directly to a specified row/column/vector/matrix

    ๐Ÿ—„ Deprecated

    org.ojalgo.netio
    • ๐Ÿšš A bunch of old useless stuff... will be removed eventually.

    ๐Ÿ›  Fixed

    org.ojalgo.matrix
    • Calling indexOfLargest() on a Primitive64Store, Primitive32Store or GenericStore would result in a StackOverflowError.
    org.ojalgo.optimisation
    • There was a problem with integer rounding of lower/upper bounds of integer expressions - since it was applied too late the presolver would sometimes fail to detect infeasible nodes as such, and instead generate an incorrect problem for the main solver. This was not a very common problem, but did happen sometimes, and the fix made the presolver generally more efficient.
  • v51.2.0 Changes

    April 20, 2022

    โž• Added

    org.ojalgo.function
    • โœ… MissingMath can now find the greatest common denominator of multiple int:s or long:s.
    org.ojalgo.matrix
    • โž• Added support for creating diagonal matrices in MatrixFactory.
    org.ojalgo.optimisation
    • โœ… There is now a new solver, GomorySolver, for (mixed) integer models. It implements Gomory's cutting plane method. This solver is primarily used to test the cut generation feature used in IntegerSolver, which is the solver to use for (mixed) integer problems. The real news here is that IntegerSolver now generates GMI cuts as part of the solve process.
    • Utilities in Expression (actually in ModelEntity) to simplify creating Expression:s from combinations of other Expression:s (ModelEntity.s).
    org.ojalgo.type
    • โž• Additional utilities in NumberContext like isInteger(double), isSmall(BigDecimal,BigDecimal) and more.

    ๐Ÿ”„ Changed

    org.ojalgo.optimisation
    • The IntegerSolver is no longer a pure branch-and-bound algorithm. It now also generates GMI cuts.
    • ๐Ÿ”จ A whole lot of refactoring to enable cut generation for the IntegerSolver. This touches almost everything in the optimisation package, but the public API:s for normal/recommended usage should be unchanged.

    ๐Ÿ—„ Deprecated

    org.ojalgo.optimisation
    • ๐Ÿ—„ Deprecated the separation between preferred and fallback solver integrations in ExpressionsBasedModel. Instead, if you want add a solver integration, you simply call addIntegration(Integration<?>).

    ๐Ÿ›  Fixed

    org.ojalgo.optimisation
    • ๐Ÿ”จ The MPS file parser of ExpressionsBasedModel has been refactored and can now handle more format variants. In particular some instances from MIPLIB2017 had problems.

    โœ‚ Removed

    • ๐Ÿ—„ The methods isMinimisation() and isMaximisation() from ExpressionsBasedModel. They've been deprecated for a while and are replaced by getOptimisationSense(). There is no way to set the optimisation sense โ€“ you simply call minimise() or maximise();
  • v51.1.0 Changes

    March 17, 2022

    โž• Added

    org.ojalgo.optimisation
    • Expression gained add methods corresponding to each of the existing set methods.

    ๐Ÿ—„ Deprecated

    org.ojalgo.optimisation
    • ๐Ÿ—„ The IntIndex and IntRowColumn variants of the Expression add and set methods are deprecated. You should use the alternatives taking a Variable or simply an int instead.
    org.ojalgo.concurrent
    • ๐Ÿ†• New class MultiviewSet that combines a Set with multiple PriorityQueue:s. This allows to have multiple task queues, with different priorities, all backed by a common set of tasks.

    ๐Ÿ”„ Changed

    org.ojalgo.optimisation

    Big changes for the IntegerSolver!

    • ๐Ÿ†• New way to multi-thread the IntegerSolver. It no longer does fork-join, but instead makes use of ojAlgo's ProcessingService.
    • The Optimisation.Options.mip_defer and Optimisation.Options.mip_gap configurations are no longer used. Instead there is a whole new framework for how to control the IntegerSolver. This framework will be a work in progress for quite some time. Please use it, and give feedback, but don't expect it to be a stable API.

    ๐Ÿ›  Fixed

    org.ojalgo.optimisation
    • Calling model.simplify() no longer discards constraints flagged both redundant and infeasible โ€“ info about the model being infeasible is no longer lost.

    โœ‚ Removed

    • ๐Ÿšš A bunch of stuff that's been deprecated for a while is now removed. Only some of which is specifically mentioned below.
    org.ojalgo.structure
    • The interfaces Access*D.Elements and Access*D.IndexOf have been removed. Some parts of what they defined are still available via other interfaces. Like for instance the Access1D.Aggregatable interface took over the indexOfLargest() method.
  • v51.0.0 Changes

    February 21, 2022

    โž• Added

    org.ojalgo.data
    • ๐Ÿšš ojAlgo-finance is no longer maintained as a separate repository. Most of its contents have been moved here:

    • ojAlgo-finance:org.ojalgo.finance -> org.ojalgo.data.domain.finance

    • ojAlgo-finance:org.ojalgo.finance.portfolio -> org.ojalgo.data.domain.finance.portfolio

    • ojAlgo-finance:org.ojalgo.finance.portfolio.simulator -> org.ojalgo.data.domain.finance.portfolio.simulator

    • ojAlgo-finance:org.ojalgo.finance.data -> org.ojalgo.data.domain.finance.

    • ojAlgo-finance:org.ojalgo.finance.data.fetcher -> org.ojalgo.data.domain.finance.

    • ๐Ÿ“œ ojAlgo-finance:org.ojalgo.finance.data.parser -> org.ojalgo.data.domain.finance.

    • ojAlgo-finance:org.ojalgo.finance.scalar -> org.ojalgo.scalar

    • ๐Ÿšš ojAlgo-finance:org.ojalgo.finance.business -> not moved, wont be maintained

    org.ojalgo.optimisation
    • Now possible to save and reload optimisation models from files - new ExpressionsBasedModel specific file format.

    ๐Ÿ”„ Changed

    org.ojalgo.optimisation
    • ๐Ÿ”จ Cleanup and refactoring of LinearSolver and related classes.
    • ๐Ÿ‘Œ Improved numerical stability of ConvexSolver.
  • v50.0.2 Changes

    January 26, 2022

    ๐Ÿ”„ Changed

    org.ojalgo.matrix
    • ๐Ÿ”จ Refactoring and re-tuning of Householder related code. The QR decomposition in particular.
    org.ojalgo.structure
    • โœ… Modified the behaviour of the Access1D.equals(Access1D<?>,Access1D<?>,NumberContext) utility method. It's used to determine if two 1D data structures are numerically similar/equal. This change also affects the behaviour of corresponding functionality in Access2D and AccessAnyD as well as various TestUtils methods.
  • v50.0.1 Changes

    January 09, 2022

    ๐Ÿ›  Fixed

    org.ojalgo.matrix
    • ๐ŸŽ Matrix multiplication performance regression introduced with v49.0.0.
  • v50.0.0 Changes

    January 02, 2022

    โž• Added

    org.ojalgo.matrix
    • ๐Ÿ†• New interface Provider2D with a set of nested functional interfaces defining matrix properties and operations.
    org.ojalgo.optimisation
    • ๐Ÿ“œ Possibility to read the QPS file format (QP related extensions to the MPS file format). More precisely added the ability to parse QUADOBJ and QMATRIX sections in "MPS" files.
    • โœ… A bunch of convex test cases from https://www.cuter.rl.ac.uk/Problems/marmes.shtml
    org.ojalgo.random
    • ๐Ÿ†• New FrequencyMap class as well as a factory method in SampleSet that counts occurrences of different values.
    org.ojalgo.structure
    • โž• Added a nonzeros() method to Access2D that returns a ElementView2D<N, ?>.

    ๐Ÿ”„ Changed

    org.ojalgo.function
    • The MIN and MAX BinaryFunction constants of ComplexMath and QuaternionMath are changed to align with the scalar's compareTo methods (that are also changed).
    org.ojalgo.matrix
    • MatrixStore now implements Structure2D.Logical directly. No need to call logical() to get a LogicalBuilder.
    • BasicMatrix now implements Structure2D.Logical as well as Operate2D directly. No need to call logical() to get a LogicalBuilder.
    • ๐Ÿ”จ A lot of refactoring among the package private code.
    org.ojalgo.optimisation
    • Minor change regarding LinearSolver pivot point selection.
    org.ojalgo.scalar
    • ComplexNumber and Quaternion had their compareTo methods changed to first just compare then real part and only if they're equal compare the imaginary parts.

    ๐Ÿ—„ Deprecated

    org.ojalgo.matrix
    • ๐Ÿ—„ The logical() method in MatrixStore is deprecated. No need for it as MatrixStore:s are now "logical".
    • ๐Ÿ—„ The logical() method in BasicMatrix is deprecated. No need for it as BasicMatrix:s are now "logical".

    ๐Ÿ›  Fixed

    org.ojalgo.matrix
    • ๐Ÿ›  Fixed rare multiplication problem when all involved matrices were RawStore instances and the left multiplcation matrix was a vector, but a column vector when a row vector was expected; in that case the multiplication code would fail.

    โœ‚ Removed

    org.ojalgo.matrix
    • ๐Ÿšš The MatrixStore.Factory interface has been removed. Corresponding functionality have instead been added to PhysicalStore.Factory. This also mean that the various static factory instances in MatrixStore have been removed. Instead use the instances available in each of the PhysicalStore instances.
    • ๐Ÿšš The MatrixStore.LogicalBuilder class has been removed. Instead MatrixStore now implements Structure2D.Logical directly. No need to call logical() to get a LogicalBuilder.
    • ๐Ÿšš The BasicMatrix.LogicalBuilder class has been removed...
    org.ojalgo.structure
    • ๐Ÿšš The Factory*D interfaces had their makeZero methods removed. These had been deprecated for while, and are now removed.
    • ๐Ÿšš The Structure*D.Logical interfaces had their get methods removed. Most implementors still have a get method. This is just to make it more flexible regarding what type is returned.
  • v49.2.1 Changes

    October 26, 2021

    ๐Ÿ”„ Changed

    org.ojalgo.optimisation
    • The LinearSolver (simplex) pivot selection code has been refined.