You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Bruce A Johnson <jo...@umbc.edu> on 2014/03/01 00:34:19 UTC

[math] CMAESOptimizer fails sometimes when point out of bounds

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.

Bruce


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org