/* * Copyright 2010 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.optaplanner.benchmark.impl.statistic.bestscore; import java.util.List; import org.optaplanner.benchmark.config.statistic.ProblemStatisticType; import org.optaplanner.benchmark.impl.result.SubSingleBenchmarkResult; import org.optaplanner.benchmark.impl.statistic.ProblemBasedSubSingleStatistic; import org.optaplanner.core.api.solver.Solver; import org.optaplanner.core.api.solver.event.BestSolutionChangedEvent; import org.optaplanner.core.api.solver.event.SolverEventListener; import org.optaplanner.core.impl.score.definition.ScoreDefinition; public class BestScoreSubSingleStatistic<Solution_> extends ProblemBasedSubSingleStatistic<Solution_, BestScoreStatisticPoint> { private final BestScoreSubSingleStatisticListener listener; public BestScoreSubSingleStatistic(SubSingleBenchmarkResult subSingleBenchmarkResult) { super(subSingleBenchmarkResult, ProblemStatisticType.BEST_SCORE); listener = new BestScoreSubSingleStatisticListener(); } // ************************************************************************ // Lifecycle methods // ************************************************************************ @Override public void open(Solver<Solution_> solver) { solver.addEventListener(listener); } @Override public void close(Solver<Solution_> solver) { solver.removeEventListener(listener); } private class BestScoreSubSingleStatisticListener implements SolverEventListener<Solution_> { @Override public void bestSolutionChanged(BestSolutionChangedEvent<Solution_> event) { pointList.add(new BestScoreStatisticPoint(event.getTimeMillisSpent(), event.getNewBestScore())); } } // ************************************************************************ // CSV methods // ************************************************************************ @Override protected String getCsvHeader() { return BestScoreStatisticPoint.buildCsvLine("timeMillisSpent", "score"); } @Override protected BestScoreStatisticPoint createPointFromCsvLine(ScoreDefinition scoreDefinition, List<String> csvLine) { return new BestScoreStatisticPoint(Long.parseLong(csvLine.get(0)), scoreDefinition.parseScore(csvLine.get(1))); } }