mirror of
https://github.com/apache/commons-math.git
synced 2025-02-09 03:25:31 +00:00
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:
parent
1f3c6973e3
commit
47d9a5d240
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user