    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    package org.apache.commons.math3.optim;
    018
    019    /**
    020     * Base class for all convergence checker implementations.
    021     *
    022     * @param <PAIR> Type of (point, value) pair.
    023     *
    024     * @version $Id: AbstractConvergenceChecker.java 1370215 2012-08-07 12:38:59Z sebb $
    025     * @since 3.0
    026     */
    027    public abstract class AbstractConvergenceChecker<PAIR>
    028        implements ConvergenceChecker<PAIR> {
    029        /**
    030         * Relative tolerance threshold.
    031         */
    032        private final double relativeThreshold;
    033        /**
    034         * Absolute tolerance threshold.
    035         */
    036        private final double absoluteThreshold;
    037
    038        /**
    039         * Build an instance with a specified thresholds.
    040         *
    041         * @param relativeThreshold relative tolerance threshold
    042         * @param absoluteThreshold absolute tolerance threshold
    043         */
    044        public AbstractConvergenceChecker(final double relativeThreshold,
    045                                          final double absoluteThreshold) {
    046            this.relativeThreshold = relativeThreshold;
    047            this.absoluteThreshold = absoluteThreshold;
    048        }
    049
    050        /**
    051         * @return the relative threshold.
    052         */
    053        public double getRelativeThreshold() {
    054            return relativeThreshold;
    055        }
    056
    057        /**
    058         * @return the absolute threshold.
    059         */
    060        public double getAbsoluteThreshold() {
    061            return absoluteThreshold;
    062        }
    063
    064        /**
    065         * {@inheritDoc}
    066         */
    067        public abstract boolean converged(int iteration,
    068                                          PAIR previous,
    069                                          PAIR current);
    070    }