Update to v56.1.1 #1

Merged
fstrba merged 1 commits from urbic/ojalgo:main into main 2025-12-26 09:03:54 +01:00
4 changed files with 291 additions and 9 deletions

View File

@@ -1,3 +1,285 @@
-------------------------------------------------------------------
Wed Dec 24 21:14:30 UTC 2025 - Anton Shvetz <shvetz.anton@gmail.com>
- Update to v56.1.1
* Added
~ org.ojalgo.matrix
+ There was a problem with GenericStore factory type
declarations and usage.
- Update to v56.1.0
* Added
~ org.ojalgo.data
+ New package org.ojalgo.data.proximity containing various
distance and similarity calculation utilities.
+ Spectral clustering: New
org.ojalgo.data.cluster.SpectralClusterer implementing
spectral clustering over feature vectors using an RBF
similarity graph and the symmetric normalised Laplacian.
Factory methods FeatureBasedClusterer.newSpectral(int) and
newSpectral(DistanceMeasure,int) create instances.
+ Clustering facade: New
org.ojalgo.data.cluster.FeatureBasedClusterer facade with
factory methods newAutomatic(...), newGreedy(...),
newKMeans(...), and newSpectral(...). Adds a generic
cluster(Collection<T>, Function<T,float[]>) that maps
arbitrary items to feature vectors and returns clusters as
List<Map<T,float[]>>.
+ Automatic k selection: New
org.ojalgo.data.cluster.AutomaticClusterer that derives
thresholds from distance statistics to seed/refine clusters
(k-means under the hood).
~ org.ojalgo.matrix
+ Spectral decomposition: New Eigenvalue.Spectral interface
(extends both Eigenvalue and SingularValue) and factory
convenience Eigenvalue.Factory#makeSpectral(int) for normal
(in particular symmetric / Hermitian) matrices, exposing a
decomposition that can simultaneously be treated as an
eigenvalue- and singular value decomposition. Includes
isSPD() convenience check.
+ Static utility helpers: Eigenvalue.reconstruct(Eigenvalue)
plus SingularValue.invert(...), SingularValue.solve(...)
and SingularValue.reconstruct(...) centralise pseudoinverse
/ solve / reconstruction logic.
+ New Quasi-Minimal Residual (QMR) and Minimal Residual
(MINRES) iterative solvers for general nonsymmetric square
and symmetric (possibly indefinite) systems, respectively.
Contributed by @Programmer-Magnus.
~ org.ojalgo.concurrent
+ Execute tasks in a separate JVM: New
ExternalProcessExecutor that runs a specified static method
or a Serializable Callable/Runnable in an external OS
process (child JVM). Provides:
= Hard cancellation and timeouts by killing the process
tree.
= Binary IPC framing (MAGIC/VER/LEN/CRC32) over stdio;
stdout is reserved for protocol frames to avoid
corruption.
= Configurable ProcessOptions builder for heap (-Xmx),
additional JVM args, system properties, environment and
classpath; sensible defaults for Maven/Gradle test/main
classpaths.
= Overloads execute(...), call(...) and run(...) to target
methods by Method, MethodDescriptor or
owner/name/parameter types.
= ProcessWorker main class (child entrypoint) and
MethodDescriptor describing methods across classloaders.
= ProcessAwareThread and a process-aware thread factory
used so that interrupting an owner thread forcibly tears
down the child process.
+ Thread factory: DaemonPoolExecutor exposes an internal
process-aware ThreadFactory used by ExternalProcessExecutor
(threads remain daemon and identifiably named).
+ Collections: MultiviewSet adds isAnyContents() to cheaply
detect if any backed priority view still has queued
entries.
~ org.ojalgo.machine
+ JavaType adds utilities box(Class<?>), unbox(Class<?>) and
resolveType(String) to convert between primitive/wrapper
types and resolve primitive/array/class names (e.g.
"int[]", "java.lang.String[]").
* Changed
~ org.ojalgo.data
+ Clustering refactor and performance: Greedy and k-means
implementations now share a PointDistanceCache for pairwise
distances, centroids and initialisation (median-based
threshold), reducing allocations and repeated work.
+ Consistent factories and results: All clusterers are
constructed via FeatureBasedClusterer factories and return
clusters sorted by decreasing size when using the generic
cluster(Collection<T>, Function<T,float[]>) entry point.
+ Singular Value Decomposition API now uses standard
nomenclature: diagonal singular value matrix accessor
changed from getD() to getS() (see Deprecated). Internal
implementations (DenseSingularValue, RawSingularValue)
updated accordingly.
+ Performance & allocation improvements in DenseSingularValue
and RawSingularValue: direct use of internal singular value
array (s[]), deferred/cached construction of S and inverse,
centralised solve/invert logic reducing temporary object
creation.
+ Eigenvalue decomposition updated to integrate spectral
variant; minor javadoc clarifications and shared
reconstruction via new static helper.
~ org.ojalgo.matrix
+ Internal refactoring in the
org.ojalgo.matrix.task.iterative package. If you only used
what was there these changes shouldn't affect you, but if
you have implemented your own solver it does.
+ Created a Preconditioner interface. Factored the
Jacobi-presolving out of the ConjugateGradientSolver and
additionally implemented a Symmetric Successive
Over-Relaxation (SSOR) preconditioner.
~ org.ojalgo.optimisation
+ In ConvexSolver, the iterative Schur complement solver used
in the active set solver, is now configurable (which
implementation to use). Use either the
ConjugateGradientSolver or QMRSolver, or some other
implementation.
~ org.ojalgo.concurrent
+ DivideAndConquer now uses a safer split-and-join: sibling
tasks are cancelled on failure, causes are propagated, and
interruption is preserved. The configurable Divider exposes
threshold(int) and parallelism(IntSupplier);
ProcessingService#newDivider() returns one bound to its
executor. Default worker count uses
OjAlgoUtils.ENVIRONMENT.threads consistently.
+ ProcessingService#divider() is deprecated in favour of
newDivider() (same behaviour); javadocs clarified for
compute/map/reduce* regarding uniqueness and hashing
requirements.
+ DaemonPoolExecutor: internal addition of a process-aware
thread factory; no behavioural change for existing
new*ThreadPool(...) helpers.
* Deprecated
~ org.ojalgo.matrix
+ SingularValue#getD() deprecated; use getS() instead.
(Existing code continues to work; plan to remove in a
future major release.)
~ org.ojalgo.concurrent
+ ProcessingService#divider() in favour of newDivider().
* Fixed
~ org.ojalgo.optimisation
+ Fixed a couple of presolve issues with
ExpressionsBasedModel and quadratic constraints.
- Update to v56.0.0
ojAlgo is now modularised into a JPMS named module, and that
module is named "ojalgo".
* Added
~ org.ojalgo.matrix
+ New MatrixStore:s compressed sparse column (CSC) and
compressed sparse row (CSR) implementations named R064CSC
and R064CSR (primitive double, R064, only). Any/all of the
previously existing sparse MatrixStore implementations
SparseStore, RowsSupplier and ColumnsSupplier can be
converted to either of these new formats.
+ New utility Eigenvalue#sort function that allow to sort
eigenvalue-vector pairs in descending order. This existed
before as a private method, and was used internally. Now
it's publicly available.
+ New sparse LU decomposition, and it's updatable using
Forrest-Tomlin.
~ org.ojalgo.optimisation
+ Many improvements to the LP solvers (improved basis
representation, candidate selection and more).
~ org.ojalgo.scalar
+ The Scalar interface now defines a isZero() method.
* Changed
~ org.ojalgo.array
+ Refactored the constructors, factories and builders for the
classes in the org.ojalgo.array package. Most things should
work as before, but the generics signature of
DenseArray.Factory has changed. Instead of
DenseArray.Factory<ELEMENT_TYPE> it is now
DenseArray.Factory<ELEMENT_TYPE, ARRAY_TYPE>. What you may
want to do is to instead use a subclass like
PrimitiveArray.Factory.
+ SparseArray is now restricted to Integer#MAX_VALUE size
(used to be Long#MAX_VALUE). There's been a number of
changes internally in order to make it perform better at
smaller sizes. Also added a bunch of new stuff to support
sparse functionality in the org.ojalgo.matrix package.
~ org.ojalgo.machine
+ The (use of the) system property "shut.up.ojAlgo" is
removed. Users will no longer be warned about missing
hardware profiles. Instead this is now always estimated.
The previous fallback estimation logic has been improved
and promoted to be the primary solution. Users are still
encouraged to provide hardware profile instances, but these
are now instead used as test cases for the estimation
logic.
~ org.ojalgo.matrix
+ For symmetric matrices the Eigenvalue decompositions are
now always sorted. Previously it varied depending which
implementation the factory returned. You should still
always check Eigenvalue.isOrdered() that a general rule
for both eigenvalue and singular value decompositions.
+ Cleaned up the InvertibleFactor interface. The 2-arg
ftran/btran alternatives are removed.
~ org.ojalgo.optimisation
+ Tweaking to various parts of ConvexSolver.
+ Multiple changes and improvements to the LinearSolver. The
number of industry standard netlib models that are solved
(fast enough to be included) as junit tests cases increased
from 45 to 78. The LinearSolver has actually been improved
over several versions, but with this version we see a lot
of that coming together and working quite well.
+ Reworked the IntegerSolver's branching strategy. It now
uses pseudo-costs when selecting which variable to branch
on. The NodeKey now keeps track of the branch depth. This
is used to implement proper depth-first and breadth-first
strategies for the deferred nodes. The default set of node
worker priorities have changed.
+ Reworked the IntegerSolver's cut generation strategy.
~ org.ojalgo.type
+ The relative error (epsilon) derived from the precision of
a NumberContext was previously never smaller than the
machine epsilon. Now it can be arbitrarily small depending
only on the specified precision.
* Fixed
~ org.ojalgo.matrix
+ Matrix multiplication performance using RawStore has been
much improved.
~ org.ojalgo.optimisation
+ When using extended precision with the ConvexSolver there
was a problem when extracting the solution. The solver uses
Quadruple and in the end the solution is using BigDecimal
but at an intermediate step it was converted to double.
- Update to v55.2.0
* Added
~ org.ojalgo.optimisation
+ The EBM file format parser now handles comments and empty
lines in the model file (contributed by Magnus Jansson).
* Changed
~ org.ojalgo.array
+ Better implementation of SparseArray.supplyTo(Mutate1D).
~ org.ojalgo.matrix
+ General refactoring in the decomposition package. Shouldn't
be any api-breaking changes.
+ New interface MatrixDecomposition.Updatable for partial
updates to decompositions. The existing LU decomposition
implementations implement this.
~ org.ojalgo.optimisation
+ Refactoring to SimplexSolver (significant performance
improvements with larger/sparse instances).
+ Improved feasibility check for the QP ActiveSetSolver.
+ Removed some unnecessary work, and garbage creation, when
validation models (contributed by @hallstromsamuel)
~ org.ojalgo.scalar
+ When creating rotation Quaternions the angle is now halved
in the factory method as is standard elsewhere.
(contributed by @twistedtwin)
- Update to v55.1.2
* Changed
~ org.ojalgo.matrix
+ Minor change to progress logging of the
ConjugateGradientSolver sparse iterative equation system
solver.
~ org.ojalgo.optimisation
+ Minor change to method signature of
ExpressionsBasedModel#addIntegration.
- Update to v55.1.1
* Added
~ org.ojalgo.type
+ The ForgetfulMap gained support for disposer-hooks code
that is called when objects are invalidated and removed
from the cache. Also streamlined the code to create single
ForgetfulMap.ValueCache<T> instances.
* Changed
~ org.ojalgo.optimisation
+ The configuration option options.experimental is no longer
used to switch between the old/classic and new/dual simplex
solvers. Instead there are specific configurations for this
options.linear().dual() and options.linear().primal(). If
you don't specify which to use, there is internal logic
that switches implementation based on problem size.
+ Various internal refactoring and numerical tuning to the LP
solvers.
~ org.ojalgo.type
+ NumberContext now explicitly exposes the relative and
absolute errors as getRelativeError() and
getAbsoluteError(), and the epsilon() method has been
redefined to return the maximum of those two values.
-------------------------------------------------------------------
Wed Jan 15 00:19:43 UTC 2025 - Anton Shvetz <shvetz.anton@gmail.com>

View File

@@ -1,7 +1,7 @@
#
# spec file for package ojalgo
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: ojalgo
Version: 55.1.0
Version: 56.1.1
Release: 0
Summary: Java code that has to do with mathematics, linear algebra and optimisation
License: MIT
@@ -26,6 +26,7 @@ URL: https://ojalgo.org/
Source0: https://github.com/optimatika/ojAlgo/archive/refs/tags/v%{version}.tar.gz
BuildRequires: fdupes
BuildRequires: maven-local
BuildRequires: mvn(org.openjdk.jmh:jmh-generator-annprocess)
BuildArch: noarch
%description
@@ -40,17 +41,16 @@ Group: Documentation/HTML
API documentation for %{name}.
%prep
%setup -q -n ojAlgo-%{version}
%autosetup -n ojAlgo-%{version}
%pom_remove_plugin org.sonatype.plugins:nexus-staging-maven-plugin
%pom_remove_plugin org.sonatype.central:central-publishing-maven-plugin
%pom_remove_plugin :maven-source-plugin
%pom_remove_plugin :maven-javadoc-plugin
%{mvn_file} : %{name}
%build
%{mvn_build} -f -- \
-Dproject.build.outputTimestamp=$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)
%{mvn_build} -f
%install
%mvn_install

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a41291b906e88b126945720e1e8f41fb5bc4f9ccf1418f97a4a1a89ad2f7043e
size 59799615

BIN
v56.1.1.tar.gz LFS Normal file

Binary file not shown.