[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jakarta-commons-dev
Subject:    [math] CMAESOptimizer fails sometimes when point out of bounds
From:       Bruce A Johnson <johnsonb () umbc ! edu>
Date:       2014-02-28 23:34:19
Message-ID: B25E6BE0-F10F-478C-90DA-CE61A39B64F9 () umbc ! edu
[Download RAW message or body]


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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic