バックトラッキングアルゴリズムにおいて、先読みとは、分岐変数を選択してその値のいずれかを評価することによって生じる影響を予測しようとするサブプロシージャの総称です。先読みの主な目的は、次に評価する変数を選択することと、その変数に割り当てる値の順序を選択することです。
一般的な制約充足問題では、すべての変数は定義域内の値をとることができます。そのため、バックトラッキングアルゴリズムは、変数を反復的に選択し、その変数が取り得るすべての値をテストします。そして、各値に対してアルゴリズムが再帰的に実行されます。先読みは、評価対象として選択した変数の影響を確認したり、変数に与える値の順序を決定したりするために使用されます。


変数への特定の割り当ての影響を評価するより単純な手法は、前方チェックと呼ばれます。[ 1 ]現在の部分解と評価対象の候補割り当てが与えられた場合、別の変数が整合性のある値をとることができるかどうかをチェックします。言い換えれば、まず現在の部分解に検討対象の変数の暫定値を追加し、次に他のすべての変数を検討します。まだ割り当てられていない評価が存在するかどうかを確認しますこれは拡張部分解と一致します。より一般的には、前方チェックによって次の値が決定されます。拡張された割り当てと整合性のあるものである。

先読み手法で、時間がかかる場合もあるがより良い結果が得られる可能性があるのは、アーク一貫性に基づく手法である。すなわち、新しい変数の値で拡張された部分解が与えられた場合、割り当てられていないすべての変数に対してアーク一貫性を強制する。言い換えれば、割り当てられていない変数については、他の変数に一貫して拡張できない値が削除される。前方チェックとアーク一貫性の違いは、前者は一度に1つの割り当てられていない変数のみを一貫性についてチェックするのに対し、後者は割り当てられていない変数のペアについても相互の一貫性をチェックすることである。制約充足問題を解くために先読みを使用する最も一般的な方法は、アーク一貫性維持(MAC)アルゴリズムである。[ 2 ]
アーク一貫性に関わる他の2つの方法は、完全先読みと部分先読みです。これらはアーク一貫性を強制しますが、すべての変数ペアに対して強制するわけではありません。特に、完全先読みは、割り当てられていないすべての変数ペアを考慮します。そして、それらの間のアーク一貫性を強制します。これは、変数ペアを複数回再検討する必要がある可能性のあるグローバルなアーク一貫性の強制とは異なります。代わりに、完全先読みでは、変数ペア間のアーク一貫性が強制されると、そのペアはそれ以上考慮されません。部分先読みも同様ですが、変数の指定された順序が考慮され、各ペアに対してアーク一貫性は一度だけ強制されます。と。
アークの一貫性に基づく先読みは、パスの一貫性や一般的なi-一貫性、あるいは関係アークの一貫性にも対応するように拡張できます。
先読みの結果は、次に評価する変数と、その変数に割り当てる値の順序を決定するために使用されます。特に、未割り当ての変数と値については、先読みによってその変数にその値を設定した場合の影響が推定されます。
次の変数の選択と、それに与える次の値の選択は相補的である。つまり、値は通常、解(存在する場合)が可能な限り早く見つかるように選択され、次の変数は通常、現在の部分解が充足不可能である場合に充足不可能性が可能な限り早く証明されるように選択される。
次に評価する変数の選択は、実行時間に指数関数的な差を生じさせる可能性があるため、特に重要です。充足可能性をできるだけ早く証明するためには、割り当て後に選択肢が少ない変数が望ましいです。この考え方は、変数と値のペアの充足可能性または充足可能性のみをチェックすることで実現できます。具体的には、次に選択される変数は、現在の部分解と整合性のある値が最小となる変数です。整合性は、部分的な整合性を単純にチェックするか、上記で説明した先読み手法のいずれかを使用することで評価できます。
変数に暫定的に割り当てる値を順序付けるための3つの方法を以下に示します。
実験により、これらの手法は大規模な問題、特に最小衝突問題に有効であることが証明された。
ランダム化は、変数や値を選択する際にも用いられることがあります。例えば、ある基準に基づいて2つの変数が同等に好ましい場合、ランダムに選択することができます。