List<XYPlot> plotList = new ArrayList<XYPlot>(BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE);
int seriesIndex = 0;
for (SingleBenchmarkResult singleBenchmarkResult : problemBenchmarkResult.getSingleBenchmarkResultList()) {
List<XYSeries> seriesList = new ArrayList<XYSeries>(BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE);
// No direct ascending lines between 2 points, but a stepping line instead
XYItemRenderer renderer = new XYStepRenderer();
if (singleBenchmarkResult.isSuccess()) {
BestScoreSingleStatistic singleStatistic = (BestScoreSingleStatistic)
singleBenchmarkResult.getSingleStatistic(problemStatisticType);
for (BestScoreStatisticPoint point : singleStatistic.getPointList()) {
long timeMillisSpent = point.getTimeMillisSpent();
double[] levelValues = ScoreUtils.extractLevelDoubles(point.getScore());
for (int i = 0; i < levelValues.length && i < BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE; i++) {
if (i >= seriesList.size()) {
seriesList.add(new XYSeries(
singleBenchmarkResult.getSolverBenchmarkResult().getNameWithFavoriteSuffix()));
}
seriesList.get(i).add(timeMillisSpent, levelValues[i]);
}
}
// TODO if startingSolution is initialized and no improvement is made, a horizontal line should be shown
// Draw a horizontal line from the last new best step to how long the solver actually ran
long timeMillisSpent = singleBenchmarkResult.getTimeMillisSpent();
double[] bestScoreLevels = ScoreUtils.extractLevelDoubles(singleBenchmarkResult.getScore());
for (int i = 0; i < bestScoreLevels.length && i < BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE; i++) {
if (i >= seriesList.size()) {
seriesList.add(new XYSeries(
singleBenchmarkResult.getSolverBenchmarkResult().getNameWithFavoriteSuffix()));
}
seriesList.get(i).add(timeMillisSpent, bestScoreLevels[i]);
}
if (singleStatistic.getPointList().size() <= 1) {
// Workaround for https://sourceforge.net/tracker/?func=detail&aid=3387330&group_id=15494&atid=115494
renderer = new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES_AND_LINES);
}
}
if (singleBenchmarkResult.getSolverBenchmarkResult().isFavorite()) {
// Make the favorite more obvious
renderer.setSeriesStroke(0, new BasicStroke(2.0f));
}
for (int i = 0; i < seriesList.size(); i++) {
if (i >= plotList.size()) {
plotList.add(createPlot(benchmarkReport, i));
}