Reduced number of overridden public "optimize" methods (replaced by protected
"optimizeInternal"): whenever the code is ready for 4.0, only the base class's
"optimize" method should define the public API (subclass specifics are handled
in overridden "optimizeInternal" which must call the base class's version to
handle the common setup).


git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1401928 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gilles Sadowski 2012-10-25 00:20:24 +00:00
parent 8964c7aa09
commit 2796e77e2e
3 changed files with 40 additions and 26 deletions

View File

@ -162,7 +162,7 @@ public abstract class BaseAbstractMultivariateOptimizer<FUNC extends Multivariat
* instead.
*/
@Deprecated
protected PointValuePair optimizeInternal(int maxEval, MultivariateFunction f, GoalType goalType,
protected PointValuePair optimizeInternal(int maxEval, FUNC f, GoalType goalType,
double[] startPoint) {
return optimizeInternal(maxEval, f, goalType, new InitialGuess(startPoint));
}
@ -184,7 +184,7 @@ public abstract class BaseAbstractMultivariateOptimizer<FUNC extends Multivariat
* evaluations is exceeded.
*/
protected PointValuePair optimizeInternal(int maxEval,
MultivariateFunction f,
FUNC f,
GoalType goalType,
OptimizationData... optData)
throws TooManyEvaluationsException {

View File

@ -22,6 +22,8 @@ import org.apache.commons.math3.analysis.differentiation.GradientFunction;
import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
import org.apache.commons.math3.optimization.ConvergenceChecker;
import org.apache.commons.math3.optimization.GoalType;
import org.apache.commons.math3.optimization.OptimizationData;
import org.apache.commons.math3.optimization.InitialGuess;
import org.apache.commons.math3.optimization.MultivariateDifferentiableOptimizer;
import org.apache.commons.math3.optimization.PointValuePair;
import org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateOptimizer;
@ -35,9 +37,7 @@ import org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateOpti
* @since 3.1
*/
public abstract class AbstractDifferentiableOptimizer
extends BaseAbstractMultivariateOptimizer<MultivariateDifferentiableFunction>
implements MultivariateDifferentiableOptimizer {
extends BaseAbstractMultivariateOptimizer<MultivariateDifferentiableFunction> {
/**
* Objective function gradient.
*/
@ -60,17 +60,31 @@ public abstract class AbstractDifferentiableOptimizer
return gradient.value(evaluationPoint);
}
/** {@inheritDoc} */
@Override
public PointValuePair optimize(final int maxEval, final MultivariateDifferentiableFunction f,
final GoalType goalType, final double[] startPoint) {
// store optimization problem characteristics
gradient = new GradientFunction(f);
// perform optimization
return super.optimize(maxEval, f, goalType, startPoint);
/**
* {@inheritDoc}
*
* @deprecated In 3.1. Please use
* {@link #optimizeInternal(int,MultivariateDifferentiableFunction,GoalType,OptimizationData[])}
* instead.
*/
@Override@Deprecated
protected PointValuePair optimizeInternal(final int maxEval,
final MultivariateDifferentiableFunction f,
final GoalType goalType,
final double[] startPoint) {
return optimizeInternal(maxEval, f, goalType, new InitialGuess(startPoint));
}
/** {@inheritDoc} */
@Override
protected PointValuePair optimizeInternal(final int maxEval,
final MultivariateDifferentiableFunction f,
final GoalType goalType,
final OptimizationData... optData) {
// Store optimization problem characteristics.
gradient = new GradientFunction(f);
// Perform optimization.
return super.optimizeInternal(maxEval, f, goalType, optData);
}
}

View File

@ -19,7 +19,7 @@ package org.apache.commons.math3.optimization.general;
import org.apache.commons.math3.analysis.DifferentiableMultivariateFunction;
import org.apache.commons.math3.analysis.MultivariateVectorFunction;
import org.apache.commons.math3.analysis.differentiation.GradientFunction;
import org.apache.commons.math3.analysis.FunctionUtils;
import org.apache.commons.math3.analysis.differentiation.MultivariateDifferentiableFunction;
import org.apache.commons.math3.optimization.DifferentiableMultivariateOptimizer;
import org.apache.commons.math3.optimization.GoalType;
@ -76,14 +76,14 @@ public abstract class AbstractScalarDifferentiableOptimizer
/** {@inheritDoc} */
@Override
public PointValuePair optimize(int maxEval,
final DifferentiableMultivariateFunction f,
final GoalType goalType,
final double[] startPoint) {
protected PointValuePair optimizeInternal(int maxEval,
final DifferentiableMultivariateFunction f,
final GoalType goalType,
final double[] startPoint) {
// Store optimization problem characteristics.
gradient = f.gradient();
return optimizeInternal(maxEval, f, goalType, startPoint);
return super.optimizeInternal(maxEval, f, goalType, startPoint);
}
/**
@ -107,9 +107,9 @@ public abstract class AbstractScalarDifferentiableOptimizer
final MultivariateDifferentiableFunction f,
final GoalType goalType,
final double[] startPoint) {
// Store optimization problem characteristics.
gradient = new GradientFunction(f);
return optimizeInternal(maxEval, f, goalType, startPoint);
return optimizeInternal(maxEval,
FunctionUtils.toDifferentiableMultivariateFunction(f),
goalType,
startPoint);
}
}