You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2011/10/27 15:34:09 UTC
svn commit: r1189750 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/optimization/
main/java/org/apache/commons/math/optimization/direct/
main/java/org/apache/commons/math/optimization/univariate/
test/java/org/apache/commons/mat...
Author: erans
Date: Thu Oct 27 13:34:08 2011
New Revision: 1189750
URL: http://svn.apache.org/viewvc?rev=1189750&view=rev
Log:
MATH-413
Removed "setConvergenceChecker"; convergence checker is passed at construction.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateRealOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateVectorialOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractScalarOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractVectorialOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/AbstractUnivariateRealOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/BrentOptimizer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateRealOptimizerTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateVectorialOptimizerTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartMultivariateRealOptimizerTest.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizerTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateRealOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateRealOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateRealOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateRealOptimizer.java Thu Oct 27 13:34:08 2011
@@ -127,11 +127,6 @@ public class BaseMultiStartMultivariateR
}
/** {@inheritDoc} */
- public void setConvergenceChecker(ConvergenceChecker<RealPointValuePair> checker) {
- optimizer.setConvergenceChecker(checker);
- }
-
- /** {@inheritDoc} */
public ConvergenceChecker<RealPointValuePair> getConvergenceChecker() {
return optimizer.getConvergenceChecker();
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateVectorialOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateVectorialOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateVectorialOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultiStartMultivariateVectorialOptimizer.java Thu Oct 27 13:34:08 2011
@@ -128,11 +128,6 @@ public class BaseMultiStartMultivariateV
}
/** {@inheritDoc} */
- public void setConvergenceChecker(ConvergenceChecker<VectorialPointValuePair> checker) {
- optimizer.setConvergenceChecker(checker);
- }
-
- /** {@inheritDoc} */
public ConvergenceChecker<VectorialPointValuePair> getConvergenceChecker() {
return optimizer.getConvergenceChecker();
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseOptimizer.java Thu Oct 27 13:34:08 2011
@@ -52,13 +52,6 @@ public interface BaseOptimizer<PAIR> {
int getEvaluations();
/**
- * Set the convergence checker.
- *
- * @param checker Object to use to check for convergence.
- */
- void setConvergenceChecker(ConvergenceChecker<PAIR> checker);
-
- /**
* Get the convergence checker.
*
* @return the object used to check for convergence.
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractScalarOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractScalarOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractScalarOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractScalarOptimizer.java Thu Oct 27 13:34:08 2011
@@ -77,11 +77,6 @@ public abstract class BaseAbstractScalar
}
/** {@inheritDoc} */
- public void setConvergenceChecker(ConvergenceChecker<RealPointValuePair> convergenceChecker) {
- this.checker = convergenceChecker;
- }
-
- /** {@inheritDoc} */
public ConvergenceChecker<RealPointValuePair> getConvergenceChecker() {
return checker;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractVectorialOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractVectorialOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractVectorialOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractVectorialOptimizer.java Thu Oct 27 13:34:08 2011
@@ -79,11 +79,6 @@ public abstract class BaseAbstractVector
}
/** {@inheritDoc} */
- public void setConvergenceChecker(ConvergenceChecker<VectorialPointValuePair> convergenceChecker) {
- this.checker = convergenceChecker;
- }
-
- /** {@inheritDoc} */
public ConvergenceChecker<VectorialPointValuePair> getConvergenceChecker() {
return checker;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/AbstractUnivariateRealOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/AbstractUnivariateRealOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/AbstractUnivariateRealOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/AbstractUnivariateRealOptimizer.java Thu Oct 27 13:34:08 2011
@@ -35,7 +35,7 @@ import org.apache.commons.math.optimizat
public abstract class AbstractUnivariateRealOptimizer
implements UnivariateRealOptimizer {
/** Convergence checker. */
- private ConvergenceChecker<UnivariateRealPointValuePair> checker;
+ private final ConvergenceChecker<UnivariateRealPointValuePair> checker;
/** Evaluations counter. */
private final Incrementor evaluations = new Incrementor();
/** Optimization type */
@@ -49,6 +49,13 @@ public abstract class AbstractUnivariate
/** Function to optimize. */
private UnivariateRealFunction function;
+ /**
+ * @param checker Convergence checking procedure.
+ */
+ protected AbstractUnivariateRealOptimizer(ConvergenceChecker<UnivariateRealPointValuePair> checker) {
+ this.checker = checker;
+ }
+
/** {@inheritDoc} */
public int getMaxEvaluations() {
return evaluations.getMaximalCount();
@@ -138,13 +145,6 @@ public abstract class AbstractUnivariate
/**
* {@inheritDoc}
*/
- public void setConvergenceChecker(ConvergenceChecker<UnivariateRealPointValuePair> c) {
- checker = c;
- }
-
- /**
- * {@inheritDoc}
- */
public ConvergenceChecker<UnivariateRealPointValuePair> getConvergenceChecker() {
return checker;
}
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/BrentOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/BrentOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/BrentOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/BrentOptimizer.java Thu Oct 27 13:34:08 2011
@@ -31,10 +31,6 @@ import org.apache.commons.math.optimizat
* If the function is defined on some interval {@code (lo, hi)}, then
* this method finds an approximation {@code x} to the point at which
* the function attains its minimum.
- * <br/>
- * The user is responsible for calling {@link
- * #setConvergenceChecker(ConvergenceChecker) ConvergenceChecker}
- * prior to using the optimizer.
*
* @version $Id$
* @since 2.0
@@ -68,11 +64,16 @@ public class BrentOptimizer extends Abst
*
* @param rel Relative threshold.
* @param abs Absolute threshold.
+ * @param checker Additional, user-defined, convergence checking
+ * procedure.
* @throws NotStrictlyPositiveException if {@code abs <= 0}.
* @throws NumberIsTooSmallException if {@code rel < 2 * Math.ulp(1d)}.
*/
public BrentOptimizer(double rel,
- double abs) {
+ double abs,
+ ConvergenceChecker<UnivariateRealPointValuePair> checker) {
+ super(checker);
+
if (rel < MIN_RELATIVE_TOLERANCE) {
throw new NumberIsTooSmallException(rel, MIN_RELATIVE_TOLERANCE, true);
}
@@ -83,6 +84,25 @@ public class BrentOptimizer extends Abst
absoluteThreshold = abs;
}
+ /**
+ * The arguments are used implement the original stopping criterion
+ * of Brent's algorithm.
+ * {@code abs} and {@code rel} define a tolerance
+ * {@code tol = rel |x| + abs}. {@code rel} should be no smaller than
+ * <em>2 macheps</em> and preferably not much less than <em>sqrt(macheps)</em>,
+ * where <em>macheps</em> is the relative machine precision. {@code abs} must
+ * be positive.
+ *
+ * @param rel Relative threshold.
+ * @param abs Absolute threshold.
+ * @throws NotStrictlyPositiveException if {@code abs <= 0}.
+ * @throws NumberIsTooSmallException if {@code rel < 2 * Math.ulp(1d)}.
+ */
+ public BrentOptimizer(double rel,
+ double abs) {
+ this(rel, abs, null);
+ }
+
/** {@inheritDoc} */
@Override
protected UnivariateRealPointValuePair doOptimize() {
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/univariate/MultiStartUnivariateRealOptimizer.java Thu Oct 27 13:34:08 2011
@@ -88,13 +88,6 @@ public class MultiStartUnivariateRealOpt
/**
* {@inheritDoc}
*/
- public void setConvergenceChecker(ConvergenceChecker<UnivariateRealPointValuePair> checker) {
- optimizer.setConvergenceChecker(checker);
- }
-
- /**
- * {@inheritDoc}
- */
public ConvergenceChecker<UnivariateRealPointValuePair> getConvergenceChecker() {
return optimizer.getConvergenceChecker();
}
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateRealOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateRealOptimizerTest.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateRealOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateRealOptimizerTest.java Thu Oct 27 13:34:08 2011
@@ -44,7 +44,8 @@ public class MultiStartDifferentiableMul
circle.addPoint( 35.0, 15.0);
circle.addPoint( 45.0, 97.0);
NonLinearConjugateGradientOptimizer underlying =
- new NonLinearConjugateGradientOptimizer(ConjugateGradientFormula.POLAK_RIBIERE);
+ new NonLinearConjugateGradientOptimizer(ConjugateGradientFormula.POLAK_RIBIERE,
+ new SimpleScalarValueChecker(1.0e-10, 1.0e-10));
JDKRandomGenerator g = new JDKRandomGenerator();
g.setSeed(753289573253l);
RandomVectorGenerator generator =
@@ -52,7 +53,6 @@ public class MultiStartDifferentiableMul
new GaussianRandomGenerator(g));
MultiStartDifferentiableMultivariateRealOptimizer optimizer =
new MultiStartDifferentiableMultivariateRealOptimizer(underlying, 10, generator);
- optimizer.setConvergenceChecker(new SimpleScalarValueChecker(1.0e-10, 1.0e-10));
RealPointValuePair optimum =
optimizer.optimize(200, circle, GoalType.MINIMIZE, new double[] { 98.680, 47.345 });
Assert.assertEquals(200, optimizer.getMaxEvaluations());
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateVectorialOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateVectorialOptimizerTest.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateVectorialOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartDifferentiableMultivariateVectorialOptimizerTest.java Thu Oct 27 13:34:08 2011
@@ -100,7 +100,8 @@ public class MultiStartDifferentiableMul
LinearProblem problem =
new LinearProblem(new double[][] { { 2 } }, new double[] { 3 });
DifferentiableMultivariateVectorialOptimizer underlyingOptimizer =
- new GaussNewtonOptimizer(true);
+ new GaussNewtonOptimizer(true,
+ new SimpleVectorialValueChecker(1.0e-6, 1.0e-6));
JDKRandomGenerator g = new JDKRandomGenerator();
g.setSeed(16069223052l);
RandomVectorGenerator generator =
@@ -108,7 +109,6 @@ public class MultiStartDifferentiableMul
MultiStartDifferentiableMultivariateVectorialOptimizer optimizer =
new MultiStartDifferentiableMultivariateVectorialOptimizer(underlyingOptimizer,
10, generator);
- optimizer.setConvergenceChecker(new SimpleVectorialValueChecker(1.0e-6, 1.0e-6));
// no optima before first optimization attempt
try {
@@ -132,10 +132,11 @@ public class MultiStartDifferentiableMul
Assert.assertEquals(100, optimizer.getMaxEvaluations());
}
- @Test(expected = TestException.class)
+ @Test(expected=TestException.class)
public void testNoOptimum() {
DifferentiableMultivariateVectorialOptimizer underlyingOptimizer =
- new GaussNewtonOptimizer(true);
+ new GaussNewtonOptimizer(true,
+ new SimpleVectorialValueChecker(1.0e-6, 1.0e-6));
JDKRandomGenerator g = new JDKRandomGenerator();
g.setSeed(12373523445l);
RandomVectorGenerator generator =
@@ -143,7 +144,6 @@ public class MultiStartDifferentiableMul
MultiStartDifferentiableMultivariateVectorialOptimizer optimizer =
new MultiStartDifferentiableMultivariateVectorialOptimizer(underlyingOptimizer,
10, generator);
- optimizer.setConvergenceChecker(new SimpleVectorialValueChecker(1.0e-6, 1.0e-6));
optimizer.optimize(100, new DifferentiableMultivariateVectorialFunction() {
public MultivariateMatrixFunction jacobian() {
return null;
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartMultivariateRealOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartMultivariateRealOptimizerTest.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartMultivariateRealOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/MultiStartMultivariateRealOptimizerTest.java Thu Oct 27 13:34:08 2011
@@ -32,7 +32,8 @@ public class MultiStartMultivariateRealO
@Test
public void testRosenbrock() {
Rosenbrock rosenbrock = new Rosenbrock();
- SimplexOptimizer underlying = new SimplexOptimizer();
+ SimplexOptimizer underlying
+ = new SimplexOptimizer(new SimpleScalarValueChecker(-1, 1.0e-3));
NelderMeadSimplex simplex = new NelderMeadSimplex(new double[][] {
{ -1.2, 1.0 }, { 0.9, 1.2 } , { 3.5, -2.3 }
});
@@ -43,7 +44,6 @@ public class MultiStartMultivariateRealO
new UncorrelatedRandomVectorGenerator(2, new GaussianRandomGenerator(g));
MultiStartMultivariateRealOptimizer optimizer =
new MultiStartMultivariateRealOptimizer(underlying, 10, generator);
- optimizer.setConvergenceChecker(new SimpleScalarValueChecker(-1, 1.0e-3));
RealPointValuePair optimum =
optimizer.optimize(1100, rosenbrock, GoalType.MINIMIZE, new double[] { -1.2, 1.0 });
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizerTest.java?rev=1189750&r1=1189749&r2=1189750&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/general/LevenbergMarquardtOptimizerTest.java Thu Oct 27 13:34:08 2011
@@ -478,8 +478,8 @@ public class LevenbergMarquardtOptimizer
for (int i = 0; i < points.length; ++i) {
circle.addPoint(points[i][0], points[i][1]);
}
- LevenbergMarquardtOptimizer optimizer = new LevenbergMarquardtOptimizer();
- optimizer.setConvergenceChecker(new SimpleVectorialValueChecker(1.0e-8, 1.0e-8));
+ LevenbergMarquardtOptimizer optimizer
+ = new LevenbergMarquardtOptimizer(new SimpleVectorialValueChecker(1.0e-8, 1.0e-8));
VectorialPointValuePair optimum =
optimizer.optimize(100, circle, target, weights, new double[] { -12, -12 });
Point2D.Double center = new Point2D.Double(optimum.getPointRef()[0], optimum.getPointRef()[1]);