Drools Создание пользовательского счета

Итак, я создал собственный счет в слюнях:

public interface MyScore extends Score<MyScore>

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

<scoreDefinition>

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

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


person Jim    schedule 08.07.2011    source источник


Ответы (2)


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

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

Реализация пользовательской оценки

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

person Geoffrey De Smet    schedule 29.07.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, не подходит...

Любые идеи по этому поводу?

КР, Луис

person Luis    schedule 15.07.2011
comment
ScoreDefinitionConfig имеет альтернативу scoreDefinitionType, то есть scoreDefinitionClass, предназначенную для использования пользовательских оценок. Смотрите другой ответ. - person Geoffrey De Smet; 29.07.2011