View Javadoc
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    *      http://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  package org.apache.commons.math4.legacy.optim;
18  
19  import java.util.Arrays;
20  
21  import org.apache.commons.math4.legacy.core.Pair;
22  
23  /**
24   * This class holds a point and the value of an objective function at
25   * that point.
26   *
27   * @see PointVectorValuePair
28   * @see org.apache.commons.math4.legacy.analysis.MultivariateFunction
29   * @since 3.0
30   */
31  public final class PointValuePair extends Pair<double[], Double> {
32      /**
33       * Builds a point/objective function value pair.
34       *
35       * @param point Point coordinates. This instance will store
36       * a copy of the array, not the array passed as argument.
37       * @param value Value of the objective function at the point.
38       */
39      public PointValuePair(final double[] point,
40                            final double value) {
41          this(point, value, true);
42      }
43  
44      /**
45       * Builds a point/objective function value pair.
46       *
47       * @param point Point coordinates.
48       * @param value Value of the objective function at the point.
49       * @param copyArray if {@code true}, the input array will be copied,
50       * otherwise it will be referenced.
51       */
52      public PointValuePair(final double[] point,
53                            final double value,
54                            final boolean copyArray) {
55          super(copyArray ? ((point == null) ? null :
56                             point.clone()) :
57                point,
58                value);
59      }
60  
61      /**
62       * Gets the point.
63       *
64       * @return a copy of the stored point.
65       */
66      public double[] getPoint() {
67          final double[] p = getKey();
68          return p == null ? null : p.clone();
69      }
70  
71      /**
72       * Gets a reference to the point.
73       *
74       * @return a reference to the internal array storing the point.
75       */
76      public double[] getPointRef() {
77          return getKey();
78      }
79  
80      @Override
81      public boolean equals(Object o) {
82          if (o instanceof PointValuePair) {
83              final PointValuePair other = (PointValuePair) o;
84  
85              return getValue().equals(other.getValue()) &&
86                  Arrays.equals(getPointRef(),
87                                other.getPointRef());
88          }
89  
90          return false;
91      }
92  
93      @Override
94      public int hashCode() {
95          return Arrays.hashCode(getKey()) + 31 * Double.hashCode(getValue());
96      }
97  
98      @Override
99      public String toString() {
100         return "[" + Arrays.toString(getPointRef()) + ", " + getValue() + "]";
101     }
102 }