タグ付けされた質問 「sat-solvers」

ブール充足可能性問題のソルバープログラムに関する質問。

2
SATソルバーの1-out-of-n制約のエンコード
私はSATソルバーを使用して問題をエンコードしていますが、SATインスタンスの一部として、ブール変数があります。 。(私はこれを「ワンホット」エンコーディングとして記述されるのを見たことがあります。)x1,x2,…,xnx1,x2,…,xnx_1,x_2,\dots,x_n SATで「うち正確に1つでなければならない」という制約をエンコードしたい。SATソルバーを可能な限り効率的に実行するために、この制約をエンコードする最良の方法は何ですか?x1,…,xnx1,…,xnx_1,\dots,x_n この制約をエンコードする方法はたくさんあります。 ペアごとの制約。すべてのに対してペアワイズ制約を追加して、最大で1つのが真であることを確認してから、を追加して、少なくとも1ことを確認できます。 iは、jはxはI X 1 ∨ X 2 ∨ ⋯ ∨ X N¬xi∨¬xj¬xi∨¬xj\neg x_i \lor \neg x_ji,ji,ji,jxixix_ix1∨x2∨⋯∨xnx1∨x2∨⋯∨xnx_1 \lor x_2 \lor \cdots \lor x_n これにより、句が追加され、追加のブール変数は追加されません。Θ(n2)Θ(n2)\Theta(n^2) バイナリエンコーディング。新しいブール変数 導入できますi 1、i 2、… 、i lg nlgnlg⁡n\lg ni1,i2,…,ilgni1,i2,…,ilg⁡ni_1,i_2,\dots,i_{\lg n}(バイナリ)の整数で表すためにそのようなその(ことを確実にするために、いくつかのブール制約の追加望ましい範囲内にあります)。次に、がツリーであり、他のすべてのがfalseであることを強制する制約を追加できます。つまり、ごとに、強制する句を追加します。1 ≤ iが≤ N I X I 、X 、J、J 、I = J ⇔ X Jiii1≤i≤n1≤i≤n1 …

1
CNFからDNFへの変換がNPハードであることの証明
この質問は、Computer Science Stack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 CNFからDNFへの変換がNPハードであることをどのように証明できますか? 私は答えを求めているのではなく、それを証明する方法についていくつかの提案をしています。

1
最近のすべてのSATソルバーが、回線SATではなくCNFで動作するのはなぜですか?
2006年のいつかでインバータグラフを処理するAIGERライブラリのリリース後(私は思う)、いくつかのサーキットSATソルバーが2006-2008にリリースされ、いくつかのSAT Races / CompetitionsにAIGトラックがありました。しかし、それ以来、焦点は完全にSMTまたは節点SATソルバーの改善にあるようです。 直観的には、サーキットSATに集中することは非常に理にかなっているようです。回路はCNFからリバースエンジニアリングできない構造情報を提供しますが、回路は常にCNFに変換できます。そして、少なくとも論理合成の産業的に重要な分野は、AIGに特に適しているようです。 どうしたの?余分な構造情報はソルバーに役立たないことが判明しましたか?AIGベースのSATは失敗した実験を解決しましたか?

1
SATとConstraint Satisfactionを使用する場合
難しい問題がある場合、標準的なアプローチの1つは、SATインスタンスとして表現し、SATソルバーを実行することです。別の標準的なアプローチは、それを制約充足問題として表現し、CSPソルバーを使用してみることです。この2つは、入力形式でどのような問題を自然に表現できるかについて、なんとなく漠然と似ています。 特定の問題に対して、どのアプローチが良い結果をもたらす可能性が高いかを認識する方法に関するガイドラインまたは経験則はありますか?CSPソルバーよりもSATソルバーがより適切に処理できる問題、またはその逆について、だれでも提供できるガイダンスはありますか? (明らかに、両方のアプローチで解決できるいくつかの簡単な問題があります。どちらのアプローチでも有効に解決できない難しい問題もあります。それらを脇に置いておきましょう。ガイダンスが最も役立つケースは、SATソルバーはCSPソルバーよりも優れたパフォーマンスを発揮するか、CSPソルバーがSATソルバーよりも優れたパフォーマンスを発揮します。 SATソルバー-つまり、最初に試すアプローチはどれですか?)

3
SATエンコーディングのレシピ本?
SATソルバーは、大きなインスタンスをより効率的に解決し、さまざまなコンテキストでバックエンドとして使用されています。特定のドメインの問題を解決するためにそれらを使用するたびに、適切なソリューションのセットを持っているだけでなく、フォームに制約(冗長であっても)を置くアドホックエンコーディングを考え出す必要があります。これにより、ソルバーのヒューリスティックが解決策を迅速に見つけることができます。 そのようなエンコードの多くは、私には非常に一般的だと思われます。たとえば、ノードの有限セットがツリー、DAG、またはリストとしてソートされていると断言する... 最適化されたソリューションの一般的な問題に関する一般的なエンコーディングのリポジトリ/レシピ本はありますか?

