From ac65dcabb5ff4e77c7f1aad7e2d26c57d3e395af Mon Sep 17 00:00:00 2001 From: samy Date: Mon, 31 May 2021 20:37:50 +0200 Subject: [PATCH] MATH-1597: LowDiscrepancySequence supplier/jump for Halton and Sobol --- .../UnivariatePeriodicInterpolator.java | 2 +- .../PolynomialFunctionLagrangeForm.java | 4 +- .../polynomials/PolynomialsUtils.java | 4 +- .../distribution/EmpiricalDistribution.java | 146 ++++---- .../math4/legacy/ml/clustering/Cluster.java | 6 +- .../legacy/ml/distance/DistanceMeasure.java | 4 +- .../scalar/noderiv/AbstractSimplex.java | 345 ------------------ .../noderiv/MultiDirectionalSimplex.java | 215 ----------- .../noderiv/MultiDirectionalTransform.java | 119 ++++++ .../scalar/noderiv/NelderMeadSimplex.java | 280 -------------- .../scalar/noderiv/NelderMeadTransform.java | 182 +++++++++ .../nonlinear/scalar/noderiv/Simplex.java | 302 +++++++++++++++ .../scalar/noderiv/SimplexOptimizer.java | 190 ++++------ .../HaltonSequenceGenerator.java | 60 ++- .../LowDiscrepancySequence.java} | 29 +- .../SobolSequenceGenerator.java | 54 ++- .../legacy/quasirandom/package-info.java | 20 + .../legacy/random/StableRandomGenerator.java | 133 ------- .../descriptive/rank/PSquarePercentile.java | 2 +- .../stat/descriptive/rank/Percentile.java | 2 +- .../EmpiricalDistributionTest.java | 23 +- .../MultiStartMultivariateOptimizerTest.java | 7 +- ...ultivariateFunctionMappingAdapterTest.java | 16 +- ...ultivariateFunctionPenaltyAdapterTest.java | 26 +- .../scalar/noderiv/OptimTestUtils.java | 46 ++- .../SimplexOptimizerMultiDirectionalTest.java | 315 ++++++++-------- .../SimplexOptimizerNelderMeadTest.java | 307 ++++++++-------- .../HaltonSequenceGeneratorTest.java | 28 +- .../SobolSequenceGeneratorTest.java | 30 +- .../random/StableRandomGeneratorTest.java | 130 ------- src/changes/changes.xml | 15 +- 31 files changed, 1273 insertions(+), 1769 deletions(-) delete mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/AbstractSimplex.java delete mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/MultiDirectionalSimplex.java create mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/MultiDirectionalTransform.java delete mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/NelderMeadSimplex.java create mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/NelderMeadTransform.java create mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/Simplex.java rename commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/{random => quasirandom}/HaltonSequenceGenerator.java (80%) rename commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/{random/NormalizedRandomGenerator.java => quasirandom/LowDiscrepancySequence.java} (53%) rename commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/{random => quasirandom}/SobolSequenceGenerator.java (88%) create mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/quasirandom/package-info.java delete mode 100644 commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/random/StableRandomGenerator.java rename commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/{random => quasirandom}/HaltonSequenceGeneratorTest.java (85%) rename commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/{random => quasirandom}/SobolSequenceGeneratorTest.java (82%) delete mode 100644 commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/random/StableRandomGeneratorTest.java diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/interpolation/UnivariatePeriodicInterpolator.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/interpolation/UnivariatePeriodicInterpolator.java index ef3122a138..942d055563 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/interpolation/UnivariatePeriodicInterpolator.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/interpolation/UnivariatePeriodicInterpolator.java @@ -114,7 +114,7 @@ public UnivariateFunction interpolate(double[] xval, y[index] = yval[i]; } - SortInPlace.ASCENDING.accept(x, y); + SortInPlace.ASCENDING.apply(x, y); final UnivariateFunction f = interpolator.interpolate(x, y); return new UnivariateFunction() { diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialFunctionLagrangeForm.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialFunctionLagrangeForm.java index c0fe244b84..14f94b7c69 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialFunctionLagrangeForm.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialFunctionLagrangeForm.java @@ -78,7 +78,7 @@ public PolynomialFunctionLagrangeForm(double x[], double y[]) coefficientsComputed = false; if (!verifyInterpolationArray(x, y, false)) { - SortInPlace.ASCENDING.accept(this.x, this.y); + SortInPlace.ASCENDING.apply(this.x, this.y); // Second check in case some abscissa is duplicated. verifyInterpolationArray(this.x, this.y, true); } @@ -183,7 +183,7 @@ public static double evaluate(double x[], double y[], double z) System.arraycopy(x, 0, xNew, 0, x.length); System.arraycopy(y, 0, yNew, 0, y.length); - SortInPlace.ASCENDING.accept(xNew, yNew); + SortInPlace.ASCENDING.apply(xNew, yNew); // Second check in case some abscissa is duplicated. verifyInterpolationArray(xNew, yNew, true); return evaluateInternal(xNew, yNew, z); diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialsUtils.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialsUtils.java index 44da4c1451..6430d3140f 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialsUtils.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/polynomials/PolynomialsUtils.java @@ -366,7 +366,9 @@ public static double[] shift(final double[] coefficients, private static PolynomialFunction buildPolynomial(final int degree, final List coefficients, final RecurrenceCoefficientsGenerator generator) { - + // Synchronizing on a method parameter is not safe; however, in this + // case, the lock object is an immutable field that belongs to this + // class. synchronized (coefficients) { final int maxDegree = (int) AccurateMath.floor(AccurateMath.sqrt(2 * coefficients.size())) - 1; if (degree > maxDegree) { diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EmpiricalDistribution.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EmpiricalDistribution.java index c8f5021533..65e580883c 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EmpiricalDistribution.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/distribution/EmpiricalDistribution.java @@ -46,40 +46,46 @@ /** *

Represents an - * empirical probability distribution -- a probability distribution derived + * empirical probability distribution: Probability distribution derived * from observed data without making any assumptions about the functional form * of the population distribution that the data come from.

* - *

An EmpiricalDistribution maintains data structures, called - * distribution digests, that describe empirical distributions and - * support the following operations: