Mô tơ suy diễn (Inference Engine/ motor)
Động cơ, mô tơ hay máy suy diễn gồm 2 bộ phận chính: Cơ chế suy diễn (Processor) gồm: Cơ chế cổ điển (control unit): (nhìn thấy cái nào ...
![](/pictures/picfullsizes/2018/05/24/gcg1527146220.jpg)
Động cơ, mô tơ hay máy suy diễn gồm 2 bộ phận chính:
- Cơ chế suy diễn (Processor) gồm:
- Cơ chế cổ điển (control unit):
(nhìn thấy cái nào không cần thiết thì loại, xác định cái nào được chọn trước)
Fact Precedence Graph (FPG) = (F, A)
- Đỉnh : tập các sự kiện
- Cung: (a,b)∈ size 12{ in } {}A ⇔ size 12{ dlrarrow } {}∃ size 12{ exists } {} r: left → size 12{ rightarrow } {}b ∈ size 12{ in } {}R ; a∈ size 12{ in } {}left
D:
- a → b
- b → c
- c → e
- c → d
- d ⋀ e → f
- b → h
- f ⋀ h → g
![](/pictures/picfullsizes/2018/05/24/xhn1527146220.jpg)
Tập sự kiện:
F = { a, b, c, d, e, f, g, h} tách ra hai sự kiện:
F1 = { a, b, c} R1 = { a → size 12{ rightarrow } {} b, b → size 12{ rightarrow } {} c}
F2 = { e, d, f, g, h} R2 = { d ⋀ size 12{ and } {}e → size 12{ rightarrow } {}→ f, f ⋀ size 12{ and } {}h → size 12{ rightarrow } {} → g}
R0 = {c → size 12{ rightarrow } {} e, c → size 12{ rightarrow } {} d, b → size 12{ rightarrow } {} h}
F0 = {b, c, d, b, h}
![](/pictures/picfullsizes/2018/05/24/nuf1527146220.jpg)
Đây là một cách phân rã CSTT eval({F1, F2}) min
Mô hình star
![](/pictures/picfullsizes/2018/05/24/lye1527146220.jpg)
![](/pictures/picfullsizes/2018/05/24/zjw1527146220.jpg)
Nếu phân rã dựa trên tập luật làm gốc thì dẫn đến full condition
Phân rã theo tập sự kiện → hình sao.
Suy diễn tiến, lùi (nhắc lại)
Suy diễn tiến ≡ tìm kiếm
- a → b
- b → c
- c → e
- c → d
- d ⋀ e → f
- b → h
- f ⋀ h → g
GT = {a}
SUY DIỄN TIẾN | ĐỒ THỊ SUY DIỄN TIẾN |
1. GT | 1. Đỉnh gốc |
2. Thời gian (SK đã chứng minh) | Nút |
3. Thỏa | 3. Cung |
Thời gian → Thời gian {q} | Thời gian (→r ) thờigian |
r: left → q | Thời gian = Thời gian ∪ {q} |
r ∈ thỏa | |
4. Kết thúc | 4. Lá |
Thời gian ⊇ KL | |
Vết | Đường đi |
Nếu SDT theo vét cạn → độ phức tạp tương ứng với quá trình tìm kiếm trên đồ thị SD.
CSD trên(vecan) ≈ Ctìm kiếmVC = 0(BH)
B: Branching (độ phân nhánh) và H là chiều cao của cây
Suy diễn lùi ≡ tìm kiếm
![](/pictures/picfullsizes/2018/05/24/qrc1527146220.jpg)
⇒ size 12{ drarrow } {} Suy diễn lùi ≡ size 12{ equiv } {} tìm kiếm theo chiều sâu
CSDlùi size 12{ approx } {} ≈ CTKsâu = 0 (B H' size 12{ {} rSup { size 8{H rSup { size 6{'} } } } } {})
Trong trường hợp suy diễn lùi mà có chu trình :
* Prolog
- r1 A ⋀ B → c
- r2 A ⋀ C → B
- r3 B ⋀ C → A
- r4 a ⋀ hc → A
- r5 b ⋀ hc → A
GT = {a,b,hc}
KL = {c}
![](/pictures/picfullsizes/2018/05/24/rbg1527146220.jpg)
Chỉ số max:
![](/pictures/picfullsizes/2018/05/24/byn1527146221.jpg)
Chọn hướng SD
BT = max BT(GT, KL, R)
Giả thiết:
![](/pictures/picfullsizes/2018/05/24/xjl1527146221.jpg)
- ước lượng BT
- a ⋀ b ⋀ C → c
- a ⋀ b ⋀ ma → c
- a ⋀ b ⋀ mb → c
- A ⋀ B → C
- a ⋀ hc → B
- b ⋀ hc → A
- a ⋀ R → A
- b ⋀ R → B
- a ⋀ b →c P
- a ⋀ b ⋀ c → P
- a ⋀ b ⋀ c → mc
- a ⋀ ha → S
- a ⋀ b ⋀ C → S
- a ⋀ b ⋀ c ⋀ P → S
- b ⋀ S → hb
- S ⋀ p → r
F1= {a, b, C} ⇒ size 12{ drarrow } {} R1 = {r1, r2}
F2 = {a, b, ma} ⇒ size 12{ drarrow } {} R2 = {r2}
F3 = {a, b, mb} ⇒ size 12{ drarrow } {} R3 = {r3}
F4 = {A, B} ⇒ size 12{ drarrow } {} R4 = {r4}
F5 = {a, hc} ⇒ size 12{ drarrow } {} R5 = {r5}
F6 = {b, hc} ⇒ size 12{ drarrow } {} R6 = {r6}
F7 = {a, R} ⇒ size 12{ drarrow } {} R7 = {r7}
F8 = {b,R} ⇒ size 12{ drarrow } {} R8 = {r8}
F9 = {a, b, c, p} ⇒ size 12{ drarrow } {} R9 = {r9, r10, r11, r14}
F10 = {a, ha} ⇒ size 12{ drarrow } {} R10 = {r12}
F11 = {b, S} ⇒ size 12{ drarrow } {} R11 = {r15}
F12 = {S, p} ⇒ size 12{ drarrow } {} R12 = {r16}
Ước lượng:
B Tm size 12{ {} rSub { size 8{T} } rSup { size 8{m} } } {} = max (2, 1, 4) = 4
BT size 12{ {B rSub { size 8{T} } } cSup { size 8{_} } } {}= 1612 size 12{ { {"16"} over {"12"} } } {} = 1,33
- Ước lượng BL
c có 3 luật
Luật (Meta Knowlegde)
- If BT > BL Then chọn Lùi
- If BT < BL Then chọn Tiến
- If BT > BL #GT > # KL Then Chọn Lùi
#GT < KL Then Chọn Tiến
- If user thích Then chọn
Chọn luật trong quá trình SD (Bài toán đụng độ luật - Rule Conflict)
Suy diễn tiến
Tại 1 thời điểm nào đó trong quá trình SD tiến chúng ta có thể dùng nhiều luật cùng một lúc:
TGian = {sự kiện f đã CM}; TG = {GT}
(Mở) THOẢ = {r: left → size 12{ rightarrow } {} q/ left size 12{ in } {} ∈ TGian} tập luật có thể áp dụng
(Đóng) VET = {r1… rk} tập những luật đã dùng
Khi # THOA size 12{ >= {}} {} 2 → size 12{ rightarrow } {} chọn r size 12{ in } {}∈thoả ?
![](/pictures/picfullsizes/2018/05/24/ear1527146221.jpg)
→ size 12{ rightarrow } {} Độ phức tạp 0 (Bh)
→ size 12{ rightarrow } {} Để chọn theo mềm dẻo hàm h ̅(r) (heurestic)
→ size 12{ rightarrow } {} Max/ min (extremum)
Đánh giá:
- # VET → min (càng ít càng tốt)
- Dư → min
Gt = {a, b, R}, KL = {p}
Nên theo CS Min VET = {r7, r8, r4, r1, r9, r10, r11} (2)
CS Max VET = {r8, r7, r4, r13, r11} (1)
FIFO VET = {r7 r8 r4 r11 r13 r9 r10 r11} (3)
LIFO VET = {r8 r7 r4 r13 r15 r1 r9 r10 r11} (4)
Vậy có cách nào để Dư = 0 ?
![](/pictures/picfullsizes/2018/05/24/rzx1527146221.jpg)
- Đồ thị FPG (Fact Precedence Graph)
Sử dụng để miêu tả mối tương quan giữa điều này với điều khác
(*)- f g FPG thì f được dùng trực tiếp để suy ra G (r: left → g, f → left)
- Có đường đi P: f → …… → g thì được dùng gián tiếp để suy ra g.
#VET +Complexity hˆ size 12{ { hat {h}}} {} x m
- Đồ thị RPG(Rule Precedence Graph)
RPG=(R,A)
Trong đó R: Tập các đỉnh
A: là tập các cạnh sao cho:
{}
Xây dựng đồ thị RPG cho ví dụ trên ta có:RKL={r:left → size 12{ rightarrow } {} q/q size 12{ in } {} ∈ KL} size 12{ in } {}∈ R
Xét ví dụ sau:
GT={a b R}, KL={r}
Suy diễn lùi
- Đồ thị FPG
Tình huống đụng độ khi suy diễn lùi:
Goal= Tập những sự kiện cần chứng minh; ban đầu Goal=KL
Xét f → size 12{ rightarrow } {}Goal. Có nhiều luật suy ra f. Ta chọn luật bằng các thử sai và quay lui. Để tránh phải quay lui ta cần chọn luật như thế nào.
Nhắc lại các cách chọn có quay lui:
GT={a b R}
{S}12,13,14← size 12{ leftarrow } {}{a b c p} ← size 12{ leftarrow } {}{a b mb p} ← size 12{ leftarrow } {}…….
GT={a b R}, KL={S}
- Đồ thị RPG
RGT={r: left → size 12{ rightarrow } {}q/left size 12{ in } {} ∈GT}
GT={a b R} KL={S}
Hạn chế các ứng viên trong quá trình suy diễn
Suy diễn tiến
Giả sử xét tại một thời điểm trong quá trình suy diễn :
Suy diễn lùi
Xét 1 sự kiện thuộc Goal.
![](/pictures/picfullsizes/2018/05/24/ibx1527146222.jpg)
Kết luận: Nâng cao hiệu quả quá trình suy diễn
![](/pictures/picfullsizes/2018/05/24/aor1527146222.jpg)
Luật ri P1 (…) size 12{ and } {} P2 (…) size 12{ and } {} …… size 12{ and } {}Pn (…) → size 12{ rightarrow } {} q (…)
Suy diễn tiến
Giả thiết:
Kết luận { SS (PS, BC)
![](/pictures/picfullsizes/2018/05/24/wqs1527146222.jpg)
- B1' size 12{ {} rSub { size 8{1} } rSup { size 8{'} } } {}: TG0 = GT
THOA = {(r1, Φ size 12{Φ} {}1), (r1, Φ size 12{Φ} {}2), (r1, Φ size 12{Φ} {}3), (r1, Φ size 12{Φ} {}4)}
Φ size 12{Φ} {}1 = {A/X; B/Y; C/Z; P/U; Q/V}
Φ size 12{Φ} {}2 = {C/X; Q/Y; P/Z; E/U; J/V}
Φ size 12{Φ} {}3 = ...
Φ size 12{Φ} {}4 = ....
Chọn (r1, Φ size 12{Φ} {}1)
TG1 = TG0 ∪ size 12{ union } {} {SS (UV, YZ), Φ size 12{Φ} {}1} = TG0 size 12{ union } {} ∪ {SS (PQ, BC)}
- B2' size 12{ {} rSub { size 8{2} } rSup { size 8{'} } } {}: TG1 =
THOA = {(r1, Φ size 12{Φ} {}2), (r1, Φ size 12{Φ} {}3), (r1, Φ size 12{Φ} {}4)
….
Vấn đề: Làm như thế nào để xác định (ri, Φ size 12{Φ} {}i)
Suy diễn lùi
Nói chung suy diễn tiến và suy diễn lùi đều giống như nhau trong logic mệnh đề vì đều là quá trình hợp nhất (Unification)
Để rõ hơn ta hãy xét ví dụ sau:
Ta áp dụng thủ tục suy diễn lùi, nhưng co khó khăn là khi không tiếp tục được ta lại phải quay lui.Từ đây ta có thể đưa ra nhận xét sau:
Sự giống và khác nhau giữa suy diễn lùi của logic vị từ và suy diễn Prolog
- Giống nhau: cả trong prolog cvà logic vị từ đều có phép hợp nhất và quá trình thử sai
- Khác nhau: Tính chất trong prolog là chúng minh suy ra điều vô lý, còn suy diễn lùi là suy ra goal=0. Cơ chế của prolog là theo chỉ số min và đi từ trái sang phải. Còn trong logic vị từ thì có thể áp dụng hất mọi cacchs đi thông thường: Trai, phải và ngược lại hay là trên duới và ngược lại.