List of usage examples for org.apache.commons.math3.analysis MultivariateFunction MultivariateFunction
MultivariateFunction
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; }