You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2009/03/04 01:07:51 UTC
svn commit: r749850 [2/2] - in /commons/proper/math/trunk/src:
java/org/apache/commons/math/ java/org/apache/commons/math/optimization/
java/org/apache/commons/math/optimization/direct/
test/org/apache/commons/math/optimization/direct/
Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/MultiDirectionalTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/MultiDirectionalTest.java?rev=749850&r1=749849&r2=749850&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/MultiDirectionalTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/MultiDirectionalTest.java Wed Mar 4 00:07:51 2009
@@ -17,14 +17,17 @@
package org.apache.commons.math.optimization.direct;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.commons.math.ConvergenceException;
import org.apache.commons.math.linear.decomposition.NotPositiveDefiniteMatrixException;
-import org.apache.commons.math.optimization.ConvergenceChecker;
+import org.apache.commons.math.optimization.GoalType;
import org.apache.commons.math.optimization.ObjectiveException;
import org.apache.commons.math.optimization.ObjectiveFunction;
import org.apache.commons.math.optimization.PointValuePair;
-import org.apache.commons.math.ConvergenceException;
-
-import junit.framework.*;
+import org.apache.commons.math.optimization.ObjectiveValueChecker;
public class MultiDirectionalTest
extends TestCase {
@@ -48,8 +51,8 @@
}
};
try {
- new MultiDirectional(1.9, 0.4).optimize(wrong, 10, new ValueChecker(1.0e-3), true,
- new double[] { -0.5 }, new double[] { 0.5 });
+ MultiDirectional optimizer = new MultiDirectional(0.9, 1.9);
+ optimizer.optimize(wrong, GoalType.MINIMIZE, new double[] { -1.0 });
fail("an exception should have been thrown");
} catch (ObjectiveException ce) {
// expected behavior
@@ -58,8 +61,8 @@
fail("wrong exception caught: " + e.getMessage());
}
try {
- new MultiDirectional(1.9, 0.4).optimize(wrong, 10, new ValueChecker(1.0e-3), true,
- new double[] { 0.5 }, new double[] { 1.5 });
+ MultiDirectional optimizer = new MultiDirectional(0.9, 1.9);
+ optimizer.optimize(wrong, GoalType.MINIMIZE, new double[] { +2.0 });
fail("an exception should have been thrown");
} catch (ObjectiveException ce) {
// expected behavior
@@ -86,69 +89,45 @@
public double objective(double[] variables) {
final double x = variables[0];
final double y = variables[1];
- return Math.atan(x) * Math.atan(x + 2) * Math.atan(y) * Math.atan(y) / (x * y);
+ return ((x == 0) || (y == 0)) ? 0 : (Math.atan(x) * Math.atan(x + 2) * Math.atan(y) * Math.atan(y) / (x * y));
}
};
- MultiDirectional md = new MultiDirectional();
+ MultiDirectional optimizer = new MultiDirectional();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(1.0e-10, 1.0e-30));
+ optimizer.setMaxEvaluations(200);
+ optimizer.setStartConfiguration(new double[] { 0.2, 0.2 });
+ PointValuePair optimum;
// minimization
- md.optimize(fourExtrema, 200, new ValueChecker(1.0e-8), true,
- new double[] { -4, -2 }, new double[] { 1, 2 }, 10, 38821113105892l);
- PointValuePair[] optima = md.getOptima();
- assertEquals(10, optima.length);
- int localCount = 0;
- int globalCount = 0;
- for (PointValuePair optimum : optima) {
- if (optimum != null) {
- if (optimum.getPoint()[0] < 0) {
- // this should be the local minimum
- ++localCount;
- assertEquals(xM, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yP, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXmYp, optimum.getValue(), 3.0e-8);
- } else {
- // this should be the global minimum
- ++globalCount;
- assertEquals(xP, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yM, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXpYm, optimum.getValue(), 3.0e-8);
- }
- }
- }
- assertTrue(localCount > 0);
- assertTrue(globalCount > 0);
- assertTrue(md.getTotalEvaluations() > 1400);
- assertTrue(md.getTotalEvaluations() < 1700);
-
- // minimization
- md.optimize(fourExtrema, 200, new ValueChecker(1.0e-8), false,
- new double[] { -3.5, -1 }, new double[] { 0.5, 1.5 }, 10, 38821113105892l);
- optima = md.getOptima();
- assertEquals(10, optima.length);
- localCount = 0;
- globalCount = 0;
- for (PointValuePair optimum : optima) {
- if (optimum != null) {
- if (optimum.getPoint()[0] < 0) {
- // this should be the local maximum
- ++localCount;
- assertEquals(xM, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yM, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXmYm, optimum.getValue(), 4.0e-8);
- } else {
- // this should be the global maximum
- ++globalCount;
- assertEquals(xP, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yP, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXpYp, optimum.getValue(), 4.0e-8);
- }
- }
- }
- assertTrue(localCount > 0);
- assertTrue(globalCount > 0);
- assertTrue(md.getTotalEvaluations() > 1400);
- assertTrue(md.getTotalEvaluations() < 1700);
+ optimum = optimizer.optimize(fourExtrema, GoalType.MINIMIZE, new double[] { -3.0, 0 });
+ assertEquals(xM, optimum.getPoint()[0], 4.0e-6);
+ assertEquals(yP, optimum.getPoint()[1], 3.0e-6);
+ assertEquals(valueXmYp, optimum.getValue(), 8.0e-13);
+ assertTrue(optimizer.getEvaluations() > 120);
+ assertTrue(optimizer.getEvaluations() < 150);
+
+ optimum = optimizer.optimize(fourExtrema, GoalType.MINIMIZE, new double[] { +1, 0 });
+ assertEquals(xP, optimum.getPoint()[0], 2.0e-8);
+ assertEquals(yM, optimum.getPoint()[1], 3.0e-6);
+ assertEquals(valueXpYm, optimum.getValue(), 2.0e-12);
+ assertTrue(optimizer.getEvaluations() > 120);
+ assertTrue(optimizer.getEvaluations() < 150);
+
+ // maximization
+ optimum = optimizer.optimize(fourExtrema, GoalType.MAXIMIZE, new double[] { -3.0, 0.0 });
+ assertEquals(xM, optimum.getPoint()[0], 7.0e-7);
+ assertEquals(yM, optimum.getPoint()[1], 3.0e-7);
+ assertEquals(valueXmYm, optimum.getValue(), 2.0e-14);
+ assertTrue(optimizer.getEvaluations() > 120);
+ assertTrue(optimizer.getEvaluations() < 150);
+
+ optimum = optimizer.optimize(fourExtrema, GoalType.MAXIMIZE, new double[] { +1, 0 });
+ assertEquals(xP, optimum.getPoint()[0], 2.0e-8);
+ assertEquals(yP, optimum.getPoint()[1], 3.0e-6);
+ assertEquals(valueXpYp, optimum.getValue(), 2.0e-12);
+ assertTrue(optimizer.getEvaluations() > 120);
+ assertTrue(optimizer.getEvaluations() < 150);
}
@@ -167,14 +146,19 @@
};
count = 0;
+ MultiDirectional optimizer = new MultiDirectional();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(-1, 1.0e-3));
+ optimizer.setMaxEvaluations(100);
+ optimizer.setStartConfiguration(new double[][] {
+ { -1.2, 1.0 }, { 0.9, 1.2 } , { 3.5, -2.3 }
+ });
PointValuePair optimum =
- new MultiDirectional().optimize(rosenbrock, 100, new ValueChecker(1.0e-3), true,
- new double[][] {
- { -1.2, 1.0 }, { 0.9, 1.2 } , { 3.5, -2.3 }
- });
+ optimizer.optimize(rosenbrock, GoalType.MINIMIZE, new double[] { -1.2, 1.0 });
- assertTrue(count > 60);
- assertTrue(optimum.getValue() > 0.01);
+ assertEquals(count, optimizer.getEvaluations());
+ assertTrue(optimizer.getEvaluations() > 70);
+ assertTrue(optimizer.getEvaluations() < 100);
+ assertTrue(optimum.getValue() > 1.0e-2);
}
@@ -195,31 +179,18 @@
};
count = 0;
+ MultiDirectional optimizer = new MultiDirectional();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(-1.0, 1.0e-3));
+ optimizer.setMaxEvaluations(1000);
PointValuePair optimum =
- new MultiDirectional().optimize(powell, 1000, new ValueChecker(1.0e-3), true,
- new double[] { 3.0, -1.0, 0.0, 1.0 },
- new double[] { 4.0, 0.0, 1.0, 2.0 });
- assertTrue(count > 850);
- assertTrue(optimum.getValue() > 0.015);
+ optimizer.optimize(powell, GoalType.MINIMIZE, new double[] { 3.0, -1.0, 0.0, 1.0 });
+ assertEquals(count, optimizer.getEvaluations());
+ assertTrue(optimizer.getEvaluations() > 800);
+ assertTrue(optimizer.getEvaluations() < 900);
+ assertTrue(optimum.getValue() > 1.0e-2);
}
- private static class ValueChecker implements ConvergenceChecker {
-
- public ValueChecker(double threshold) {
- this.threshold = threshold;
- }
-
- public boolean converged(PointValuePair[] simplex) {
- PointValuePair smallest = simplex[0];
- PointValuePair largest = simplex[simplex.length - 1];
- return (largest.getValue() - smallest.getValue()) < threshold;
- }
-
- private double threshold;
-
- };
-
public static Test suite() {
return new TestSuite(MultiDirectionalTest.class);
}
Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java?rev=749850&r1=749849&r2=749850&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/optimization/direct/NelderMeadTest.java Wed Mar 4 00:07:51 2009
@@ -17,19 +17,17 @@
package org.apache.commons.math.optimization.direct;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.commons.math.ConvergenceException;
import org.apache.commons.math.linear.decomposition.NotPositiveDefiniteMatrixException;
-import org.apache.commons.math.optimization.ConvergenceChecker;
+import org.apache.commons.math.optimization.GoalType;
import org.apache.commons.math.optimization.ObjectiveException;
import org.apache.commons.math.optimization.ObjectiveFunction;
import org.apache.commons.math.optimization.PointValuePair;
-import org.apache.commons.math.ConvergenceException;
-import org.apache.commons.math.random.JDKRandomGenerator;
-import org.apache.commons.math.random.RandomGenerator;
-import org.apache.commons.math.random.RandomVectorGenerator;
-import org.apache.commons.math.random.UncorrelatedRandomVectorGenerator;
-import org.apache.commons.math.random.UniformRandomGenerator;
-
-import junit.framework.*;
+import org.apache.commons.math.optimization.ObjectiveValueChecker;
public class NelderMeadTest
extends TestCase {
@@ -41,7 +39,7 @@
public void testObjectiveExceptions() throws ConvergenceException {
ObjectiveFunction wrong =
new ObjectiveFunction() {
- private static final long serialVersionUID = 2624035220997628868L;
+ private static final long serialVersionUID = 4751314470965489371L;
public double objective(double[] x) throws ObjectiveException {
if (x[0] < 0) {
throw new ObjectiveException("{0}", "oops");
@@ -53,8 +51,8 @@
}
};
try {
- new NelderMead(0.9, 1.9, 0.4, 0.6).optimize(wrong, 10, new ValueChecker(1.0e-3), true,
- new double[] { -0.5 }, new double[] { 0.5 });
+ NelderMead optimizer = new NelderMead(0.9, 1.9, 0.4, 0.6);
+ optimizer.optimize(wrong, GoalType.MINIMIZE, new double[] { -1.0 });
fail("an exception should have been thrown");
} catch (ObjectiveException ce) {
// expected behavior
@@ -63,8 +61,8 @@
fail("wrong exception caught: " + e.getMessage());
}
try {
- new NelderMead(0.9, 1.9, 0.4, 0.6).optimize(wrong, 10, new ValueChecker(1.0e-3), true,
- new double[] { 0.5 }, new double[] { 1.5 });
+ NelderMead optimizer = new NelderMead(0.9, 1.9, 0.4, 0.6);
+ optimizer.optimize(wrong, GoalType.MINIMIZE, new double[] { +2.0 });
fail("an exception should have been thrown");
} catch (ObjectiveException ce) {
// expected behavior
@@ -87,82 +85,58 @@
final double valueXpYm = -0.7290400707055187115322; // global minimum
final double valueXpYp = -valueXpYm; // global maximum
ObjectiveFunction fourExtrema = new ObjectiveFunction() {
- private static final long serialVersionUID = -7039124064449091152L;
- public double objective(double[] variables) {
+ private static final long serialVersionUID = -7039124064449091152L;
+ public double objective(double[] variables) {
final double x = variables[0];
final double y = variables[1];
- return Math.atan(x) * Math.atan(x + 2) * Math.atan(y) * Math.atan(y) / (x * y);
+ return ((x == 0) || (y == 0)) ? 0 : (Math.atan(x) * Math.atan(x + 2) * Math.atan(y) * Math.atan(y) / (x * y));
}
};
- NelderMead nm = new NelderMead();
-
- // minimization
- nm.optimize(fourExtrema, 100, new ValueChecker(1.0e-8), true,
- new double[] { -5, -5 }, new double[] { 5, 5 }, 10, 38821113105892l);
- PointValuePair[] optima = nm.getOptima();
- assertEquals(10, optima.length);
- int localCount = 0;
- int globalCount = 0;
- for (PointValuePair optimum : optima) {
- if (optimum != null) {
- if (optimum.getPoint()[0] < 0) {
- // this should be the local minimum
- ++localCount;
- assertEquals(xM, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yP, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXmYp, optimum.getValue(), 2.0e-8);
- } else {
- // this should be the global minimum
- ++globalCount;
- assertEquals(xP, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yM, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXpYm, optimum.getValue(), 2.0e-8);
- }
- }
- }
- assertTrue(localCount > 0);
- assertTrue(globalCount > 0);
- assertTrue(nm.getTotalEvaluations() > 600);
- assertTrue(nm.getTotalEvaluations() < 800);
+ NelderMead optimizer = new NelderMead();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(1.0e-10, 1.0e-30));
+ optimizer.setMaxEvaluations(100);
+ optimizer.setStartConfiguration(new double[] { 0.2, 0.2 });
+ PointValuePair optimum;
// minimization
- nm.optimize(fourExtrema, 100, new ValueChecker(1.0e-8), false,
- new double[] { -5, -5 }, new double[] { 5, 5 }, 10, 38821113105892l);
- optima = nm.getOptima();
- assertEquals(10, optima.length);
- localCount = 0;
- globalCount = 0;
- for (PointValuePair optimum : optima) {
- if (optimum != null) {
- if (optimum.getPoint()[0] < 0) {
- // this should be the local maximum
- ++localCount;
- assertEquals(xM, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yM, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXmYm, optimum.getValue(), 2.0e-8);
- } else {
- // this should be the global maximum
- ++globalCount;
- assertEquals(xP, optimum.getPoint()[0], 1.0e-3);
- assertEquals(yP, optimum.getPoint()[1], 1.0e-3);
- assertEquals(valueXpYp, optimum.getValue(), 2.0e-8);
- }
- }
- }
- assertTrue(localCount > 0);
- assertTrue(globalCount > 0);
- assertTrue(nm.getTotalEvaluations() > 600);
- assertTrue(nm.getTotalEvaluations() < 800);
+ optimum = optimizer.optimize(fourExtrema, GoalType.MINIMIZE, new double[] { -3.0, 0 });
+ assertEquals(xM, optimum.getPoint()[0], 2.0e-7);
+ assertEquals(yP, optimum.getPoint()[1], 2.0e-5);
+ assertEquals(valueXmYp, optimum.getValue(), 6.0e-12);
+ assertTrue(optimizer.getEvaluations() > 60);
+ assertTrue(optimizer.getEvaluations() < 90);
+
+ optimum = optimizer.optimize(fourExtrema, GoalType.MINIMIZE, new double[] { +1, 0 });
+ assertEquals(xP, optimum.getPoint()[0], 5.0e-6);
+ assertEquals(yM, optimum.getPoint()[1], 6.0e-6);
+ assertEquals(valueXpYm, optimum.getValue(), 1.0e-11);
+ assertTrue(optimizer.getEvaluations() > 60);
+ assertTrue(optimizer.getEvaluations() < 90);
+
+ // maximization
+ optimum = optimizer.optimize(fourExtrema, GoalType.MAXIMIZE, new double[] { -3.0, 0.0 });
+ assertEquals(xM, optimum.getPoint()[0], 1.0e-5);
+ assertEquals(yM, optimum.getPoint()[1], 3.0e-6);
+ assertEquals(valueXmYm, optimum.getValue(), 3.0e-12);
+ assertTrue(optimizer.getEvaluations() > 60);
+ assertTrue(optimizer.getEvaluations() < 90);
+
+ optimum = optimizer.optimize(fourExtrema, GoalType.MAXIMIZE, new double[] { +1, 0 });
+ assertEquals(xP, optimum.getPoint()[0], 4.0e-6);
+ assertEquals(yP, optimum.getPoint()[1], 5.0e-6);
+ assertEquals(valueXpYp, optimum.getValue(), 7.0e-12);
+ assertTrue(optimizer.getEvaluations() > 60);
+ assertTrue(optimizer.getEvaluations() < 90);
}
public void testRosenbrock()
- throws ObjectiveException, ConvergenceException, NotPositiveDefiniteMatrixException {
+ throws ObjectiveException, ConvergenceException {
ObjectiveFunction rosenbrock =
new ObjectiveFunction() {
- private static final long serialVersionUID = -7039124064449091152L;
+ private static final long serialVersionUID = -9044950469615237490L;
public double objective(double[] x) {
++count;
double a = x[1] - x[0] * x[0];
@@ -172,61 +146,19 @@
};
count = 0;
- NelderMead nm = new NelderMead();
- try {
- nm.optimize(rosenbrock, 100, new ValueChecker(1.0e-3), true,
- new double[][] {
- { -1.2, 1.0 }, { 3.5, -2.3 }, { 0.4, 1.5 }
- }, 1, 5384353l);
- fail("an exception should have been thrown");
- } catch (ConvergenceException ce) {
- // expected behavior
- } catch (Exception e) {
- e.printStackTrace(System.err);
- fail("wrong exception caught: " + e.getMessage());
- }
-
- count = 0;
+ NelderMead optimizer = new NelderMead();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(-1, 1.0e-3));
+ optimizer.setMaxEvaluations(100);
+ optimizer.setStartConfiguration(new double[][] {
+ { -1.2, 1.0 }, { 0.9, 1.2 } , { 3.5, -2.3 }
+ });
PointValuePair optimum =
- nm.optimize(rosenbrock, 100, new ValueChecker(1.0e-3), true,
- new double[][] {
- { -1.2, 1.0 }, { 0.9, 1.2 }, { 3.5, -2.3 }
- }, 10, 1642738l);
-
- assertTrue(count > 700);
- assertTrue(count < 800);
- assertEquals(0.0, optimum.getValue(), 5.0e-5);
- assertEquals(1.0, optimum.getPoint()[0], 0.01);
- assertEquals(1.0, optimum.getPoint()[1], 0.01);
-
- PointValuePair[] minima = nm.getOptima();
- assertEquals(10, minima.length);
- assertNotNull(minima[0]);
- assertNull(minima[minima.length - 1]);
- for (int i = 0; i < minima.length; ++i) {
- if (minima[i] == null) {
- if ((i + 1) < minima.length) {
- assertTrue(minima[i+1] == null);
- }
- } else {
- if (i > 0) {
- assertTrue(minima[i-1].getValue() <= minima[i].getValue());
- }
- }
- }
+ optimizer.optimize(rosenbrock, GoalType.MINIMIZE, new double[] { -1.2, 1.0 });
- RandomGenerator rg = new JDKRandomGenerator();
- rg.setSeed(64453353l);
- RandomVectorGenerator rvg =
- new UncorrelatedRandomVectorGenerator(new double[] { 0.9, 1.1 },
- new double[] { 0.2, 0.2 },
- new UniformRandomGenerator(rg));
- optimum =
- nm.optimize(rosenbrock, 100, new ValueChecker(1.0e-3), true, rvg);
- assertEquals(0.0, optimum.getValue(), 2.0e-4);
- optimum =
- nm.optimize(rosenbrock, 100, new ValueChecker(1.0e-3), true, rvg, 3);
- assertEquals(0.0, optimum.getValue(), 3.0e-5);
+ assertEquals(count, optimizer.getEvaluations());
+ assertTrue(optimizer.getEvaluations() > 40);
+ assertTrue(optimizer.getEvaluations() < 50);
+ assertTrue(optimum.getValue() < 8.0e-4);
}
@@ -235,7 +167,7 @@
ObjectiveFunction powell =
new ObjectiveFunction() {
- private static final long serialVersionUID = -7681075710859391520L;
+ private static final long serialVersionUID = -832162886102041840L;
public double objective(double[] x) {
++count;
double a = x[0] + 10 * x[1];
@@ -247,37 +179,18 @@
};
count = 0;
- NelderMead nm = new NelderMead();
+ NelderMead optimizer = new NelderMead();
+ optimizer.setConvergenceChecker(new ObjectiveValueChecker(-1.0, 1.0e-3));
+ optimizer.setMaxEvaluations(200);
PointValuePair optimum =
- nm.optimize(powell, 200, new ValueChecker(1.0e-3), true,
- new double[] { 3.0, -1.0, 0.0, 1.0 },
- new double[] { 4.0, 0.0, 1.0, 2.0 },
- 1, 1642738l);
- assertTrue(count < 150);
- assertEquals(0.0, optimum.getValue(), 6.0e-4);
- assertEquals(0.0, optimum.getPoint()[0], 0.07);
- assertEquals(0.0, optimum.getPoint()[1], 0.07);
- assertEquals(0.0, optimum.getPoint()[2], 0.07);
- assertEquals(0.0, optimum.getPoint()[3], 0.07);
+ optimizer.optimize(powell, GoalType.MINIMIZE, new double[] { 3.0, -1.0, 0.0, 1.0 });
+ assertEquals(count, optimizer.getEvaluations());
+ assertTrue(optimizer.getEvaluations() > 110);
+ assertTrue(optimizer.getEvaluations() < 130);
+ assertTrue(optimum.getValue() < 2.0e-3);
}
- private static class ValueChecker implements ConvergenceChecker {
-
- public ValueChecker(double threshold) {
- this.threshold = threshold;
- }
-
- public boolean converged(PointValuePair[] simplex) {
- PointValuePair smallest = simplex[0];
- PointValuePair largest = simplex[simplex.length - 1];
- return (largest.getValue() - smallest.getValue()) < threshold;
- }
-
- private double threshold;
-
- };
-
public static Test suite() {
return new TestSuite(NelderMeadTest.class);
}