solutionDirector.setSolutionDescriptor(solutionDescriptor);
solutionDirector.setRuleBase(buildRuleBase());
ScoreDefinition scoreDefinition = scoreDefinitionConfig.buildScoreDefinition();
solutionDirector.setScoreDefinition(scoreDefinition);
solver.setSolutionDirector(solutionDirector);
Termination termination = terminationConfig.buildTermination(scoreDefinition, basicPlumbingTermination);
solver.setTermination(termination);
BestSolutionRecaller bestSolutionRecaller = new BestSolutionRecaller();
solver.setBestSolutionRecaller(bestSolutionRecaller);
if (solverPhaseConfigList == null || solverPhaseConfigList.isEmpty()) {
throw new IllegalArgumentException(