Example usage for org.apache.commons.math3.analysis MultivariateFunction MultivariateFunction

List of usage examples for org.apache.commons.math3.analysis MultivariateFunction MultivariateFunction

Introduction

In this page you can find the example usage for org.apache.commons.math3.analysis MultivariateFunction MultivariateFunction.

Prototype

MultivariateFunction

Source Link

Usage

From source file:com.itemanalysis.psychometrics.analysis.AbstractDiffFunction.java

public MultivariateFunction partialDerivative(final int k) {
    return new MultivariateFunction() {
        public double value(double[] point) {
            return gradient(point)[k];
        }/* w  w  w.  j a  v  a 2 s  . c o m*/
    };
}

From source file:eu.crisis_economics.abm.markets.clearing.heterogeneous.LineSearchTest.java

@Test
/**// w ww.  ja  v a  2 s  .  c om
  * Test the Brent line search algorithm by minimizing a one-dimensional
  * cosine function. The starting point of the minimization is the origin,
  * and the maximum distance to travel in the positive x direction is 2*Pi.
  * The expected solution is therefor the local minimum at Pi.
  */
public void testOneDimensionalCosMinimization() {
    final MultivariateFunction meritFunction = new MultivariateFunction() {
        @Override
        public double value(final double[] x) {
            return Math.cos(x[0]);
        }
    };
    final double[] lineDirection = new double[] { 1.0 };
    double distanceToTravel = Math.PI * 2.;
    final LineSearchResult solution = BrentLineSearch.doLineSearch(meritFunction, new double[] { 0.0 },
            lineDirection, distanceToTravel);
    Assert.assertTrue(Math.abs(solution.getEvaluationAtSolution() + 1.) < 1.e-10);
    Assert.assertEquals(solution.getSolutionPoint()[0], Math.PI, 1.e-10);
}

From source file:com.itemanalysis.psychometrics.analysis.AbstractMultivariateFunction.java

public MultivariateFunction partialDerivative(final int k) {
    return new MultivariateFunction() {
        public double value(double[] point) {
            return gradientAt(point)[k];
        }//from   w w w.  jav a2 s .c  o  m
    };
}

From source file:edu.uchc.octane.GaussianFitAstigmatism.java

@Override
public double[] doFit() {
    double[] initParameters;

    if (bPreprocessBg_) {
        initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_, sigma2_, sigma2_ };
    } else {/*from w w w.j a v a2s . c  om*/
        initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_, sigma2_, sigma2_, bg_ };
    }

    PowellOptimizer optimizer = new PowellOptimizer(1e-4, 1e-1);

    MultivariateFunction func = new MultivariateFunction() {
        @Override
        public double value(double[] point) {

            double bg = bPreprocessBg_ ? 0 : point[3];

            double v = 0;

            for (int xi = -windowSize_; xi < windowSize_; xi++) {
                for (int yi = -windowSize_; yi < windowSize_; yi++) {
                    double delta = getValueExcludingBackground(xi, yi, point) + bg - pixelValue(xi, yi);
                    v += delta * delta;
                }
            }
            return v;
        }
    };

    pvp_ = optimizer.optimize(new ObjectiveFunction(func), new InitialGuess(initParameters), new MaxEval(10000),
            GoalType.MINIMIZE);

    //      double sigmax = pvp.getPoint()[3];
    //      double sigmay = pvp.getPoint()[4];
    //      if (calibration_ != null) {
    //         double [] pn = new double[4];
    //         pn[0] = p1_;
    //         pn[1] = p2_;
    //         pn[2] = p3_ + 2 * calibration_[2] * (calibration_[0] - sigmax) + 2 * calibration_[5] * (calibration_[3] - sigmay);
    //         pn[3] = calibration_[1] * (calibration_[0] - sigmax) + calibration_[4] * (calibration_[3] - sigmay);
    //         
    //         Complex [] roots = new LaguerreSolver().solveAllComplex(pn, 0);
    //         
    //         int minIndex = -1;
    //         double minV = Double.MAX_VALUE;
    //         for (int i = 0; i < 3; i ++) {
    //            double v;
    //            if (FastMath.abs(roots[i].getImaginary()) < 1e-7) {
    //               double z = roots[i].getReal(); 
    //               double vx = calibration_[0] + calibration_[1] * z + calibration_[2] * z * z - sigmax;
    //               double vy = calibration_[3] + calibration_[4] * z + calibration_[5] * z * z - sigmay;
    //               v = vx * vx + vy * vy;
    //               if (v < minV) {
    //                  minV = v;
    //                  minIndex = i;
    //               }
    //            }
    //         }
    //         
    //         if (minV > errTol_) {
    //            return null;
    //         }
    //
    //         z_ = roots[minIndex].getReal();
    //      }

    if (calibration_ != null) {
        calculateZ();
    }

    return pvp_.getPoint();
}

