This is an automated email from the ASF dual-hosted git repository. erans pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-math.git
commit ca826ba76bccec6d8cade6a0a660230b180b4555 Author: Gilles Sadowski <gillese...@gmail.com> AuthorDate: Thu Aug 26 23:56:42 2021 +0200 Add (back) "POwELL" standard test function for optimizers. --- .../optim/nonlinear/scalar/TestFunction.java | 50 +++++++++++++++++++--- .../std_test_func.simplex.hedar_fukushima.csv | 3 +- .../std_test_func.simplex.multidirectional.csv | 2 + .../noderiv/std_test_func.simplex.nelder_mead.csv | 2 + 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/TestFunction.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/TestFunction.java index f28bf11..a82d47a 100644 --- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/TestFunction.java +++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/TestFunction.java @@ -154,16 +154,23 @@ public enum TestFunction { return 1 - Math.cos(2 * Math.PI * sqrtSum) + 0.1 * sqrtSum; }; }), + // https://scholarship.rice.edu/handle/1911/16304 ROSENBROCK(dim -> { - final int last = dim - 1; + if (dim % 2 != 0) { + throw new IllegalArgumentException("Must be a multiple of 2 (was: " + dim + ")"); + } + final int last = dim / 2; return x -> { double f = 0; - for (int i = 0; i < last; i++) { - final double xi = x[i]; - final double xiP1 = x[i + 1]; - final double a = xiP1 - xi * xi; - final double b = xi - 1; - f += 1e2 * a * a + b * b; + for (int i = 1; i <= last; i++) { + final int twoI = 2 * i; + final int i0 = twoI - 1; + final int i1 = twoI; + final double x2iM1 = x[i0 - 1]; + final double x2i = x[i1 - 1]; + final double t2iM1 = x2i - x2iM1 * x2iM1; + final double t2i = 1 - x2iM1; + f += 100 * t2iM1 * t2iM1 + t2i * t2i; } return f; }; @@ -286,6 +293,35 @@ public enum TestFunction { } return A * sum; }; + }), + // https://scholarship.rice.edu/handle/1911/16304 + POWELL(dim -> { + if (dim % 4 != 0) { + throw new IllegalArgumentException("Must be a multiple of 4 (was: " + dim + ")"); + } + final int last = dim / 4; + return x -> { + double sum = 0; + for (int i = 1; i <= last; i++) { + final int fourI = 4 * i; + final int i0 = fourI - 3; + final int i1 = fourI - 2; + final int i2 = fourI - 1; + final int i3 = fourI; + final double x4iM3 = x[i0 - 1]; + final double x4iM2 = x[i1 - 1]; + final double x4iM1 = x[i2 - 1]; + final double x4i = x[i3 - 1]; + final double t4iM3 = x4iM3 + 10 * x4iM2; + final double t4iM2 = x4iM1 - x4i; + final double t4iM1 = x4iM2 - 2 * x4iM1; + final double sqT4iM1 = t4iM1 * t4iM1; + final double t4i = x4iM3 - x4i; + final double sqT4i = t4i * t4i; + sum += t4iM3 * t4iM3 + 5 * t4iM2 * t4iM2 + sqT4iM1 * sqT4iM1 + 10 * sqT4i * sqT4i; + } + return sum; + }; }); /** Template for variable dimension. */ diff --git a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.hedar_fukushima.csv b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.hedar_fukushima.csv index d6c0d66..2030e0c 100644 --- a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.hedar_fukushima.csv +++ b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.hedar_fukushima.csv @@ -32,10 +32,11 @@ # PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 900, true ROSENBROCK, 2, 1 1, 0.9, 1.1, 1e-4, 160, true +POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 400, true CIGAR, 2, 0 0, 2, 3, 5e-5, 140, true SPHERE, 2, 0 0, 2, 3, 5e-4, 110, true ELLI, 2, 0 0, 3, 4, 1e-4, 150, true -TWO_AXES, 2, 0 0, 3, 4, 1e-4, 160, true +TWO_AXES, 2, 0 0, 3, 4, 1e-4, 170, true CIG_TAB, 2, 0 0, 3, 4, 1e-3, 150, true TABLET, 2, 0 0, 3, 4, 2e-4, 160, true SUM_POW, 2, 0 0, 3, 4, 1e-2, 110, true diff --git a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.multidirectional.csv b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.multidirectional.csv index bff4421..806e083 100644 --- a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.multidirectional.csv +++ b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.multidirectional.csv @@ -33,6 +33,8 @@ 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 ROSENBROCK, 2, 1 1, 0.9, 1.1, 3e-3, 650, true +POWELL, 4, 0 0 0 0, 4, 5, 5e-2, 11800, false +POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 2000, true CIGAR, 2, 0 0, 2, 3, 5e-5, 240, false SPHERE, 2, 0 0, 2, 3, 5e-4, 200, false ELLI, 2, 0 0, 3, 4, 1e-4, 350, false diff --git a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.nelder_mead.csv b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.nelder_mead.csv index 5ee1cae..b70eb6b 100644 --- a/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.nelder_mead.csv +++ b/commons-math-legacy/src/test/resources/org/apache/commons/math4/legacy/optim/nonlinear/scalar/noderiv/std_test_func.simplex.nelder_mead.csv @@ -34,6 +34,8 @@ PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 700, false PARABOLA, 8, 0 0 0 0 0 0 0 0, 20, 40, 1e-4, 6000, true ROSENBROCK, 2, 1 1, 0.9, 1.1, 1e-4, 110, false ROSENBROCK, 2, 1 1, 0.9, 1.1, 1e-4, 140, true +POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 290, false +POWELL, 4, 0 0 0 0, 4, 5, 4e-3, 380, true CIGAR, 2, 0 0, 2, 3, 5e-5, 100, false SPHERE, 2, 0 0, 2, 3, 5e-4, 80, false ELLI, 2, 0 0, 3, 4, 1e-4, 350, false