Example usage for org.apache.commons.math3.optim.nonlinear.scalar.noderiv NelderMeadSimplex NelderMeadSimplex

List of usage examples for org.apache.commons.math3.optim.nonlinear.scalar.noderiv NelderMeadSimplex NelderMeadSimplex

Introduction

In this page you can find the example usage for org.apache.commons.math3.optim.nonlinear.scalar.noderiv NelderMeadSimplex NelderMeadSimplex.

Prototype

public NelderMeadSimplex(final double[][] referenceSimplex) 

Source Link

Document

Build a Nelder-Mead simplex with default coefficients.

Usage

From source file:org.hawkular.datamining.forecast.models.performance.OptimizationAlgorithmsTests.java

private long executeSimplex(ModelData modelData) {
    long start = System.nanoTime();
    SimplexOptimizer optimizer = new SimplexOptimizer(0.00001, 0.00001);
    PointValuePair unbounded = optimizer.optimize(GoalType.MINIMIZE, new MaxIter(MAX_ITER),
            new MaxEval(MAX_EVAL), new InitialGuess(INITIAL_GUESS), new ObjectiveFunction(objectiveFunction),
            new NelderMeadSimplex(2));
    long executionTime = System.nanoTime() - start;

    printOptimizationResult(objectiveFunction, unbounded.getPoint(), modelData);

    return executionTime;
}

From source file:uk.ac.diamond.scisoft.analysis.optimize.ApacheOptimizer.java

private void internalScalarOptimize() {
    MultivariateOptimizer opt = createOptimizer();
    SimpleBounds bd = createBounds();// ww w .j a  v  a 2s . c  o m
    double offset = 1e12;
    double[] scale = new double[n];
    for (int i = 0; i < n; i++) {
        scale[i] = offset * 0.25;
    }
    MultivariateFunction fn = createFunction();
    if (optimizer == Optimizer.SIMPLEX_MD || optimizer == Optimizer.SIMPLEX_NM) {
        fn = new MultivariateFunctionPenaltyAdapter(fn, bd.getLower(), bd.getUpper(), offset, scale);
    }
    ObjectiveFunction of = new ObjectiveFunction(fn);
    InitialGuess ig = new InitialGuess(getParameterValues());
    MaxEval me = new MaxEval(MAX_EVAL);
    double min = Double.POSITIVE_INFINITY;
    double res = Double.NaN;

    try {
        PointValuePair result;

        switch (optimizer) {
        case CONJUGATE_GRADIENT:
            //            af = new MultivariateFunctionPenaltyAdapter(fn, bd.getLower(), bd.getUpper(), offset, scale);
            result = opt.optimize(ig, GoalType.MINIMIZE, of, me,
                    new ObjectiveFunctionGradient(createGradientFunction()));
            break;
        case BOBYQA:
            result = opt.optimize(ig, GoalType.MINIMIZE, of, me, bd);
            break;
        case CMAES:
            double[] sigma = new double[n];
            for (int i = 0; i < n; i++) {
                IParameter p = params.get(i);
                double v = p.getValue();
                double r = Math.max(p.getUpperLimit() - v, v - p.getLowerLimit());
                sigma[i] = r * 0.05; // 5% of range
            }
            int p = (int) Math.ceil(4 + Math.log(n)) + 1;
            logger.trace("Population size: {}", p);
            result = opt.optimize(ig, GoalType.MINIMIZE, of, me, bd, new CMAESOptimizer.Sigma(sigma),
                    new CMAESOptimizer.PopulationSize(p));
            break;
        case SIMPLEX_MD:
            result = opt.optimize(ig, GoalType.MINIMIZE, of, me, new MultiDirectionalSimplex(n));
            break;
        case SIMPLEX_NM:
            result = opt.optimize(ig, GoalType.MINIMIZE, of, me, new NelderMeadSimplex(n));
            break;
        default:
            throw new IllegalStateException("Should not be called");
        }

        // logger.info("Q-space fit: rms = {}, x^2 = {}", opt.getRMS(), opt.getChiSquare());
        double ires = calculateResidual(opt.getStartPoint());
        logger.trace("Residual: {} from {}", result.getValue(), ires);
        res = result.getValue();
        if (res < min)
            setParameterValues(result.getPoint());
        logger.trace("Used {} evals and {} iters", opt.getEvaluations(), opt.getIterations());
        //         System.err.printf("Used %d evals and %d iters\n", opt.getEvaluations(), opt.getIterations());
        // logger.info("Q-space fit: rms = {}, x^2 = {}", opt.getRMS(), opt.getChiSquare());
    } catch (IllegalArgumentException e) {
        logger.error("Start point has wrong dimension", e);
        // should not happen!
    } catch (TooManyEvaluationsException e) {
        throw new IllegalArgumentException("Could not fit as optimizer did not converge");
        //            logger.error("Convergence problem: max iterations ({}) exceeded", opt.getMaxIterations());
    }
}