3
マルチコアSATソルバー
私は25k節5k変数SAT問題を解決しようとしています。1時間(precosat)実行されていて、後でより大きなものを解決したいので、マルチコアSAT-Solverを探しています。 SAT-Solversが多いように思えるので、私はかなり迷っています。 誰かが私の場合に最適なものを指摘してもらえますか? また、誰かがおおよその時間を教えてくれれば幸いです(可能であれば)。

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
トップのSATソルバーは簡単な数値を因数分解できますか?
最新のSATソルバーは、SATインスタンスの多くの実例を解決するのに非常に優れています。ただし、ハードなものを生成する方法はわかっています。たとえば、因数分解からSATへの削減を使用し、RSA番号を入力として指定します。 これは問題を提起します:私が因数分解の簡単な例を取るならどうでしょうか。ビットでつの大きな素数をとる代わりに、ビットで素数を、ビットで素数q をとると、とエンコードして SATインスタンスとして。は、要素の1つが非常に小さいため、ブルートフォース検索またはふるい法で簡単に計算できる数です。ファクタリングからSATへの標準的な削減を伴う最新のSATソルバーもこの構造を採用しますか?n/2n/2n/2ppplognlog⁡n\log nn/lognn/log⁡nn/\log nN=pqN=pqN = pqFACTOR(N)FACTOR(N)\mathrm{FACTOR}(N)NNN SAT-ソルバー率トップことができますすばやく?N=pqN=pqN = pq|p|=logn|p|=log⁡n|p| = \log n

1
統合とSATソルバー
統一は満足度の問題を解決するプロセスであるとウィキペディアで読みました。 同時に、そのようなソルバーが「SATソルバー」または「SMTソルバー」と呼ばれていることも知っています。それで、同じものに対して異なる名前ですか? それらが異なると言うなら、私の扱いの欠陥を指摘してください。

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

2
一次論理検証の概要
ソフトウェア検証に対するさまざまなアプローチを自分に教えようとしています。私はいくつかの記事を読みました。私が学んだ限り、時間を伴う命題論理は一般にSATソルバーによるモデルチェックを使用します(進行中の反応型システムで)が、時間を伴う1次論理はどうですか?定理証明を使用していますか?それともSATを使用できますか? この問題に関する初心者向けの本や記事へのポインタは大歓迎です。

4
確定的SATソルバー
次の質問があります。SATソルバーは確定的ですか? たとえば、miniSATアルゴリズムとDPLLアルゴリズムについてです。それらは完全に確定的ですか? これらのアルゴリズムがunSATを返す場合、それは確かにソリューションが存在しないことを意味しますか?

2
数式を満足できないものにするための割り当て
我々が充足式を有する想像でき解決する問題は、「変数の割り当てありで(S 0、。。。、S n)はFを満足できないものにしますか?」解決する1つの方法は、変数の面でFのためのすべての解を見つけることであるS 0、。。。、SF(A0,A1,...Ak,S0,...,Sn)F(A0,A1,...Ak,S0,...,Sn)F(A_0, A_1,...A_k,S_0,...,S_n)(S0,...,Sn)(S0,...,Sn)(S_0,...,S_n)とカウントが< 2 nの場合、不足しているソリューションが答えになりますが、このような割り当ての数が少ない場合、このアルゴリズムは非常に複雑になります。S0,...,SnS0,...,SnS_0,...,S_n2n2n2^n 私の質問は: SATソルバーの呼び出しを減らして問題を解決する方法はありますか? 理論的にはよく知られている問題ですか(それについてGoogleが何を読むべきか)。

1
不満足なインスタンスのランダムな再起動
最悪の場合、ブール充足可能性(P!= NPと仮定)には指数関数的な時間がかかります。それにもかかわらず、DPLLのバリアントを使用する最新のSATソルバーは、実際に役立つのに十分なインスタンスを解決できます。 使用されている1つの手法は、実際に良い結果を示しており、ランダム再起動です。直感的に、ランダムに再起動するということは、適切な変数の割り当てを推測して幸運になる可能性があることを意味します。 同じ直感は、問題のインスタンスが実際に満足できる場合(したがって、ソリューションを構成する一連の変数の割り当てを推測するだけでよい場合)がそうでない場合よりもはるかに効果的であることを示唆しています(したがって、原則として可能な限りすべてをチェックする必要があります)とにかく、割り当ては、少なくとも初期の推測に明らかに影響されない、単位伝播や非時系列バックトラックなどの手法でスキップできる検索空間のモジュロセクションです。 2番目の直感は正しいですか?問題のインスタンスが実際に満足できる場合、ランダム再起動は実際には平均してはるかに効果的ですか?


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