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/11/15 12:47:25 UTC

svn commit: r1202140 - 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/general/ site/xdoc/ test/java/org/apache/com...

Author: erans
Date: Tue Nov 15 11:47:25 2011
New Revision: 1202140

URL: http://svn.apache.org/viewvc?rev=1202140&view=rev
Log:
MATH-697
New interface and abstract base class for separate support of unconstrained
and simple bounds constraints optimizers.

Added:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java   (with props)
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java   (with props)
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/BaseMultivariateRealOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.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/general/AbstractScalarDifferentiableOptimizer.java
    commons/proper/math/trunk/src/site/xdoc/changes.xml
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizerTest.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=1202140&r1=1202139&r2=1202140&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 Tue Nov 15 11:47:25 2011
@@ -137,16 +137,6 @@ public class BaseMultiStartMultivariateR
     public RealPointValuePair optimize(int maxEval, final FUNC f,
                                        final GoalType goal,
                                        double[] startPoint) {
-        return optimize(maxEval, f, goal, startPoint, null, null);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public RealPointValuePair optimize(int maxEval, final FUNC f,
-                                       final GoalType goal,
-                                       double[] startPoint,
-                                       double[] lowerBound, double[] upperBound) {
         maxEvaluations = maxEval;
         RuntimeException lastException = null;
         optima = new RealPointValuePair[starts];
@@ -157,8 +147,7 @@ public class BaseMultiStartMultivariateR
             // CHECKSTYLE: stop IllegalCatch
             try {
                 optima[i] = optimizer.optimize(maxEval - totalEvaluations, f, goal,
-                                               i == 0 ? startPoint : generator.nextVector(),
-                                               lowerBound, upperBound);
+                                               i == 0 ? startPoint : generator.nextVector());
             } catch (RuntimeException mue) {
                 lastException = mue;
                 optima[i] = null;

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultivariateRealOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultivariateRealOptimizer.java?rev=1202140&r1=1202139&r2=1202140&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultivariateRealOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseMultivariateRealOptimizer.java Tue Nov 15 11:47:25 2011
@@ -54,31 +54,4 @@ public interface BaseMultivariateRealOpt
      */
     RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
                                 double[] startPoint);
-
-    /**
-     * Optimize an objective function.
-     *
-     * @param f Objective function.
-     * @param goalType Type of optimization goal: either
-     * {@link GoalType#MAXIMIZE} or {@link GoalType#MINIMIZE}.
-     * @param startPoint Start point for optimization.
-     * @param maxEval Maximum number of function evaluations.
-     * @param lowerBound Lower bound for each of the parameters.
-     * @param upperBound Upper bound for each of the parameters.
-     * @return the point/value pair giving the optimal value for objective
-     * function.
-     * @throws org.apache.commons.math.exception.DimensionMismatchException
-     * if the array sizes are wrong.
-     * @throws org.apache.commons.math.exception.TooManyEvaluationsException
-     * if the maximal number of evaluations is exceeded.
-     * @throws org.apache.commons.math.exception.NullArgumentException if
-     * {@code f}, {@code goalType} or {@code startPoint} is {@code null}.
-     * @throws org.apache.commons.math.exception.NumberIsTooSmallException if any
-     * of the initial values is less than its lower bound.
-     * @throws org.apache.commons.math.exception.NumberIsTooLargeException if any
-     * of the initial values is greater than its upper bound.
-     */
-    RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
-                                double[] startPoint,
-                                double[] lowerBound, double[] upperBound);
 }

Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java?rev=1202140&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java (added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java Tue Nov 15 11:47:25 2011
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.math.optimization;
+
+import org.apache.commons.math.analysis.MultivariateRealFunction;
+
+/**
+ * This interface is mainly intended to enforce the internal coherence of
+ * Commons-FastMath. Users of the API are advised to base their code on
+ * the following interfaces:
+ * <ul>
+ *  <li>{@link org.apache.commons.math.optimization.MultivariateRealOptimizer}</li>
+ *  <li>{@link org.apache.commons.math.optimization.DifferentiableMultivariateRealOptimizer}</li>
+ * </ul>
+ *
+ * @param <FUNC> Type of the objective function to be optimized.
+ *
+ * @version $Id$
+ * @since 3.0
+ */
+public interface BaseSimpleBoundsMultivariateRealOptimizer<FUNC extends MultivariateRealFunction>
+    extends BaseMultivariateRealOptimizer<FUNC> {
+    /**
+     * Optimize an objective function.
+     *
+     * @param f Objective function.
+     * @param goalType Type of optimization goal: either
+     * {@link GoalType#MAXIMIZE} or {@link GoalType#MINIMIZE}.
+     * @param startPoint Start point for optimization.
+     * @param maxEval Maximum number of function evaluations.
+     * @param lowerBound Lower bound for each of the parameters.
+     * @param upperBound Upper bound for each of the parameters.
+     * @return the point/value pair giving the optimal value for objective
+     * function.
+     * @throws org.apache.commons.math.exception.DimensionMismatchException
+     * if the array sizes are wrong.
+     * @throws org.apache.commons.math.exception.TooManyEvaluationsException
+     * if the maximal number of evaluations is exceeded.
+     * @throws org.apache.commons.math.exception.NullArgumentException if
+     * {@code f}, {@code goalType} or {@code startPoint} is {@code null}.
+     * @throws org.apache.commons.math.exception.NumberIsTooSmallException if any
+     * of the initial values is less than its lower bound.
+     * @throws org.apache.commons.math.exception.NumberIsTooLargeException if any
+     * of the initial values is greater than its upper bound.
+     */
+    RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
+                                double[] startPoint,
+                                double[] lowerBound, double[] upperBound);
+}

Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/BaseSimpleBoundsMultivariateRealOptimizer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java?rev=1202140&r1=1202139&r2=1202140&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java Tue Nov 15 11:47:25 2011
@@ -28,8 +28,9 @@ import org.apache.commons.math.linear.Ar
 import org.apache.commons.math.linear.ArrayRealVector;
 import org.apache.commons.math.linear.RealVector;
 import org.apache.commons.math.optimization.GoalType;
