commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bruce A Johnson <>
Subject [math] CMAESOptimizer fails sometimes when point out of bounds
Date Fri, 28 Feb 2014 23:34:19 GMT

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:
For additional commands, e-mail:

View raw message