Example usage for org.apache.commons.math3.genetics Population iterator

List of usage examples for org.apache.commons.math3.genetics Population iterator

Introduction

In this page you can find the example usage for org.apache.commons.math3.genetics Population iterator.

Prototype

Iterator<T> iterator();

Source Link

Document

Returns an iterator over elements of type T .

Usage

From source file:it.units.malelab.sse.MyGeneticAlgorithm.java

@Override
public Population evolve(Population initial, StoppingCondition condition) {
    Population current = initial;
    generationsEvolved = 0;/*w w  w  .  j a  v  a  2s.co  m*/
    while (!condition.isSatisfied(current)) {
        current = nextGeneration(current);
        generationsEvolved++;
        //obtain stats
        List<EnumMap<Evaluator.ResultType, Double>> statsList = new ArrayList<>(current.getPopulationSize());
        Iterator<Chromosome> iterator = current.iterator();
        while (iterator.hasNext()) {
            OperationsChromosome chromosome = (OperationsChromosome) iterator.next();
            EnumMap<Evaluator.ResultType, Double> stats = chromosome.getStats();
            if (stats.containsKey(Evaluator.ResultType.OVERLAPNESS)) {
                statsList.add(stats);
            }
        }
        Collections.sort(statsList, new Comparator<EnumMap<Evaluator.ResultType, Double>>() {
            @Override
            public int compare(EnumMap<Evaluator.ResultType, Double> stats1,
                    EnumMap<Evaluator.ResultType, Double> stats2) {
                return Double.compare(stats1.get(Evaluator.ResultType.OVERLAPNESS),
                        stats2.get(Evaluator.ResultType.OVERLAPNESS));
            }
        });
        EnumMap<Evaluator.ResultType, Double> bestStats = statsList.get(0);
        EnumMap<Evaluator.ResultType, Double> top10Stats = mean(statsList.subList(0, 10));
        EnumMap<Evaluator.ResultType, Double> allStats = mean(statsList);
        System.out.printf("ovp=%5.3f/%5.3f/%5.3f   ", bestStats.get(Evaluator.ResultType.OVERLAPNESS),
                top10Stats.get(Evaluator.ResultType.OVERLAPNESS),
                allStats.get(Evaluator.ResultType.OVERLAPNESS));
        System.out.printf("ops=%4.0f/%4.0f/%4.0f   ", bestStats.get(Evaluator.ResultType.AVG_OPS),
                top10Stats.get(Evaluator.ResultType.AVG_OPS), allStats.get(Evaluator.ResultType.AVG_OPS));
        System.out.printf("mfp=%4.0f/%4.0f/%4.0f   ", bestStats.get(Evaluator.ResultType.AVG_FOOTPRINT),
                top10Stats.get(Evaluator.ResultType.AVG_FOOTPRINT),
                allStats.get(Evaluator.ResultType.AVG_FOOTPRINT));
        System.out.printf("err=%5.3f/%5.3f/%5.3f   ", bestStats.get(Evaluator.ResultType.ERROR_RATIO),
                top10Stats.get(Evaluator.ResultType.ERROR_RATIO),
                allStats.get(Evaluator.ResultType.ERROR_RATIO));
        System.out.printf("size=%3.0f/%3.0f/%3.0f   ", bestStats.get(Evaluator.ResultType.SIZE),
                top10Stats.get(Evaluator.ResultType.SIZE), allStats.get(Evaluator.ResultType.SIZE));
        System.out.printf("evals=%8d\n", evaluator.getEvaluatedCount());
        //System.out.println(evaluator.getErrorCodes());
    }
    return current;
}