The Benchmarker allows you to play out different solver configurations against each other, so you can determine the best one for your problem domain. It's pretty easy to use:
XmlSolverBenchmarker benchmarker = new XmlSolverBenchmarker();
benchmarker.configure(".../nqueensSolverBenchmarkConfig.xml");
benchmarker.benchmark();
benchmarker.writeResults(resultFile);
This benchmark configuration will run 3 different solvers on 2 datasets, so it will do 6 solver runs:
<?xml version="1.0" encoding="UTF-8"?>
<solverBenchmarkSuite>
<solvedSolutionFilesDirectory>local/data/nqueens/solved</solvedSolutionFilesDirectory>
<inheritedUnsolvedSolutionFile>data/nqueens/unsolved/unsolvedNQueens32.xml</inheritedUnsolvedSolutionFile>
<inheritedUnsolvedSolutionFile>data/nqueens/unsolved/unsolvedNQueens64.xml</inheritedUnsolvedSolutionFile>
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/solver/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl>
<scoreDefinition>
<scoreDefinitionType>SIMPLE</scoreDefinitionType>
</scoreDefinition>
<finish>
<maximumSecondsSpend>20</maximumSecondsSpend>
</finish>
<selector>
<moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
</selector>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
</forager>
</inheritedLocalSearchSolver>
<solverBenchmark>
<localSearchSolver>
<accepter>
<completeSolutionTabuSize>1000</completeSolutionTabuSize>
</accepter>
</localSearchSolver>
</solverBenchmark>
<solverBenchmark>
<localSearchSolver>
<accepter>
<completeMoveTabuSize>7</completeMoveTabuSize>
</accepter>
</localSearchSolver>
</solverBenchmark>
<solverBenchmark>
<localSearchSolver>
<accepter>
<completeSolutionTabuSize>1000</completeSolutionTabuSize>
<completeMoveTabuSize>7</completeMoveTabuSize>
</accepter>
</localSearchSolver>
</solverBenchmark>
</solverBenchmarkSuite>
Afterwards, it will sort the solvers and write their results to the resultFile.

No comments:
Post a comment