[math] CMAESOptimizer fails sometimes when point out of bounds

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[math] CMAESOptimizer fails sometimes when point out of bounds

Bruce A Johnson-2

The CMAESOptimizer repairs points that are out of bounds by moving them into bounds, and adding a penalty based on how far they were moved.

The penalty added is scaled by the range of values in the current population (valueRange field in code below).

double[] x, final double[] repaired) {
           double penalty = 0;
           for (int i = 0; i < x.length; i++) {
               double diff = FastMath.abs(x[i] - repaired[i]);
               penalty += diff * valueRange;
           return isMinimize ? penalty : -penalty;

The calculation of the valueRange, however, includes the penalty so at each iteration the amount of penalty grows multiplicatively until the calculated value is infinite.

I have a, not yet very elegant, patch that keeps the value and penalty separate so the valueRange can be based on the actual range of values (not the penalized range of values).

I can open a Jira issue for this if that makes sense.


To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]