/*
 * 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
/** * 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.
/** Convergence checker. */
private final ConvergenceChecker<UnivariatePointValuePair> checker;
Evaluations counter.
/** Evaluations counter. */
private final Incrementor evaluations = new Incrementor();
Optimization type
/** Optimization type */
private GoalType goal;
Lower end of search interval.
/** Lower end of search interval. */
private double searchMin;
Higher end of search interval.
/** Higher end of search interval. */
private double searchMax;
Initial guess .
/** Initial guess . */
private double searchStart;
Function to optimize.
/** Function to optimize. */
private UnivariateFunction function;
Params:
  • checker – Convergence checking procedure.
/** * @param checker Convergence checking procedure. */
protected BaseAbstractUnivariateOptimizer(ConvergenceChecker<UnivariatePointValuePair> checker) { this.checker = checker; }
{@inheritDoc}
/** {@inheritDoc} */
public int getMaxEvaluations() { return evaluations.getMaximalCount(); }
{@inheritDoc}
/** {@inheritDoc} */
public int getEvaluations() { return evaluations.getCount(); }
Returns:the optimization type.
/** * @return the optimization type. */
public GoalType getGoalType() { return goal; }
Returns:the lower end of the search interval.
/** * @return the lower end of the search interval. */
public double getMin() { return searchMin; }
Returns:the higher end of the search interval.
/** * @return the higher end of the search interval. */
public double getMax() { return searchMax; }
Returns:the initial guess.
/** * @return the initial guess. */
public double getStartValue() { return searchStart; }
Compute the objective function value.
Params:
  • point – Point at which the objective function must be evaluated.
Throws:
Returns:the objective function value at specified point.
/** * 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}
/** {@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}
/** {@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}
/** * {@inheritDoc} */
public ConvergenceChecker<UnivariatePointValuePair> getConvergenceChecker() { return checker; }
Method for implementing actual optimization algorithms in derived classes.
Throws:
Returns:the optimum and its corresponding function value.
/** * 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(); }