parent
a5035d0e1c
commit
dff43a0530
|
@ -21,7 +21,8 @@ import org.apache.commons.math4.analysis.UnivariateFunction;
|
||||||
import org.apache.commons.math4.analysis.function.Constant;
|
import org.apache.commons.math4.analysis.function.Constant;
|
||||||
import org.apache.commons.math4.distribution.RealDistribution;
|
import org.apache.commons.math4.distribution.RealDistribution;
|
||||||
import org.apache.commons.math4.distribution.UniformRealDistribution;
|
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
|
* 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
|
* @throws org.apache.commons.math4.exception.NumberIsTooLargeException
|
||||||
* if {@code min >= max}.
|
* if {@code min >= max}.
|
||||||
*/
|
*/
|
||||||
public static FeatureInitializer uniform(final RandomGenerator rng,
|
public static FeatureInitializer uniform(final UniformRandomProvider rng,
|
||||||
final double min,
|
final double min,
|
||||||
final double max) {
|
final double max) {
|
||||||
return randomize(new UniformRealDistribution(rng, min, max),
|
return randomize(new UniformRealDistribution(min, max).createSampler(rng),
|
||||||
function(new Constant(0), 0, 0));
|
function(new Constant(0), 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,8 +65,7 @@ public class FeatureInitializerFactory {
|
||||||
*/
|
*/
|
||||||
public static FeatureInitializer uniform(final double min,
|
public static FeatureInitializer uniform(final double min,
|
||||||
final double max) {
|
final double max) {
|
||||||
return randomize(new UniformRealDistribution(min, max),
|
return uniform(RandomSource.create(RandomSource.WELL_19937_C), min, max);
|
||||||
function(new Constant(0), 0, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -98,12 +98,12 @@ public class FeatureInitializerFactory {
|
||||||
/**
|
/**
|
||||||
* Adds some amount of random data to the given initializer.
|
* 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.
|
* @param orig Original initializer.
|
||||||
* @return an initializer whose {@link FeatureInitializer#value() value}
|
* @return an initializer whose {@link FeatureInitializer#value() value}
|
||||||
* method will return {@code orig.value() + random.sample()}.
|
* 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) {
|
final FeatureInitializer orig) {
|
||||||
return new FeatureInitializer() {
|
return new FeatureInitializer() {
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|
|
@ -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.LearningFactorFunctionFactory;
|
||||||
import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunction;
|
import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunction;
|
||||||
import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunctionFactory;
|
import org.apache.commons.math4.ml.neuralnet.sofm.NeighbourhoodSizeFunctionFactory;
|
||||||
import org.apache.commons.math4.random.RandomGenerator;
|
import org.apache.commons.math4.rng.RandomSource;
|
||||||
import org.apache.commons.math4.random.Well44497b;
|
import org.apache.commons.math4.rng.UniformRandomProvider;
|
||||||
import org.apache.commons.math4.util.FastMath;
|
import org.apache.commons.math4.util.FastMath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,7 +56,7 @@ import org.apache.commons.math4.util.FastMath;
|
||||||
public class TravellingSalesmanSolver {
|
public class TravellingSalesmanSolver {
|
||||||
private static final long FIRST_NEURON_ID = 0;
|
private static final long FIRST_NEURON_ID = 0;
|
||||||
/** RNG. */
|
/** RNG. */
|
||||||
private final RandomGenerator random;
|
private final UniformRandomProvider random;
|
||||||
/** Set of cities. */
|
/** Set of cities. */
|
||||||
private final Set<City> cities = new HashSet<City>();
|
private final Set<City> cities = new HashSet<City>();
|
||||||
/** SOFM. */
|
/** SOFM. */
|
||||||
|
@ -72,7 +72,7 @@ public class TravellingSalesmanSolver {
|
||||||
*/
|
*/
|
||||||
public TravellingSalesmanSolver(City[] cityList,
|
public TravellingSalesmanSolver(City[] cityList,
|
||||||
double numNeuronsPerCity) {
|
double numNeuronsPerCity) {
|
||||||
this(cityList, numNeuronsPerCity, new Well44497b().nextLong());
|
this(cityList, numNeuronsPerCity, RandomSource.createLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,7 +84,7 @@ public class TravellingSalesmanSolver {
|
||||||
public TravellingSalesmanSolver(City[] cityList,
|
public TravellingSalesmanSolver(City[] cityList,
|
||||||
double numNeuronsPerCity,
|
double numNeuronsPerCity,
|
||||||
long seed) {
|
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.
|
// Make sure that each city will appear only once in the list.
|
||||||
for (City city : cityList) {
|
for (City city : cityList) {
|
||||||
|
@ -338,12 +338,13 @@ public class TravellingSalesmanSolver {
|
||||||
final UnivariateFunction f1 = FunctionUtils.add(h1, new Constant(centre[0]));
|
final UnivariateFunction f1 = FunctionUtils.add(h1, new Constant(centre[0]));
|
||||||
final UnivariateFunction f2 = FunctionUtils.add(h2, new Constant(centre[1]));
|
final UnivariateFunction f2 = FunctionUtils.add(h2, new Constant(centre[1]));
|
||||||
|
|
||||||
final RealDistribution u
|
final RealDistribution u = new UniformRealDistribution(-0.05 * radius, 0.05 * radius);
|
||||||
= new UniformRealDistribution(random, -0.05 * radius, 0.05 * radius);
|
|
||||||
|
|
||||||
return new FeatureInitializer[] {
|
return new FeatureInitializer[] {
|
||||||
FeatureInitializerFactory.randomize(u, FeatureInitializerFactory.function(f1, 0, 1)),
|
FeatureInitializerFactory.randomize(u.createSampler(random),
|
||||||
FeatureInitializerFactory.randomize(u, FeatureInitializerFactory.function(f2, 0, 1))
|
FeatureInitializerFactory.function(f1, 0, 1)),
|
||||||
|
FeatureInitializerFactory.randomize(u.createSampler(random),
|
||||||
|
FeatureInitializerFactory.function(f2, 0, 1))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue