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

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

Introduction

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

Prototype

public MultiDirectional() 

Source Link

Document

Build a multi-directional optimizer with default coefficients.

Usage

From source file:com.opengamma.analytics.math.minimization.MultiDirectionalSimplexMinimizer.java

/**
 * {@inheritDoc}//from  w w w  . j a  va  2s.c om
 */
@Override
public DoubleMatrix1D minimize(final Function1D<DoubleMatrix1D, Double> f, final DoubleMatrix1D initialPoint) {
    Validate.notNull(f, "function");
    Validate.notNull(initialPoint, "initial point");
    final MultivariateRealOptimizer optimizer = new MultiDirectional();
    final MultivariateRealFunction commons = CommonsMathWrapper.wrapMultivariate(f);
    try {
        return new DoubleMatrix1D(
                CommonsMathWrapper.unwrap(optimizer.optimize(commons, MINIMIZER, initialPoint.getData())));
    } catch (final ConvergenceException e) {
        throw new MathException(e);
    } catch (final FunctionEvaluationException e) {
        throw new MathException(e);
    }
}

From source file:ch.algotrader.simulation.SimulationExecutorImpl.java

/**
 * {@inheritDoc}/*from  w w w .ja v a2  s. co m*/
 */
@Override
public void optimizeMultiParam(final StrategyGroup strategyGroup, final String[] parameters,
        final double[] starts) {

    Validate.notNull(parameters, "Parameter is null");
    Validate.notNull(starts, "Starts is null");

    RealPointValuePair result;
    try {
        MultivariateRealFunction function = new MultivariateFunction(this, strategyGroup, parameters);
        MultivariateRealOptimizer optimizer = new MultiDirectional();
        optimizer.setConvergenceChecker(new SimpleScalarValueChecker(0.0, 0.01));
        result = optimizer.optimize(function, GoalType.MAXIMIZE, starts);
        if (RESULT_LOGGER.isInfoEnabled()) {
            for (int i = 0; i < result.getPoint().length; i++) {
                RESULT_LOGGER.info("optimal value for {}={}", parameters[i],
                        format.format(result.getPoint()[i]));
            }
            RESULT_LOGGER.info("functionValue: {} needed iterations: {})", format.format(result.getValue()),
                    optimizer.getEvaluations());
        }
    } catch (MathException ex) {
        throw new SimulationExecutorException(ex);
    }
}

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  va2  s  . co 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());

}