Alternate solution: remove shadowing by removing copies (since class is not static)

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1078466 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sebastian Bazley 2011-03-06 13:24:43 +00:00
parent 1f3c6973e3
commit 47d9a5d240

View File

@ -340,8 +340,7 @@ public class CMAESOptimizer extends
checkParameters(); checkParameters();
// -------------------- Initialization -------------------------------- // -------------------- Initialization --------------------------------
isMinimize = getGoalType().equals(GoalType.MINIMIZE); isMinimize = getGoalType().equals(GoalType.MINIMIZE);
final FitnessFunction fitfun = new FitnessFunction(boundaries, final FitnessFunction fitfun = new FitnessFunction();
isMinimize);
final double[] guess = fitfun.encode(getStartPoint()); final double[] guess = fitfun.encode(getStartPoint());
// number of objective variables/problem dimension // number of objective variables/problem dimension
dimension = guess.length; dimension = guess.length;
@ -826,8 +825,6 @@ public class CMAESOptimizer extends
*/ */
private class FitnessFunction { private class FitnessFunction {
/** Optional bounds for the objective variables */
private final double[][] _boundaries;
/** Determines the penalty for boundary violations */ /** Determines the penalty for boundary violations */
private double valueRange = 1.0; private double valueRange = 1.0;
/** /**
@ -835,20 +832,6 @@ public class CMAESOptimizer extends
* bounds if defined * bounds if defined
*/ */
private boolean isRepairMode = true; private boolean isRepairMode = true;
/** Flag indicating the optimization goal. */
private final boolean _isMinimize;
/**
* @param boundaries
* Bounds for the objective variables.
* @param isMinimize
* Flag indicating the optimization goal.
*/
private FitnessFunction(final double[][] boundaries,
final boolean isMinimize) {
this._boundaries = boundaries;
this._isMinimize = isMinimize;
}
/** /**
* @param x * @param x
@ -856,12 +839,12 @@ public class CMAESOptimizer extends
* @return Normalized objective variables. * @return Normalized objective variables.
*/ */
private double[] encode(final double[] x) { private double[] encode(final double[] x) {
if (_boundaries == null) if (boundaries == null)
return x; return x;
double[] res = new double[x.length]; double[] res = new double[x.length];
for (int i = 0; i < x.length; i++) { for (int i = 0; i < x.length; i++) {
double diff = _boundaries[1][i] - _boundaries[0][i]; double diff = boundaries[1][i] - boundaries[0][i];
res[i] = (x[i] - _boundaries[0][i]) / diff; res[i] = (x[i] - boundaries[0][i]) / diff;
} }
return res; return res;
} }
@ -872,12 +855,12 @@ public class CMAESOptimizer extends
* @return Original objective variables. * @return Original objective variables.
*/ */
private double[] decode(final double[] x) { private double[] decode(final double[] x) {
if (_boundaries == null) if (boundaries == null)
return x; return x;
double[] res = new double[x.length]; double[] res = new double[x.length];
for (int i = 0; i < x.length; i++) { for (int i = 0; i < x.length; i++) {
double diff = _boundaries[1][i] - _boundaries[0][i]; double diff = boundaries[1][i] - boundaries[0][i];
res[i] = diff * x[i] + _boundaries[0][i]; res[i] = diff * x[i] + boundaries[0][i];
} }
return res; return res;
} }
@ -889,7 +872,7 @@ public class CMAESOptimizer extends
*/ */
private double value(final double[] point) { private double value(final double[] point) {
double value; double value;
if (_boundaries != null && isRepairMode) { if (boundaries != null && isRepairMode) {
double[] repaired = repair(point); double[] repaired = repair(point);
value = CMAESOptimizer.this value = CMAESOptimizer.this
.computeObjectiveValue(decode(repaired)) + .computeObjectiveValue(decode(repaired)) +
@ -897,7 +880,7 @@ public class CMAESOptimizer extends
} else } else
value = CMAESOptimizer.this value = CMAESOptimizer.this
.computeObjectiveValue(decode(point)); .computeObjectiveValue(decode(point));
return _isMinimize ? value : -value; return isMinimize ? value : -value;
} }
/** /**
@ -906,7 +889,7 @@ public class CMAESOptimizer extends
* @return True if in bounds * @return True if in bounds
*/ */
private boolean isFeasible(final double[] x) { private boolean isFeasible(final double[] x) {
if (_boundaries == null) if (boundaries == null)
return true; return true;
for (int i = 0; i < x.length; i++) { for (int i = 0; i < x.length; i++) {
if (x[i] < 0) if (x[i] < 0)
@ -956,7 +939,7 @@ public class CMAESOptimizer extends
double diff = Math.abs(x[i] - repaired[i]); double diff = Math.abs(x[i] - repaired[i]);
penalty += diff * valueRange; penalty += diff * valueRange;
} }
return _isMinimize ? penalty : -penalty; return isMinimize ? penalty : -penalty;
} }
} }