連言標準形、においてMiniSAT
ソルバーここでは、このオープンソースSATを、総称して、プログラムの問題を解決するため、いくつかの予備知識を紹介、などにおいてMiniSATするSAT SATソルバー。
いくつかの定義
変数の
それらの値例えば、という変数を使用してブール関数:(¬A∨B⊕x)は 、bは、xがその変数はもちろん、あなたの名前の変数を使用することができるものを取ること、です。リテラル
実際リテラルと呼ばれる変数を出現ブール関数で、前記NOT(否定は、¬)リテラル陰性と呼ばれる、例えば、正のリテラルと呼ばれていないと(¬A∨A)、負のリテラルがあり、正リテラル一つずつ。句の
句はカッコすべてのみOR(論理和が、∨)、例えば、(X1∨¬x2)∧(¬x1です ∨∨×2×3)∧¬x1、 3句を持つことになります(最後は単一な¬x1です) 。
連言標準形
略して連言標準形CNF、また、和の積(AND ORで意味の山を補うために)と呼ばれるデジタル回路は、単にAND句まで杭です。
|
|
記事に記載されていますが、サーキットの充足可能性問題を引用し、四色問題はCNF形式であり、データSATを議論し、SATソルバーは、理由は私たちの後、CNF形式で食べています。
- 任意のブール関数は、CNFに変換することができ
、二重否定の法則、ド・モルガンの法則を使用することができ 、分配法則をすべては、この記事のポイントを見に来る人がいると仮定して(ブール機能CNFの形に変わります、論理設計などを検討します物事右)。
|
|
CNFは、優れた構造を有している
限り、真があるとして句がその(ORためのすべてであるため句)として真の句。(句あたりの最大のように)すべての句が真でなければならない、ブール関数はtrueになります。まず、このような形のはよく(条件はおそらく書き込まれる場合は、私たちのほとんどは、プログラムを書くことができることに注意してくださいORの)理解されています。
今後に大きな列 (b)の連言標準形、においてMiniSATは、あなたが配置される何千もの変数を持っている想像し、この時間全体のブール関数が再び単に新しい論理で、CNFの中に入るに関連する変数の数百人を増やし、ライン上。
最後當我們在解決 SAT 問題,對一個 variable assign true 或 false 來測試 boolean function 時,簡單的檢查有沒有 clause 全部的 literal 都是 false 就能知道這樣的賦值方式會不會 unsatisfiable。
試想一下你有一個邏輯非常複雜,一大堆的巢狀邏輯包在一起的時候,你如何處理以上的情況? 比起殺死一堆腦細胞,簡化問題是更好的作法。
DIMACS CNF format
餵給 SAT solver 吃的 CNF 有個通用的格式叫 DIMACS CNF format,就是副檔名叫 XXX.cnf 的純文字檔。
|
|
這裡可以找到一系列問題的 DIMACS 檔案
http://www.cs.ubc.ca/~hoos/SATLIB/benchm.html
MiniSat
MiniSATは、2005年にSATチャンピオンのシリーズを獲得した、偉大なSATソルバーでより重要であることがあるということであるオープンソース、そしてわずか数千行、シンプルで簡潔なコード、においてMiniSATの採択後に研究することができます、自家製SATソルバーのための比較的高い出発点を持っています。
参照
ウィキSAT
https://en.wikipedia.org/wiki/Boolean_satisfiability_problem
ウィキCNF
https://en.wikipedia.org/wiki/Conjunctive_normal_form