2011-07-08 69 views
1

所以我在Drools中創建一個自定義的分數:Drools中創建自定義分數

public interface MyScore extends Score<MyScore> 

,並已付諸實施。但是我看不到如何使用分數。該配置有一個

<scoreDefinition> 

標記,但將任何東西放在SIMPLE或HARD_AND_SOFT以外的其他東西會產生一個錯誤。

如何配置求解器以使用我創建的分數,文檔似乎暗示這是可能的,但不會涉及任何細節。

回答

3

這本來是可能的(通常的做法),但有一個障礙。

我只是說這個文件:

實現自定義分數

要實現自定義分數,您還將需要實現自定義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一節中的手冊中所述。

+0

以下是跟蹤的問題:https://issues.jboss.org/browse/JBRULES-3160 –

1

爲了什麼我可以看到,有可能是定製的分數不支持,這是一種恥辱...... 我檢查了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, 路易斯

+0

ScoreDefinitionConfig有一個'scoreDefinitionType'的替代方法,它是'scoreDefinitionClass',它是用於使用自定義分數的。查看其他答案。 –