OptaPlanner基准:使用内存输入解决方案而不是inputSolutionFile

时间:2016-04-21 19:45:34

标签: optaplanner

我正在尝试设置OptaPlanner基准测试运行。从文件加载problemBenchmarks被证明是有问题的,因为我的很多类都不可序列化。要使其发挥作用需要大量的工作。

有没有办法使用我在启动正常计划程序运行时使用的相同未解决的解决方案来运行基准测试,这已经由我现有的Java代码构建了?如果能以某种方式起作用,那么启动基准测试将是微不足道的。

我在OptaPlanner benchmarking without XML inputSolutionFile找到了部分解决方案。

通过编写SolutionFileIO的实现并使用静态变量传递已经创建的未解决的解决方案,我能够完成这项工作。

这项工作能力有限。

有没有办法直接在PlannerBenchmarkFactory或PlannerBenchmark上设置未解决的解决方案,这样我就不必使用静态变量?

1 个答案:

答案 0 :(得分:1)

是的,只需创建一个文本文件,例如input1.txt,它是空的或只包含1行标识符。然后实现SolutionFileIO

public class MachineReassignmentFileIO implements SolutionFileIO<MachineReassignment> {

    public static final String FILE_EXTENSION = "txt";

    @Override
    public String getInputFileExtension() {
        return FILE_EXTENSION;
    }

    @Override
    public String getOutputFileExtension() {
        return FILE_EXTENSION;
    }

    @Override
    public MachineReassignment read(File inputSolutionFile) {
        // Ignore the inputSolutionFile or just read the id
        return ... // Create your solution manually
    }

    @Override
    public void write(MachineReassignment solution, File outputSolutionFile) {
        throw new UnsupportedOperationException();
    }

}

然后只需配置

<problemBenchmarks>
  <solutionFileIOClass>org...MachineReassignmentFileIO</solutionFileIOClass>
  <inputSolutionFile>data/machinereassignment/import/input1.txt</inputSolutionFile>
  <problemStatisticType>BEST_SCORE</problemStatisticType>
</problemBenchmarks>