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