You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2013/11/08 20:53:58 UTC

svn commit: r1540165 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3: optim/nonlinear/scalar/noderiv/ optimization/direct/

Author: tn
Date: Fri Nov  8 19:53:58 2013
New Revision: 1540165

URL: http://svn.apache.org/r1540165
Log:
[MATH-1059] Replace Math with FastMath.

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/BOBYQAOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BOBYQAOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/BOBYQAOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/BOBYQAOptimizer.java?rev=1540165&r1=1540164&r2=1540165&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/BOBYQAOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/BOBYQAOptimizer.java Fri Nov  8 19:53:58 2013
@@ -27,6 +27,7 @@ import org.apache.commons.math3.linear.R
 import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
 import org.apache.commons.math3.optim.PointValuePair;
 import org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer;
+import org.apache.commons.math3.util.FastMath;
 
 /**
  * Powell's BOBYQA algorithm. This implementation is translated and
@@ -306,7 +307,7 @@ public class BOBYQAOptimizer
                     lowerDifference.setEntry(j, -initialTrustRegionRadius);
                     // Computing MAX
                     final double deltaOne = upperBound[j] - currentBest.getEntry(j);
-                    upperDifference.setEntry(j, Math.max(deltaOne, initialTrustRegionRadius));
+                    upperDifference.setEntry(j, FastMath.max(deltaOne, initialTrustRegionRadius));
                 }
             } else if (upperDifference.getEntry(j) <= initialTrustRegionRadius) {
                 if (upperDifference.getEntry(j) <= ZERO) {
@@ -318,7 +319,7 @@ public class BOBYQAOptimizer
                     // Computing MIN
                     final double deltaOne = lowerBound[j] - currentBest.getEntry(j);
                     final double deltaTwo = -initialTrustRegionRadius;
-                    lowerDifference.setEntry(j, Math.min(deltaOne, deltaTwo));
+                    lowerDifference.setEntry(j, FastMath.min(deltaOne, deltaTwo));
                     upperDifference.setEntry(j, initialTrustRegionRadius);
                 }
             }
@@ -489,8 +490,8 @@ public class BOBYQAOptimizer
 
             // Computing MIN
             double deltaOne = delta;
-            double deltaTwo = Math.sqrt(dsq);
-            dnorm = Math.min(deltaOne, deltaTwo);
+            double deltaTwo = FastMath.sqrt(dsq);
+            dnorm = FastMath.min(deltaOne, deltaTwo);
             if (dnorm < HALF * rho) {
                 ntrits = -1;
                 // Computing 2nd power
@@ -507,8 +508,8 @@ public class BOBYQAOptimizer
                 // of likely improvements to the model within distance HALF*RHO of XOPT.
 
                 // Computing MAX
-                deltaOne = Math.max(diffa, diffb);
-                final double errbig = Math.max(deltaOne, diffc);
+                deltaOne = FastMath.max(diffa, diffb);
+                final double errbig = FastMath.max(deltaOne, diffc);
                 final double frhosq = rho * ONE_OVER_EIGHT * rho;
                 if (crvmin > ZERO &&
                     errbig > frhosq * crvmin) {
@@ -782,7 +783,7 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     // Computing 2nd power
                     final double d4 = distsq / delsq;
-                    final double temp = Math.max(ONE, d4 * d4);
+                    final double temp = FastMath.max(ONE, d4 * d4);
                     if (temp * den > scaden) {
                         scaden = temp * den;
                         knew = k;
@@ -791,7 +792,7 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     // Computing 2nd power
                     final double d5 = lagrangeValuesAtNewPoint.getEntry(k);
-                    biglsq = Math.max(biglsq, temp * (d5 * d5));
+                    biglsq = FastMath.max(biglsq, temp * (d5 * d5));
                 }
             }
 
@@ -809,9 +810,9 @@ public class BOBYQAOptimizer
                 // Computing MAX
                 final double d3 = lowerBound[i];
                 final double d4 = originShift.getEntry(i) + newPoint.getEntry(i);
-                final double d1 = Math.max(d3, d4);
+                final double d1 = FastMath.max(d3, d4);
                 final double d2 = upperBound[i];
-                currentBest.setEntry(i, Math.min(d1, d2));
+                currentBest.setEntry(i, FastMath.min(d1, d2));
                 if (newPoint.getEntry(i) == lowerDifference.getEntry(i)) {
                     currentBest.setEntry(i, lowerBound[i]);
                 }
@@ -855,7 +856,7 @@ public class BOBYQAOptimizer
             final double diff = f - fopt - vquad;
             diffc = diffb;
             diffb = diffa;
-            diffa = Math.abs(diff);
+            diffa = FastMath.abs(diff);
             if (dnorm > rho) {
                 nfsav = getEvaluations();
             }
@@ -870,13 +871,13 @@ public class BOBYQAOptimizer
                 final double hDelta = HALF * delta;
                 if (ratio <= ONE_OVER_TEN) {
                     // Computing MIN
-                    delta = Math.min(hDelta, dnorm);
+                    delta = FastMath.min(hDelta, dnorm);
                 } else if (ratio <= .7) {
                     // Computing MAX
-                    delta = Math.max(hDelta, dnorm);
+                    delta = FastMath.max(hDelta, dnorm);
                 } else {
                     // Computing MAX
-                    delta = Math.max(hDelta, 2 * dnorm);
+                    delta = FastMath.max(hDelta, 2 * dnorm);
                 }
                 if (delta <= rho * 1.5) {
                     delta = rho;
@@ -910,7 +911,7 @@ public class BOBYQAOptimizer
                         // Computing MAX
                         // Computing 2nd power
                         final double d3 = distsq / delsq;
-                        final double temp = Math.max(ONE, d3 * d3);
+                        final double temp = FastMath.max(ONE, d3 * d3);
                         if (temp * den > scaden) {
                             scaden = temp * den;
                             knew = k;
@@ -920,7 +921,7 @@ public class BOBYQAOptimizer
                         // Computing 2nd power
                         final double d4 = lagrangeValuesAtNewPoint.getEntry(k);
                         final double d5 = temp * (d4 * d4);
-                        biglsq = Math.max(biglsq, d5);
+                        biglsq = FastMath.max(biglsq, d5);
                     }
                     if (scaden <= HALF * biglsq) {
                         knew = ksav;
@@ -1045,18 +1046,18 @@ public class BOBYQAOptimizer
                     if (trustRegionCenterOffset.getEntry(i) == lowerDifference.getEntry(i)) {
                         // Computing MIN
                         // Computing 2nd power
-                        final double d1 = Math.min(ZERO, gradientAtTrustRegionCenter.getEntry(i));
+                        final double d1 = FastMath.min(ZERO, gradientAtTrustRegionCenter.getEntry(i));
                         gqsq += d1 * d1;
                         // Computing 2nd power
-                        final double d2 = Math.min(ZERO, sum);
+                        final double d2 = FastMath.min(ZERO, sum);
                         gisq += d2 * d2;
                     } else if (trustRegionCenterOffset.getEntry(i) == upperDifference.getEntry(i)) {
                         // Computing MAX
                         // Computing 2nd power
-                        final double d1 = Math.max(ZERO, gradientAtTrustRegionCenter.getEntry(i));
+                        final double d1 = FastMath.max(ZERO, gradientAtTrustRegionCenter.getEntry(i));
                         gqsq += d1 * d1;
                         // Computing 2nd power
-                        final double d2 = Math.max(ZERO, sum);
+                        final double d2 = FastMath.max(ZERO, sum);
                         gisq += d2 * d2;
                     } else {
                         // Computing 2nd power
@@ -1075,7 +1076,7 @@ public class BOBYQAOptimizer
                     itest = 0;
                 }
                 if (itest >= 3) {
-                    for (int i = 0, max = Math.max(npt, nh); i < max; i++) {
+                    for (int i = 0, max = FastMath.max(npt, nh); i < max; i++) {
                         if (i < n) {
                             gradientAtTrustRegionCenter.setEntry(i, lagrangeValuesAtNewPoint.getEntry(npt + i));
                         }
@@ -1109,7 +1110,7 @@ public class BOBYQAOptimizer
             final double d1 = TWO * delta;
             // Computing 2nd power
             final double d2 = TEN * rho;
-            distsq = Math.max(d1 * d1, d2 * d2);
+            distsq = FastMath.max(d1 * d1, d2 * d2);
         }
         case 650: {
             printState(650); // XXX
@@ -1134,10 +1135,10 @@ public class BOBYQAOptimizer
             // current RHO are complete.
 
             if (knew >= 0) {
-                final double dist = Math.sqrt(distsq);
+                final double dist = FastMath.sqrt(distsq);
                 if (ntrits == -1) {
                     // Computing MIN
-                    delta = Math.min(ONE_OVER_TEN * delta, HALF * dist);
+                    delta = FastMath.min(ONE_OVER_TEN * delta, HALF * dist);
                     if (delta <= rho * 1.5) {
                         delta = rho;
                     }
@@ -1145,8 +1146,8 @@ public class BOBYQAOptimizer
                 ntrits = 0;
                 // Computing MAX
                 // Computing MIN
-                final double d1 = Math.min(ONE_OVER_TEN * dist, delta);
-                adelt = Math.max(d1, rho);
+                final double d1 = FastMath.min(ONE_OVER_TEN * dist, delta);
+                adelt = FastMath.max(d1, rho);
                 dsq = adelt * adelt;
                 state = 90; break;
             }
@@ -1156,7 +1157,7 @@ public class BOBYQAOptimizer
             if (ratio > ZERO) {
                 state = 60; break;
             }
-            if (Math.max(delta, dnorm) > rho) {
+            if (FastMath.max(delta, dnorm) > rho) {
                 state = 60; break;
             }
 
@@ -1171,11 +1172,11 @@ public class BOBYQAOptimizer
                 if (ratio <= SIXTEEN) {
                     rho = stoppingTrustRegionRadius;
                 } else if (ratio <= TWO_HUNDRED_FIFTY) {
-                    rho = Math.sqrt(ratio) * stoppingTrustRegionRadius;
+                    rho = FastMath.sqrt(ratio) * stoppingTrustRegionRadius;
                 } else {
                     rho *= ONE_OVER_TEN;
                 }
-                delta = Math.max(delta, rho);
+                delta = FastMath.max(delta, rho);
                 ntrits = 0;
                 nfsav = getEvaluations();
                 state = 60; break;
@@ -1196,9 +1197,9 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     final double d3 = lowerBound[i];
                     final double d4 = originShift.getEntry(i) + trustRegionCenterOffset.getEntry(i);
-                    final double d1 = Math.max(d3, d4);
+                    final double d1 = FastMath.max(d3, d4);
                     final double d2 = upperBound[i];
-                    currentBest.setEntry(i, Math.min(d1, d2));
+                    currentBest.setEntry(i, FastMath.min(d1, d2));
                     if (trustRegionCenterOffset.getEntry(i) == lowerDifference.getEntry(i)) {
                         currentBest.setEntry(i, lowerBound[i]);
                     }
@@ -1315,11 +1316,11 @@ public class BOBYQAOptimizer
                 dderiv += glag.getEntry(i) * tmp;
                 distsq += tmp * tmp;
             }
-            double subd = adelt / Math.sqrt(distsq);
+            double subd = adelt / FastMath.sqrt(distsq);
             double slbd = -subd;
             int ilbd = 0;
             int iubd = 0;
-            final double sumin = Math.min(ONE, subd);
+            final double sumin = FastMath.min(ONE, subd);
 
             // Revise SLBD and SUBD if necessary because of the bounds in SL and SU.
 
@@ -1332,8 +1333,8 @@ public class BOBYQAOptimizer
                     }
                     if (subd * tmp > upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) {
                         // Computing MAX
-                        subd = Math.max(sumin,
-                                        (upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
+                        subd = FastMath.max(sumin,
+                                            (upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
                         iubd = i + 1;
                     }
                 } else if (tmp < ZERO) {
@@ -1343,8 +1344,8 @@ public class BOBYQAOptimizer
                     }
                     if (subd * tmp < lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) {
                         // Computing MAX
-                        subd = Math.max(sumin,
-                                        (lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
+                        subd = FastMath.max(sumin,
+                                            (lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
                         iubd = -i - 1;
                     }
                 }
@@ -1360,7 +1361,7 @@ public class BOBYQAOptimizer
                 final double diff = dderiv - ONE;
                 vlag = slbd * (dderiv - slbd * diff);
                 final double d1 = subd * (dderiv - subd * diff);
-                if (Math.abs(d1) > Math.abs(vlag)) {
+                if (FastMath.abs(d1) > FastMath.abs(vlag)) {
                     step = subd;
                     vlag = d1;
                     isbd = iubd;
@@ -1370,7 +1371,7 @@ public class BOBYQAOptimizer
                 final double d4 = d2 - diff * subd;
                 if (d3 * d4 < ZERO) {
                     final double d5 = d2 * d2 / diff;
-                    if (Math.abs(d5) > Math.abs(vlag)) {
+                    if (FastMath.abs(d5) > FastMath.abs(vlag)) {
                         step = d2 / diff;
                         vlag = d5;
                         isbd = 0;
@@ -1382,12 +1383,12 @@ public class BOBYQAOptimizer
             } else {
                 vlag = slbd * (ONE - slbd);
                 final double tmp = subd * (ONE - subd);
-                if (Math.abs(tmp) > Math.abs(vlag)) {
+                if (FastMath.abs(tmp) > FastMath.abs(vlag)) {
                     step = subd;
                     vlag = tmp;
                     isbd = iubd;
                 }
-                if (subd > HALF && Math.abs(vlag) < ONE_OVER_FOUR) {
+                if (subd > HALF && FastMath.abs(vlag) < ONE_OVER_FOUR) {
                     step = HALF;
                     vlag = ONE_OVER_FOUR;
                     isbd = 0;
@@ -1411,8 +1412,8 @@ public class BOBYQAOptimizer
 
         for (int i = 0; i < n; i++) {
             final double tmp = trustRegionCenterOffset.getEntry(i) + stpsav * (interpolationPoints.getEntry(ksav, i) - trustRegionCenterOffset.getEntry(i));
-            newPoint.setEntry(i, Math.max(lowerDifference.getEntry(i),
-                                      Math.min(upperDifference.getEntry(i), tmp)));
+            newPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i),
+                                              FastMath.min(upperDifference.getEntry(i), tmp)));
         }
         if (ibdsav < 0) {
             newPoint.setEntry(-ibdsav - 1, lowerDifference.getEntry(-ibdsav - 1));
@@ -1435,8 +1436,8 @@ public class BOBYQAOptimizer
             for (int i = 0; i < n; i++) {
                 final double glagValue = glag.getEntry(i);
                 work1.setEntry(i, ZERO);
-                if (Math.min(trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i), glagValue) > ZERO ||
-                    Math.max(trustRegionCenterOffset.getEntry(i) - upperDifference.getEntry(i), glagValue) < ZERO) {
+                if (FastMath.min(trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i), glagValue) > ZERO ||
+                    FastMath.max(trustRegionCenterOffset.getEntry(i) - upperDifference.getEntry(i), glagValue) < ZERO) {
                     work1.setEntry(i, bigstp);
                     // Computing 2nd power
                     ggfree += glagValue * glagValue;
@@ -1449,7 +1450,7 @@ public class BOBYQAOptimizer
             // Investigate whether more components of W can be fixed.
             final double tmp1 = adelt * adelt - wfixsq;
             if (tmp1 > ZERO) {
-                step = Math.sqrt(tmp1 / ggfree);
+                step = FastMath.sqrt(tmp1 / ggfree);
                 ggfree = ZERO;
                 for (int i = 0; i < n; i++) {
                     if (work1.getEntry(i) == bigstp) {
@@ -1481,9 +1482,9 @@ public class BOBYQAOptimizer
                 final double glagValue = glag.getEntry(i);
                 if (work1.getEntry(i) == bigstp) {
                     work1.setEntry(i, -step * glagValue);
-                    final double min = Math.min(upperDifference.getEntry(i),
-                                                trustRegionCenterOffset.getEntry(i) + work1.getEntry(i));
-                    alternativeNewPoint.setEntry(i, Math.max(lowerDifference.getEntry(i), min));
+                    final double min = FastMath.min(upperDifference.getEntry(i),
+                                                    trustRegionCenterOffset.getEntry(i) + work1.getEntry(i));
+                    alternativeNewPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i), min));
                 } else if (work1.getEntry(i) == ZERO) {
                     alternativeNewPoint.setEntry(i, trustRegionCenterOffset.getEntry(i));
                 } else if (glagValue > ZERO) {
@@ -1511,12 +1512,12 @@ public class BOBYQAOptimizer
                 curv = -curv;
             }
             if (curv > -gw &&
-                curv < -gw * (ONE + Math.sqrt(TWO))) {
+                curv < -gw * (ONE + FastMath.sqrt(TWO))) {
                 final double scale = -gw / curv;
                 for (int i = 0; i < n; i++) {
                     final double tmp = trustRegionCenterOffset.getEntry(i) + scale * work1.getEntry(i);
-                    alternativeNewPoint.setEntry(i, Math.max(lowerDifference.getEntry(i),
-                                              Math.min(upperDifference.getEntry(i), tmp)));
+                    alternativeNewPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i),
+                                                    FastMath.min(upperDifference.getEntry(i), tmp)));
                 }
                 // Computing 2nd power
                 final double d1 = HALF * gw * scale;
@@ -1635,11 +1636,11 @@ public class BOBYQAOptimizer
                     stepa = interpolationPoints.getEntry(nfx, nfxm);
                     stepb = -initialTrustRegionRadius;
                     if (lowerDifference.getEntry(nfxm) == ZERO) {
-                        stepb = Math.min(TWO * initialTrustRegionRadius, upperDifference.getEntry(nfxm));
+                        stepb = FastMath.min(TWO * initialTrustRegionRadius, upperDifference.getEntry(nfxm));
                         // throw new PathIsExploredException(); // XXX
                     }
                     if (upperDifference.getEntry(nfxm) == ZERO) {
-                        stepb = Math.max(-TWO * initialTrustRegionRadius, lowerDifference.getEntry(nfxm));
+                        stepb = FastMath.max(-TWO * initialTrustRegionRadius, lowerDifference.getEntry(nfxm));
                         // throw new PathIsExploredException(); // XXX
                     }
                     interpolationPoints.setEntry(nfm, nfxm, stepb);
@@ -1664,9 +1665,9 @@ public class BOBYQAOptimizer
             // its index are required.
 
             for (int j = 0; j < n; j++) {
-                currentBest.setEntry(j, Math.min(Math.max(lowerBound[j],
-                                                          originShift.getEntry(j) + interpolationPoints.getEntry(nfm, j)),
-                                                 upperBound[j]));
+                currentBest.setEntry(j, FastMath.min(FastMath.max(lowerBound[j],
+                                                                  originShift.getEntry(j) + interpolationPoints.getEntry(nfm, j)),
+                                                     upperBound[j]));
                 if (interpolationPoints.getEntry(nfm, j) == lowerDifference.getEntry(j)) {
                     currentBest.setEntry(j, lowerBound[j]);
                 }
@@ -1723,9 +1724,9 @@ public class BOBYQAOptimizer
                     bMatrix.setEntry(nfm, nfxm, -HALF / interpolationPoints.getEntry(nfm - n, nfxm));
                     bMatrix.setEntry(nfm - n, nfxm,
                                   -bMatrix.getEntry(0, nfxm) - bMatrix.getEntry(nfm, nfxm));
-                    zMatrix.setEntry(0, nfxm, Math.sqrt(TWO) / (stepa * stepb));
-                    zMatrix.setEntry(nfm, nfxm, Math.sqrt(HALF) / rhosq);
-                    // zMatrix.setEntry(nfm, nfxm, Math.sqrt(HALF) * recip); // XXX "testAckley" and "testDiffPow" fail.
+                    zMatrix.setEntry(0, nfxm, FastMath.sqrt(TWO) / (stepa * stepb));
+                    zMatrix.setEntry(nfm, nfxm, FastMath.sqrt(HALF) / rhosq);
+                    // zMatrix.setEntry(nfm, nfxm, FastMath.sqrt(HALF) * recip); // XXX "testAckley" and "testDiffPow" fail.
                     zMatrix.setEntry(nfm - n, nfxm,
                                   -zMatrix.getEntry(0, nfxm) - zMatrix.getEntry(nfm, nfxm));
                 }
@@ -1922,7 +1923,7 @@ public class BOBYQAOptimizer
             if (resid <= ZERO) {
                 state = 90; break;
             }
-            temp = Math.sqrt(stepsq * resid + ds * ds);
+            temp = FastMath.sqrt(stepsq * resid + ds * ds);
             if (ds < ZERO) {
                 blen = (temp - ds) / stepsq;
             } else {
@@ -1931,7 +1932,7 @@ public class BOBYQAOptimizer
             stplen = blen;
             if (shs > ZERO) {
                 // Computing MIN
-                stplen = Math.min(blen, gredsq / shs);
+                stplen = FastMath.min(blen, gredsq / shs);
             }
 
             // Reduce STPLEN if necessary in order to preserve the simple bounds,
@@ -1960,7 +1961,7 @@ public class BOBYQAOptimizer
                 ++iterc;
                 temp = shs / stepsq;
                 if (iact == -1 && temp > ZERO) {
-                    crvmin = Math.min(crvmin,temp);
+                    crvmin = FastMath.min(crvmin,temp);
                     if (crvmin == MINUS_ONE) {
                         crvmin = temp;
                     }
@@ -1978,7 +1979,7 @@ public class BOBYQAOptimizer
                 }
                 // Computing MAX
                 final double d1 = stplen * (ggsav - HALF * stplen * shs);
-                sdec = Math.max(d1, ZERO);
+                sdec = FastMath.max(d1, ZERO);
                 qred += sdec;
             }
 
@@ -2056,7 +2057,7 @@ public class BOBYQAOptimizer
             if (temp <= qred * 1e-4 * qred) {
                 state = 190; break;
             }
-            temp = Math.sqrt(temp);
+            temp = FastMath.sqrt(temp);
             for (int i = 0; i < n; i++) {
                 if (xbdi.getEntry(i) == ZERO) {
                     s.setEntry(i, (dredg * trialStepPoint.getEntry(i) - dredsq * gnew.getEntry(i)) / temp);
@@ -2095,7 +2096,7 @@ public class BOBYQAOptimizer
                     d1 = trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i);
                     temp = ssq - d1 * d1;
                     if (temp > ZERO) {
-                        temp = Math.sqrt(temp) - s.getEntry(i);
+                        temp = FastMath.sqrt(temp) - s.getEntry(i);
                         if (angbd * temp > tempa) {
                             angbd = tempa / temp;
                             iact = i;
@@ -2106,7 +2107,7 @@ public class BOBYQAOptimizer
                     d1 = upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i);
                     temp = ssq - d1 * d1;
                     if (temp > ZERO) {
-                        temp = Math.sqrt(temp) + s.getEntry(i);
+                        temp = FastMath.sqrt(temp) + s.getEntry(i);
                         if (angbd * temp > tempb) {
                             angbd = tempb / temp;
                             iact = i;
@@ -2211,9 +2212,9 @@ public class BOBYQAOptimizer
             for (int i = 0; i < n; i++) {
                 // Computing MAX
                 // Computing MIN
-                final double min = Math.min(trustRegionCenterOffset.getEntry(i) + trialStepPoint.getEntry(i),
+                final double min = FastMath.min(trustRegionCenterOffset.getEntry(i) + trialStepPoint.getEntry(i),
                                             upperDifference.getEntry(i));
-                newPoint.setEntry(i, Math.max(min, lowerDifference.getEntry(i)));
+                newPoint.setEntry(i, FastMath.max(min, lowerDifference.getEntry(i)));
                 if (xbdi.getEntry(i) == MINUS_ONE) {
                     newPoint.setEntry(i, lowerDifference.getEntry(i));
                 }
@@ -2302,7 +2303,7 @@ public class BOBYQAOptimizer
         for (int k = 0; k < npt; k++) {
             for (int j = 0; j < nptm; j++) {
                 // Computing MAX
-                ztest = Math.max(ztest, Math.abs(zMatrix.getEntry(k, j)));
+                ztest = FastMath.max(ztest, FastMath.abs(zMatrix.getEntry(k, j)));
             }
         }
         ztest *= 1e-20;
@@ -2311,12 +2312,12 @@ public class BOBYQAOptimizer
 
         for (int j = 1; j < nptm; j++) {
             final double d1 = zMatrix.getEntry(knew, j);
-            if (Math.abs(d1) > ztest) {
+            if (FastMath.abs(d1) > ztest) {
                 // Computing 2nd power
                 final double d2 = zMatrix.getEntry(knew, 0);
                 // Computing 2nd power
                 final double d3 = zMatrix.getEntry(knew, j);
-                final double d4 = Math.sqrt(d2 * d2 + d3 * d3);
+                final double d4 = FastMath.sqrt(d2 * d2 + d3 * d3);
                 final double d5 = zMatrix.getEntry(knew, 0) / d4;
                 final double d6 = zMatrix.getEntry(knew, j) / d4;
                 for (int i = 0; i < npt; i++) {
@@ -2340,7 +2341,7 @@ public class BOBYQAOptimizer
 
         // Complete the updating of ZMAT.
 
-        final double sqrtDenom = Math.sqrt(denom);
+        final double sqrtDenom = FastMath.sqrt(denom);
         final double d1 = tau / sqrtDenom;
         final double d2 = zMatrix.getEntry(knew, 0) / sqrtDenom;
         for (int i = 0; i < npt; i++) {
@@ -2399,7 +2400,7 @@ public class BOBYQAOptimizer
         double minDiff = Double.POSITIVE_INFINITY;
         for (int i = 0; i < dimension; i++) {
             boundDifference[i] = upperBound[i] - lowerBound[i];
-            minDiff = Math.min(minDiff, boundDifference[i]);
+            minDiff = FastMath.min(minDiff, boundDifference[i]);
         }
         if (minDiff < requiredMinDiff) {
             initialTrustRegionRadius = minDiff / 3.0;

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java?rev=1540165&r1=1540164&r2=1540165&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optim/nonlinear/scalar/noderiv/CMAESOptimizer.java Fri Nov  8 19:53:58 2013
@@ -20,6 +20,7 @@ package org.apache.commons.math3.optim.n
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+
 import org.apache.commons.math3.exception.DimensionMismatchException;
 import org.apache.commons.math3.exception.NotPositiveException;
 import org.apache.commons.math3.exception.NotStrictlyPositiveException;
@@ -35,11 +36,13 @@ import org.apache.commons.math3.optim.no
 import org.apache.commons.math3.optim.PointValuePair;
 import org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer;
 import org.apache.commons.math3.random.RandomGenerator;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.math3.util.MathArrays;
 
 /**
- * <p>An implementation of the active Covariance Matrix Adaptation Evolution Strategy (CMA-ES)
+ * An implementation of the active Covariance Matrix Adaptation Evolution Strategy (CMA-ES)
  * for non-linear, non-convex, non-smooth, global function minimization.
+ * <p>
  * The CMA-Evolution Strategy (CMA-ES) is a reliable stochastic optimization method
  * which should be applied if derivative-based methods, e.g. quasi-Newton BFGS or
  * conjugate gradient, fail due to a rugged search landscape (e.g. noise, local
@@ -47,25 +50,25 @@ import org.apache.commons.math3.util.Mat
  * quasi-Newton method, the CMA-ES learns and applies a variable metric
  * on the underlying search space. Unlike a quasi-Newton method, the
  * CMA-ES neither estimates nor uses gradients, making it considerably more
- * reliable in terms of finding a good, or even close to optimal, solution.</p>
- *
- * <p>In general, on smooth objective functions the CMA-ES is roughly ten times
+ * reliable in terms of finding a good, or even close to optimal, solution.
+ * <p>
+ * In general, on smooth objective functions the CMA-ES is roughly ten times
  * slower than BFGS (counting objective function evaluations, no gradients provided).
  * For up to <math>N=10</math> variables also the derivative-free simplex
  * direct search method (Nelder and Mead) can be faster, but it is
- * far less reliable than CMA-ES.</p>
- *
- * <p>The CMA-ES is particularly well suited for non-separable
+ * far less reliable than CMA-ES.
+ * <p>
+ * The CMA-ES is particularly well suited for non-separable
  * and/or badly conditioned problems. To observe the advantage of CMA compared
  * to a conventional evolution strategy, it will usually take about
  * <math>30 N</math> function evaluations. On difficult problems the complete
  * optimization (a single run) is expected to take <em>roughly</em> between
  * <math>30 N</math> and <math>300 N<sup>2</sup></math>
- * function evaluations.</p>
- *
- * <p>This implementation is translated and adapted from the Matlab version
- * of the CMA-ES algorithm as implemented in module {@code cmaes.m} version 3.51.</p>
- *
+ * function evaluations.
+ * <p>
+ * This implementation is translated and adapted from the Matlab version
+ * of the CMA-ES algorithm as implemented in module {@code cmaes.m} version 3.51.
+ * <p>
  * For more information, please refer to the following links:
  * <ul>
  *  <li><a href="http://www.lri.fr/~hansen/cmaes.m">Matlab code</a></li>
@@ -431,7 +434,7 @@ public class CMAESOptimizer
                 updateCovarianceDiagonalOnly(hsig, bestArz);
             }
             // Adapt step size sigma - Eq. (5)
-            sigma *= Math.exp(Math.min(1, (normps/chiN - 1) * cs / damps));
+            sigma *= FastMath.exp(FastMath.min(1, (normps/chiN - 1) * cs / damps));
             final double bestFitness = fitness[arindex[0]];
             final double worstFitness = fitness[arindex[arindex.length - 1]];
             if (bestValue > bestFitness) {
@@ -452,7 +455,7 @@ public class CMAESOptimizer
             final double[] sqrtDiagC = sqrt(diagC).getColumn(0);
             final double[] pcCol = pc.getColumn(0);
             for (int i = 0; i < dimension; i++) {
-                if (sigma * Math.max(Math.abs(pcCol[i]), sqrtDiagC[i]) > stopTolX) {
+                if (sigma * FastMath.max(FastMath.abs(pcCol[i]), sqrtDiagC[i]) > stopTolX) {
                     break;
                 }
                 if (i >= dimension - 1) {
@@ -467,8 +470,8 @@ public class CMAESOptimizer
             final double historyBest = min(fitnessHistory);
             final double historyWorst = max(fitnessHistory);
             if (iterations > 2 &&
-                Math.max(historyWorst, worstFitness) -
-                Math.min(historyBest, bestFitness) < stopTolFun) {
+                FastMath.max(historyWorst, worstFitness) -
+                FastMath.min(historyBest, bestFitness) < stopTolFun) {
                 break generationLoop;
             }
             if (iterations > fitnessHistory.length &&
@@ -492,11 +495,11 @@ public class CMAESOptimizer
             }
             // Adjust step size in case of equal function values (flat fitness)
             if (bestValue == fitness[arindex[(int)(0.1+lambda/4.)]]) {
-                sigma *= Math.exp(0.2 + cs / damps);
+                sigma *= FastMath.exp(0.2 + cs / damps);
             }
-            if (iterations > 2 && Math.max(historyWorst, bestFitness) -
-                Math.min(historyBest, bestFitness) == 0) {
-                sigma *= Math.exp(0.2 + cs / damps);
+            if (iterations > 2 && FastMath.max(historyWorst, bestFitness) -
+                FastMath.min(historyBest, bestFitness) == 0) {
+                sigma *= FastMath.exp(0.2 + cs / damps);
             }
             // store best in history
             push(fitnessHistory,bestFitness);
@@ -587,7 +590,7 @@ public class CMAESOptimizer
 
         // initialize selection strategy parameters
         mu = lambda / 2; // number of parents/points for recombination
-        logMu2 = Math.log(mu + 0.5);
+        logMu2 = FastMath.log(mu + 0.5);
         weights = log(sequence(1, mu, 1)).scalarMultiply(-1).scalarAdd(logMu2);
         double sumw = 0;
         double sumwq = 0;
@@ -603,17 +606,17 @@ public class CMAESOptimizer
         cc = (4 + mueff / dimension) /
                 (dimension + 4 + 2 * mueff / dimension);
         cs = (mueff + 2) / (dimension + mueff + 3.);
-        damps = (1 + 2 * Math.max(0, Math.sqrt((mueff - 1) /
-                                               (dimension + 1)) - 1)) *
-            Math.max(0.3,
-                     1 - dimension / (1e-6 + maxIterations)) + cs; // minor increment
+        damps = (1 + 2 * FastMath.max(0, FastMath.sqrt((mueff - 1) /
+                                                       (dimension + 1)) - 1)) *
+            FastMath.max(0.3,
+                         1 - dimension / (1e-6 + maxIterations)) + cs; // minor increment
         ccov1 = 2 / ((dimension + 1.3) * (dimension + 1.3) + mueff);
-        ccovmu = Math.min(1 - ccov1, 2 * (mueff - 2 + 1 / mueff) /
-                          ((dimension + 2) * (dimension + 2) + mueff));
-        ccov1Sep = Math.min(1, ccov1 * (dimension + 1.5) / 3);
-        ccovmuSep = Math.min(1 - ccov1, ccovmu * (dimension + 1.5) / 3);
-        chiN = Math.sqrt(dimension) *
-            (1 - 1 / ((double) 4 * dimension) + 1 / ((double) 21 * dimension * dimension));
+        ccovmu = FastMath.min(1 - ccov1, 2 * (mueff - 2 + 1 / mueff) /
+                              ((dimension + 2) * (dimension + 2) + mueff));
+        ccov1Sep = FastMath.min(1, ccov1 * (dimension + 1.5) / 3);
+        ccovmuSep = FastMath.min(1 - ccov1, ccovmu * (dimension + 1.5) / 3);
+        chiN = FastMath.sqrt(dimension) *
+                (1 - 1 / ((double) 4 * dimension) + 1 / ((double) 21 * dimension * dimension));
         // intialize CMA internal values - updated each generation
         xmean = MatrixUtils.createColumnRealMatrix(guess); // objective variables
         diagD = insigma.scalarMultiply(1 / sigma);
@@ -644,14 +647,14 @@ public class CMAESOptimizer
     private boolean updateEvolutionPaths(RealMatrix zmean, RealMatrix xold) {
         ps = ps.scalarMultiply(1 - cs).add(
                 B.multiply(zmean).scalarMultiply(
-                        Math.sqrt(cs * (2 - cs) * mueff)));
+                        FastMath.sqrt(cs * (2 - cs) * mueff)));
         normps = ps.getFrobeniusNorm();
         final boolean hsig = normps /
-            Math.sqrt(1 - Math.pow(1 - cs, 2 * iterations)) /
+            FastMath.sqrt(1 - FastMath.pow(1 - cs, 2 * iterations)) /
             chiN < 1.4 + 2 / ((double) dimension + 1);
         pc = pc.scalarMultiply(1 - cc);
         if (hsig) {
-            pc = pc.add(xmean.subtract(xold).scalarMultiply(Math.sqrt(cc * (2 - cc) * mueff) / sigma));
+            pc = pc.add(xmean.subtract(xold).scalarMultiply(FastMath.sqrt(cc * (2 - cc) * mueff) / sigma));
         }
         return hsig;
     }
@@ -709,7 +712,7 @@ public class CMAESOptimizer
             if (isActiveCMA) {
                 // Adapt covariance matrix C active CMA
                 negccov = (1 - ccovmu) * 0.25 * mueff /
-                    (Math.pow(dimension + 2, 1.5) + 2 * mueff);
+                    (FastMath.pow(dimension + 2, 1.5) + 2 * mueff);
                 // keep at least 0.66 in all directions, small popsize are most
                 // critical
                 final double negminresidualvariance = 0.66;
@@ -962,7 +965,7 @@ public class CMAESOptimizer
         private double penalty(final double[] x, final double[] repaired) {
             double penalty = 0;
             for (int i = 0; i < x.length; i++) {
-                double diff = Math.abs(x[i] - repaired[i]);
+                double diff = FastMath.abs(x[i] - repaired[i]);
                 penalty += diff * valueRange;
             }
             return isMinimize ? penalty : -penalty;
@@ -979,7 +982,7 @@ public class CMAESOptimizer
         final double[][] d = new double[m.getRowDimension()][m.getColumnDimension()];
         for (int r = 0; r < m.getRowDimension(); r++) {
             for (int c = 0; c < m.getColumnDimension(); c++) {
-                d[r][c] = Math.log(m.getEntry(r, c));
+                d[r][c] = FastMath.log(m.getEntry(r, c));
             }
         }
         return new Array2DRowRealMatrix(d, false);
@@ -993,7 +996,7 @@ public class CMAESOptimizer
         final double[][] d = new double[m.getRowDimension()][m.getColumnDimension()];
         for (int r = 0; r < m.getRowDimension(); r++) {
             for (int c = 0; c < m.getColumnDimension(); c++) {
-                d[r][c] = Math.sqrt(m.getEntry(r, c));
+                d[r][c] = FastMath.sqrt(m.getEntry(r, c));
             }
         }
         return new Array2DRowRealMatrix(d, false);

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BOBYQAOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BOBYQAOptimizer.java?rev=1540165&r1=1540164&r2=1540165&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BOBYQAOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/BOBYQAOptimizer.java Fri Nov  8 19:53:58 2013
@@ -29,6 +29,7 @@ import org.apache.commons.math3.linear.R
 import org.apache.commons.math3.optimization.GoalType;
 import org.apache.commons.math3.optimization.PointValuePair;
 import org.apache.commons.math3.optimization.MultivariateOptimizer;
+import org.apache.commons.math3.util.FastMath;
 
 /**
  * Powell's BOBYQA algorithm. This implementation is translated and
@@ -311,7 +312,7 @@ public class BOBYQAOptimizer
                     lowerDifference.setEntry(j, -initialTrustRegionRadius);
                     // Computing MAX
                     final double deltaOne = upperBound[j] - currentBest.getEntry(j);
-                    upperDifference.setEntry(j, Math.max(deltaOne, initialTrustRegionRadius));
+                    upperDifference.setEntry(j, FastMath.max(deltaOne, initialTrustRegionRadius));
                 }
             } else if (upperDifference.getEntry(j) <= initialTrustRegionRadius) {
                 if (upperDifference.getEntry(j) <= ZERO) {
@@ -323,7 +324,7 @@ public class BOBYQAOptimizer
                     // Computing MIN
                     final double deltaOne = lowerBound[j] - currentBest.getEntry(j);
                     final double deltaTwo = -initialTrustRegionRadius;
-                    lowerDifference.setEntry(j, Math.min(deltaOne, deltaTwo));
+                    lowerDifference.setEntry(j, FastMath.min(deltaOne, deltaTwo));
                     upperDifference.setEntry(j, initialTrustRegionRadius);
                 }
             }
@@ -494,8 +495,8 @@ public class BOBYQAOptimizer
 
             // Computing MIN
             double deltaOne = delta;
-            double deltaTwo = Math.sqrt(dsq);
-            dnorm = Math.min(deltaOne, deltaTwo);
+            double deltaTwo = FastMath.sqrt(dsq);
+            dnorm = FastMath.min(deltaOne, deltaTwo);
             if (dnorm < HALF * rho) {
                 ntrits = -1;
                 // Computing 2nd power
@@ -512,8 +513,8 @@ public class BOBYQAOptimizer
                 // of likely improvements to the model within distance HALF*RHO of XOPT.
 
                 // Computing MAX
-                deltaOne = Math.max(diffa, diffb);
-                final double errbig = Math.max(deltaOne, diffc);
+                deltaOne = FastMath.max(diffa, diffb);
+                final double errbig = FastMath.max(deltaOne, diffc);
                 final double frhosq = rho * ONE_OVER_EIGHT * rho;
                 if (crvmin > ZERO &&
                     errbig > frhosq * crvmin) {
@@ -787,7 +788,7 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     // Computing 2nd power
                     final double d4 = distsq / delsq;
-                    final double temp = Math.max(ONE, d4 * d4);
+                    final double temp = FastMath.max(ONE, d4 * d4);
                     if (temp * den > scaden) {
                         scaden = temp * den;
                         knew = k;
@@ -796,7 +797,7 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     // Computing 2nd power
                     final double d5 = lagrangeValuesAtNewPoint.getEntry(k);
-                    biglsq = Math.max(biglsq, temp * (d5 * d5));
+                    biglsq = FastMath.max(biglsq, temp * (d5 * d5));
                 }
             }
 
@@ -814,9 +815,9 @@ public class BOBYQAOptimizer
                 // Computing MAX
                 final double d3 = lowerBound[i];
                 final double d4 = originShift.getEntry(i) + newPoint.getEntry(i);
-                final double d1 = Math.max(d3, d4);
+                final double d1 = FastMath.max(d3, d4);
                 final double d2 = upperBound[i];
-                currentBest.setEntry(i, Math.min(d1, d2));
+                currentBest.setEntry(i, FastMath.min(d1, d2));
                 if (newPoint.getEntry(i) == lowerDifference.getEntry(i)) {
                     currentBest.setEntry(i, lowerBound[i]);
                 }
@@ -860,7 +861,7 @@ public class BOBYQAOptimizer
             final double diff = f - fopt - vquad;
             diffc = diffb;
             diffb = diffa;
-            diffa = Math.abs(diff);
+            diffa = FastMath.abs(diff);
             if (dnorm > rho) {
                 nfsav = getEvaluations();
             }
@@ -875,13 +876,13 @@ public class BOBYQAOptimizer
                 final double hDelta = HALF * delta;
                 if (ratio <= ONE_OVER_TEN) {
                     // Computing MIN
-                    delta = Math.min(hDelta, dnorm);
+                    delta = FastMath.min(hDelta, dnorm);
                 } else if (ratio <= .7) {
                     // Computing MAX
-                    delta = Math.max(hDelta, dnorm);
+                    delta = FastMath.max(hDelta, dnorm);
                 } else {
                     // Computing MAX
-                    delta = Math.max(hDelta, 2 * dnorm);
+                    delta = FastMath.max(hDelta, 2 * dnorm);
                 }
                 if (delta <= rho * 1.5) {
                     delta = rho;
@@ -915,7 +916,7 @@ public class BOBYQAOptimizer
                         // Computing MAX
                         // Computing 2nd power
                         final double d3 = distsq / delsq;
-                        final double temp = Math.max(ONE, d3 * d3);
+                        final double temp = FastMath.max(ONE, d3 * d3);
                         if (temp * den > scaden) {
                             scaden = temp * den;
                             knew = k;
@@ -925,7 +926,7 @@ public class BOBYQAOptimizer
                         // Computing 2nd power
                         final double d4 = lagrangeValuesAtNewPoint.getEntry(k);
                         final double d5 = temp * (d4 * d4);
-                        biglsq = Math.max(biglsq, d5);
+                        biglsq = FastMath.max(biglsq, d5);
                     }
                     if (scaden <= HALF * biglsq) {
                         knew = ksav;
@@ -1050,18 +1051,18 @@ public class BOBYQAOptimizer
                     if (trustRegionCenterOffset.getEntry(i) == lowerDifference.getEntry(i)) {
                         // Computing MIN
                         // Computing 2nd power
-                        final double d1 = Math.min(ZERO, gradientAtTrustRegionCenter.getEntry(i));
+                        final double d1 = FastMath.min(ZERO, gradientAtTrustRegionCenter.getEntry(i));
                         gqsq += d1 * d1;
                         // Computing 2nd power
-                        final double d2 = Math.min(ZERO, sum);
+                        final double d2 = FastMath.min(ZERO, sum);
                         gisq += d2 * d2;
                     } else if (trustRegionCenterOffset.getEntry(i) == upperDifference.getEntry(i)) {
                         // Computing MAX
                         // Computing 2nd power
-                        final double d1 = Math.max(ZERO, gradientAtTrustRegionCenter.getEntry(i));
+                        final double d1 = FastMath.max(ZERO, gradientAtTrustRegionCenter.getEntry(i));
                         gqsq += d1 * d1;
                         // Computing 2nd power
-                        final double d2 = Math.max(ZERO, sum);
+                        final double d2 = FastMath.max(ZERO, sum);
                         gisq += d2 * d2;
                     } else {
                         // Computing 2nd power
@@ -1080,7 +1081,7 @@ public class BOBYQAOptimizer
                     itest = 0;
                 }
                 if (itest >= 3) {
-                    for (int i = 0, max = Math.max(npt, nh); i < max; i++) {
+                    for (int i = 0, max = FastMath.max(npt, nh); i < max; i++) {
                         if (i < n) {
                             gradientAtTrustRegionCenter.setEntry(i, lagrangeValuesAtNewPoint.getEntry(npt + i));
                         }
@@ -1114,7 +1115,7 @@ public class BOBYQAOptimizer
             final double d1 = TWO * delta;
             // Computing 2nd power
             final double d2 = TEN * rho;
-            distsq = Math.max(d1 * d1, d2 * d2);
+            distsq = FastMath.max(d1 * d1, d2 * d2);
         }
         case 650: {
             printState(650); // XXX
@@ -1139,10 +1140,10 @@ public class BOBYQAOptimizer
             // current RHO are complete.
 
             if (knew >= 0) {
-                final double dist = Math.sqrt(distsq);
+                final double dist = FastMath.sqrt(distsq);
                 if (ntrits == -1) {
                     // Computing MIN
-                    delta = Math.min(ONE_OVER_TEN * delta, HALF * dist);
+                    delta = FastMath.min(ONE_OVER_TEN * delta, HALF * dist);
                     if (delta <= rho * 1.5) {
                         delta = rho;
                     }
@@ -1150,8 +1151,8 @@ public class BOBYQAOptimizer
                 ntrits = 0;
                 // Computing MAX
                 // Computing MIN
-                final double d1 = Math.min(ONE_OVER_TEN * dist, delta);
-                adelt = Math.max(d1, rho);
+                final double d1 = FastMath.min(ONE_OVER_TEN * dist, delta);
+                adelt = FastMath.max(d1, rho);
                 dsq = adelt * adelt;
                 state = 90; break;
             }
@@ -1161,7 +1162,7 @@ public class BOBYQAOptimizer
             if (ratio > ZERO) {
                 state = 60; break;
             }
-            if (Math.max(delta, dnorm) > rho) {
+            if (FastMath.max(delta, dnorm) > rho) {
                 state = 60; break;
             }
 
@@ -1176,11 +1177,11 @@ public class BOBYQAOptimizer
                 if (ratio <= SIXTEEN) {
                     rho = stoppingTrustRegionRadius;
                 } else if (ratio <= TWO_HUNDRED_FIFTY) {
-                    rho = Math.sqrt(ratio) * stoppingTrustRegionRadius;
+                    rho = FastMath.sqrt(ratio) * stoppingTrustRegionRadius;
                 } else {
                     rho *= ONE_OVER_TEN;
                 }
-                delta = Math.max(delta, rho);
+                delta = FastMath.max(delta, rho);
                 ntrits = 0;
                 nfsav = getEvaluations();
                 state = 60; break;
@@ -1201,9 +1202,9 @@ public class BOBYQAOptimizer
                     // Computing MAX
                     final double d3 = lowerBound[i];
                     final double d4 = originShift.getEntry(i) + trustRegionCenterOffset.getEntry(i);
-                    final double d1 = Math.max(d3, d4);
+                    final double d1 = FastMath.max(d3, d4);
                     final double d2 = upperBound[i];
-                    currentBest.setEntry(i, Math.min(d1, d2));
+                    currentBest.setEntry(i, FastMath.min(d1, d2));
                     if (trustRegionCenterOffset.getEntry(i) == lowerDifference.getEntry(i)) {
                         currentBest.setEntry(i, lowerBound[i]);
                     }
@@ -1320,11 +1321,11 @@ public class BOBYQAOptimizer
                 dderiv += glag.getEntry(i) * tmp;
                 distsq += tmp * tmp;
             }
-            double subd = adelt / Math.sqrt(distsq);
+            double subd = adelt / FastMath.sqrt(distsq);
             double slbd = -subd;
             int ilbd = 0;
             int iubd = 0;
-            final double sumin = Math.min(ONE, subd);
+            final double sumin = FastMath.min(ONE, subd);
 
             // Revise SLBD and SUBD if necessary because of the bounds in SL and SU.
 
@@ -1337,8 +1338,8 @@ public class BOBYQAOptimizer
                     }
                     if (subd * tmp > upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) {
                         // Computing MAX
-                        subd = Math.max(sumin,
-                                        (upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
+                        subd = FastMath.max(sumin,
+                                            (upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
                         iubd = i + 1;
                     }
                 } else if (tmp < ZERO) {
@@ -1348,8 +1349,8 @@ public class BOBYQAOptimizer
                     }
                     if (subd * tmp < lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) {
                         // Computing MAX
-                        subd = Math.max(sumin,
-                                        (lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
+                        subd = FastMath.max(sumin,
+                                            (lowerDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i)) / tmp);
                         iubd = -i - 1;
                     }
                 }
@@ -1365,7 +1366,7 @@ public class BOBYQAOptimizer
                 final double diff = dderiv - ONE;
                 vlag = slbd * (dderiv - slbd * diff);
                 final double d1 = subd * (dderiv - subd * diff);
-                if (Math.abs(d1) > Math.abs(vlag)) {
+                if (FastMath.abs(d1) > FastMath.abs(vlag)) {
                     step = subd;
                     vlag = d1;
                     isbd = iubd;
@@ -1375,7 +1376,7 @@ public class BOBYQAOptimizer
                 final double d4 = d2 - diff * subd;
                 if (d3 * d4 < ZERO) {
                     final double d5 = d2 * d2 / diff;
-                    if (Math.abs(d5) > Math.abs(vlag)) {
+                    if (FastMath.abs(d5) > FastMath.abs(vlag)) {
                         step = d2 / diff;
                         vlag = d5;
                         isbd = 0;
@@ -1387,12 +1388,12 @@ public class BOBYQAOptimizer
             } else {
                 vlag = slbd * (ONE - slbd);
                 final double tmp = subd * (ONE - subd);
-                if (Math.abs(tmp) > Math.abs(vlag)) {
+                if (FastMath.abs(tmp) > FastMath.abs(vlag)) {
                     step = subd;
                     vlag = tmp;
                     isbd = iubd;
                 }
-                if (subd > HALF && Math.abs(vlag) < ONE_OVER_FOUR) {
+                if (subd > HALF && FastMath.abs(vlag) < ONE_OVER_FOUR) {
                     step = HALF;
                     vlag = ONE_OVER_FOUR;
                     isbd = 0;
@@ -1416,8 +1417,8 @@ public class BOBYQAOptimizer
 
         for (int i = 0; i < n; i++) {
             final double tmp = trustRegionCenterOffset.getEntry(i) + stpsav * (interpolationPoints.getEntry(ksav, i) - trustRegionCenterOffset.getEntry(i));
-            newPoint.setEntry(i, Math.max(lowerDifference.getEntry(i),
-                                      Math.min(upperDifference.getEntry(i), tmp)));
+            newPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i),
+                                              FastMath.min(upperDifference.getEntry(i), tmp)));
         }
         if (ibdsav < 0) {
             newPoint.setEntry(-ibdsav - 1, lowerDifference.getEntry(-ibdsav - 1));
@@ -1440,8 +1441,8 @@ public class BOBYQAOptimizer
             for (int i = 0; i < n; i++) {
                 final double glagValue = glag.getEntry(i);
                 work1.setEntry(i, ZERO);
-                if (Math.min(trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i), glagValue) > ZERO ||
-                    Math.max(trustRegionCenterOffset.getEntry(i) - upperDifference.getEntry(i), glagValue) < ZERO) {
+                if (FastMath.min(trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i), glagValue) > ZERO ||
+                    FastMath.max(trustRegionCenterOffset.getEntry(i) - upperDifference.getEntry(i), glagValue) < ZERO) {
                     work1.setEntry(i, bigstp);
                     // Computing 2nd power
                     ggfree += glagValue * glagValue;
@@ -1454,7 +1455,7 @@ public class BOBYQAOptimizer
             // Investigate whether more components of W can be fixed.
             final double tmp1 = adelt * adelt - wfixsq;
             if (tmp1 > ZERO) {
-                step = Math.sqrt(tmp1 / ggfree);
+                step = FastMath.sqrt(tmp1 / ggfree);
                 ggfree = ZERO;
                 for (int i = 0; i < n; i++) {
                     if (work1.getEntry(i) == bigstp) {
@@ -1486,9 +1487,9 @@ public class BOBYQAOptimizer
                 final double glagValue = glag.getEntry(i);
                 if (work1.getEntry(i) == bigstp) {
                     work1.setEntry(i, -step * glagValue);
-                    final double min = Math.min(upperDifference.getEntry(i),
-                                                trustRegionCenterOffset.getEntry(i) + work1.getEntry(i));
-                    alternativeNewPoint.setEntry(i, Math.max(lowerDifference.getEntry(i), min));
+                    final double min = FastMath.min(upperDifference.getEntry(i),
+                                                    trustRegionCenterOffset.getEntry(i) + work1.getEntry(i));
+                    alternativeNewPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i), min));
                 } else if (work1.getEntry(i) == ZERO) {
                     alternativeNewPoint.setEntry(i, trustRegionCenterOffset.getEntry(i));
                 } else if (glagValue > ZERO) {
@@ -1516,12 +1517,12 @@ public class BOBYQAOptimizer
                 curv = -curv;
             }
             if (curv > -gw &&
-                curv < -gw * (ONE + Math.sqrt(TWO))) {
+                curv < -gw * (ONE + FastMath.sqrt(TWO))) {
                 final double scale = -gw / curv;
                 for (int i = 0; i < n; i++) {
                     final double tmp = trustRegionCenterOffset.getEntry(i) + scale * work1.getEntry(i);
-                    alternativeNewPoint.setEntry(i, Math.max(lowerDifference.getEntry(i),
-                                              Math.min(upperDifference.getEntry(i), tmp)));
+                    alternativeNewPoint.setEntry(i, FastMath.max(lowerDifference.getEntry(i),
+                                                    FastMath.min(upperDifference.getEntry(i), tmp)));
                 }
                 // Computing 2nd power
                 final double d1 = HALF * gw * scale;
@@ -1640,11 +1641,11 @@ public class BOBYQAOptimizer
                     stepa = interpolationPoints.getEntry(nfx, nfxm);
                     stepb = -initialTrustRegionRadius;
                     if (lowerDifference.getEntry(nfxm) == ZERO) {
-                        stepb = Math.min(TWO * initialTrustRegionRadius, upperDifference.getEntry(nfxm));
+                        stepb = FastMath.min(TWO * initialTrustRegionRadius, upperDifference.getEntry(nfxm));
                         // throw new PathIsExploredException(); // XXX
                     }
                     if (upperDifference.getEntry(nfxm) == ZERO) {
-                        stepb = Math.max(-TWO * initialTrustRegionRadius, lowerDifference.getEntry(nfxm));
+                        stepb = FastMath.max(-TWO * initialTrustRegionRadius, lowerDifference.getEntry(nfxm));
                         // throw new PathIsExploredException(); // XXX
                     }
                     interpolationPoints.setEntry(nfm, nfxm, stepb);
@@ -1669,9 +1670,9 @@ public class BOBYQAOptimizer
             // its index are required.
 
             for (int j = 0; j < n; j++) {
-                currentBest.setEntry(j, Math.min(Math.max(lowerBound[j],
-                                                          originShift.getEntry(j) + interpolationPoints.getEntry(nfm, j)),
-                                                 upperBound[j]));
+                currentBest.setEntry(j, FastMath.min(FastMath.max(lowerBound[j],
+                                                                  originShift.getEntry(j) + interpolationPoints.getEntry(nfm, j)),
+                                                     upperBound[j]));
                 if (interpolationPoints.getEntry(nfm, j) == lowerDifference.getEntry(j)) {
                     currentBest.setEntry(j, lowerBound[j]);
                 }
@@ -1728,9 +1729,9 @@ public class BOBYQAOptimizer
                     bMatrix.setEntry(nfm, nfxm, -HALF / interpolationPoints.getEntry(nfm - n, nfxm));
                     bMatrix.setEntry(nfm - n, nfxm,
                                   -bMatrix.getEntry(0, nfxm) - bMatrix.getEntry(nfm, nfxm));
-                    zMatrix.setEntry(0, nfxm, Math.sqrt(TWO) / (stepa * stepb));
-                    zMatrix.setEntry(nfm, nfxm, Math.sqrt(HALF) / rhosq);
-                    // zMatrix.setEntry(nfm, nfxm, Math.sqrt(HALF) * recip); // XXX "testAckley" and "testDiffPow" fail.
+                    zMatrix.setEntry(0, nfxm, FastMath.sqrt(TWO) / (stepa * stepb));
+                    zMatrix.setEntry(nfm, nfxm, FastMath.sqrt(HALF) / rhosq);
+                    // zMatrix.setEntry(nfm, nfxm, FastMath.sqrt(HALF) * recip); // XXX "testAckley" and "testDiffPow" fail.
                     zMatrix.setEntry(nfm - n, nfxm,
                                   -zMatrix.getEntry(0, nfxm) - zMatrix.getEntry(nfm, nfxm));
                 }
@@ -1927,7 +1928,7 @@ public class BOBYQAOptimizer
             if (resid <= ZERO) {
                 state = 90; break;
             }
-            temp = Math.sqrt(stepsq * resid + ds * ds);
+            temp = FastMath.sqrt(stepsq * resid + ds * ds);
             if (ds < ZERO) {
                 blen = (temp - ds) / stepsq;
             } else {
@@ -1936,7 +1937,7 @@ public class BOBYQAOptimizer
             stplen = blen;
             if (shs > ZERO) {
                 // Computing MIN
-                stplen = Math.min(blen, gredsq / shs);
+                stplen = FastMath.min(blen, gredsq / shs);
             }
 
             // Reduce STPLEN if necessary in order to preserve the simple bounds,
@@ -1965,7 +1966,7 @@ public class BOBYQAOptimizer
                 ++iterc;
                 temp = shs / stepsq;
                 if (iact == -1 && temp > ZERO) {
-                    crvmin = Math.min(crvmin,temp);
+                    crvmin = FastMath.min(crvmin,temp);
                     if (crvmin == MINUS_ONE) {
                         crvmin = temp;
                     }
@@ -1983,7 +1984,7 @@ public class BOBYQAOptimizer
                 }
                 // Computing MAX
                 final double d1 = stplen * (ggsav - HALF * stplen * shs);
-                sdec = Math.max(d1, ZERO);
+                sdec = FastMath.max(d1, ZERO);
                 qred += sdec;
             }
 
@@ -2061,7 +2062,7 @@ public class BOBYQAOptimizer
             if (temp <= qred * 1e-4 * qred) {
                 state = 190; break;
             }
-            temp = Math.sqrt(temp);
+            temp = FastMath.sqrt(temp);
             for (int i = 0; i < n; i++) {
                 if (xbdi.getEntry(i) == ZERO) {
                     s.setEntry(i, (dredg * trialStepPoint.getEntry(i) - dredsq * gnew.getEntry(i)) / temp);
@@ -2100,7 +2101,7 @@ public class BOBYQAOptimizer
                     d1 = trustRegionCenterOffset.getEntry(i) - lowerDifference.getEntry(i);
                     temp = ssq - d1 * d1;
                     if (temp > ZERO) {
-                        temp = Math.sqrt(temp) - s.getEntry(i);
+                        temp = FastMath.sqrt(temp) - s.getEntry(i);
                         if (angbd * temp > tempa) {
                             angbd = tempa / temp;
                             iact = i;
@@ -2111,7 +2112,7 @@ public class BOBYQAOptimizer
                     d1 = upperDifference.getEntry(i) - trustRegionCenterOffset.getEntry(i);
                     temp = ssq - d1 * d1;
                     if (temp > ZERO) {
-                        temp = Math.sqrt(temp) + s.getEntry(i);
+                        temp = FastMath.sqrt(temp) + s.getEntry(i);
                         if (angbd * temp > tempb) {
                             angbd = tempb / temp;
                             iact = i;
@@ -2216,9 +2217,9 @@ public class BOBYQAOptimizer
             for (int i = 0; i < n; i++) {
                 // Computing MAX
                 // Computing MIN
-                final double min = Math.min(trustRegionCenterOffset.getEntry(i) + trialStepPoint.getEntry(i),
-                                            upperDifference.getEntry(i));
-                newPoint.setEntry(i, Math.max(min, lowerDifference.getEntry(i)));
+                final double min = FastMath.min(trustRegionCenterOffset.getEntry(i) + trialStepPoint.getEntry(i),
+                                                upperDifference.getEntry(i));
+                newPoint.setEntry(i, FastMath.max(min, lowerDifference.getEntry(i)));
                 if (xbdi.getEntry(i) == MINUS_ONE) {
                     newPoint.setEntry(i, lowerDifference.getEntry(i));
                 }
@@ -2307,7 +2308,7 @@ public class BOBYQAOptimizer
         for (int k = 0; k < npt; k++) {
             for (int j = 0; j < nptm; j++) {
                 // Computing MAX
-                ztest = Math.max(ztest, Math.abs(zMatrix.getEntry(k, j)));
+                ztest = FastMath.max(ztest, FastMath.abs(zMatrix.getEntry(k, j)));
             }
         }
         ztest *= 1e-20;
@@ -2316,12 +2317,12 @@ public class BOBYQAOptimizer
 
         for (int j = 1; j < nptm; j++) {
             final double d1 = zMatrix.getEntry(knew, j);
-            if (Math.abs(d1) > ztest) {
+            if (FastMath.abs(d1) > ztest) {
                 // Computing 2nd power
                 final double d2 = zMatrix.getEntry(knew, 0);
                 // Computing 2nd power
                 final double d3 = zMatrix.getEntry(knew, j);
-                final double d4 = Math.sqrt(d2 * d2 + d3 * d3);
+                final double d4 = FastMath.sqrt(d2 * d2 + d3 * d3);
                 final double d5 = zMatrix.getEntry(knew, 0) / d4;
                 final double d6 = zMatrix.getEntry(knew, j) / d4;
                 for (int i = 0; i < npt; i++) {
@@ -2345,7 +2346,7 @@ public class BOBYQAOptimizer
 
         // Complete the updating of ZMAT.
 
-        final double sqrtDenom = Math.sqrt(denom);
+        final double sqrtDenom = FastMath.sqrt(denom);
         final double d1 = tau / sqrtDenom;
         final double d2 = zMatrix.getEntry(knew, 0) / sqrtDenom;
         for (int i = 0; i < npt; i++) {
@@ -2404,7 +2405,7 @@ public class BOBYQAOptimizer
         double minDiff = Double.POSITIVE_INFINITY;
         for (int i = 0; i < dimension; i++) {
             boundDifference[i] = upperBound[i] - lowerBound[i];
-            minDiff = Math.min(minDiff, boundDifference[i]);
+            minDiff = FastMath.min(minDiff, boundDifference[i]);
         }
         if (minDiff < requiredMinDiff) {
             initialTrustRegionRadius = minDiff / 3.0;

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java?rev=1540165&r1=1540164&r2=1540165&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/optimization/direct/CMAESOptimizer.java Fri Nov  8 19:53:58 2013
@@ -39,6 +39,7 @@ import org.apache.commons.math3.optimiza
 import org.apache.commons.math3.optimization.SimpleValueChecker;
 import org.apache.commons.math3.random.MersenneTwister;
 import org.apache.commons.math3.random.RandomGenerator;
+import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.math3.util.MathArrays;
 
 /**
@@ -81,7 +82,6 @@ import org.apache.commons.math3.util.Mat
  * @deprecated As of 3.1 (to be removed in 4.0).
  * @since 3.0
  */
