所以我在Drools中創建一個自定義的分數:Drools中創建自定義分數
public interface MyScore extends Score<MyScore>
,並已付諸實施。但是我看不到如何使用分數。該配置有一個
<scoreDefinition>
標記,但將任何東西放在SIMPLE或HARD_AND_SOFT以外的其他東西會產生一個錯誤。
如何配置求解器以使用我創建的分數,文檔似乎暗示這是可能的,但不會涉及任何細節。
所以我在Drools中創建一個自定義的分數:Drools中創建自定義分數
public interface MyScore extends Score<MyScore>
,並已付諸實施。但是我看不到如何使用分數。該配置有一個
<scoreDefinition>
標記,但將任何東西放在SIMPLE或HARD_AND_SOFT以外的其他東西會產生一個錯誤。
如何配置求解器以使用我創建的分數,文檔似乎暗示這是可能的,但不會涉及任何細節。
這本來是可能的(通常的做法),但有一個障礙。
我只是說這個文件:
實現自定義分數
要實現自定義分數,您還將需要實現自定義ScoreDefinition。擴展AbstractScoreDefinition(最好通過複製粘貼HardAndSoftScoreDefinition或SimpleScoreDefinition)並從那裏開始。
接下來,鉤你定製ScoreDefinition在SolverConfig.xml:
<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並覆蓋該方法,如使用自定義選擇器,Acceptor或Forager一節中的手冊中所述。
爲了什麼我可以看到,有可能是定製的分數不支持,這是一種恥辱...... 我檢查了ScoreDefinitionConfig類,我看到這一點:
switch (scoreDefinitionType) {
case SIMPLE:
return new SimpleScoreDefinition();
case HARD_AND_SOFT:
return new HardAndSoftScoreDefinition();
default:
throw new IllegalStateException("scoreDefinitionType ("
+ scoreDefinitionType + ") not implemented");
所以,任何事情不是簡單其他和HARD_AND_SOFT不會削減它...
對此的任何見解?
KR, 路易斯
ScoreDefinitionConfig有一個'scoreDefinitionType'的替代方法,它是'scoreDefinitionClass',它是用於使用自定義分數的。查看其他答案。 –
以下是跟蹤的問題:https://issues.jboss.org/browse/JBRULES-3160 –