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
1 changed files with 11 additions and 28 deletions

View File

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