Example usage for org.apache.commons.math3.optim ConvergenceChecker ConvergenceChecker

List of usage examples for org.apache.commons.math3.optim ConvergenceChecker ConvergenceChecker

Introduction

In this page you can find the example usage for org.apache.commons.math3.optim ConvergenceChecker ConvergenceChecker.

Prototype

ConvergenceChecker

Source Link

Usage

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;
    }
}