第11章 InitializingScoreTrend クラス

InitializingScoreTrend クラスを最適化アルゴリズムに追加して、追加の変数が初期化され、すでに初期化された変数が変化しないときにスコアがどのように変化するかを指定できます。構築ヒューリスティックや徹底的な検索などの一部の最適化アルゴリズムは、この情報が利用可能な場合に高速に実行されます。

スコアまたは各スコアレベルの次の傾向のいずれかを個別に指定できます。

  • ANY (デフォルト): 追加の変数を初期化すると、スコアがプラスまたはマイナスに変化する可能性があります。この傾向ではパフォーマンスは向上しません。
  • ONLY_UP (まれ): 追加の変数を初期化すると、スコアはプラスにのみ変更されます。ONLY_UP トレンドには次の条件が必要です。

    • あるのは正の制約だけです。
    • 次の変数を初期化する場合、以前に初期化された変数と一致した正の制約と一致しないことはできません。
  • ONLY_DOWN: 追加の変数を初期化すると、スコアはマイナスにのみ変更されます。ONLY_DOWN には次の条件が必要です。

    • 負の制約しかありません。
    • 次の変数を初期化する場合、以前に初期化された変数によって一致した負の制約との一致を解除することはできません。

ほとんどのユースケースには負の制約のみがあります。これらの使用例の多くには、次の例に示すように、スコアを下げるだけの InitializingScoreTrend クラスがあります。

  <scoreDirectorFactory>
    <constraintProviderClass>org.optaplanner.examples.cloudbalancing.score.CloudBalancingConstraintProvider</constraintProviderClass>
    <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
  </scoreDirectorFactory>

あるいは、次の例に示すように、各スコアレベルの傾向を個別に指定することもできます。

  <scoreDirectorFactory>
    <constraintProviderClass>org.optaplanner.examples.cloudbalancing.score.CloudBalancingConstraintProvider</constraintProviderClass>
    <initializingScoreTrend>ONLY_DOWN/ONLY_DOWN</initializingScoreTrend>
  </scoreDirectorFactory>