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 import java.util.Arrays;
25
26 /**
27 * Simple optimization constraints: lower and upper bounds.
28 * The valid range of the parameters is an interval that can be infinite
29 * (in one or both directions).
30 * <br>
31 * Immutable class.
32 *
33 */
34 public class SimpleBounds implements OptimizationData {
35 /** Lower bounds. */
36 private final double[] lower;
37 /** Upper bounds. */
38 private final double[] upper;
39
40 /** Simple constructor.
41 * @param lB Lower bounds.
42 * @param uB Upper bounds.
43 */
44 public SimpleBounds(double[] lB,
45 double[] uB) {
46 lower = lB.clone();
47 upper = uB.clone();
48 }
49
50 /**
51 * Gets the lower bounds.
52 *
53 * @return the lower bounds.
54 */
55 public double[] getLower() {
56 return lower.clone();
57 }
58 /**
59 * Gets the upper bounds.
60 *
61 * @return the upper bounds.
62 */
63 public double[] getUpper() {
64 return upper.clone();
65 }
66
67 /**
68 * Factory method that creates instance of this class that represents
69 * unbounded ranges.
70 *
71 * @param dim Number of parameters.
72 * @return a new instance suitable for passing to an optimizer that
73 * requires bounds specification.
74 */
75 public static SimpleBounds unbounded(int dim) {
76 final double[] lB = new double[dim];
77 Arrays.fill(lB, Double.NEGATIVE_INFINITY);
78 final double[] uB = new double[dim];
79 Arrays.fill(uB, Double.POSITIVE_INFINITY);
80
81 return new SimpleBounds(lB, uB);
82 }
83 }