2016-04-21 38 views
0

OptaPlannerベンチマークの実行を設定しようとしています。多くのクラスが直列化できないので、ファイルからproblemBenchmarksをロードすることは問題があることが判明しています。それを機能させるには多くの作業が必要です。OptaPlannerベンチマーク:inputSolutionFileの代わりにインメモリ入力ソリューションを使用

既存のJavaコードで既に構築されている通常のプランナーを起動するときに使用するのと同じ未解決のソリューションを使用してベンチマークを実行する方法はありますか?それが何らかの形でうまくいくなら、ベンチマークを始めることは自明であろう。

OptaPlanner benchmarking without XML inputSolutionFileの部分解が見つかりました。

私は、SolutionFileIOの実装をコーディングし、静的変数を使用して既に作成された未解決のソリューションを渡すことで、その作業を行うことができました。

これは限られた容量で動作します。

未解決のソリューションをPlannerBenchmarkFactoryまたはPlannerBenchmarkに直接設定する方法はありますか。静的変数を使用する必要はありませんか?

答えて

1

はい、テキストファイルを作成してください。たとえば、input1.txtが空であるか、1行の識別子しか含まれていません。それからちょうど

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

(少なくとも私の状況では)そのアプローチに問題がMachineReassignmentFileIOがデフォルト引数なしのコンストラクタでインスタンス化されていることであることを設定し、その後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(); } } 

を実装します。このようにインスタンス化されたクラスのインスタンスは、ソリューションを作成するために必要なさまざまな構造体にアクセスすることができません。 私は現在、MachineReassignmentFileIOの静的変数を使用して、必要なものを渡していますが、うまく動作しますが、それほど優れていません。私は、スレッドローカル変数を使用することができると思うが、それは静的よりはるかに優れていません。 – Mitch

+0

興味深い点は、このためにジラを自由に開いてください。 inputFileSolution要素の代替手段をサポートする必要があると思います –

+1

完了、https://issues.jboss.org/browse/PLANNER-568を参照してください – Mitch

関連する問題