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

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

Introduction

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

Prototype

public SimplexOptimizer(double rel, double abs) 

Source Link

Usage

From source file:org.hawkular.datamining.forecast.models.AbstractModelOptimizer.java

protected void optimize(double[] initialGuess, MultivariateFunctionMappingAdapter costFunction) {

    // Nelder-Mead Simplex
    SimplexOptimizer optimizer = new SimplexOptimizer(0.0001, 0.0001);
    PointValuePair unBoundedResult = optimizer.optimize(GoalType.MINIMIZE, new MaxIter(MAX_ITER),
            new MaxEval(MAX_EVAL), new InitialGuess(initialGuess), new ObjectiveFunction(costFunction),
            new NelderMeadSimplex(initialGuess.length));

    result = costFunction.unboundedToBounded(unBoundedResult.getPoint());
}

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:org.hawkular.datamining.forecast.models.performance.OptimizationAlgorithmsTests.java

private long executeMultidirectionalSimplex(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 MultiDirectionalSimplex(2));
    long executionTime = System.nanoTime() - start;

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

    return executionTime;
}

From source file:smlm.fitting.FittingClassical.java

@SuppressWarnings("unused")
@Override//from w ww .j a v a2s  . c  o  m
public boolean FitThis() {

    // Initial estimates (your initial x)
    // Calculating the centroid
    ImageStatistics stat = roi.getStatistics();
    double x0 = stat.xCenterOfMass;
    double y0 = stat.yCenterOfMass;
    double[] start = { x0, y0, param.psfSigma, param.psfSigma, i0Max, backgroundLevel };

    PointValuePair solutionMult = null;
    MultivariateFunctionMappingAdapter fitFunc = null;

    if (param.fitting != Params.Fitting.CentroidFit) {
        // initial step sizes (take a good guess)
        double[] step = { 1, 1, 0.1, 0.1, stdBackground, stdBackground };
        // convergence tolerance
        double ftol = 0.0001;// 0.000001;
        pixelPrecision = 3;// 5;

        if (param.fitting == Params.Fitting.FastGaussianFit) {
            ftol = 0.1;
            pixelPrecision = 3;
        }

        SimplexOptimizer Fit = new SimplexOptimizer(ftol, ftol * ftol);
        double[] low = new double[] { 0, 0, 0, 0, 0, 0 };
        double[] up = new double[] { roi.getWidth(), roi.getHeight(), Double.POSITIVE_INFINITY,
                Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY };
        fitFunc = new MultivariateFunctionMappingAdapter(new LLH(), low, up);

        // maximal number of iterations
        int maxIter = 5000;
        // Nelder and Mead maximisation procedure
        // x0 e [0, xmax]
        // Fit.addConstraint(0, -1, 0);
        // Fit.addConstraint(0, 1, roi.getWidth());
        // y0 e [0, ymax]
        // Fit.addConstraint(1, -1, 0);
        // Fit.addConstraint(1, 1, roi.getHeight());
        /*
         * // sigmax e [PSFSigma/3, 3*PSFSigma] Fit.addConstraint(2, -1,
         * PSFSigmaInt-PSFSigmaInt/2); Fit.addConstraint(2, 1,
         * 2*PSFSigmaInt); // sigmay e [PSFSigma/3, 3*PSFSigma]
         * Fit.addConstraint(3, -1, PSFSigmaInt-PSFSigmaInt/2);
         * Fit.addConstraint(3, 1, 2*PSFSigmaInt); // I0 e [StdBackground,
         * 50*Intensities[i]] Fit.addConstraint(4, -1, StdBackground);
         * Fit.addConstraint(4, 1, 50*XY[3][i]); // PoissonNoise e
         * [BackgroundLevel/3, 3*BackgroundLevel] Fit.addConstraint(5, -1,
         * BackgroundLevel/3); Fit.addConstraint(5, 1, 3*BackgroundLevel);
         */

        solutionMult = Fit.optimize(new MaxEval(maxIter), new ObjectiveFunction(fitFunc), GoalType.MAXIMIZE,
                new InitialGuess(fitFunc.boundedToUnbounded(start)), new MultiDirectionalSimplex(step));
    }

    // Result of minimisation
    // Save the fit results
    this.fit.incrementCounter();
    if (param.fitting == Params.Fitting.CentroidFit) {
        results = start;
    } else {
        results = fitFunc.unboundedToBounded(solutionMult.getPoint());
    }
    for (int i = 0; i < isArgumentFixed.length; i++) {
        if (isArgumentFixed[i]) {
            results[i] = fixedArguments[i];
        }
    }

    if (cycle != -1)
        this.fit.addValue(ResultsTableMt.CYCLE, cycle);
    this.fit.addValue(ResultsTableMt.FRAME, realFrame);
    this.fit.addValue(ResultsTableMt.X0, results[0] + xMax - ((double) roiWidth * param.psfSigmaInt));
    this.fit.addValue(ResultsTableMt.Y0, results[1] + yMax - ((double) roiWidth * param.psfSigmaInt));
    this.fit.addValue(ResultsTableMt.SIGMAX, results[2]);
    this.fit.addValue(ResultsTableMt.SIGMAY, results[3]);
    this.fit.addValue(ResultsTableMt.I0, results[4]);
    this.fit.addValue(ResultsTableMt.NOISE, results[5]);

    if (param.fitting == Params.Fitting.CentroidFit || true) {
        this.fit.addValue(ResultsTableMt.IS_FITTED, 1);
        if (param.fitting != Params.Fitting.CentroidFit) {
            this.fit.addValue("MinFit", solutionMult.getValue());
        }
    } else
        this.fit.addValue(ResultsTableMt.IS_FITTED, 0);

    // Save results
    if (param.debug) {
        DrawInitialRoi(true);
        DrawFit(true);
    }
    return true;
}