/*
* Encog(tm) Core v3.4 - Java Version
* http://www.heatonresearch.com/encog/
* https://github.com/encog/encog-java-core
* Copyright 2008-2016 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.mathutil.dimension;
/**
* Specifies a constraint for dimensions, using a lower and upper bound.
*
* @author jheaton
*
*/
public class DimensionConstraint {
/**
* The lower bound for each dimension.
*/
private final MultiDimension lower;
/**
* The upper bound for each dimension.
*/
private final MultiDimension upper;
/**
* Construct the constraint.
*
* @param n
* The number of dimensions.
* @param theLower
* The lower bound for each dimension.
* @param theUpper
* The upper bound for each dimension.
*/
public DimensionConstraint(int n, int theLower, int theUpper) {
this.lower = new MultiDimension(n);
this.upper = new MultiDimension(n);
for (int i = 0; i < n; i++) {
this.lower.setDimension(i, theLower);
this.upper.setDimension(i, theUpper);
}
}
/**
* @return The lower bound for each dimension.
*/
public MultiDimension getLower() {
return lower;
}
/**
* @return The upper bound for each dimension.
*/
public MultiDimension getUpper() {
return upper;
}
/**
* Get the lower bound for a specific dimension.
*
* @param d
* The dimension.
* @return The lower bound for the specified dimension.
*/
public int getLower(int d) {
return lower.getDimension(d);
}
/**
* Get the upper bound for a specific dimension.
*
* @param d
* The dimension.
* @return The upper bound for the specified dimension.
*/
public int getUpper(int d) {
return upper.getDimension(d);
}
/**
* Get the range (between upper and lower bound) for the specified
* dimension.
*
* @param d
* The dimension.
* @return The range for the specified dimension.
*/
public int getRange(int d) {
return (upper.getDimension(d) - lower.getDimension(d))+1;
}
public int getMiddle(int d) {
return getRange(d)/2;
}
}