From source file:edu.uchc.octane.GaussianFit2D.java

@Override
public double[] doFit() {

    double[] initParameters;

    if (floatingSigma_) {
        if (bPreprocessBg_) {
            initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_, sigma2_ };
        } else {//from w w w . java 2  s.  c  o m
            initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_, bg_, sigma2_ };
        }
    } else {
        if (bPreprocessBg_) {
            initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_ };
        } else {
            initParameters = new double[] { 0, 0, pixelValue(0, 0) - bg_, bg_ };
        }
    }

    PowellOptimizer optimizer = new PowellOptimizer(1e-4, 1e-1);

    MultivariateFunction func = new MultivariateFunction() {
        @Override
        public double value(double[] point) {

            //initParameters = point;
            double bg = bPreprocessBg_ ? 0 : point[3];

            double v = 0;

            for (int xi = -windowSize_; xi < windowSize_; xi++) {
                for (int yi = -windowSize_; yi < windowSize_; yi++) {
                    double delta = getValueExcludingBackground(xi, yi, point) + bg - pixelValue(xi, yi);
                    v += delta * delta;
                }
            }
            return v;
        }
    };

    pvp_ = optimizer.optimize(new ObjectiveFunction(func), new InitialGuess(initParameters), new MaxEval(10000),
            GoalType.MINIMIZE);

    return pvp_.getPoint();
}

From source file:edu.byu.nlp.math.CachedDifferentiableMultivariateFunction.java

/**
 * {@inheritDoc}/*ww w  .j  av  a 2  s.c o  m*/
 */
@Override
public MultivariateFunction partialDerivative(final int i) {
    return new MultivariateFunction() {
        @Override
        public double value(double[] x) {
            return cachedValueSupplier.get(x).getGradient()[i];
        }
    };
}

From source file:eu.crisis_economics.abm.markets.clearing.heterogeneous.LineSearchTest.java

private void testMultiDimensionalQuadraticMinimization(final int numberOfDimensions,
        final double[] startingPoint, final double[] locationOfGlobalMinimum) {
    final MultivariateFunction meritFunction = new MultivariateFunction() {
        @Override/*  w  ww  .jav a2s. c  o m*/
        public double value(final double[] x) {
            double result = 0.;
            for (int i = 0; i < numberOfDimensions; ++i)
                result += (x[i] - locationOfGlobalMinimum[i]) * (x[i] - locationOfGlobalMinimum[i]);
            return result;
        }
    };
    final double[] lineDirection = new double[startingPoint.length];
    double distanceToTravel = 0.;
    for (int i = 0; i < lineDirection.length; ++i) {
        lineDirection[i] = locationOfGlobalMinimum[i] - startingPoint[i];
        distanceToTravel += lineDirection[i] * lineDirection[i];
    }
    distanceToTravel = Math.sqrt(distanceToTravel);
    final LineSearchResult solution = BrentLineSearch.doLineSearch(meritFunction, startingPoint, lineDirection,
            distanceToTravel + 1.);
    Assert.assertTrue(Math.abs(solution.getEvaluationAtSolution()) < 1.e-10);
    for (int i = 0; i < startingPoint.length; ++i)
        Assert.assertEquals(solution.getSolutionPoint()[i], locationOfGlobalMinimum[i], 1.e-10);
}

From source file:net.sf.tweety.math.opt.solver.ApacheCommonsNonLinearConjugateGradientOptimizer.java

