List<XYPlot> plotList = new ArrayList<XYPlot>(BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE);
int seriesIndex = 0;
for (SingleBenchmark singleBenchmark : problemBenchmark.getSingleBenchmarkList()) {
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 (singleBenchmark.isSuccess()) {
BestScoreSingleStatistic singleStatistic = (BestScoreSingleStatistic)
singleBenchmark.getSingleStatistic(problemStatisticType);
for (BestScoreSingleStatisticPoint point : singleStatistic.getPointList()) {
long timeMillisSpend = point.getTimeMillisSpend();
double[] levelValues = point.getScore().toDoubleLevels();
for (int i = 0; i < levelValues.length && i < BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE; i++) {
if (i >= seriesList.size()) {
seriesList.add(new XYSeries(
singleBenchmark.getSolverBenchmark().getNameWithFavoriteSuffix()));
}
seriesList.get(i).add(timeMillisSpend, 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 timeMillisSpend = singleBenchmark.getTimeMillisSpend();
double[] bestScoreLevels = singleBenchmark.getScore().toDoubleLevels();
for (int i = 0; i < bestScoreLevels.length && i < BenchmarkReport.CHARTED_SCORE_LEVEL_SIZE; i++) {
if (i >= seriesList.size()) {
seriesList.add(new XYSeries(
singleBenchmark.getSolverBenchmark().getNameWithFavoriteSuffix()));
}
seriesList.get(i).add(timeMillisSpend, 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 (singleBenchmark.getSolverBenchmark().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(i));
}