You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Timefold中使用Benchmark Aggregator聚合基准测试结果并生成综合报告?

如何在Timefold中使用Benchmark Aggregator聚合基准测试结果并生成综合报告?

我来一步步帮你解决这个问题,包括如何正确调用aggregate()方法、处理所需的参数,以及适配Web应用的解决方案。

一、核心问题:获取aggregate()方法所需的参数

你困惑的两个参数本质上是用来提供待聚合的原始基准测试结果,以及给求解器结果关联友好名称的映射。下面是具体的获取和构建方式:

1. 加载所有SingleBenchmarkResult

Timefold的基准测试会在输出目录的子目录中生成单个基准测试结果文件(默认是singleBenchmarkResult.xml)。你需要遍历基准测试输出目录,读取每个子目录中的这个文件,构建List<SingleBenchmarkResult>:

import ai.timefold.benchmark.result.SingleBenchmarkResult;
import ai.timefold.benchmark.result.io.XmlBenchmarkResultIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

// 从基准配置中获取输出目录
File benchmarkOutputDir = new File(benchmarkConfig.getBenchmarkDirectory());
XmlBenchmarkResultIO resultIO = new XmlBenchmarkResultIO();
List<SingleBenchmarkResult> singleBenchmarkResultList = new ArrayList<>();

// 遍历输出目录下的所有子目录(每个子目录对应一个SingleBenchmarkResult)
File[] resultDirs = benchmarkOutputDir.listFiles(File::isDirectory);
if (resultDirs != null) {
    for (File resultDir : resultDirs) {
        File resultFile = new File(resultDir, "singleBenchmarkResult.xml");
        if (resultFile.exists()) {
            try (FileInputStream fis = new FileInputStream(resultFile)) {
                SingleBenchmarkResult result = resultIO.read(fis);
                singleBenchmarkResultList.add(result);
            } catch (IOException e) {
                // 处理读取错误,比如日志记录
                e.printStackTrace();
            }
        }
    }
}

2. 构建solverBenchmarkResultNameMap

这个Map是为了给每个SolverBenchmarkResult关联一个可识别的名称(比如求解器的配置名),方便在报告中展示。你可以从已加载的SingleBenchmarkResult中提取相关信息来构建:

import ai.timefold.benchmark.result.SolverBenchmarkResult;
import java.util.HashMap;
import java.util.Map;

Map<SolverBenchmarkResult, String> solverBenchmarkResultNameMap = new HashMap<>();
for (SingleBenchmarkResult result : singleBenchmarkResultList) {
    SolverBenchmarkResult solverResult = result.getSolverBenchmarkResult();
    // 这里可以用求解器的原生名称,或者自定义业务友好的名称
    solverBenchmarkResultNameMap.put(solverResult, solverResult.getName());
}

二、调用aggregate()并生成可用于Web的报告

现在你有了所需的两个参数,可以调用aggregate()方法,然后生成适合Web应用的HTML报告(替代Swing GUI):

import ai.timefold.benchmark.aggregator.AggregatedBenchmarkResult;
import ai.timefold.benchmark.aggregator.BenchmarkAggregator;
import ai.timefold.benchmark.report.AggregatedBenchmarkReport;
import java.io.File;
import java.io.IOException;

// 初始化BenchmarkAggregator(复用你已有的代码)
BenchmarkAggregator benchmarkAggregator = new BenchmarkAggregator();
benchmarkAggregator.setBenchmarkDirectory(benchmarkConfig.getBenchmarkDirectory());
BenchmarkReportConfig benchmarkReportConfig = benchmarkConfig.getBenchmarkReportConfig();
if (benchmarkReportConfig != null) {
    benchmarkReportConfig = new BenchmarkReportConfig(benchmarkReportConfig);
} else {
    benchmarkReportConfig = new BenchmarkReportConfig();
}
benchmarkAggregator.setBenchmarkReportConfig(benchmarkReportConfig);

// 执行聚合操作
AggregatedBenchmarkResult aggregatedResult = benchmarkAggregator.aggregate(
        singleBenchmarkResultList,
        solverBenchmarkResultNameMap
);

// 生成HTML报告(适合Web应用展示)
File reportOutputDir = new File(benchmarkConfig.getBenchmarkDirectory(), "aggregated-web-report");
if (!reportOutputDir.exists()) {
    reportOutputDir.mkdirs();
}
AggregatedBenchmarkReport.generateHtmlReport(aggregatedResult, reportOutputDir);

生成的HTML报告位于aggregated-web-report目录下,你的Web应用可以:

  • 直接提供这个HTML文件的静态访问路径
  • 解析AggregatedBenchmarkResult中的数据结构,将其序列化为JSON后,用前端框架(React、Vue等)构建自定义的可视化页面(比如对比图表、统计表格)

三、关于Web应用的扩展建议

目前Timefold官方没有提供专门的Web版基准测试聚合UI,但你可以基于上述方案扩展:

  1. HTML报告嵌入:将生成的HTML报告嵌入到Web应用的iframe中,或者作为静态资源直接访问。
  2. 自定义Web可视化:AggregatedBenchmarkResult包含了所有聚合后的核心数据(比如getSolverBenchmarkResultList()获取所有求解器结果、getProblemBenchmarkResultList()获取所有问题基准结果),你可以基于这些数据构建完全贴合业务需求的Web界面。
  3. 官方功能请求:如果你希望官方支持Web版聚合功能,可以在Timefold的GitHub仓库提交Feature Request,团队会评估需求优先级。

四、完整流程总结

  1. 从基准测试输出目录加载所有SingleBenchmarkResult
  2. 构建求解器结果与友好名称的映射
  3. 调用aggregate()得到聚合后的基准结果
  4. 生成HTML报告(或解析数据用于自定义Web展示)

这样就能在不依赖Swing GUI的情况下,完成基准测试结果的聚合,并完美适配你的全栈Web应用。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:43:09