Favouring the "expanded" simplex over the "reflected" one.

This modification decreases the number of function evaluations in several
test cases. Note however that the original description of the algorithm
uses the strict inequality...
This commit is contained in:
Gilles Sadowski 2021-08-27 17:24:51 +02:00
parent f1ad9d1b00
commit cc5ae51f98
2 changed files with 32 additions and 32 deletions

View File

@ -90,7 +90,7 @@ public class MultiDirectionalTransform
evaluationFunction); evaluationFunction);
final PointValuePair expandedBest = expandedSimplex.get(0); final PointValuePair expandedBest = expandedSimplex.get(0);
if (comparator.compare(expandedBest, reflectedBest) < 0 || if (comparator.compare(expandedBest, reflectedBest) <= 0 ||
(sa != null && (sa != null &&
sa.test(expandedBest.getValue() - reflectedBest.getValue()))) { sa.test(expandedBest.getValue() - reflectedBest.getValue()))) {
return expandedSimplex; return expandedSimplex;

View File

@ -31,36 +31,36 @@
# Caveat: Some tests are commented out (cf. JIRA: MATH-1552). # Caveat: Some tests are commented out (cf. JIRA: MATH-1552).
# #
PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 1500, false PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 1500, false
PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 2500, true PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 2600, true
PARABOLA, 16, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 5800, false PARABOLA, 16, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 5500, false
PARABOLA, 16, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 10260, true PARABOLA, 16, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 10000, true
ROSENBROCK, 2, 1 1, 0.9, 1.1, 3e-3, 11000, false ROSENBROCK, 2, 1 1, 0.9, 1.1, 3e-3, 11000, false
ROSENBROCK, 2, 1 1, 0.9, 1.1, 3e-3, 650, true ROSENBROCK, 2, 1 1, 0.9, 1.1, 3e-3, 500, true
ROSENBROCK, 4, 1 1 1 1, 0.9, 1.1, 3e-3, 45000, false ROSENBROCK, 4, 1 1 1 1, 0.9, 1.1, 3e-3, 31000, false
ROSENBROCK, 4, 1 1 1 1, 0.9, 1.1, 3e-3, 1850, true ROSENBROCK, 4, 1 1 1 1, 0.9, 1.1, 3e-3, 1900, true
ROSENBROCK, 8, 1 1 1 1 1 1 1 1, 0.9, 1.1, 4e-3, 130000, false ROSENBROCK, 8, 1 1 1 1 1 1 1 1, 0.9, 1.1, 4e-3, 115000, false
ROSENBROCK, 8, 1 1 1 1 1 1 1 1, 0.9, 1.1, 3e-3, 8000, true ROSENBROCK, 8, 1 1 1 1 1 1 1 1, 0.9, 1.1, 3e-3, 8100, true
ROSENBROCK, 16, 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 0.9, 1.1, 2e-1, 430000, false ROSENBROCK, 16, 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 0.9, 1.1, 2e-1, 420000, false
ROSENBROCK, 16, 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 0.9, 1.1, 3e-1, 29000, true ROSENBROCK, 16, 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1, 0.9, 1.1, 3e-1, 30000, true
POWELL, 4, 0 0 0 0, 4, 5, 5e-2, 11800, false POWELL, 4, 0 0 0 0, 4, 5, 5e-2, 11700, false, target/debug__, 0 1 LAST 0
POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 2200, true POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 1900, true
POWELL, 8, 0 0 0 0 0 0 0 0, 4, 5, 7e-2, 37000, false POWELL, 8, 0 0 0 0 0 0 0 0, 4, 5, 7e-2, 46000, false
POWELL, 8, 0 0 0 0 0 0 0 0, 4, 5, 4e-2, 8500, true POWELL, 8, 0 0 0 0 0 0 0 0, 4, 5, 4e-2, 9000, true
CIGAR, 2, 0 0, 2, 3, 5e-5, 240, false CIGAR, 2, 0 0, 2, 3, 5e-5, 160, false
SPHERE, 2, 0 0, 2, 3, 5e-4, 200, false SPHERE, 2, 0 0, 2, 3, 5e-4, 120, false
ELLI, 2, 0 0, 3, 4, 1e-4, 350, false ELLI, 2, 0 0, 3, 4, 1e-4, 150, false
TWO_AXES, 2, 0 0, 3, 4, 1e-4, 400, false TWO_AXES, 2, 0 0, 3, 4, 1e-4, 180, false
CIG_TAB, 2, 0 0, 3, 4, 1e-3, 280, false CIG_TAB, 2, 0 0, 3, 4, 1e-3, 170, false
TABLET, 2, 0 0, 3, 4, 2e-4, 340, false TABLET, 2, 0 0, 3, 4, 2e-4, 150, false
SUM_POW, 2, 0 0, 3, 4, 1e-2, 190, false SUM_POW, 2, 0 0, 3, 4, 1e-2, 120, false
ACKLEY, 2, 0 0, 2, 4, 1e-6, 310, false ACKLEY, 2, 0 0, 2, 4, 1e-6, 220, false
RASTRIGIN, 2, 0 0, 6, 10, 1e-3, 650, false RASTRIGIN, 2, 0 0, 6, 10, 1e-3, 160, false
GRIEWANK, 2, 0 0, 2, 3, 1e-1, 500, false GRIEWANK, 2, 0 0, 2, 3, 1e-1, 110, false
LEVY, 2, 1 1, 0.9, 1.1, 1e-3, 200, false LEVY, 2, 1 1, 0.9, 1.1, 1e-3, 120, false
SCHWEFEL, 2, 420.9687 420.9687, 9, 11, 1, 200, false SCHWEFEL, 2, 420.9687 420.9687, 9, 11, 1, 120, false
ZAKHAROV, 2, 0 0, 3, 4, 1e-4, 1000, false ZAKHAROV, 2, 0 0, 3, 4, 1e-4, 130, false
PERM, 2, 1 2, 0.9, 1.1, 2e-3, 24000, false PERM, 2, 1 2, 0.9, 1.1, 2e-3, 24000, false
PERM, 2, 1 2, 0.9, 1.1, 2e-3, 650, true PERM, 2, 1 2, 0.9, 1.1, 2e-3, 400, true
STYBLINSKI_TANG, 2, -2.903534 -2.903534, 1, 2, 1e-4, 210, false STYBLINSKI_TANG, 2, -2.903534 -2.903534, 1, 2, 1e-4, 120, false
#HAPPY_CAT, 2, -1 -1, 2, 3, 1e-4, 500, false #HAPPY_CAT, 2, -1 -1, 2, 3, 1e-4, 50, false
#SALOMON, 2, 0 0, 2, 3, 1e-4, 500, false #SALOMON, 2, 0 0, 2, 3, 1e-4, 50, false

Can't render this file because it contains an unexpected character in line 6 and column 8.