1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /*
19 * This is not the original file distributed by the Apache Software Foundation
20 * It has been modified by the Hipparchus project
21 */
22 package org.hipparchus.optim;
23
24 /**
25 * Base class for all convergence checker implementations.
26 *
27 * @param <P> Type of (point, value) pair.
28 *
29 */
30 public abstract class AbstractConvergenceChecker<P>
31 implements ConvergenceChecker<P> {
32 /**
33 * Relative tolerance threshold.
34 */
35 private final double relativeThreshold;
36 /**
37 * Absolute tolerance threshold.
38 */
39 private final double absoluteThreshold;
40
41 /**
42 * Build an instance with a specified thresholds.
43 *
44 * @param relativeThreshold relative tolerance threshold
45 * @param absoluteThreshold absolute tolerance threshold
46 */
47 protected AbstractConvergenceChecker(final double relativeThreshold,
48 final double absoluteThreshold) {
49 this.relativeThreshold = relativeThreshold;
50 this.absoluteThreshold = absoluteThreshold;
51 }
52
53 /** Get relative threshold.
54 * @return the relative threshold.
55 */
56 public double getRelativeThreshold() {
57 return relativeThreshold;
58 }
59
60 /** Get absolute threshold.
61 * @return the absolute threshold.
62 */
63 public double getAbsoluteThreshold() {
64 return absoluteThreshold;
65 }
66
67 /**
68 * {@inheritDoc}
69 */
70 @Override
71 public abstract boolean converged(int iteration,
72 P previous,
73 P current);
74 }