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 import java.util.Arrays;
020
021 /**
022 * Simple optimization constraints: lower and upper bounds.
023 * The valid range of the parameters is an interval that can be infinite
024 * (in one or both directions).
025 * <br/>
026 * Immutable class.
027 *
028 * @version $Id: SimpleBounds.java 1416643 2012-12-03 19:37:14Z tn $
029 * @since 3.1
030 */
031 public class SimpleBounds implements OptimizationData {
032 /** Lower bounds. */
033 private final double[] lower;
034 /** Upper bounds. */
035 private final double[] upper;
036
037 /**
038 * @param lB Lower bounds.
039 * @param uB Upper bounds.
040 */
041 public SimpleBounds(double[] lB,
042 double[] uB) {
043 lower = lB.clone();
044 upper = uB.clone();
045 }
046
047 /**
048 * Gets the lower bounds.
049 *
050 * @return the lower bounds.
051 */
052 public double[] getLower() {
053 return lower.clone();
054 }
055 /**
056 * Gets the upper bounds.
057 *
058 * @return the upper bounds.
059 */
060 public double[] getUpper() {
061 return upper.clone();
062 }
063
064 /**
065 * Factory method that creates instance of this class that represents
066 * unbounded ranges.
067 *
068 * @param dim Number of parameters.
069 * @return a new instance suitable for passing to an optimizer that
070 * requires bounds specification.
071 */
072 public static SimpleBounds unbounded(int dim) {
073 final double[] lB = new double[dim];
074 Arrays.fill(lB, Double.NEGATIVE_INFINITY);
075 final double[] uB = new double[dim];
076 Arrays.fill(uB, Double.POSITIVE_INFINITY);
077
078 return new SimpleBounds(lB, uB);
079 }
080 }