Предполагалось, что это возможно (и это обычная практика), но есть препятствие.
Я только что добавил эту документацию:
Реализация пользовательского счета
Для реализации пользовательского счета вам также потребуется реализовать пользовательское ScoreDefinition.Расширьте AbstractScoreDefinition (предпочтительно, скопировав HardAndSoftScoreDefinition или SimpleScoreDefinition) и начните с него.
Далее, подключите пользовательский ScoreDefinition в свой файл SolverConfig.xml:
<scoreDefinition>
<scoreDefinitionClass>org.drools.planner.examples.my.score.definition.MyScoreDefinition</scoreDefinitionClass>
</scoreDefinition>
The Roadblock
Есть контрольно-пропускной пункт, который я исправлю для 5.3 или 5.4:
ScoreDefinitionConfig имеет следующий код:
/**
* @TODO score-in-solution refactor
*/
public ScoreCalculator buildScoreCalculator() {
if (scoreDefinitionType != null) {
switch (scoreDefinitionType) {
case SIMPLE:
return new SimpleScoreCalculator();
case SIMPLE_DOUBLE:
return new SimpleDoubleScoreCalculator();
case HARD_AND_SOFT:
return new DefaultHardAndSoftConstraintScoreCalculator();
default:
throw new IllegalStateException("The scoreDefinitionType (" + scoreDefinitionType
+ ") is not implemented");
}
} else {
return new SimpleScoreCalculator();
}
}
Один из способов справиться с этим - расширить ScoreDefinitionConfig.и перезаписать этот метод, как описано в руководстве в разделе, используя пользовательский селектор, акцептор или сборщик.