|
Change Log
ojAlgo currently targets Java 5 (1.5). It is however developed on a Mac that only has Java 6 available. There may be accidental use of some api only available with Java 6. If you discover a problem like that please mention this on the ojalgo-user mailing list. Further the complied jar-files that you download from Source Forge are built using Java 6, and therefore cannot be used on a lesser JVM version. If you need to run ojAlgo on a Java 5 JVM you need to compile it yourself. The source code is available with the download.
Do NOT use anything deprecated - it will be removed very soon! Most of what was deprecated at the time of the last release has already been removed. Removing something that was already deprecated is not mentioned in the change log.
Version 32 (not yet released)
- org.ojalgo.access.*
- It is now possible to wrap already existing double[], BigDecimal[] and ComplexNumber[] arrays in ArrayAccess instances. Previously you had to first create the ArrayAccess instance and then extract the "data".
- Access1D now extends Iterable, and there is a new default implementation Iterator1D of the Iterator interface. This means a whole bunch of ojAlgo classes are now iterable.
- org.ojalgo.finance.*
- New class PortfolioSimulator that lets you do multidimensional portfolio simulations (one correlated random process per asset) with periodic rebalancing.
- Some refactoring and additions to the FinancePortfolio hierarchy.
- org.ojalgo.machine.*
- Refactoring and additions...
- org.ojalgo.matrix.*
- New/modified implementations of the SingularValue and Eigenvalue decompositions. They should use less memory and (with the largest matrices) be slightly faster than previous implementations.
- Fixed a bug with complex valued Householder transformations. Complex valued matrix decompositions that used Householder transformations didn't work properly. Now it is fixed.
- org.ojalgo.optimisation.*
- The QuadraticSolver has been improved to handle a greater set of problems.
- org.ojalgo.random.*
- org.ojalgo.type.*
- New class CalendarDateDuration. It's expresses durations/intervals like 5 years, 1.567 months 0.5 hours....
- The parseObject() and formatString() methods in TypeContext has been deprecated/renamed and replaced by methods parse() and format().
Version 31 (latest release)
- org.ojalgo.access.*
- org.ojalgo.array.*
- org.ojalgo.chart.*
- org.ojalgo.function.*
- org.ojalgo.gui.*
- org.ojalgo.matrix.*
- The imported JAMA files were by mistake public in v30 rather than package-private. They've always been package-private before, and they are now again.
- There is no longer a DecompositionStore.Factory interface. Its methods are now defined in PhysicalStore.Factory.
- The BasicMatrix.Factory interface now extends Factory2D, and the same for the PhysicalStore.Factory interface. This caused slight refactoring of some parts of ojAlgo, and may also affect your code if you keep references to the various factory implementations.
- The compute(Access2D<N>) method of MatrixDecomposition is changes to be compute(Access2D<?>).
- New, optional, methods in the MatrixDecomposition interface - solve(MatrixStore, DecompostionStore) and getInverse(DecompostionStore) - that allow you to preallocate memory for the results.
- Refactored the code for LU and Cholesky dcompositions.
- New, refactored, versions of the Eigenvalue and SingularValue decomposition algorithms.
- org.ojalgo.optimisation.*
- Refactoring to the ModelEntity hierarchy. Models are now also model entities themselves. Nothing api-breaking yet, but I expect there will be.
- Fixed a bug with the LinearSolver that caused som models to incorrectly be reported as UNBOUNDED.
- Fixed a bug with the IntegerSolver that caused a NullPointerException if the relaxed problem was infeasible or unbounded.
- org.ojalgo.random.*
- New method getQuantile() in ContinuousDistribution that in turn is used to calculate getLowerConfidenceQuantile() and getUpperConfidenceQuantile() for some distributions.
- Deprecated getLowerConfidenceBound and getUpperConfidenceBound in GeometricBrownianMotion - they're incorrect, and have an unfortunate api.
- The classes WienerProcess and GeometricBrownianMotion have new methods getLowerConfidenceQuantile() and getUpperConfidenceQuantile() equivalent to the methods with the same names in ContinuousDistribution.
- org.ojalgo.scalar.*
- New method isPositive() in Scalar.
- Minor refactoring and additions to the various implementations.
- org.ojalgo.series.*
- Deprecated the BasicTimeSeries interface as well as the TimeInMillisSeries, CalendarSeries and DateSeries classes. They've all been replaced by the new CalendarDateSeries. All other classes/methods in ojAlgo that referenced any of the deprecated classes have already been refactored to instead use the new CalendarDateSeries. If you used any of those classes/methods directly you must cahange your code.
- org.ojalgo.type.*
Version 30
- org.ojalgo.*
- New library utility class that you can ask for data about ojAlgo (you can ask which version of ojAlgo you're currently using) or for some basic info (estimate) about the hardware the code is running on.
- org.ojalgo.access.*
- The toScalar(...) methods of Access1D, Access2D and AccessAnyD has been removed. Also removed the getMinDim() method in Access2D.
- Added a new interface Basic2D.
- Added a new class ArrayAccess - simply a class that encapsulates an array of numbers and implements Access1D.
- org.ojalgo.array.*
- The bulk of the methods defined in BasicArray are now protected instead of public - probably doesn't affect you.
- New methods in ArrayUtils that wrap 1- and 2-dimensional arrays of any subclass of Number in an Access1D or Access2D.
- org.ojalgo.concurrent.*
- Toatl refactoring... not API compatible at all.
- org.ojalgo.finance.*
- Major additions and, api-breaking, refactoring to the org.ojalgo.finance.portfolio.* package.
- Added support for min/max weight constraints on arbitrary groups of instrumnets to the MarkowitzModel class.
- New class PortfolioMixer - a fund of funds optimiser.
- org.ojalgo.function.*
- org.ojalgo.machine.*
- org.ojalgo.matrix.*
- New package org.ojalgo.matrix.store.operation that will contain code that is now in the PhysicalStore implementations. This is purely an organosational change that shouldn't affect you.
- The method set(int,int,Number) in BasicMatrx has been removed. This is an API-breaking change!
There are several alternatives:
- replace(int,int,Number) does exactly what set(int,int,Number) used to do.
- add(int,int,Number) is a variation
- There is now a new bulder accessible from the factory or directly from the various BasicMatrix implementations.
- New matrix decompositions; Bidiagonal, Hessenberg, Tridiagonal and Schur.
- The compute(...) method in MatrixDecomposition now takes an Access2D instead of a MatrixStore as input.
- Major improvements to existing Eigenvalue and SingularValue decompositions.
- Added some new MatrixStore implementations: WrapperStore, LowerTriangularStore, UpperTriangularStore, LowerHessenbergStore and UpperHessenbergStore.
- Some old MatrixStore implementations got new names: AboveBelowStore (MergedColumnsStore), ColumnsStore (SelectedColumnsStore), LeftRightStore (MergedRowsStore) and RowsStore (SelectedRowsStore).
- Reviewed and modified the matrix multiplication code in all MatrixStore implementations, PhysicalStore implementations in particular.
- Added makeColumn(Access1D) method to the PhysicalStore.Factory interface.
- BasicMatrix now extends the new Basic2D.
- Refactored how solve(...) and invert() are implemented in the Cholesky and LU decompositions as well as the BasicMatrix implementations - should use less memory now.
- Householder is no longer a class, it's just an interface now. There's been some refactoring regarding how Householder transformations are implemented.
- Rotation is now an abstract class. There's been some refactoring regarding how Rotation transformations are implemented.
- Re-imported JAMA, and re-applied the fixes/additions,
- org.ojalgo.optimisation.*
- Fixed a bug with the ExpressionsBasedModel that caused integer constrained models to always be solved as minimisation problems (even if you defined them as maximisation problems).
- Fixed a bug with the IntegerSolver that caused some non-integer solution to be recognised as integer solutions.
- Modified (improved) the LinearSolver.
- Some refactoring to Expression and ExpressionsBasedModel.
- org.ojalgo.random.*
- Slight improvement to SampleSet. The median value is now cached, and it is possible cast a SampleSet as a PrimitiveSeries.
- New class MultidimensionalGaussian that generates multidimensional Normal(0,1) random numbers.
- Complete rewrite of the org.ojalgo.random.process package. Even if some interfaces/classes/methods existed before with the same name, they are now different.
- org.ojalgo.scalar.*
- Internal refactoring of ComplexNumber including improved numerical accuracy.
- org.ojalgo.series.*
- org.ojalgo.type.*
Version 29
- org.ojalgo.access.*
- New package.
- New interfaces Access1D, Access2D and AccessAnyD. Everything 1, 2 or "Any" dimensional (respectively) should implement these interfaces. Probably BasicMatrix will be the only exception. (BasicMatrix is not generified, and JamaMatrix implements both BasicMatrix and PhysicalStore, that extends Access2D.)
- org.ojalgo.array.*
- org.ojalgo.concurrent.*
- org.ojalgo.finance.*
- New utility method makeCovarianceMatrix(...) in FinanceUtils that calculates a covariance matrix from a collection of BasicTimeSeries.
- Major refactoring of the ...data package. It is now possible to use GoogleSymbol and YahooSymbol independant of SymbolDataCache.
- Minor refactoring of the ...portfolio package. It is now possible to get the State of the underlying optimisation model/solver.
- org.ojalgo.function.*
- org.ojalgo.matrix.*
- BasicMatrx.Factory has a new method copyAnything2D(Access2D) and the methods copyArray(Array2D) and copyStore(MatrixStore) are deprecated, and corresponding changes are made in PhysicalStore.Factory as well. Both Array2D and MatrixStore implement the new interface Access2D.
- Everything related to "shading" MatrixStore:s has been deprecated - a handfull of methods in MatrixStore and PhysicalStore has been deprecated. The shading functionality has already been turned off, and the deprecated methods will be removed shortly.
- The methods getVectorZeroNorm and getVectorInfinityNorm in BasicMatrix are deprecated, and the getVectorNorm(int) method now only accept arguments 0, 1, 2 or MAX_VALUE.
- Added and re-implemented multithreading with many methods in BigDenseStore, ComplexDenseStore and PrimitiveDenseStore. Some things are now much faster, and others roughly the same... Due to these changes some higher-level code (matrix decompositions & optimisation algorithms) also perform better.
- Two new methods aggregateAll(ChainableAggregator) and aggregateAll(CollectableAggregator) in MatrixStore.
- Rewrote the algorithms for Cholesky and LU decompositions.
- New SingularValueDecomposition algorithm.
- Fixed a bug in QRDecomposition related to extracting "R" from decompositions of fat matrices.
- Extended the Eigenvalue interface and added a new primitive EigenvalueDecomposition implementation. This new implementation is a refactored copy of the Jama eigenvalue decomposition.
- Fixed a bug realted to solving equation systems for LU and Cholesky decompositions. With 10000 elements or more and at least two CPUs the reults would be wrong!
- org-ojalgo.optimisation.*
- org.ojalgo.scalar.*
- org.ojalgo.type.*
Version 28
- org.ojalgo.array.*
- The classes Array1Dim, Array2Dim and ArrayAnyDim have been renamed Array1D, Array2D and ArrayAnyD. If you've used any of these classes directly you need to do a search-and-replace on the class names. A number of methods (in various classes) named asArray1Dim() have been deprecated and renamed asArray1D(). There's also been further internal refactoring and bugfixing in these classes.
- org.ojalgo.concurrent.*
- org.ojalgo.constant.*
- All BigDecimal constant are now correct to a precision of a 128 bit (34 digits) floating point number.
- All double constants are now created from their BigDecimal counterpart.
- org.ojalgo.function.*
- The implementation/specification of the "smallest" aggregator function has changed. If there are no non-zero numbers; the default return value is zero. (It used to be infinity or some very big number.)
- It is now possible to get the preconfigured elements of PreconfiguredFirst, PreconfiguredSecond and PreconfiguredParameter.
- Some changes regarding the available constructors and factory methods.
- Everything related to LogicalFunction has been deprecated.
- org.ojalgo.matrix.*
- The previously announced changes (deprecations) related to the org.ojalgo.matrix.factory has been performed. At least in terms of import statements this affects large parts of ojAlgo and probably your code as well. There is now a "new" class MatrixFactory.
- The PhysicalStore.Factory interface has gotten two new methods - copyTransposed(MatrixStore) and copyConjugated(MatrixStore).
- 2 new methods in MatrixStore - transpose() and conjugate() - that produce transposed/conjugated PhysicalStore copies of the MatrixStore.
- The Householder-related code in the PhysicalStore implementations is now dual/multi-threaded.
- The Rotation-related code in the PhysicalStore implementations have been tweaked. (Roughly the same speed, but cleaner code.)
- New SingleStore (it existed before, but was not public).
- SuperimposedMatrixStore has been renamed/deprecated SuperimposedStore.
- RawStore has been deprecated. Use JamaMatrix instead.
- Internal changes to BigMatrix, ComplexMatrix and PrimitiveMatrix.
- A bit of (internal) tweaking of all the MatrixStore implementations.
- New methods maxpy(), raxpy() and caxpy() in PhysicalStore. ;-)
- New class MatrixStore.Builder.
- org.ojalgo.netio.*
- org.ojalgo.optimisation.*
- org.ojalgo.series.*
- Refactored the "time filter" functionality out of this package.
- org.ojalgo.type.*
Version 27
Version 26
- org.ojalgo.array.*
- Array1Dim now implements the List interface. This makes the toList() method redundant, and it has therefore been deprecated.
- There are now two different modifyMatching() methods - varying in which array's elements make up which function arguments - in all classes in this package. There used to be only one variant, and that one wasn't available in some classes.
- New class ArrayUtils. It contains utility methods to allow you to work with double[][] arrays the same way you use ojAlgo arrays. This simplified the task of making JamaMatrix implement PhysicalStore.
- Many methods have changed from being public to protected, and from final to "not final". This is largely/entirely an internal change. It doesn't affect the public api of any class that users could instantiate directly.
- The visit-methods no longer call reset() on the visitor. You are responsibel for resetting. If you get the AggregatorFunction from the threadlocal collection it is reset when you get it.
- org.ojalgo.function.*
- org.ojalgo.matrix.*
- There's been a couple of changes to BasicMatrix. The method getVectorProduct(BasicMatrix) has been renanamed (deprecated) multiplyVectors(BasicMatrix), and the return type of toListOfElements() has been changed from List<BigDecimal> to List<? extends Number>. Further the methods isVector() and isFullrank() has beenadded.
- Have extensively reworked all the "equals" methods in this package (and others) as well as the TestUtils class in junit tests.
- Moved (deprecated) some methods from MatrixUtils to ArrayUtils.
- LU has a new method getRowEchelonForm() that returns [D][U] or [DU] which others often refer to as simply [U].
- MatrixStore and PhysicalStore has "inherited" much of the functionality in Array2Dim, and as a consequence of this has deprecated many existing methods that became redundant. (There's been quite a bit API cleaning performed.) Further some methods have been moved up from PhysicalStore to MatrixStore. All togeher this is a big change!
- Found a problem with ojAlgos LU decomposition algorithms. They didn't produce the correct results in some cases. The "RawPrimitive" algorithm has been removed (deprecated) and the "DensePrimitive" algorithm has been rewritten to function properly in all cases.
- Added a method computeWithoutPivoting(MatrixStore) to the LU interface.
- PhysicalFactory has a new method named makeEye(int,int).
- There used to be a package private abstract class (parent to all non physical stores) that cached a PhysicalStore-copy of itself. This behaviour has been removed. Nothing is copied/cached unless you do it.
- org.ojalgo.optimisation.*
- The QuadraticSolver and subclasses are heavily refactored There are no API breaking changes, but the internals are all new. In the process the solver gained a pre-solver.
- The method getContribution (that used to be called getCost) in Objective has been renamed getContributionWeight.
- org.ojalgo.scalar.*
- Two new methods in Scalar – equals(Scalar) and round(NumberContext).
- org.ojalgo.type.*
- Quite a few additions and changes to NumberContext. The only api breakling change is that the method setRoundingMode doesn't do anything anymore. The rounding mode is now an immutable (final) property of NumberContext. There are now a set of methods named "round" to complement the "enforce" methods. "round" is a more lightweight type specific version of "enforce".
Version 25
- A couple of minor changes in the org.ojalgo.array package: The enforce or enforceAll methods have been deprecated. The complexity property/method has been renamed rank.
- Everything in the org.ojalgo.chart.data package has been removed. Instead there is a new abstract ChartBuilder class. Also a couple of additions to the BasicChart interface. You should expect further (probably API breaking) changes to this package sometime in the future.
- Added a couple of new methods to FinanceUtils, and created (extracted) a new interface FinancePortfolio. (The implementations were already there.) Added the abillity to get financial data (price series) from Google the same way it was already possible to get data from Yahoo.
- Moved everything that was in org.ojalgo.type.context.gui (and subpackages) to org.ojalgo.gui.
- Some additions to BasicMatrix; you can now directly get eigenvalues and singular values as well some a collection of norms. (Things you would otherwise have to create some decomposition to get.) JamaMatrix now implements both BasicMatrix and PhysicalStore, and there is a new JamaFactory that implements both MatrixFactory and PhysicalFactory. Made additions to MatrixUtils that operate on 2-dimensional arrays (the double[][] kind).
- Further improved the ActiveSetSolver's (de)activation strategy. Improved the toString implementations of ModelEntity (and its subclasses) using StringBuilder. Additionally some general (mostly internal) refactoring in the org.ojago.optimisation.quadratic package. Added a solve-method to QuadraticSolver that takes a suggested solution as input. In particular the ActiveSetSolver may be able to jumpstart its algorithm using this suggestion.
- Additions and improvements to SampleSet. Added things like min, max, median, first, last... Made a couple of changes to DiffusionProcess, and deprecated the BigProcess class.
- Substantial changes to the org.ojalgo.series package (again). It's better now... If you used/accessed code in this package directly, you'll have to modify your code a bit.
- Added the abillity to get a NumberContext as a UnaryFunction. Deprecated the Enforcer class.
- Some classes that implemented java.io.Serializable no longer do so. Generally this interface has been misused - plan to be much more strict in the future.
Version 24
Version 23
- The methods combineRows(...) and combineColumns(...) in Array2Dim (that was added with version 22) have been removed. Having rotateLeft(...) and rotateRight(...) in PhysicalStore is enough. Further there are a couple of deprecations in Array2Dim and ArrayAnyDim.
- The entire package org.ojalgo.array.visitor i removed. Corresponding functionality does of course still exist. Look in the org ojalgo.function.aggregator package. The NORM implementations in BigFunction, ComplexFunction & PrimitiveFunction are removed. Instead there is an AggregatorFunction named NORM.
- The PreconfiguredParameterFunction class has been renamed PreconfiguredParameter and PreconfiguredBinaryFunction has been replaced with PreconfiguredFirst and PreconfiguredSecond.
- MultiaryFunction has been modified - one deprecation and several addition. Further the get/setQuadraticWeight and get/setLinearWeight methods in CompoundFunction has been deprecated.
- The LagrangeSolver is adapted to, when necessary, use a SingularValueDecomposition to solve the generated equation system. Before it always used an LUDecomposition. The actual code change is in the various BasicMatrix implementations - this change affects everyone calling BasicMatrix#solve(BasicMatrix), and of course this also affects the ActiveSetSolver. Generally this change makes the quadratic solvers much more stable and forgiving.
- Deprecated one constructor and added another in each of the PolynomialFunction implementations.
- Just about all constructors in the BasicMatrix implementations are deprecated. You really should use MatrixFactory! ...and if you already did this change does not affect you.
- MatrixFactory has been redesigned and extended. Everything that worked before still works. There are also several additions and a couple of deprecation in PhysicalFactory.
- The classes ConcurrentDecomposition and Result has been deprecated and replaced with DecomposeAndSolve.
- Lots of additions/deprecations/improvements in the MatrixStore hierarchy. PermutationStore, SuperimposedColumnStore, SuperimposedElementStore, SuperimposedEyeStore, SuperimposedRowStore, are deprecated. IdentityStore and SuperimposedMatrixStore are new. ConjugatedStore no longer extends TransposedStore. Instead they both extend a new, package private, class.
- PhysicalStore's toArray() method has been deprecated.
- Lots of changes/additions/deprecations/improvements in the org.ojago.optimisation.* packages. The work to "tidy" the optimisation code started a couple of versions ago (atleast one) and is not finished yet... There has been a series of bug reports related to ActiveSetSolver. All of them have been fixed.
- Some changes and additions to the org.ojalgo.series package. There is now a TimeSeries interface and time series implementations based on both the Date and Calendar classes. The CoordinationSet class has been redesigned. If you used this; you're code is broken now (easy to fix).
- All methods in the org.ojalgo.matrix.jama.Jama* classes that should return either a MatrixStore or a BasicMatrix now actually returns a JamaMatrix. (JamaMatrix implements both MatrixStore and BasicMatrix.)
- The CVS modules ExtPriDE and ExtWicket has been deleted. The code they contained had little to do with ojAlgo (and there really wasn't much there).
Version 22
|