001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.math.optimization;
019    
020    import org.apache.commons.math.FunctionEvaluationException;
021    import org.apache.commons.math.analysis.DifferentiableMultivariateRealFunction;
022    
023    /**
024     * This interface represents an optimization algorithm for
025     * {@link DifferentiableMultivariateRealFunction scalar differentiable objective
026     * functions}.
027     * Optimization algorithms find the input point set that either {@link GoalType
028     * maximize or minimize} an objective function.
029     *
030     * @see MultivariateRealOptimizer
031     * @see DifferentiableMultivariateVectorialOptimizer
032     * @version $Revision: 1065484 $ $Date: 2011-01-31 06:45:14 +0100 (lun. 31 janv. 2011) $
033     * @since 2.0
034     */
035    public interface DifferentiableMultivariateRealOptimizer {
036    
037        /** Set the maximal number of iterations of the algorithm.
038         * @param maxIterations maximal number of function calls
039         */
040        void setMaxIterations(int maxIterations);
041    
042        /** Get the maximal number of iterations of the algorithm.
043         * @return maximal number of iterations
044         */
045        int getMaxIterations();
046    
047        /** Get the number of iterations realized by the algorithm.
048         * <p>
049         * The number of evaluations corresponds to the last call to the
050         * {@code optimize} method. It is 0 if the method has not been called yet.
051         * </p>
052         * @return number of iterations
053         */
054        int getIterations();
055    
056        /** Set the maximal number of functions evaluations.
057         * @param maxEvaluations maximal number of function evaluations
058         */
059        void setMaxEvaluations(int maxEvaluations);
060    
061        /** Get the maximal number of functions evaluations.
062         * @return maximal number of functions evaluations
063         */
064        int getMaxEvaluations();
065    
066        /** Get the number of evaluations of the objective function.
067         * <p>
068         * The number of evaluations corresponds to the last call to the
069         * {@link #optimize(DifferentiableMultivariateRealFunction, GoalType, double[]) optimize}
070         * method. It is 0 if the method has not been called yet.
071         * </p>
072         * @return number of evaluations of the objective function
073         */
074        int getEvaluations();
075    
076        /** Get the number of evaluations of the objective function gradient.
077         * <p>
078         * The number of evaluations corresponds to the last call to the
079         * {@link #optimize(DifferentiableMultivariateRealFunction, GoalType, double[]) optimize}
080         * method. It is 0 if the method has not been called yet.
081         * </p>
082         * @return number of evaluations of the objective function gradient
083         */
084        int getGradientEvaluations();
085    
086        /** Set the convergence checker.
087         * @param checker object to use to check for convergence
088         */
089        void setConvergenceChecker(RealConvergenceChecker checker);
090    
091        /** Get the convergence checker.
092         * @return object used to check for convergence
093         */
094        RealConvergenceChecker getConvergenceChecker();
095    
096        /** Optimizes an objective function.
097         * @param f objective function
098         * @param goalType type of optimization goal: either {@link GoalType#MAXIMIZE}
099         * or {@link GoalType#MINIMIZE}
100         * @param startPoint the start point for optimization
101         * @return the point/value pair giving the optimal value for objective function
102         * @exception FunctionEvaluationException if the objective function throws one during
103         * the search
104         * @exception OptimizationException if the algorithm failed to converge
105         * @exception IllegalArgumentException if the start point dimension is wrong
106         */
107        RealPointValuePair optimize(DifferentiableMultivariateRealFunction f,
108                                      GoalType goalType,
109                                      double[] startPoint)
110            throws FunctionEvaluationException, OptimizationException, IllegalArgumentException;
111    
112    }