13.5. ビルトインのハード制約

ハード制約を実装する代わりに、ハード制約を組み込むこともできます。たとえば、学校の時間割の例では、Lecture A を Room X に割り当てるべきではないが、SolutionValueRangeProvider クラスを使用している場合、Solver はそれを Room X に割り当てようとして、ハード制約に違反していることが判明することがよくあります。計画エンティティーまたはフィルターされた選択で ValueRangeProvider を使用して、講義 A に X とは異なる Room のみを割り当てるように定義します。

これにより、スコア計算が高速になるだけでなく、ほとんどの最適化アルゴリズムが実行不可能なソリューションの評価に費やす時間が短縮されるため、一部のユースケースではパフォーマンスが大幅に向上します。ただし、通常、これは良い考えではありません。なぜなら、短期的な利益と長期的な害を引き換えにするという現実的なリスクがあるからです。

  • 多くの最適化アルゴリズムは、計画エンティティーを変更するときに、ローカルオプティマから抜け出すために、厳しい制約を打ち破る自由度に依存しています。
  • どちらの実装アプローチにも、機能の互換性や自動パフォーマンス最適化の無効化などの制限があります。