[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
質問内容
命題論理における文の充足可能性をチェックするDPLLアルゴリズムが理解できなくて困っています。
http://books.google.co.in/books? id=4fyShrIFXg4C&pg=PA250&lpg=PA250&dq=DPLL+algorithm+from+artificial+intelligence+A+modern+approach&source=bl& ots=oOoZsT8KFd&sig=pdmyUsQZZWw76guWY9eFJKyNsH0&hl=en&sa=X&ei=vBFeUOf1EMLrrQeanoG4DQ&ved=0CD0Q6AEwAw#v=onepage&q&f=false
このアルゴリズムは「Artificial Intelligence A modern approach」という本から引用したものです。関数の再帰が多くて、本当に混乱しそうです。特に
EXTEND()
を再帰的に呼び出す目的は何なのでしょうか?
DPLL()
?
解決方法は?
その DPLL は、基本的に バックトラック・アルゴリズム これが、再帰呼び出しの主なアイデアです。
このアルゴリズムは、割り当てを試しながら解決策を構築していくものです。このアルゴリズムの天才的なところは、いかにして部分解を構築するかということです。
まず 単位節 とは
単位節とは、未割り当てのリテラルを1つだけ持ち、その他の(割り当てられた)リテラルをすべてfalseに割り当てた節である。
この節の重要性は、現在の代入が有効であれば、未代入のリテラルにある変数の値が何であるかを判断できることです - リテラルは真でなければならないからです。
例えば 数式があったとします。
(x1 \/ x2 \/ x3) /\ (~x1 \/ ~x4 \/ x5) /\ ( ~x1 \/ x4)
そして、すでに割り当て済みです。
x1=true, x4=true
次に
(~x1 \/ ~x4 \/ x5)
は単位節です。
x5=true
を満たすために、現在の部分的な代入でこの節を満たす必要があります。
アルゴリズムの基本的な考え方は
- 変数を推測する。
- 最後の割り当てから作成されたすべての単位節を検索し、必要な値を割り当てる
- 変化がなくなるまでステップ2を繰り返し実行(推移的クロージャの発見)
- 現在の代入ですべての節が真にならない場合 - 再帰からフォールドバックして、別の代入を再試行します。
- できる場合 - 別の変数を推測する (再帰的に呼び出して 1 に戻る)
終了する。
- 戻る場所がなく、推測を変更する(解決策なし)
- すべての条項を満たす(解があり、アルゴリズムがそれを見つけた)。
を見ることもできます。 講演スライド をご覧ください。
使用例と重要性。
DPLLは50年前のものですが、今でもほとんどのSATソルバーの基礎になっています。
SATソルバーは、難しい問題を解くのに非常に便利です。例えば、ソフトウェアの検証では、モデルを数式のセットで表現し、検証したい条件を指定し、それに対してSATソルバーを呼び出します。ワーストケースは指数関数的ですが、アベレージケースは十分に速く、業界で広く使われています(主にハードウェアコンポーネントの検証用)。
関連
-
[解決済み] どのようにすれば、ほとんどすべてのアルゴリズムを修正して、最良の場合の実行時間を持つようにできるか?
-
[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
-
[解決済み] バックトラックと深さ優先探索の違いは何ですか?
-
[解決済み] T = {<M> | Mはwを受け入れるときはいつでも$w^R$を受け入れるTMである}とする。Tが決定不可能であることを示せ
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】アルゴリズムの時間複雑性を求めるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ポイントルック アット ポイント
-
[解決済み] クイックソートとヒープソートの比較
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] Bogosort (a.k.a Monkey Sort)よりも悪いソートアルゴリズムはあるのか?[クローズド]
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] 線形時間でのソート?[クローズド]
-
[解決済み] バックトラックと深さ優先探索の違いは何ですか?
-
[解決済み] クイックソートとマージソートの比較 [重複]。