Move to SecureRandom for better Random number generation.
This commit is contained in:
parent
5b1f696fa4
commit
3e3df4d8a2
@ -1,4 +1,4 @@
|
||||
package eva2.optimization.problems;
|
||||
package eva2.problems;
|
||||
|
||||
import eva2.optimization.individuals.AbstractEAIndividual;
|
||||
import eva2.optimization.strategies.InterfaceOptimizer;
|
||||
@ -13,7 +13,7 @@ import java.io.Writer;
|
||||
* with the given frequency.
|
||||
*/
|
||||
@Description("A real valued problem jumping dynamically.")
|
||||
public class DynJumpProblem extends AbstractDynTransProblem {
|
||||
public class DynJumpProblem extends eva2.problems.AbstractDynTransProblem {
|
||||
|
||||
private static final long serialVersionUID = 2693154860448970283L;
|
||||
|
||||
|
@ -5,7 +5,7 @@ import eva2.tools.math.RNG;
|
||||
import eva2.util.annotation.Description;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
/**
|
||||
* Fletcher-Powell function with up to 2^n optima from Shir&Baeck, PPSN 2006,
|
||||
@ -39,14 +39,13 @@ public class F19Problem extends AbstractProblemDouble implements
|
||||
@Override
|
||||
public void initializeProblem() {
|
||||
super.initializeProblem();
|
||||
// if (alphas==null) {
|
||||
// create static random data
|
||||
Random rand = new Random(randSeed);
|
||||
SecureRandom rand = new SecureRandom();
|
||||
rand.setSeed(randSeed);
|
||||
alphas = RNG.randomDoubleArray(rand, -Math.PI, Math.PI, dim);
|
||||
A = RNG.randomIntArray(rand, -100, 100, dim * dim);
|
||||
B = RNG.randomIntArray(rand, -100, 100, dim * dim);
|
||||
As = transform(alphas);
|
||||
// }
|
||||
}
|
||||
|
||||
private double[] transform(double[] x) {
|
||||
|
@ -4,7 +4,7 @@ import eva2.tools.EVAERROR;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.Random;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
/**
|
||||
* Random number generator used across all optimizations
|
||||
@ -12,7 +12,7 @@ import java.util.Random;
|
||||
*/
|
||||
public class RNG {
|
||||
|
||||
private static Random random;
|
||||
private static SecureRandom random;
|
||||
private static long randomSeed;
|
||||
|
||||
/**
|
||||
@ -20,7 +20,8 @@ public class RNG {
|
||||
*/
|
||||
static {
|
||||
randomSeed = System.currentTimeMillis();
|
||||
random = new Random(randomSeed);
|
||||
random = new SecureRandom();
|
||||
random.setSeed(randomSeed);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -32,7 +33,8 @@ public class RNG {
|
||||
if (randomSeed == 0) {
|
||||
setRandomSeed();
|
||||
} else {
|
||||
random = new Random(randomSeed);
|
||||
random = new SecureRandom();
|
||||
random.setSeed(randomSeed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -49,13 +51,14 @@ public class RNG {
|
||||
*/
|
||||
public static void setRandomSeed() {
|
||||
randomSeed = System.currentTimeMillis();
|
||||
random = new Random(randomSeed);
|
||||
random = new SecureRandom();
|
||||
random.setSeed(randomSeed);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static void setRandom(Random baseRandom) {
|
||||
public static void setRandom(SecureRandom baseRandom) {
|
||||
random = baseRandom;
|
||||
}
|
||||
|
||||
@ -138,7 +141,7 @@ public class RNG {
|
||||
* @param hi Upper bound.
|
||||
* @return int
|
||||
*/
|
||||
public static int randomInt(Random rand, int lo, int hi) {
|
||||
public static int randomInt(SecureRandom rand, int lo, int hi) {
|
||||
if (hi < lo) {
|
||||
System.err.println("Invalid boundary values! Returning zero.");
|
||||
return -1;
|
||||
@ -193,7 +196,7 @@ public class RNG {
|
||||
return (hi - lo) * random.nextDouble() + lo;
|
||||
}
|
||||
|
||||
public static double randomDouble(Random rand, double lo, double hi) {
|
||||
public static double randomDouble(SecureRandom rand, double lo, double hi) {
|
||||
return (hi - lo) * rand.nextDouble() + lo;
|
||||
}
|
||||
|
||||
@ -234,13 +237,9 @@ public class RNG {
|
||||
result[i] = RNG.randomDouble(lower, upper);
|
||||
}
|
||||
return result;
|
||||
// double[] xin = new double[size];
|
||||
// for (int i=0;i<size;i++)
|
||||
// xin[i] = (hi-lo)*random.nextDouble()+lo;
|
||||
// return xin;
|
||||
}
|
||||
|
||||
public static double[] randomDoubleArray(Random rand, double lower, double upper, int size) {
|
||||
public static double[] randomDoubleArray(SecureRandom rand, double lower, double upper, int size) {
|
||||
double[] result = new double[size];
|
||||
for (int i = 0; i < result.length; i++) {
|
||||
result[i] = RNG.randomDouble(rand, lower, upper);
|
||||
@ -276,7 +275,7 @@ public class RNG {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int[] randomIntArray(Random rand, int lower, int upper, int size) {
|
||||
public static int[] randomIntArray(SecureRandom rand, int lower, int upper, int size) {
|
||||
int[] result = new int[size];
|
||||
for (int i = 0; i < result.length; i++) {
|
||||
result[i] = RNG.randomInt(rand, lower, upper);
|
||||
|
Loading…
x
Reference in New Issue
Block a user