@Override
public Map<Variable, Term> solve(ConstraintSatisfactionProblem problem) throws GeneralMathException {
    // only optimization problems
    if (!(problem instanceof OptimizationProblem))
        throw new IllegalArgumentException("Only optimization problems allowed for this solver.");
    OptimizationProblem p = (OptimizationProblem) problem;
    // no constraints allowed
    if (!p.isEmpty())
        throw new IllegalArgumentException(
                "Only optimization problems without constraints allowed for this solver.");
    final Term target = p.getTargetFunction();
    final List<Variable> vars = new ArrayList<Variable>(target.getVariables());
    MultivariateFunction acTarget = new MultivariateFunction() {
        @Override//w  w  w  .  j a v a  2  s. c o m
        public double value(double[] arg0) {
            return target.replaceAllTerms(arg0, vars).doubleValue();
        }
    };
    final Term[] targetGradient = new Term[vars.size()];
    for (int i = 0; i < vars.size(); i++)
        targetGradient[i] = target.derive(vars.get(i));
    MultivariateVectorFunction acTargetGradient = new MultivariateVectorFunction() {
        @Override
        public double[] value(double[] arg0) throws IllegalArgumentException {
            double[] result = new double[arg0.length];
            for (int i = 0; i < arg0.length; i++)
                result[i] = targetGradient[i].replaceAllTerms(arg0, vars).doubleValue();
            return result;
        }
    };
    // create solver
    NonLinearConjugateGradientOptimizer optimizer = new NonLinearConjugateGradientOptimizer(
            NonLinearConjugateGradientOptimizer.Formula.FLETCHER_REEVES,
            new SimplePointChecker<PointValuePair>(this.precision, this.precision));
    double[] s = new double[vars.size()];
    for (int i = 0; i < vars.size(); i++)
        s[i] = 0.5;
    PointValuePair val = optimizer.optimize(new ObjectiveFunction(acTarget),
            new ObjectiveFunctionGradient(acTargetGradient), new InitialGuess(s),
            p.getType() == OptimizationProblem.MAXIMIZE ? GoalType.MAXIMIZE : GoalType.MINIMIZE,
            new MaxEval(this.maxEval));
    Map<Variable, Term> result = new HashMap<Variable, Term>();
    for (int i = 0; i < vars.size(); i++)
        result.put(vars.get(i), new FloatConstant(val.getPoint()[i]));
    return result;
}

From source file:com.itemanalysis.psychometrics.cfa.MaximumLikelihoodEstimation.java

@Override
public MultivariateFunction partialDerivative(final int k) {
    return new MultivariateFunction() {
        public double value(double[] point) {
            return gradientAt(point)[k];
        }//from   w ww  . jav  a2  s. co  m
    };
}

From source file:net.sf.tweety.math.opt.solver.ApacheCommonsCMAESOptimizer.java

@Override
public Map<Variable, Term> solve(ConstraintSatisfactionProblem problem) throws GeneralMathException {
    // only optimization problems
    if (!(problem instanceof OptimizationProblem))
        throw new IllegalArgumentException("Only optimization problems allowed for this solver.");
    OptimizationProblem p = (OptimizationProblem) problem;
    // only box constraints allowed (so far)
    if (!p.isEmpty())
        throw new IllegalArgumentException(
                "Only optimization problems with box constraints on variables allowed for this solver (no other constraints.");
    final List<Variable> vars = new ArrayList<Variable>(p.getTargetFunction().getVariables());
    double[] lb = new double[vars.size()];
    double[] ub = new double[vars.size()];
    double[] s = new double[vars.size()];
    double[] sigma = new double[vars.size()];
    for (int i = 0; i < vars.size(); i++) {
        lb[i] = vars.get(i).getLowerBound();
        ub[i] = vars.get(i).getUpperBound();
        s[i] = (lb[i] + ub[i]) / 2;/*from w w w .j av  a  2 s  .  c  om*/
        sigma[i] = ub[i] - lb[i];
    }
    final Term targetFunction = p.getTargetFunction();
    MultivariateFunction target = new MultivariateFunction() {
        @Override
        public double value(double[] arg0) {
            return targetFunction.replaceAllTerms(arg0, vars).doubleValue();
        }
    };
    // construct solver
    CMAESOptimizer optimizer = new CMAESOptimizer(this.maxIterations, this.stopFitness, this.isActiveCMA,
            this.diagonalOnly, this.checkFeasableCount, new JDKRandomGenerator(), false,
            new SimplePointChecker<PointValuePair>(this.precision, this.precision));
    PointValuePair val = optimizer.optimize(new CMAESOptimizer.Sigma(sigma), new ObjectiveFunction(target),
            new InitialGuess(s),
            p.getType() == OptimizationProblem.MAXIMIZE ? GoalType.MAXIMIZE : GoalType.MINIMIZE,
            new MaxEval(this.maxIterations), new SimpleBounds(lb, ub),
            new CMAESOptimizer.PopulationSize(this.populationSize));
    Map<Variable, Term> result = new HashMap<Variable, Term>();
    for (int i = 0; i < vars.size(); i++)
        result.put(vars.get(i), new FloatConstant(val.getPoint()[i]));
    return result;
}