List of usage examples for org.apache.commons.math.optimization.direct MultiDirectional MultiDirectional
public MultiDirectional()
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()); }