/* * 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.math3.optimization.univariate; import org.apache.commons.math3.util.Incrementor; import org.apache.commons.math3.exception.MaxCountExceededException; import org.apache.commons.math3.exception.TooManyEvaluationsException; import org.apache.commons.math3.exception.NullArgumentException; import org.apache.commons.math3.analysis.UnivariateFunction; import org.apache.commons.math3.optimization.GoalType; import org.apache.commons.math3.optimization.ConvergenceChecker; /** * Provide a default implementation for several functions useful to generic * optimizers. * * @deprecated As of 3.1 (to be removed in 4.0). * @since 2.0 */ @Deprecated public abstract class BaseAbstractUnivariateOptimizer implements UnivariateOptimizer { /** Convergence checker. */ private final ConvergenceChecker<UnivariatePointValuePair> checker; /** Evaluations counter. */ private final Incrementor evaluations = new Incrementor(); /** Optimization type */ private GoalType goal; /** Lower end of search interval. */ private double searchMin; /** Higher end of search interval. */ private double searchMax; /** Initial guess . */ private double searchStart; /** Function to optimize. */ private UnivariateFunction function; /** * @param checker Convergence checking procedure. */ protected BaseAbstractUnivariateOptimizer(ConvergenceChecker<UnivariatePointValuePair> checker) { this.checker = checker; } /** {@inheritDoc} */ public int getMaxEvaluations() { return evaluations.getMaximalCount(); } /** {@inheritDoc} */ public int getEvaluations() { return evaluations.getCount(); } /** * @return the optimization type. */ public GoalType getGoalType() { return goal; } /** * @return the lower end of the search interval. */ public double getMin() { return searchMin; } /** * @return the higher end of the search interval. */ public double getMax() { return searchMax; } /** * @return the initial guess. */ public double getStartValue() { return searchStart; } /** * Compute the objective function value. * * @param point Point at which the objective function must be evaluated. * @return the objective function value at specified point. * @throws TooManyEvaluationsException if the maximal number of evaluations * is exceeded. */ protected double computeObjectiveValue(double point) { try { evaluations.incrementCount(); } catch (MaxCountExceededException e) { throw new TooManyEvaluationsException(e.getMax()); } return function.value(point); } /** {@inheritDoc} */ public UnivariatePointValuePair optimize(int maxEval, UnivariateFunction f, GoalType goalType, double min, double max, double startValue) { // Checks. if (f == null) { throw new NullArgumentException(); } if (goalType == null) { throw new NullArgumentException(); } // Reset. searchMin = min; searchMax = max; searchStart = startValue; goal = goalType; function = f; evaluations.setMaximalCount(maxEval); evaluations.resetCount(); // Perform computation. return doOptimize(); } /** {@inheritDoc} */ public UnivariatePointValuePair optimize(int maxEval, UnivariateFunction f, GoalType goalType, double min, double max){ return optimize(maxEval, f, goalType, min, max, min + 0.5 * (max - min)); } /** * {@inheritDoc} */ public ConvergenceChecker<UnivariatePointValuePair> getConvergenceChecker() { return checker; } /** * Method for implementing actual optimization algorithms in derived * classes. * * @return the optimum and its corresponding function value. * @throws TooManyEvaluationsException if the maximal number of evaluations * is exceeded. */ protected abstract UnivariatePointValuePair doOptimize(); }