Вопрос:
Есть ли способ написать файл конфигурации решателя, который содержит вставки частей конфигурации из других xml -файлов в Optaplanner?
Объяснение:
Я пытаюсь выполнить несколько довольно сложных тестов производительности с частично очень разными конфигурациями решателя, такими как разные
- этапы локального поиска
- классы фильтров
- наборы правил drool
- et c.
Из-за этого шаблонный способ, показанный в этом тесте, ограничивает видео спасения недостаточно.
Так как XML имеет вставку DTD Entity, я подумал о модульности сложных шаблонов конфигурации и их повторном использовании в разных наборах, но, к сожалению, Optaplanner, похоже, не поддерживает эту функцию при чтении файл конфигурации решателя.
java.lang.IllegalArgumentException: Unmarshalling of benchmarkConfigResource (path/to/my/benchmarkConfig.xml) fails..
...
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.io.StreamException
cause-message :
class : org.optaplanner.core.config.solver.SolverConfig
required-type : org.optaplanner.core.config.solver.SolverConfig
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
line number : 42
class[1] : org.optaplanner.benchmark.config.SolverBenchmarkConfig
class[2] : org.optaplanner.benchmark.config.PlannerBenchmarkConfig
version : 1.4.10
-------------------------------
...
Пример
Идея состоит в том, чтобы иметь каталог файлов conifg примерно так:
|--- benchmarkConfig.xml
|--- header.xml
|--- scoreDirectorFactory_1.xml
|--- scoreDirectorFactory_2.xml
|--- ...
|--- localSearch_tabuSearch.xml
|--- localSearch_hillClimber.xml
|--- ...
И benchmarkConfig.xml
в форме этого
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plannerBenchmark [
<!ENTITY header SYSTEM "header.xml">
<!ENTITY scoreDirectorFactory_1 SYSTEM "scoreDirectorFactory_1.xml">
<!ENTITY scoreDirectorFactory_2 SYSTEM "scoreDirectorFactory_2.xml">
<!ENTITY localSearch_tabuSearch SYSTEM "localSearch_tabuSearch.xml">
<!ENTITY localSearch_hillClimber SYSTEM "localSearch_hillClimber.xml">
]>
<plannerBenchmark>
...
<inheritedSolverBenchmark>
...
<solver>
&header;
</solver>
</inheritedSolverBenchmark>
<solverBenchmark>
<name>SDF1-TabuSearch</name>
&scoreDirectorFactory_1;
<localSearch>
&localSearch_tabuSearch;
</localSearch>
</solverBenchmark>
<solverBenchmark>
<name>SDF1-TabuSearch-HillClimber</name>
&scoreDirectorFactory_1;
<localSearch>
&localSearch_tabuSearch;
</localSearch>
<localSearch>
&localSearch_hillClimber;
</localSearch>
</solverBenchmark>
<solverBenchmark>
<name>SDF1-HillClimber</name>
&scoreDirectorFactory_1;
<localSearch>
&localSearch_hillClimber;
</localSearch>
</solverBenchmark>
<solverBenchmark>
<name>SDF2-TabuSearch</name>
&scoreDirectorFactory_2;
<localSearch>
&localSearch_tabuSearch;
</localSearch>
</solverBenchmark>
...
</plannerBenchmark>
Как будто использование системы эталонных тестов Optaplanner было бы довольно мощным, ИМХО.