-
 @Deprecated
 public class CMAESOptimizer
     extends BaseAbstractMultivariateSimpleBoundsOptimizer<MultivariateFunction>
@@ -559,7 +559,7 @@ public class CMAESOptimizer
                 updateCovarianceDiagonalOnly(hsig, bestArz);
             }
             // Adapt step size sigma - Eq. (5)
-            sigma *= Math.exp(Math.min(1, (normps/chiN - 1) * cs / damps));
+            sigma *= FastMath.exp(FastMath.min(1, (normps/chiN - 1) * cs / damps));
             final double bestFitness = fitness[arindex[0]];
             final double worstFitness = fitness[arindex[arindex.length - 1]];
             if (bestValue > bestFitness) {
@@ -580,7 +580,7 @@ public class CMAESOptimizer
             final double[] sqrtDiagC = sqrt(diagC).getColumn(0);
             final double[] pcCol = pc.getColumn(0);
             for (int i = 0; i < dimension; i++) {
-                if (sigma * Math.max(Math.abs(pcCol[i]), sqrtDiagC[i]) > stopTolX) {
+                if (sigma * FastMath.max(FastMath.abs(pcCol[i]), sqrtDiagC[i]) > stopTolX) {
                     break;
                 }
                 if (i >= dimension - 1) {
@@ -595,8 +595,8 @@ public class CMAESOptimizer
             final double historyBest = min(fitnessHistory);
             final double historyWorst = max(fitnessHistory);
             if (iterations > 2 &&
-                Math.max(historyWorst, worstFitness) -
-                Math.min(historyBest, bestFitness) < stopTolFun) {
+                FastMath.max(historyWorst, worstFitness) -
+                FastMath.min(historyBest, bestFitness) < stopTolFun) {
                 break generationLoop;
             }
             if (iterations > fitnessHistory.length &&
@@ -620,11 +620,11 @@ public class CMAESOptimizer
             }
             // Adjust step size in case of equal function values (flat fitness)
             if (bestValue == fitness[arindex[(int)(0.1+lambda/4.)]]) {
-                sigma *= Math.exp(0.2 + cs / damps);
+                sigma *= FastMath.exp(0.2 + cs / damps);
             }
-            if (iterations > 2 && Math.max(historyWorst, bestFitness) -
-                Math.min(historyBest, bestFitness) == 0) {
-                sigma *= Math.exp(0.2 + cs / damps);
+            if (iterations > 2 && FastMath.max(historyWorst, bestFitness) -
+                FastMath.min(historyBest, bestFitness) == 0) {
+                sigma *= FastMath.exp(0.2 + cs / damps);
             }
             // store best in history
             push(fitnessHistory,bestFitness);
@@ -697,7 +697,7 @@ public class CMAESOptimizer
         if (lambda <= 0) {
             // XXX Line below to replace the current one in 4.0 (MATH-879).
             // throw new NotStrictlyPositiveException(lambda);
-            lambda = 4 + (int) (3 * Math.log(dimension));
+            lambda = 4 + (int) (3 * FastMath.log(dimension));
         }
         // initialize sigma
         final double[][] sigmaArray = new double[guess.length][1];
@@ -717,7 +717,7 @@ public class CMAESOptimizer
 
         // initialize selection strategy parameters
         mu = lambda / 2; // number of parents/points for recombination
-        logMu2 = Math.log(mu + 0.5);
+        logMu2 = FastMath.log(mu + 0.5);
         weights = log(sequence(1, mu, 1)).scalarMultiply(-1).scalarAdd(logMu2);
         double sumw = 0;
         double sumwq = 0;
@@ -733,16 +733,16 @@ public class CMAESOptimizer
         cc = (4 + mueff / dimension) /
                 (dimension + 4 + 2 * mueff / dimension);
         cs = (mueff + 2) / (dimension + mueff + 3.);
-        damps = (1 + 2 * Math.max(0, Math.sqrt((mueff - 1) /
-                                               (dimension + 1)) - 1)) *
-            Math.max(0.3,
-                     1 - dimension / (1e-6 + maxIterations)) + cs; // minor increment
+        damps = (1 + 2 * FastMath.max(0, FastMath.sqrt((mueff - 1) /
+                                                       (dimension + 1)) - 1)) *
+            FastMath.max(0.3,
+                         1 - dimension / (1e-6 + maxIterations)) + cs; // minor increment
         ccov1 = 2 / ((dimension + 1.3) * (dimension + 1.3) + mueff);
-        ccovmu = Math.min(1 - ccov1, 2 * (mueff - 2 + 1 / mueff) /
-                          ((dimension + 2) * (dimension + 2) + mueff));
-        ccov1Sep = Math.min(1, ccov1 * (dimension + 1.5) / 3);
-        ccovmuSep = Math.min(1 - ccov1, ccovmu * (dimension + 1.5) / 3);
-        chiN = Math.sqrt(dimension) *
+        ccovmu = FastMath.min(1 - ccov1, 2 * (mueff - 2 + 1 / mueff) /
+                              ((dimension + 2) * (dimension + 2) + mueff));
+        ccov1Sep = FastMath.min(1, ccov1 * (dimension + 1.5) / 3);
+        ccovmuSep = FastMath.min(1 - ccov1, ccovmu * (dimension + 1.5) / 3);
+        chiN = FastMath.sqrt(dimension) *
             (1 - 1 / ((double) 4 * dimension) + 1 / ((double) 21 * dimension * dimension));
         // intialize CMA internal values - updated each generation
         xmean = MatrixUtils.createColumnRealMatrix(guess); // objective variables
@@ -773,15 +773,14 @@ public class CMAESOptimizer
      */
     private boolean updateEvolutionPaths(RealMatrix zmean, RealMatrix xold) {
         ps = ps.scalarMultiply(1 - cs).add(
-                B.multiply(zmean).scalarMultiply(
-                        Math.sqrt(cs * (2 - cs) * mueff)));
+                B.multiply(zmean).scalarMultiply(FastMath.sqrt(cs * (2 - cs) * mueff)));
         normps = ps.getFrobeniusNorm();
         final boolean hsig = normps /
-            Math.sqrt(1 - Math.pow(1 - cs, 2 * iterations)) /
+            FastMath.sqrt(1 - FastMath.pow(1 - cs, 2 * iterations)) /
             chiN < 1.4 + 2 / ((double) dimension + 1);
         pc = pc.scalarMultiply(1 - cc);
         if (hsig) {
-            pc = pc.add(xmean.subtract(xold).scalarMultiply(Math.sqrt(cc * (2 - cc) * mueff) / sigma));
+            pc = pc.add(xmean.subtract(xold).scalarMultiply(FastMath.sqrt(cc * (2 - cc) * mueff) / sigma));
         }
         return hsig;
     }
@@ -838,8 +837,7 @@ public class CMAESOptimizer
             oldFac += 1 - ccov1 - ccovmu;
             if (isActiveCMA) {
                 // Adapt covariance matrix C active CMA
-                negccov = (1 - ccovmu) * 0.25 * mueff /
-                    (Math.pow(dimension + 2, 1.5) + 2 * mueff);
+                negccov = (1 - ccovmu) * 0.25 * mueff / (FastMath.pow(dimension + 2, 1.5) + 2 * mueff);
                 // keep at least 0.66 in all directions, small popsize are most
                 // critical
                 final double negminresidualvariance = 0.66;
@@ -1092,7 +1090,7 @@ public class CMAESOptimizer
         private double penalty(final double[] x, final double[] repaired) {
             double penalty = 0;
             for (int i = 0; i < x.length; i++) {
-                double diff = Math.abs(x[i] - repaired[i]);
+                double diff = FastMath.abs(x[i] - repaired[i]);
                 penalty += diff * valueRange;
             }
             return isMinimize ? penalty : -penalty;
@@ -1109,7 +1107,7 @@ public class CMAESOptimizer
         final double[][] d = new double[m.getRowDimension()][m.getColumnDimension()];
         for (int r = 0; r < m.getRowDimension(); r++) {
             for (int c = 0; c < m.getColumnDimension(); c++) {
-                d[r][c] = Math.log(m.getEntry(r, c));
+                d[r][c] = FastMath.log(m.getEntry(r, c));
             }
         }
         return new Array2DRowRealMatrix(d, false);
@@ -1123,7 +1121,7 @@ public class CMAESOptimizer
         final double[][] d = new double[m.getRowDimension()][m.getColumnDimension()];
         for (int r = 0; r < m.getRowDimension(); r++) {
             for (int c = 0; c < m.getColumnDimension(); c++) {
-                d[r][c] = Math.sqrt(m.getEntry(r, c));
+                d[r][c] = FastMath.sqrt(m.getEntry(r, c));
             }
         }
         return new Array2DRowRealMatrix(d, false);