これは可能である(そして通常の慣行である)ことを意図していましたが、障害があります。
このドキュメントを追加しました:
カスタムスコアの実装
カスタムスコアを実装するには、カスタムスコア定義も実装する必要があります。AbstractScoreDefinitionを拡張し(HardAndSoftScoreDefinitionまたはSimpleScoreDefinitionをコピーして貼り付けることをお勧めします)、そこから開始します。
次に、SolverConfig.xmlでカスタムScoreDefinitionをフックします。
<scoreDefinition>
<scoreDefinitionClass>org.drools.planner.examples.my.score.definition.MyScoreDefinition</scoreDefinitionClass>
</scoreDefinition>
障害物
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();
}
}
これに対処する1つの方法は、ScoreDefinitionConfigを拡張し、そのメソッドを上書きすることです。これは、カスタムSelector、Acceptor、またはForagerを使用するセクションのマニュアルで説明されています。