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 anArrayIndexOutOfBoundsException
when concurrently solving multiple problem instances sharing the sameIntegerStrategy
.
org.ojalgo.random
- ๐ Fixed a regression with
RandomNumber
where it was no longer possible to set a seed for the underlyingjava.util.Random
instance.
- ๐ Fixed a problem with the
-
v51.4.0 Changes
July 05, 2022Last version to target Java 8!
โ Added
org.ojalgo.data
- ๐ New class
org.ojalgo.data.domain.finance.series.FinanceDataReader
that implements bothFinanceData
andDataFetcher
. Instead of fetching data from some (web) service it reads and and parses files. Already had some parsers, and since it implements bothFinanceData
andDataFetcher
, it can be used with much of the existing code. In particularDataSource
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 methodfilter(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
containingARCH
andGARCH
models as well as stochatstic processes based on those.
org.ojalgo.series
- ๐ New class
SimpleSeries
that is the simplest possibleBasicSeries
implementation. - โ Added capabilities to do things like
quotients
,log
anddifferences
on aCoordinatedSet
(ofPrimitiveSeries
) 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 onorg.ojalgo.series
which is extensively refactored. FinanceData
is now generic and thegetHistoricalPrices()
method is now declared to contain a specified subclass ofDatePrice
.- ๐
DatePrice
now implementsEntryPair.KeyedPrimitive
rather than the deprecatedKeyValue
interface. The publickey
field has been renameddate
(the date is the key). AllDatePrice
subclasses are now immutable. - The
getPriceSeries()
method ofFinanceData
changed the return type fromBasicSeries<LocalDate, Double>
toBasicSeries<LocalDate, PrimitiveNumber>
and theBasicSeries
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. TheBasicSeries.NaturallySequenced
interface still exists, but is not really used for anything. All the useful stuff is inBasicSeries
. All methods that usedlong
keys to interact with entries are removed.
org.ojalgo.type
- The interface
CalendarDate.Resolution
now also extendsStructure1D.IndexMapper
and defines a method toadjustInto
forCalendarDate
.
๐ Fixed
org.ojalgo.matrix
- ๐ Fixed problems related to extracting eigenpairs and calculating generalised
Eigenvalue
decompositions for complex matrices (ComplexNumber
elements).
- ๐ New class
-
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
andToFileWriter
paired with a wide range of implementations, builders, parsers, interpreters... There is also a new classShardedFile
that describes a set of shards and allow creations of readers and writers of the total set of files.
org.ojalgo.structure
Access1D
,Access2D
andAccessAnyD
each gained additional features toselect
(view) subsets of the elements and/or to iterate over elements/rows/columns/vectors/matruces...
org.ojalgo.type
- ๐ New utilities
CloseableList
andCloseableMap
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 inorg.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 themin
andmax
methods renamedlimit
andrequire
to better dscribe what they do. - ๐จ Refactoring and additions to
ProcessingService
.
org.ojalgo.netio
- ๐ Reimplemented the IDX file parser in terms of
DataInterpreter
andDataReader
. - ๐จ Refactored the
BasicParser
interface to make use of the newFromFileReader
andToFileWriter
. - ๐จ 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 fromNumberContext.of(6,8)
toNumberContext.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
andcolumns
methods inStructure2D.Logical
have been signature-refactored to be more logical. If you used therow
orcolumn
alternatives to reference more than 1 row/column you need to change your code to instead userows
orcolumns
. - ๐ The previously existing
Access2D.RowView
,Access2D.ColumnView
,AccessAnyD.VectorView
andAccessAnyD.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 aPrimitive64Store
,Primitive32Store
orGenericStore
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.
- ๐ New batch processising tool
-
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 inIntegerSolver
, which is the solver to use for (mixed) integer problems. The real news here is thatIntegerSolver
now generates GMI cuts as part of the solve process. - Utilities in
Expression
(actually inModelEntity
) to simplify creatingExpression
:s from combinations of otherExpression
:s (ModelEntity
.s).
org.ojalgo.type
- โ Additional utilities in
NumberContext
likeisInteger(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 calladdIntegration(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()
andisMaximisation()
fromExpressionsBasedModel
. They've been deprecated for a while and are replaced bygetOptimisationSense()
. There is no way to set the optimisation sense โ you simply callminimise()
ormaximise()
;
- โ
-
v51.1.0 Changes
March 17, 2022โ Added
org.ojalgo.optimisation
Expression
gainedadd
methods corresponding to each of the existingset
methods.
๐ Deprecated
org.ojalgo.optimisation
- ๐ The
IntIndex
andIntRowColumn
variants of theExpression
add
andset
methods are deprecated. You should use the alternatives taking aVariable
or simply anint
instead.
org.ojalgo.concurrent
- ๐ New class
MultiviewSet
that combines aSet
with multiplePriorityQueue
: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'sProcessingService
. - The
Optimisation.Options.mip_defer
andOptimisation.Options.mip_gap
configurations are no longer used. Instead there is a whole new framework for how to control theIntegerSolver
. 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
andAccess*D.IndexOf
have been removed. Some parts of what they defined are still available via other interfaces. Like for instance theAccess1D.Aggregatable
interface took over theindexOfLargest()
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 inAccess2D
andAccessAnyD
as well as variousTestUtils
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 inSampleSet
that counts occurrences of different values.
org.ojalgo.structure
- โ Added a
nonzeros()
method toAccess2D
that returns aElementView2D<N, ?>
.
๐ Changed
org.ojalgo.function
- The
MIN
andMAX
BinaryFunction
constants ofComplexMath
andQuaternionMath
are changed to align with the scalar's compareTo methods (that are also changed).
org.ojalgo.matrix
MatrixStore
now implementsStructure2D.Logical
directly. No need to calllogical()
to get aLogicalBuilder
.BasicMatrix
now implementsStructure2D.Logical
as well asOperate2D
directly. No need to calllogical()
to get aLogicalBuilder
.- ๐จ A lot of refactoring among the package private code.
org.ojalgo.optimisation
- Minor change regarding
LinearSolver
pivot point selection.
org.ojalgo.scalar
ComplexNumber
andQuaternion
had theircompareTo
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 inMatrixStore
is deprecated. No need for it asMatrixStore
:s are now "logical". - ๐ The
logical()
method inBasicMatrix
is deprecated. No need for it asBasicMatrix
: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 toPhysicalStore.Factory
. This also mean that the various static factory instances inMatrixStore
have been removed. Instead use the instances available in each of thePhysicalStore
instances. - ๐ The
MatrixStore.LogicalBuilder
class has been removed. InsteadMatrixStore
now implementsStructure2D.Logical
directly. No need to calllogical()
to get aLogicalBuilder
. - ๐ The
BasicMatrix.LogicalBuilder
class has been removed...
org.ojalgo.structure
- ๐ The
Factory*D
interfaces had theirmakeZero
methods removed. These had been deprecated for while, and are now removed. - ๐ The
Structure*D.Logical
interfaces had theirget
methods removed. Most implementors still have aget
method. This is just to make it more flexible regarding what type is returned.
- ๐ New interface
-
v49.2.1 Changes
October 26, 2021๐ Changed
org.ojalgo.optimisation
- The LinearSolver (simplex) pivot selection code has been refined.