diff --git a/ojalgo.changes b/ojalgo.changes index e7df5c1..5b1b80e 100644 --- a/ojalgo.changes +++ b/ojalgo.changes @@ -1,3 +1,285 @@ +------------------------------------------------------------------- +Wed Dec 24 21:14:30 UTC 2025 - Anton Shvetz + +- 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, Function) that maps + arbitrary items to feature vectors and returns clusters as + List>. + + 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, Function) 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 it is now + DenseArray.Factory. 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 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 diff --git a/ojalgo.spec b/ojalgo.spec index bc798d5..449a8ac 100644 --- a/ojalgo.spec +++ b/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 diff --git a/v55.1.0.tar.gz b/v55.1.0.tar.gz deleted file mode 100644 index ce82b78..0000000 --- a/v55.1.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a41291b906e88b126945720e1e8f41fb5bc4f9ccf1418f97a4a1a89ad2f7043e -size 59799615 diff --git a/v56.1.1.tar.gz b/v56.1.1.tar.gz new file mode 100644 index 0000000..2e45ed6 --- /dev/null +++ b/v56.1.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d26ac0f97954a3f7ffd57f2e9cf538397111b405f671b7814b23da14ad33ba6 +size 60385059