You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2012/10/04 12:25:42 UTC
svn commit: r1393978 -
/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
Author: erans
Date: Thu Oct 4 10:25:42 2012
New Revision: 1393978
URL: http://svn.apache.org/viewvc?rev=1393978&view=rev
Log:
Read bound values from base class instead of duplicating the data.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java?rev=1393978&r1=1393977&r2=1393978&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java Thu Oct 4 10:25:42 2012
@@ -124,10 +124,6 @@ public class CMAESOptimizer
*/
private int checkFeasableCount;
/**
- * Lower and upper boundaries of the objective variables.
- */
- private double[][] boundaries;
- /**
* Values in "inputSigma" define the initial coordinate-wise
* standard deviations for sampling new search points around the
* initial guess.
@@ -510,11 +506,6 @@ public class CMAESOptimizer
final double[] lB = getLowerBound();
final double[] uB = getUpperBound();
- // Convert API to internal handling of boundaries.
- boundaries = new double[2][];
- boundaries[0] = lB;
- boundaries[1] = uB;
-
if (inputSigma != null) {
if (inputSigma.length != init.length) {
throw new DimensionMismatchException(inputSigma.length, init.length);
@@ -523,8 +514,8 @@ public class CMAESOptimizer
if (inputSigma[i] < 0) {
throw new NotPositiveException(inputSigma[i]);
}
- if (inputSigma[i] > boundaries[1][i] - boundaries[0][i]) {
- throw new OutOfRangeException(inputSigma[i], 0, boundaries[1][i] - boundaries[0][i]);
+ if (inputSigma[i] > uB[i] - lB[i]) {
+ throw new OutOfRangeException(inputSigma[i], 0, uB[i] - lB[i]);
}
}
}
@@ -897,11 +888,14 @@ public class CMAESOptimizer
* @return {@code true} if in bounds.
*/
public boolean isFeasible(final double[] x) {
+ final double[] lB = CMAESOptimizer.this.getLowerBound();
+ final double[] uB = CMAESOptimizer.this.getUpperBound();
+
for (int i = 0; i < x.length; i++) {
- if (x[i] < boundaries[0][i]) {
+ if (x[i] < lB[i]) {
return false;
}
- if (x[i] > boundaries[1][i]) {
+ if (x[i] > uB[i]) {
return false;
}
}
@@ -920,12 +914,15 @@ public class CMAESOptimizer
* @return the repaired objective variables - all in bounds.
*/
private double[] repair(final double[] x) {
+ final double[] lB = CMAESOptimizer.this.getLowerBound();
+ final double[] uB = CMAESOptimizer.this.getUpperBound();
+
final double[] repaired = new double[x.length];
for (int i = 0; i < x.length; i++) {
- if (x[i] < boundaries[0][i]) {
- repaired[i] = boundaries[0][i];
- } else if (x[i] > boundaries[1][i]) {
- repaired[i] = boundaries[1][i];
+ if (x[i] < lB[i]) {
+ repaired[i] = lB[i];
+ } else if (x[i] > uB[i]) {
+ repaired[i] = uB[i];
} else {
repaired[i] = x[i];
}