認知システム論 知識と推論(2) 知識と論理で問題を解決する 充足可能性問題SAT (Satisfiability Problem) 節と連言標準形 Davis-Putnumのアルゴリズム 復習:命題論理の論理式 論理式: 原始命題を論理記号でつないだ文. 論理式 論理定数 は論理式である. true false 命題記号 は論理式である. p P が論理式ならば, (P ) は論理式である. P が論理式ならば,以下の4つも論理式である. ( P Q) ( P Q) ( P Q) ( P Q) 復習:論理式の解釈と意味 p,q,.. の解釈を決めると,他の論理式の解釈は: true の値はT(真), false の値はF(偽) 命題変数 (P ) の値は P の値の逆. ( P Q) ( P Q) ( P Q) ( P Q) の値は,以下の真理値表に基づいて決める. P Q P∧Q P∨Q P→Q P Q T T T T T T T F F T F F F T F T T F F F F F T T 復習:恒真,充足不能,充足可能 恒真 どんな解釈のもとでも真 例 ( P ( P Q)) Q 充足不能 どんな解釈のもとでも偽 例 P P 充足可能 ある解釈のもとで真 例 P Q 本日の主役! 充足不能 充足可能 P P P Q 本日の主役! 恒真 ( P ( P Q)) Q 復習:論理的帰結 論理的帰結 P1, P2 , Q , Pn のすべてを真とするどんな解釈のもとでも が真 Q は P1, P2 , P1 P2 , Pn の論理的帰結 Pn Q が恒真 本日の主役! P1 P2 Pn Q が充足不能 節と連言標準形 リテラル,節,連言標準形 Literal リテラル p p 命題記号 はリテラルである. 命題記号 p q r はリテラルである. 正リテラル 負リテラル Clause 節 リテラルの選言(orで結合したもの) p q r ( p q) ( p q) r 連言標準形(CNF) Conjunctive Normal Form 節の連言(andで結合したもの) ( p q) ( p q) r 連言標準形(CNF)への変換 どんな論理式も以下の変換ルール(左辺を右辺に書換え)で 等価なCNFに変換できる. CNFへの変換 1 2 3 4 5 6 P Q ( P Q) (Q P) P Q P Q P P ( P Q) (P) (Q) ( P Q) (P) (Q) ド・モルガンの法則 ( P Q) R ( P R) (Q R) 分配則 CNFへの変換 例 p (q r ) p ( q r ) p ( q r ) p ( q r ) p (q r ) ( p q ) ( p r ) CNF したがって,つぎの2つの節が得られる. 節集合 pq p r 節と if-then ルール 節 は if-then ルールに対応する. pq p q (if p then q) 負リテラル は 条件 の AND p q r pq r (if p & q then r ) 正リテラル は 結論 の OR p q r s pq rs 節と if-then ルール(特殊ケース) true は∧(and)の単位元: true x x ⇒ n=0 のとき: x1 false は∨(or)の単位元: ⇒ n=0 のとき: xn true false x x x1 xn false p q true p q p q p q false true false (空節は矛盾を表す) false Davis-Putnumのアルゴリズム Davis-Putnam のアルゴリズム(DPLL) 【入力】 節集合S (CNFの命題論理式) 【出力】 Sの充足可能性を有限時間で判定する. – 充足可能ならば true を返す. – 充足不能ならば false を返す. 【手順】 以下の3つのヒューリスティクスを用いて探索木の枝刈 りをしながら,Sを充足する解釈(モデル)をバックトラック法で 網羅的に探索する. – 早期の停止判定ヒューリスティクス – 純リテラルヒューリスティクス – 単位節ヒューリスティクス 入力形式の例 変数の数 変数の数 x1,…,x100 x1,…,x100 100 427 -71 -64 24 41 -93 -54 73 81 54 -37 -32 73 -69 -39 -8 70 80 29 4 69 37 …………………. 節の数 0 0 0 0 0 0 0 ¬X71∨¬X64∨X24 分岐規則(バックトラック法による探索) 節集合 S 中の変数シンボルを L とする. S が充足可能 •L = true に割り当てた場合 •L = false に割り当てた場合 のいずれかが充足可能 バックトラック法で探索 早期の停止判定ヒューリスティクス x1 true, x2 false リテラルが1つでも true である節は true true x1 x2 x3 節が1つでも false である節集合は false false x1 x2 x3 falseのリテラルは削除する x1 x2 = false x1 x3 純シンボルヒューリスティクス(1/2) 純シンボル=同じ符号(正/負)でしか現れない変数シンボル 正の純シンボル A = true とする 負の純シンボル B = false とする A B B C C A 充足性判定のためには,純シンボルが true になるような 値の割り当てだけを考慮すれば十分である. 純シンボルヒューリスティクス(2/2) アルゴリズムは,すでに true である節を無視する B false true A B C A C 負の純シンボル A = false とする 正の純シンボル C = true とする 単位節ヒューリスティクス 単位節=1つのリテラルだけからなる節 A B DPLLアルゴリズムでの単位節の定義: 1つのリテラル以外にすべて false が割り当てられた節 A true, B false A B C 単位節 C = true とする 充足性判定のためには,単位節を構成するリテラルが true になるような値の割り当てだけを考慮すれば十分である. 単位節伝播(unit propagation) 単位節ヒューリスティクスによってリテラルの値を決めると, さらに単位節が生じて,単位節ヒューリスティクスを連続的 に使用できることがある. A true true true true A B B true B C C false D true CD DPLLアルゴリズムのメインプログラム 節集合 変数シンボルの集合 boolean DPLLmain (S, V) { return DPLL (S, V, [ ] ); } 変数シンボルへの 空の割り当て DPLLアルゴリズム 節集合 boolean DPLL (S, V, I) { 変数シンボルの集合 if (すべての節が真) return true if (ある節が偽) return false p, value ← 純シンボルとその値を探す 変数シンボルへの 真偽値の割り当て (解釈) 割当て (p = value) を I に追加 if (p≠null) return DPLL(S, V-{p}, extend(p, value, I)) p, value ← 単位節を探す if (p≠null) return DPLL(S, V-{p}, extend(p, value, I)) p ←Vのうちの1つのシンボル return DPLL (S, V-{p}, extend(p, true, I)) or DPLL (S, V-{p}, extend(p, false, I)) } 例題 魔宮の世界(1/2) 背景知識 (1,2) にモンスターがいるなら,(1,1) で異臭を感じる M 12 S11 M12 S11 (1) (1,2) に落とし穴があるなら,(1,1) で風を感じる P12 B11 P12 B11 (2) (1,2) にモンスターも落とし穴もないなら,(1,2) はOK (3) M 12 P12 OK12 M12 P12 OK12 事実 (1,1) で異臭を感じない S11 (4) (1,1) で風を感じない B11 (5) 質問 (1,2) はOKか? OK12 (6) 例題 魔宮の世界(2/2) false M12 S11 (1) P12 B11 (2) M12 P12 OK12 true S11 true true true true (3) (4) B11 (5) OK12 (6) 単位節(4) S11=false 単位節(1) M12=false 単位節(5) B11=false 単位節(2) P12=false 空節(3) 充足不能 単位節(6) OK12=false この例題の場合,分岐によるバックトラックは不要であった.
© Copyright 2025 ExpyDoc