所以我在drools中创建了一个自定义分数:
public interface MyScore extends Score<MyScore>
并实施了它。但是我看不出如何使用得分。配置有一个
<scoreDefinition>
标记,但是除了SIMPLE或HARD_AND_SOFT以外的任何内容都会产生错误。
如何配置求解程序以使用我创建的分数,文档似乎暗示这是可能的,但不会详细说明。
答案 0 :(得分:3)
这是可能的(也是正常做法),但是有障碍。
我刚刚添加了这个文档:
实施自定义分数
要实现自定义分数,您还需要实现自定义ScoreDefinition。扩展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();
}
}
解决这个问题的一种方法是扩展ScoreDefinitionConfig并覆盖该方法,如使用自定义选择器,接受器或Forager一节中的手册中所述。
答案 1 :(得分:1)
对于我所看到的,可能不支持自定义分数,这是一种耻辱...... 我检查了ScoreDefinitionConfig类,我看到了这个:
switch (scoreDefinitionType) {
case SIMPLE:
return new SimpleScoreDefinition();
case HARD_AND_SOFT:
return new HardAndSoftScoreDefinition();
default:
throw new IllegalStateException("scoreDefinitionType ("
+ scoreDefinitionType + ") not implemented");
所以,除了SIMPLE和HARD_AND_SOFT以外的任何东西都没有削减它......
对此有何见解?
KR, 路易斯