1

だから私はdroolsでカスタムスコアを作成しました:

public interface MyScore extends Score<MyScore>

そしてそれを実装しました。しかし、スコアの使い方がわかりません。構成には

<scoreDefinition>

タグを付けますが、SIMPLEまたはHARD_AND_SOFT以外のものをこの中に入れると、エラーが発生します。

作成したスコアを使用するようにソルバーを構成するにはどうすればよいですか。ドキュメントでは、これが可能であると示唆されているようですが、詳細については説明していません。

4

2 に答える 2

3

これは可能である(そして通常の慣行である)ことを意図していましたが、障害があります。

このドキュメントを追加しました:

カスタムスコアの実装

カスタムスコアを実装するには、カスタムスコア定義も実装する必要があります。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();
    }
}

これに対処する1つの方法は、ScoreDefinitionConfigを拡張し、そのメソッドを上書きすることです。これは、カスタムSelector、Acceptor、またはForagerを使用するセクションのマニュアルで説明されています。

于 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 に答える