Слюни Создание пользовательского счета - PullRequest
1 голос
/ 08 июля 2011

Итак, я создал пользовательский счет в слюнях:

public interface MyScore extends Score<MyScore>

и реализовали его. Однако я не вижу, как использовать счет. Конфиг имеет

<scoreDefinition>

, но помещая что-либо внутри этого, кроме SIMPLE или HARD_AND_SOFT, выдает ошибку.

Как я могу настроить решатель для использования созданного мной счета, документы, похоже, подразумевают, что это возможно, но не вдаваться в детали.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Предполагалось, что это возможно (и это обычная практика), но есть препятствие.

Я только что добавил эту документацию:

Реализация пользовательского счета

Для реализации пользовательского счета вам также потребуется реализовать пользовательское ScoreDefinition.Расширьте AbstractScoreDefinition (предпочтительно, скопировав HardAndSoftScoreDefinition или SimpleScoreDefinition) и начните с него.

Далее, подключите пользовательский ScoreDefinition в свой файл SolverConfig.xml:

<scoreDefinition>
    <scoreDefinitionClass>org.drools.planner.examples.my.score.definition.MyScoreDefinition</scoreDefinitionClass>
</scoreDefinition>

The Roadblock

Есть контрольно-пропускной пункт, который я исправлю для 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.и перезаписать этот метод, как описано в руководстве в разделе, используя пользовательский селектор, акцептор или сборщик.

1 голос
/ 15 июля 2011

Насколько я мог видеть, не могло быть никакой поддержки пользовательских оценок, что является позором ... Я проверил класс 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, Луис

...