Changelog History
Page 1
-
v51.4.1 Changes
August 26, 2022๐ Fixed
org.ojalgo.optimisation
- ๐ Fixed a problem with the
IntegerSolverwhere you could get anArrayIndexOutOfBoundsExceptionwhen concurrently solving multiple problem instances sharing the sameIntegerStrategy.
org.ojalgo.random
- ๐ Fixed a regression with
RandomNumberwhere it was no longer possible to set a seed for the underlyingjava.util.Randominstance.
- ๐ 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.FinanceDataReaderthat implements bothFinanceDataandDataFetcher. Instead of fetching data from some (web) service it reads and and parses files. Already had some parsers, and since it implements bothFinanceDataandDataFetcher, it can be used with much of the existing code. In particularDataSourcehas been updated to include this reader option. - ๐ New alternatives to calculate correlations and covariance matrices in
DataProcessors.
org.ojalgo.function
AggregatorFunctiongained 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
BasicLoggerto handle logging of exceptions with stacktrace. - ๐ With a
TextLineWriterit 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.scedasticitycontainingARCHandGARCHmodels as well as stochatstic processes based on those.
org.ojalgo.series
- ๐ New class
SimpleSeriesthat is the simplest possibleBasicSeriesimplementation. - โ Added capabilities to do things like
quotients,loganddifferenceson 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.seriespackage. This package very much depends onorg.ojalgo.serieswhich is extensively refactored. FinanceDatais now generic and thegetHistoricalPrices()method is now declared to contain a specified subclass ofDatePrice.- ๐
DatePricenow implementsEntryPair.KeyedPrimitiverather than the deprecatedKeyValueinterface. The publickeyfield has been renameddate(the date is the key). AllDatePricesubclasses are now immutable. - The
getPriceSeries()method ofFinanceDatachanged the return type fromBasicSeries<LocalDate, Double>toBasicSeries<LocalDate, PrimitiveNumber>and theBasicSeriesimplementation used is also changed.
org.ojalgo.random
- ๐ The
Process1Dclass 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
BasicSeriessubinterfaces and implementations, including some breaking name changes. TheBasicSeries.NaturallySequencedinterface still exists, but is not really used for anything. All the useful stuff is inBasicSeries. All methods that usedlongkeys to interact with entries are removed.
org.ojalgo.type
- The interface
CalendarDate.Resolutionnow also extendsStructure1D.IndexMapperand defines a method toadjustIntoforCalendarDate.
๐ Fixed
org.ojalgo.matrix
- ๐ Fixed problems related to extracting eigenpairs and calculating generalised
Eigenvaluedecompositions for complex matrices (ComplexNumberelements).
- ๐ New class
-
v51.3.0 Changes
May 15, 2022โ Added
org.ojalgo.data
- ๐ New batch processising tool
BatchNodeto do processing of huge data sets on a single machine.
org.ojalgo.netio
- ๐ New interfaces
FromFileReaderandToFileWriterpaired with a wide range of implementations, builders, parsers, interpreters... There is also a new classShardedFilethat describes a set of shards and allow creations of readers and writers of the total set of files.
org.ojalgo.structure
Access1D,Access2DandAccessAnyDeach gained additional features toselect(view) subsets of the elements and/or to iterate over elements/rows/columns/vectors/matruces...
org.ojalgo.type
- ๐ New utilities
CloseableListandCloseableMapto 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.netiobuild on this. - โ Additions to EntryPair. Primarily to allow creation of key-value "pairs" with dual keys.
๐ Changed
org.ojalgo.concurrent
- ๐ The
ParallelismSupplierinterface had theminandmaxmethods renamedlimitandrequireto better dscribe what they do. - ๐จ Refactoring and additions to
ProcessingService.
org.ojalgo.netio
- ๐ Reimplemented the IDX file parser in terms of
DataInterpreterandDataReader. - ๐จ Refactored the
BasicParserinterface to make use of the newFromFileReaderandToFileWriter. - ๐จ Refactored
BasicLoggerand 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
IntegerStrategychanged 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,columnandcolumnsmethods inStructure2D.Logicalhave been signature-refactored to be more logical. If you used theroworcolumnalternatives to reference more than 1 row/column you need to change your code to instead userowsorcolumns. - ๐ The previously existing
Access2D.RowView,Access2D.ColumnView,AccessAnyD.VectorViewandAccessAnyD.MatrixViewgained 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,Primitive32StoreorGenericStorewould 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
- โ
MissingMathcan 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 thatIntegerSolvernow 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
NumberContextlikeisInteger(double),isSmall(BigDecimal,BigDecimal)and more.
๐ Changed
org.ojalgo.optimisation
- The
IntegerSolveris 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
ExpressionsBasedModelhas 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
Expressiongainedaddmethods corresponding to each of the existingsetmethods.
๐ Deprecated
org.ojalgo.optimisation
- ๐ The
IntIndexandIntRowColumnvariants of theExpressionaddandsetmethods are deprecated. You should use the alternatives taking aVariableor simply anintinstead.
org.ojalgo.concurrent
- ๐ New class
MultiviewSetthat combines aSetwith 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_deferandOptimisation.Options.mip_gapconfigurations 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.ElementsandAccess*D.IndexOfhave been removed. Some parts of what they defined are still available via other interfaces. Like for instance theAccess1D.Aggregatableinterface 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
ExpressionsBasedModelspecific file format.
๐ Changed
org.ojalgo.optimisation
- ๐จ Cleanup and refactoring of
LinearSolverand 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 inAccess2DandAccessAnyDas well as variousTestUtilsmethods.
-
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
Provider2Dwith 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
FrequencyMapclass as well as a factory method inSampleSetthat counts occurrences of different values.
org.ojalgo.structure
- โ Added a
nonzeros()method toAccess2Dthat returns aElementView2D<N, ?>.
๐ Changed
org.ojalgo.function
- The
MINandMAXBinaryFunctionconstants ofComplexMathandQuaternionMathare changed to align with the scalar's compareTo methods (that are also changed).
org.ojalgo.matrix
MatrixStorenow implementsStructure2D.Logicaldirectly. No need to calllogical()to get aLogicalBuilder.BasicMatrixnow implementsStructure2D.Logicalas well asOperate2Ddirectly. No need to calllogical()to get aLogicalBuilder.- ๐จ A lot of refactoring among the package private code.
org.ojalgo.optimisation
- Minor change regarding
LinearSolverpivot point selection.
org.ojalgo.scalar
ComplexNumberandQuaternionhad theircompareTomethods 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 inMatrixStoreis deprecated. No need for it asMatrixStore:s are now "logical". - ๐ The
logical()method inBasicMatrixis deprecated. No need for it asBasicMatrix:s are now "logical".
๐ Fixed
org.ojalgo.matrix
- ๐ Fixed rare multiplication problem when all involved matrices were
RawStoreinstances 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.Factoryinterface has been removed. Corresponding functionality have instead been added toPhysicalStore.Factory. This also mean that the various static factory instances inMatrixStorehave been removed. Instead use the instances available in each of thePhysicalStoreinstances. - ๐ The
MatrixStore.LogicalBuilderclass has been removed. InsteadMatrixStorenow implementsStructure2D.Logicaldirectly. No need to calllogical()to get aLogicalBuilder. - ๐ The
BasicMatrix.LogicalBuilderclass has been removed...
org.ojalgo.structure
- ๐ The
Factory*Dinterfaces had theirmakeZeromethods removed. These had been deprecated for while, and are now removed. - ๐ The
Structure*D.Logicalinterfaces had theirgetmethods removed. Most implementors still have agetmethod. 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.