1

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

public interface MyScore extends Score<MyScore>

并已实施。但是我看不到如何使用分数。配置有一个

<scoreDefinition>

标记,但将除 SIMPLE 或 HARD_AND_SOFT 之外的任何内容放入其中会产生错误。

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

4

2 回答 2

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 并覆盖该方法,如手册中使用自定义选择器、接受器或觅食者一节中所述。

于 2011-07-29T12:10:27.460 回答
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,路易斯

于 2011-07-15T14:08:29.230 回答