com.opengamma.analytics.math.minimization.MultiDirectionalSimplexMinimizer.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.math.minimization.MultiDirectionalSimplexMinimizer.java

Source

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 * 
 * Please see distribution for license.
 */
package com.opengamma.analytics.math.minimization;

import org.apache.commons.lang.Validate;
import org.apache.commons.math.ConvergenceException;
import org.apache.commons.math.FunctionEvaluationException;
import org.apache.commons.math.analysis.MultivariateRealFunction;
import org.apache.commons.math.optimization.GoalType;
import org.apache.commons.math.optimization.MultivariateRealOptimizer;
import org.apache.commons.math.optimization.direct.MultiDirectional;

import com.opengamma.analytics.math.MathException;
import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.analytics.math.matrix.DoubleMatrix1D;
import com.opengamma.analytics.math.util.wrapper.CommonsMathWrapper;

/**
 * This class is a wrapper for the <a href="http://commons.apache.org/math/api-2.1/org/apache/commons/math/optimization/direct/MultiDirectional.html">Commons Math library implementation</a>
 * of the multi-directional direct search method.
 */
public class MultiDirectionalSimplexMinimizer
        implements Minimizer<Function1D<DoubleMatrix1D, Double>, DoubleMatrix1D> {
    private static final GoalType MINIMIZER = GoalType.MINIMIZE;

    /**
     * {@inheritDoc}
     */
    @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);
        }
    }

}