Drools创建自定义分数

时间:2011-07-08 13:18:16

标签: drools drools-planner

所以我在drools中创建了一个自定义分数:

public interface MyScore extends Score<MyScore>

并实施了它。但是我看不出如何使用得分。配置有一个

<scoreDefinition>

标记,但是除了SIMPLE或HARD_AND_SOFT以外的任何内容都会产生错误。

如何配置求解程序以使用我创建的分数,文档似乎暗示这是可能的,但不会详细说明。

2 个答案:

答案 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, 路易斯