-import org.apache.commons.math.optimization.MultivariateRealOptimizer;
+import org.apache.commons.math.optimization.BaseSimpleBoundsMultivariateRealOptimizer;
 import org.apache.commons.math.optimization.RealPointValuePair;
+import org.apache.commons.math.optimization.MultivariateRealOptimizer;
 
 /**
  * Powell's BOBYQA algorithm. This implementation is translated and
@@ -50,7 +51,7 @@ import org.apache.commons.math.optimizat
  * @since 3.0
  */
 public class BOBYQAOptimizer
-    extends BaseAbstractScalarOptimizer<MultivariateRealFunction>
+    extends BaseAbstractSimpleBoundsScalarOptimizer<MultivariateRealFunction>
     implements MultivariateRealOptimizer {
     /** Minimum dimension of the problem: {@value} */
     public static final int MINIMUM_PROBLEM_DIMENSION = 2;

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=1202140&r1=1202139&r2=1202140&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 Tue Nov 15 11:47:25 2011
@@ -21,9 +21,6 @@ import org.apache.commons.math.util.Incr
 import org.apache.commons.math.exception.MaxCountExceededException;
 import org.apache.commons.math.exception.TooManyEvaluationsException;
 import org.apache.commons.math.exception.NullArgumentException;
-import org.apache.commons.math.exception.DimensionMismatchException;
-import org.apache.commons.math.exception.NumberIsTooSmallException;
-import org.apache.commons.math.exception.NumberIsTooLargeException;
 import org.apache.commons.math.analysis.MultivariateRealFunction;
 import org.apache.commons.math.optimization.BaseMultivariateRealOptimizer;
 import org.apache.commons.math.optimization.GoalType;
@@ -36,7 +33,7 @@ import org.apache.commons.math.optimizat
  * This base class handles the boiler-plate methods associated to thresholds
  * settings, iterations and evaluations counting.
  *
- * @param <FUNC> Type of the objective function to be optimized
+ * @param <FUNC> Type of the objective function to be optimized.
  *
  * @version $Id$
  * @since 2.2
@@ -51,10 +48,6 @@ public abstract class BaseAbstractScalar
     private GoalType goal;
     /** Initial guess. */
     private double[] start;
-    /** Lower bounds. */
-    private double[] lowerBound;
-    /** Upper bounds. */
-    private double[] upperBound;
     /** Objective function. */
     private MultivariateRealFunction function;
 
@@ -108,13 +101,6 @@ public abstract class BaseAbstractScalar
     /** {@inheritDoc} */
     public RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
                                        double[] startPoint) {
-        return optimize(maxEval, f, goalType, startPoint, null, null);
-    }
-
-    /** {@inheritDoc} */
-    public RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
-                                       double[] startPoint,
-                                       double[] lower, double[] upper) {
         // Checks.
         if (f == null) {
             throw new NullArgumentException();
@@ -125,31 +111,6 @@ public abstract class BaseAbstractScalar
         if (startPoint == null) {
             throw new NullArgumentException();
         }
-        final int dim = startPoint.length;
-        if (lower != null) {
-            if (lower.length != dim) {
-                throw new DimensionMismatchException(lower.length, dim);
-            }
-            for (int i = 0; i < dim; i++) {
-                final double v = startPoint[i];
-                final double lo = lower[i];
-                if (v < lo) {
-                    throw new NumberIsTooSmallException(v, lo, true);
-                }
-            }
-        }
-        if (upper != null) {
-            if (upper.length != dim) {
-                throw new DimensionMismatchException(upper.length, dim);
-            }
-            for (int i = 0; i < dim; i++) {
-                final double v = startPoint[i];
-                final double hi = upper[i];
-                if (v > hi) {
-                    throw new NumberIsTooLargeException(v, hi, true);
-                }
-            }
-        }
 
         // Reset.
         evaluations.setMaximalCount(maxEval);
@@ -160,23 +121,6 @@ public abstract class BaseAbstractScalar
         goal = goalType;
         start = startPoint.clone();
 
-        if (lower == null) {
-            lowerBound = new double[dim];
-            for (int i = 0; i < dim; i++) {
-                lowerBound[i] = Double.NEGATIVE_INFINITY;
-            }
-        } else {
-            lowerBound = lower.clone();
-        }
-        if (upper == null) {
-            upperBound = new double[dim];
-            for (int i = 0; i < dim; i++) {
-                upperBound[i] = Double.POSITIVE_INFINITY;
-            }
-        } else {
-            upperBound = upper.clone();
-        }
-
         // Perform computation.
         return doOptimize();
     }
@@ -196,20 +140,6 @@ public abstract class BaseAbstractScalar
     }
 
     /**
-     * @return the lower bounds.
-     */
-    public double[] getLowerBound() {
-        return lowerBound.clone();
-    }
-
-    /**
-     * @return the upper bounds.
-     */
-    public double[] getUpperBound() {
-        return upperBound.clone();
-    }
-
-    /**
      * Perform the bulk of the optimization algorithm.
      *
      * @return the point/value pair giving the optimal value for the

Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java?rev=1202140&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java (added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java Tue Nov 15 11:47:25 2011
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.math.optimization.direct;
+
+import org.apache.commons.math.analysis.MultivariateRealFunction;
+import org.apache.commons.math.optimization.BaseMultivariateRealOptimizer;
+import org.apache.commons.math.optimization.BaseSimpleBoundsMultivariateRealOptimizer;
+import org.apache.commons.math.optimization.GoalType;
+import org.apache.commons.math.optimization.RealPointValuePair;
+import org.apache.commons.math.exception.DimensionMismatchException;
+import org.apache.commons.math.exception.NumberIsTooSmallException;
+import org.apache.commons.math.exception.NumberIsTooLargeException;
+
+/**
+ * Base class for implementing optimizers for multivariate scalar functions,
+ * subject to simple bounds: The valid range of the parameters is an interval.
+ * The interval can possibly be infinite (in one or both directions).
+ * This base class handles the boiler-plate methods associated to thresholds
+ * settings, iterations and evaluations counting.
+ *
+ * @param <FUNC> Type of the objective function to be optimized.
+ *
+ * @version $Id$
+ * @since 3.0
+ */
+public abstract class BaseAbstractSimpleBoundsScalarOptimizer<FUNC extends MultivariateRealFunction>
+    extends BaseAbstractScalarOptimizer<FUNC>
+    implements BaseMultivariateRealOptimizer<FUNC>,
+               BaseSimpleBoundsMultivariateRealOptimizer<FUNC> {
+    /** Lower bounds. */
+    private double[] lowerBound;
+    /** Upper bounds. */
+    private double[] upperBound;
+
+    /**
+     * @return the lower bounds.
+     */
+    public double[] getLowerBound() {
+        return lowerBound.clone();
+    }
+
+    /**
+     * @return the upper bounds.
+     */
+    public double[] getUpperBound() {
+        return upperBound.clone();
+    }
+
+    /** {@inheritDoc} */
+    public RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
+                                       double[] startPoint) {
+        return optimize(maxEval, f, goalType, startPoint, null, null);
+    }
+
+    /** {@inheritDoc} */
+    public RealPointValuePair optimize(int maxEval, FUNC f, GoalType goalType,
+                                       double[] startPoint,
+                                       double[] lower, double[] upper) {
+        // Checks.
+        final int dim = startPoint.length;
+        if (lower != null) {
+            if (lower.length != dim) {
+                throw new DimensionMismatchException(lower.length, dim);
+            }
+            for (int i = 0; i < dim; i++) {
+                final double v = startPoint[i];
+                final double lo = lower[i];
+                if (v < lo) {
+                    throw new NumberIsTooSmallException(v, lo, true);
+                }
+            }
+        }
+        if (upper != null) {
+            if (upper.length != dim) {
+                throw new DimensionMismatchException(upper.length, dim);
+            }
+            for (int i = 0; i < dim; i++) {
+                final double v = startPoint[i];
+                final double hi = upper[i];
+                if (v > hi) {
+                    throw new NumberIsTooLargeException(v, hi, true);
+                }
+            }
+        }
+
+        // Initialization.
+        if (lower == null) {
+            lowerBound = new double[dim];
+            for (int i = 0; i < dim; i++) {
+                lowerBound[i] = Double.NEGATIVE_INFINITY;
+            }
+        } else {
+            lowerBound = lower.clone();
+        }
+        if (upper == null) {
+            upperBound = new double[dim];
+            for (int i = 0; i < dim; i++) {
+                upperBound[i] = Double.POSITIVE_INFINITY;
+            }
+        } else {
+            upperBound = upper.clone();
+        }
+
+        // Base class method performs the non bound-specific initializations.
+        return super.optimize(maxEval, f, goalType, startPoint);
+    }
+}

Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BaseAbstractSimpleBoundsScalarOptimizer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/general/AbstractScalarDifferentiableOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/general/AbstractScalarDifferentiableOptimizer.java?rev=1202140&r1=1202139&r2=1202140&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/general/AbstractScalarDifferentiableOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/general/AbstractScalarDifferentiableOptimizer.java Tue Nov 15 11:47:25 2011
@@ -73,21 +73,9 @@ public abstract class AbstractScalarDiff
                                        final DifferentiableMultivariateRealFunction f,
                                        final GoalType goalType,
                                        final double[] startPoint) {
-        return optimize(maxEval, f, goalType, startPoint, null, null);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public RealPointValuePair optimize(int maxEval,
-                                       final DifferentiableMultivariateRealFunction f,
-                                       final GoalType goalType,
-                                       final double[] startPoint,
-                                       double[] lowerBound, double[] upperBound) {
         // Store optimization problem characteristics.
         gradient = f.gradient();
 
-        return super.optimize(maxEval, f, goalType,
-                              startPoint,
-                              lowerBound, upperBound);
+        return super.optimize(maxEval, f, goalType, startPoint);
     }
 }

Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=1202140&r1=1202139&r2=1202140&view=diff
==============================================================================
--- commons/proper/math/trunk/src/site/xdoc/changes.xml (original)
+++ commons/proper/math/trunk/src/site/xdoc/changes.xml Tue Nov 15 11:47:25 2011
@@ -52,6 +52,10 @@ The <action> type attribute can be add,u
     If the output is not quite correct, check for invisible trailing spaces!
      -->
     <release version="3.0" date="TBD" description="TBD">
+      <action dev="erans" type="update" issue="MATH-697">
+        Added interface and abstract class for supporting optimizers classes
+        that can take simple constraints into account.
+      </action>
       <action dev="luc" type="fix" due-to="MATH-706" >
         Fixed a bad interaction between step handlers and event handlers in
         ODE integrators.

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizerTest.java?rev=1202140&r1=1202139&r2=1202140&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizerTest.java Tue Nov 15 11:47:25 2011
@@ -259,7 +259,7 @@ public class BOBYQAOptimizerTest {
 //        RealPointValuePair result = optim.optimize(100000, func, goal, startPoint);
         final double[] lB = boundaries == null ? null : boundaries[0];
         final double[] uB = boundaries == null ? null : boundaries[1];
-        MultivariateRealOptimizer optim = new BOBYQAOptimizer(2 * dim + 1);
+        BOBYQAOptimizer optim = new BOBYQAOptimizer(2 * dim + 1);
         RealPointValuePair result = optim.optimize(maxEvaluations, func, goal, startPoint, lB, uB);
 //        System.out.println(func.getClass().getName() + " = " 
 //              + optim.getEvaluations() + " f(");