Le 24/01/2014 12:55, er...@apache.org a écrit : > Author: erans > Date: Fri Jan 24 11:55:25 2014 > New Revision: 1560953 > > URL: http://svn.apache.org/r1560953 > Log: > Enable choice of RNG, so that the unit test can be run with a > seed that makes it always succeed.
Thanks a lot Gilles ! Luc > > Modified: > > commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ml/neuralnet/FeatureInitializerFactory.java > > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/KohonenTrainingTaskTest.java > > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/TravellingSalesmanSolver.java > > Modified: > commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ml/neuralnet/FeatureInitializerFactory.java > URL: > http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ml/neuralnet/FeatureInitializerFactory.java?rev=1560953&r1=1560952&r2=1560953&view=diff > ============================================================================== > --- > commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ml/neuralnet/FeatureInitializerFactory.java > (original) > +++ > commons/proper/math/trunk/src/main/java/org/apache/commons/math3/ml/neuralnet/FeatureInitializerFactory.java > Fri Jan 24 11:55:25 2014 > @@ -21,6 +21,7 @@ import org.apache.commons.math3.distribu > import org.apache.commons.math3.distribution.UniformRealDistribution; > import org.apache.commons.math3.analysis.UnivariateFunction; > import org.apache.commons.math3.analysis.function.Constant; > +import org.apache.commons.math3.random.RandomGenerator; > > /** > * Creates functions that will select the initial values of a neuron's > @@ -42,6 +43,25 @@ public class FeatureInitializerFactory { > * @throws org.apache.commons.math3.exception.NumberIsTooLargeException > * if {@code min >= max}. > */ > + public static FeatureInitializer uniform(final RandomGenerator rng, > + final double min, > + final double max) { > + return randomize(new UniformRealDistribution(rng, min, max), > + function(new Constant(0), 0, 0)); > + } > + > + /** > + * Uniform sampling of the given range. > + * > + * @param min Lower bound of the range. > + * @param max Upper bound of the range. > + * @param rng Random number generator used to draw samples from a > + * uniform distribution. > + * @return an initializer such that the features will be initialized with > + * values within the given range. > + * @throws org.apache.commons.math3.exception.NumberIsTooLargeException > + * if {@code min >= max}. > + */ > public static FeatureInitializer uniform(final double min, > final double max) { > return randomize(new UniformRealDistribution(min, max), > > Modified: > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/KohonenTrainingTaskTest.java > URL: > http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/KohonenTrainingTaskTest.java?rev=1560953&r1=1560952&r2=1560953&view=diff > ============================================================================== > --- > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/KohonenTrainingTaskTest.java > (original) > +++ > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/KohonenTrainingTaskTest.java > Fri Jan 24 11:55:25 2014 > @@ -63,7 +63,10 @@ public class KohonenTrainingTaskTest { > new City("i0", 1, 1), > }; > > - final TravellingSalesmanSolver solver = new > TravellingSalesmanSolver(squareOfCities, 2); > + // Seed that allows the unit test to always succeed. > + final long seed = 1245632379L; > + > + final TravellingSalesmanSolver solver = new > TravellingSalesmanSolver(squareOfCities, 2, seed); > // printSummary("before.travel.seq.dat", solver); > solver.createSequentialTask(15000).run(); > // printSummary("after.travel.seq.dat", solver); > > Modified: > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/TravellingSalesmanSolver.java > URL: > http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/TravellingSalesmanSolver.java?rev=1560953&r1=1560952&r2=1560953&view=diff > ============================================================================== > --- > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/TravellingSalesmanSolver.java > (original) > +++ > commons/proper/math/trunk/src/test/java/org/apache/commons/math3/ml/neuralnet/sofm/TravellingSalesmanSolver.java > Fri Jan 24 11:55:25 2014 > @@ -49,7 +49,7 @@ import org.apache.commons.math3.distribu > public class TravellingSalesmanSolver { > private static final long FIRST_NEURON_ID = 0; > /** RNG. */ > - private final RandomGenerator random = new Well44497b(); > + private final RandomGenerator random; > /** Set of cities. */ > private final Set<City> cities = new HashSet<City>(); > /** SOFM. */ > @@ -65,6 +65,20 @@ public class TravellingSalesmanSolver { > */ > public TravellingSalesmanSolver(City[] cityList, > double numNeuronsPerCity) { > + this(cityList, numNeuronsPerCity, new Well44497b().nextLong()); > + } > + > + /** > + * @param cityList List of cities to visit in a single travel. > + * @param numNeuronsPerCity Number of neurons per city. > + * @param seed Seed for the RNG that is used to present the samples > + * to the trainer. > + */ > + public TravellingSalesmanSolver(City[] cityList, > + double numNeuronsPerCity, > + long seed) { > + random = new Well44497b(seed); > + > final double[] xRange = {Double.POSITIVE_INFINITY, > Double.NEGATIVE_INFINITY}; > final double[] yRange = {Double.POSITIVE_INFINITY, > Double.NEGATIVE_INFINITY}; > > @@ -291,7 +305,8 @@ 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(-0.05 * > radius, 0.05 * radius); > + final RealDistribution u > + = new UniformRealDistribution(random, -0.05 * radius, 0.05 * > radius); > > return new FeatureInitializer[] { > FeatureInitializerFactory.randomize(u, > FeatureInitializerFactory.function(f1, 0, 1)), > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org