MATH-1552: Fiddling with setup and expectations (unit tests).
This commit is contained in:
parent
4075e87c76
commit
df927f0b67
|
@ -20,6 +20,7 @@ import java.util.Arrays;
|
|||
import org.apache.commons.rng.UniformRandomProvider;
|
||||
import org.apache.commons.rng.simple.RandomSource;
|
||||
import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
|
||||
import org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler;
|
||||
import org.apache.commons.math4.legacy.analysis.MultivariateFunction;
|
||||
import org.apache.commons.math4.legacy.core.jdkmath.AccurateMath;
|
||||
|
||||
|
@ -213,29 +214,24 @@ class OptimTestUtils {
|
|||
}
|
||||
|
||||
static class Ackley implements MultivariateFunction {
|
||||
private double axisratio;
|
||||
|
||||
Ackley(double axra) {
|
||||
axisratio = axra;
|
||||
}
|
||||
|
||||
public Ackley() {
|
||||
this(1);
|
||||
}
|
||||
|
||||
private static final double A = 20;
|
||||
private static final double B = 0.2;
|
||||
private static final double C = 2 * Math.PI;
|
||||
|
||||
@Override
|
||||
public double value(double[] x) {
|
||||
double f = 0;
|
||||
double res2 = 0;
|
||||
double fac = 0;
|
||||
for (int i = 0; i < x.length; ++i) {
|
||||
fac = AccurateMath.pow(axisratio, (i - 1.) / (x.length - 1.));
|
||||
f += fac * fac * x[i] * x[i];
|
||||
res2 += AccurateMath.cos(2. * AccurateMath.PI * fac * x[i]);
|
||||
final int dim = x.length;
|
||||
double acc1 = 0;
|
||||
double acc2 = 0;
|
||||
for (int i = 0; i < dim; i++) {
|
||||
final double v = x[i];
|
||||
acc1 += v * v;
|
||||
acc2 += Math.cos(C * v);
|
||||
}
|
||||
f = (20. - 20. * AccurateMath.exp(-0.2 * AccurateMath.sqrt(f / x.length))
|
||||
+ AccurateMath.exp(1.) - AccurateMath.exp(res2 / x.length));
|
||||
return f;
|
||||
acc1 = -B * Math.sqrt(acc1 / dim);
|
||||
acc2 /= dim;
|
||||
|
||||
return -A * Math.exp(acc1) - Math.exp(acc2) + A + Math.E;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -334,11 +330,29 @@ class OptimTestUtils {
|
|||
}
|
||||
|
||||
static double[] point(int n, double value) {
|
||||
double[] ds = new double[n];
|
||||
final double[] ds = new double[n];
|
||||
Arrays.fill(ds, value);
|
||||
return ds;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param n Dimension.
|
||||
* @param value Value.
|
||||
* @param jitter Random noise to add to {@code value}.
|
||||
*/
|
||||
static double[] point(int n,
|
||||
double value,
|
||||
double jitter) {
|
||||
final ContinuousUniformSampler s = new ContinuousUniformSampler(rng(),
|
||||
-jitter,
|
||||
jitter);
|
||||
final double[] ds = new double[n];
|
||||
for (int i = 0; i < n; i++) {
|
||||
ds[i] = value + s.sample();
|
||||
}
|
||||
return ds;
|
||||
}
|
||||
|
||||
/** Creates a RNG instance. */
|
||||
static UniformRandomProvider rng() {
|
||||
return RandomSource.create(RandomSource.MWC_256);
|
||||
|
|
|
@ -272,7 +272,7 @@ public class SimplexOptimizerMultiDirectionalTest {
|
|||
doTest(new OptimTestUtils.DiffPow(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
GoalType.MINIMIZE,
|
||||
614,
|
||||
1000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-14);
|
||||
}
|
||||
|
@ -280,33 +280,31 @@ public class SimplexOptimizerMultiDirectionalTest {
|
|||
@Test
|
||||
public void testSsDiffPow() {
|
||||
doTest(new OptimTestUtils.SsDiffPow(),
|
||||
OptimTestUtils.point(DIM / 2, 1.0),
|
||||
OptimTestUtils.point(DIM / 2, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
656,
|
||||
5000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM / 2, 0.0), 0.0),
|
||||
1e-15);
|
||||
1e-3);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAckley() {
|
||||
doTest(new OptimTestUtils.Ackley(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
587,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
0);
|
||||
7500,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0d),
|
||||
1e-11);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testRastrigin() {
|
||||
doTest(new OptimTestUtils.Rastrigin(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
535,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
0);
|
||||
5000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0d),
|
||||
1e-6);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -329,7 +327,7 @@ public class SimplexOptimizerMultiDirectionalTest {
|
|||
new ObjectiveFunction(func),
|
||||
goal,
|
||||
new InitialGuess(startPoint),
|
||||
new MultiDirectionalSimplex(dim, 0.1));
|
||||
new MultiDirectionalSimplex(dim, 1));
|
||||
final double dist = MathArrays.distance(expected.getPoint(),
|
||||
result.getPoint());
|
||||
Assert.assertEquals(0d, dist, tol);
|
||||
|
|
|
@ -270,7 +270,7 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
doTest(new OptimTestUtils.Rosen(),
|
||||
OptimTestUtils.point(DIM, 0.1),
|
||||
GoalType.MINIMIZE,
|
||||
11975,
|
||||
9078,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 1.0), 0.0),
|
||||
1e-6);
|
||||
}
|
||||
|
@ -279,18 +279,18 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testEllipse() {
|
||||
doTest(new OptimTestUtils.Elli(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
7184,
|
||||
12000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-14);
|
||||
1e-6);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testElliRotated() {
|
||||
doTest(new OptimTestUtils.ElliRotated(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
7467,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
|
@ -300,9 +300,9 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testCigar() {
|
||||
doTest(new OptimTestUtils.Cigar(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
9160,
|
||||
7000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-6);
|
||||
}
|
||||
|
@ -311,7 +311,7 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testTwoAxes() {
|
||||
doTest(new OptimTestUtils.TwoAxes(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
3451,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
|
@ -322,20 +322,19 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testCigTab() {
|
||||
doTest(new OptimTestUtils.CigTab(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
7454,
|
||||
7000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-14);
|
||||
1e-4);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSphere() {
|
||||
doTest(new OptimTestUtils.Sphere(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
3881,
|
||||
3000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-6);
|
||||
}
|
||||
|
@ -344,9 +343,9 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testTablet() {
|
||||
doTest(new OptimTestUtils.Tablet(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 1e-1),
|
||||
GoalType.MINIMIZE,
|
||||
6639,
|
||||
10000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-14);
|
||||
}
|
||||
|
@ -355,42 +354,41 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
@Test
|
||||
public void testDiffPow() {
|
||||
doTest(new OptimTestUtils.DiffPow(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
4105,
|
||||
7000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
1e-14);
|
||||
1e-6);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testSsDiffPow() {
|
||||
doTest(new OptimTestUtils.SsDiffPow(),
|
||||
OptimTestUtils.point(DIM / 2, 1.0),
|
||||
OptimTestUtils.point(DIM / 2, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
3990,
|
||||
4000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM / 2, 0.0), 0.0),
|
||||
1e-15);
|
||||
1e-3);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testAckley() {
|
||||
doTest(new OptimTestUtils.Ackley(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
2849,
|
||||
10000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
0);
|
||||
1e-11);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testRastrigin() {
|
||||
doTest(new OptimTestUtils.Rastrigin(),
|
||||
OptimTestUtils.point(DIM, 1.0),
|
||||
OptimTestUtils.point(DIM, 1.0, 2e-1),
|
||||
GoalType.MINIMIZE,
|
||||
2166,
|
||||
10000,
|
||||
new PointValuePair(OptimTestUtils.point(DIM, 0.0), 0.0),
|
||||
0);
|
||||
}
|
||||
|
@ -415,7 +413,7 @@ public class SimplexOptimizerNelderMeadTest {
|
|||
new ObjectiveFunction(func),
|
||||
goal,
|
||||
new InitialGuess(startPoint),
|
||||
new NelderMeadSimplex(dim, 0.1));
|
||||
new NelderMeadSimplex(dim, 1));
|
||||
final double dist = MathArrays.distance(expected.getPoint(),
|
||||
result.getPoint());
|
||||
Assert.assertEquals(0d, dist, tol);
|
||||
|
|
Loading…
Reference in New Issue