Example usage for org.apache.commons.math.optimization.direct MultiDirectional optimize

List of usage examples for org.apache.commons.math.optimization.direct MultiDirectional optimize

Introduction

In this page you can find the example usage for org.apache.commons.math.optimization.direct MultiDirectional optimize.

Prototype

public RealPointValuePair optimize(final MultivariateRealFunction function, final GoalType goalType,
        final double[] startPoint)
        throws FunctionEvaluationException, OptimizationException, IllegalArgumentException 

Source Link

Usage

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

@Override
public void optimize(IDataset[] coords, IDataset data, final IFunction function) throws Exception {

    // Pull out the data which is required from the inputs
    final int numCoords = coords.length;
    final DoubleDataset[] newCoords = new DoubleDataset[numCoords];
    for (int i = 0; i < numCoords; i++) {
        newCoords[i] = (DoubleDataset) DatasetUtils.convertToAbstractDataset(coords[i])
                .cast(AbstractDataset.FLOAT64);
    }//  w w  w. j  a v  a2  s  .c  o m

    final DoubleDataset values = (DoubleDataset) DatasetUtils.convertToAbstractDataset(data)
            .cast(AbstractDataset.FLOAT64);

    // create an instance of the fitter
    MultiDirectional md = new MultiDirectional();

    // provide the fitting function which wrappers all the normal fitting functionality
    MultivariateRealFunction f1 = new MultivariateRealFunction() {

        @Override
        public double value(double[] arg0) throws FunctionEvaluationException, IllegalArgumentException {
            function.setParameterValues(arg0);
            return function.residual(true, values, newCoords);
        }
    };

    double[] start = function.getParameterValues();

    // preform the optimisation
    RealPointValuePair result = md.optimize(f1, GoalType.MINIMIZE, start);

    // set the input functions parameters to be the result before finishing.
    function.setParameterValues(result.getPoint());

}