List of usage examples for org.apache.commons.math3.optim ConvergenceChecker ConvergenceChecker
ConvergenceChecker
From source file:eu.europeana.querylog.learn.Evaluate.java
/** * Performs the CMA learning algorithm./*from w ww . j av a 2 s . com*/ */ public String learningToRankWithCMAES() { startTime = System.currentTimeMillis(); pool = Executors.newFixedThreadPool(properties.getInt("bm25f.learn.concurrency")); try { final int dim = bm25fParams.length; int lambda = 4 + (int) (3. * Math.log(dim)); int maxEvaluations = 1800; double[] inSigma = floatArrayToDouble(getParamsVector(0.5f, 0.5f, 0.25f)); CMAESOptimizer optim = new CMAESOptimizer(maxEvaluations / 10, 1.0, false, 0, 10, new MersenneTwister(), true, new ConvergenceChecker<PointValuePair>() { @Override public boolean converged(int iteration, PointValuePair previous, PointValuePair pv) { maxValue = new Point(doubleArrayToFloat(pv.getFirst()), pv.getSecond().floatValue()); writeLogFile(); logger.info("{}", maxValue); return false; } }); PointValuePair pv = optim.optimize(new MaxEval(maxEvaluations), new ObjectiveFunction(new MultivariateFunction() { @Override public double value(double[] point) { return evaluateAssessments(doubleArrayToFloat(point)); } }), GoalType.MAXIMIZE, new SimpleBounds(floatArrayToDouble(minValues), floatArrayToDouble(maxValues)), new InitialGuess(floatArrayToDouble(bm25fParams)), new CMAESOptimizer.Sigma(inSigma), new CMAESOptimizer.PopulationSize(lambda)); maxValue = new Point(doubleArrayToFloat(pv.getFirst()), pv.getSecond().floatValue()); writeLogFile(); logger.info("final value: \n{}", maxValue); return paramsToXML(); } finally { pool.shutdown(); pool = null; } }