Update to v56.1.1 #1
282
ojalgo.changes
282
ojalgo.changes
@@ -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>
|
||||
|
||||
|
||||
12
ojalgo.spec
12
ojalgo.spec
@@ -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
|
||||
|
||||
@@ -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
BIN
v56.1.1.tar.gz
LFS
Normal file
Binary file not shown.
Reference in New Issue
Block a user