From dff43a0530a6fbd524e3af24795cf6b92142735c Mon Sep 17 00:00:00 2001 From: Gilles Date: Fri, 11 Mar 2016 12:43:15 +0100 Subject: [PATCH] MATH-1158. Use new sampler API. --- .../neuralnet/FeatureInitializerFactory.java | 14 +++++++------- .../sofm/TravellingSalesmanSolver.java | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/apache/commons/math4/ml/neuralnet/FeatureInitializerFactory.java b/src/main/java/org/apache/commons/math4/ml/neuralnet/FeatureInitializerFactory.java index 1729e4253..9c36dd394 100644 --- a/src/main/java/org/apache/commons/math4/ml/neuralnet/FeatureInitializerFactory.java +++ b/src/main/java/org/apache/commons/math4/ml/neuralnet/FeatureInitializerFactory.java @@ -21,7 +21,8 @@ import org.apache.commons.math4.analysis.UnivariateFunction; import org.apache.commons.math4.analysis.function.Constant; import org.apache.commons.math4.distribution.RealDistribution; import org.apache.commons.math4.distribution.UniformRealDistribution; -import org.apache.commons.math4.random.RandomGenerator; +import org.apache.commons.math4.rng.RandomSource; +import org.apache.commons.math4.rng.UniformRandomProvider; /** * Creates functions that will select the initial values of a neuron's @@ -45,10 +46,10 @@ public class FeatureInitializerFactory { * @throws org.apache.commons.math4.exception.NumberIsTooLargeException * if {@code min >= max}. */ - public static FeatureInitializer uniform(final RandomGenerator rng, + public static FeatureInitializer uniform(final UniformRandomProvider rng, final double min, final double max) { - return randomize(new UniformRealDistribution(rng, min, max), + return randomize(new UniformRealDistribution(min, max).createSampler(rng), function(new Constant(0), 0, 0)); } @@ -64,8 +65,7 @@ public class FeatureInitializerFactory { */ public static FeatureInitializer uniform(final double min, final double max) { - return randomize(new UniformRealDistribution(min, max), - function(new Constant(0), 0, 0)); + return uniform(RandomSource.create(RandomSource.WELL_19937_C), min, max); } /** @@ -98,12 +98,12 @@ public class FeatureInitializerFactory { /** * Adds some amount of random data to the given initializer. * - * @param random Random variable distribution. + * @param random Random variable distribution sampler. * @param orig Original initializer. * @return an initializer whose {@link FeatureInitializer#value() value} * method will return {@code orig.value() + random.sample()}. */ - public static FeatureInitializer randomize(final RealDistribution random, + public static FeatureInitializer randomize(final RealDistribution.Sampler random, final FeatureInitializer orig) { return new FeatureInitializer() { /** {@inheritDoc} */ diff --git a/src/test/java/org/apache/commons/math4/ml/neuralnet/sofm/TravellingSalesmanSolver.java b/src/test/java/org/apache/commons/math4/ml/neuralnet/sofm/TravellingSalesmanSolver.java index fea0f162b..ebd4200da 100644 --- a/src/test/java/org/apache/commons/math4/ml/neuralnet/sofm/TravellingSalesmanSolver.java +++ b/src/test/java/org/apache/commons/math4/ml/neuralnet/sofm/TravellingSalesmanSolver.java @@ -44,8 +44,8 @@ import org.apache.commons.math4.ml.neuralnet.sofm.LearningFactorFunction; import org.apache.commons.math4.ml.neuralnet.sofm.LearningFactorFunctionFactory; import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunction; import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunctionFactory; -import org.apache.commons.math4.random.RandomGenerator; -import org.apache.commons.math4.random.Well44497b; +import org.apache.commons.math4.rng.RandomSource; +import org.apache.commons.math4.rng.UniformRandomProvider; import org.apache.commons.math4.util.FastMath; /** @@ -56,7 +56,7 @@ import org.apache.commons.math4.util.FastMath; public class TravellingSalesmanSolver { private static final long FIRST_NEURON_ID = 0; /** RNG. */ - private final RandomGenerator random; + private final UniformRandomProvider random; /** Set of cities. */ private final Set cities = new HashSet(); /** SOFM. */ @@ -72,7 +72,7 @@ public class TravellingSalesmanSolver { */ public TravellingSalesmanSolver(City[] cityList, double numNeuronsPerCity) { - this(cityList, numNeuronsPerCity, new Well44497b().nextLong()); + this(cityList, numNeuronsPerCity, RandomSource.createLong()); } /** @@ -84,7 +84,7 @@ public class TravellingSalesmanSolver { public TravellingSalesmanSolver(City[] cityList, double numNeuronsPerCity, long seed) { - random = new Well44497b(seed); + random = RandomSource.create(RandomSource.WELL_1024_A, seed); // Make sure that each city will appear only once in the list. for (City city : cityList) { @@ -338,12 +338,13 @@ public class TravellingSalesmanSolver { final UnivariateFunction f1 = FunctionUtils.add(h1, new Constant(centre[0])); final UnivariateFunction f2 = FunctionUtils.add(h2, new Constant(centre[1])); - final RealDistribution u - = new UniformRealDistribution(random, -0.05 * radius, 0.05 * radius); + final RealDistribution u = new UniformRealDistribution(-0.05 * radius, 0.05 * radius); return new FeatureInitializer[] { - FeatureInitializerFactory.randomize(u, FeatureInitializerFactory.function(f1, 0, 1)), - FeatureInitializerFactory.randomize(u, FeatureInitializerFactory.function(f2, 0, 1)) + FeatureInitializerFactory.randomize(u.createSampler(random), + FeatureInitializerFactory.function(f1, 0, 1)), + FeatureInitializerFactory.randomize(u.createSampler(random), + FeatureInitializerFactory.function(f2, 0, 1)) }; } }