競合駆動型条項学習のバックトラッキングの説明


9

ここのウィキペディアのページは、CDCLアルゴリズムがかなりよく説明されています(写真はプリンストンのSharad Malikが作成したスライドから撮られたようです)。しかし、どのようにバックトラックするかを説明するとき、それは「適切なポイントへ」と言うだけです。MiniSATもCDCLアルゴリズムのバリアントを使用しているので、このペーパーを読みました。彼らが言っているように見えるのは、学習された節が単位節になるまで後戻りする必要があるということです。それは確かに明確化ですが、私には意味がありません。最後の割り当ては間違いなく、学習した矛盾句の一部になります(おそらくここで間違っているのでしょうか)。そのため、1つのステップをバックトラックすると、すぐに学習した句のユニットが作成され、最後に割り当てられた値が反転します。アルゴリズムは、十分に遠くまでバックトラックすることなく、DPLLとまったく同じように処理されます。さらに、ウィキペディアのページはこのルールに従っていません。望ましいように見えるので、はるかに後戻りします。

どれだけバックトラックすることになっていますか?

回答:


7

MiniSATペーパーの関連段落は次のとおりです。

決定フェーズは、すべての変数が割り当てられるまで続行されます。この場合、モデルが存在するか、競合が発生します。紛争では、学習手順が呼び出され、紛争条項が作成されます。トレイルを使用して、一度に1レベルずつ、決定を元に戻します。学習した句のリテラルの1つがバインドされなくなります(競合の時点ですべてになります)。構造上、conflict句は、conflictから2つ以上のバインドされていないリテラルを持つ句に直接移動できません。条項が複数の決定レベルの単位のままである場合は、最も低いレベル(バックジャンプまたは非時系列バックトラッキングと呼ばれる)を選択することが有利です。False

あなたが見逃したように見える点は、学習された節が元に戻された割り当て(バックトラック)によってユニットになると、ソルバーはそこで止まらないということです。この割り当ての前に、現在の競合に影響を与えない他の割り当てが存在する可能性があります。実験的に、これらの無関係な割り当ても元に戻す方が良いことが示されています。そのため、ソルバーは、次の元に戻すことで学習した節が非単位になるまで、つまり、割り当てられていない変数が複数含まれるまで、割り当てを元に戻します。ソルバーはここで停止し、ユニット伝搬を実行してユニット句を満たし、次に検索を再開して変数を通常どおり割り当てます。

また、現在の決定変数が学習済み句に存在しない場合があることにも注意してください。CDCLソルバーの一般的な戦略は、最初の一意の含意ポイントを見つけ、学習した節でその変数を使用することです。最初のUIPが決定変数である場合もありますが、そうでない場合がよくあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.