制約充足問題では、ヒューリスティックを使用してbactrackingソルバーのパフォーマンスを改善できます。単純なバックトラッキングソルバーに一般的に与えられる3つのヒューリスティックは次のとおりです。
- 最小残り値(この変数にまだ有効な値の数)
- 度ヒューリスティック(この変数の影響を受ける他の変数の数)
- 最小制約値(他の変数に対して他のほとんどの値を残す値)
最初の2つはかなり明白で、実装は簡単です。最初に、ドメイン内に残っている値が最も少ない変数を選択します。タイがある場合は、他のほとんどの変数に影響を与える変数を選択します。このようにして、ソルバーの親ステップが不適切な割り当てを選択した場合、他の多くの要素に影響を与える最小の値が残っている変数を選択すると、より早く発見できるため、時間を節約できます。
これらはシンプルで明確に定義されており、実装も簡単です。
最小制約値は、どこを見ても明確に定義されていません。人工知能:現代のアプローチ(ラッセル&ノーヴィグ)は次のように述べています。
制約グラフ内の隣接する変数の選択が最も少ない値を優先します。
「最小制約値」を検索すると、この教科書に基づいた多くの大学のスライドショーが表示されただけで、アルゴリズムでこれを行う方法についての詳細はありませんでした。
このヒューリスティックの唯一の例は、値の1つの選択が隣接する変数のすべての選択を排除し、もう1つの値は排除しない場合です。この例の問題は、これが取るに足らないケースであり、潜在的な割り当てが問題の制約との整合性がチェックされるとすぐに排除されることです。したがって、私が見つけたすべての例で、最小の制約値のヒューリスティックは、冗長なチェックを追加することによる小さな悪影響を除いて、実際にはソルバーのパフォーマンスにまったくメリットがありませんでした。
私が考えることができる他の唯一のことは、各割り当ての隣接する変数の可能な割り当てをテストし、この変数の可能な割り当てごとに存在する隣接の可能な割り当ての数を数え、この変数の値を並べることですその値が選択された場合に使用可能なネイバー割り当ての数に基づく。ただし、これによりランダムな順序よりも改善されるかどうかはわかりません。これには、多数の変数の組み合わせのテストと、カウントの結果に基づく並べ替えの両方が必要になるためです。
誰でも最小制約値のより有用な説明を提供し、その最小制約値のバージョンが実際にどのように改善をもたらすかを説明できますか?