Giáo trình về trí tuệ nhân tạo | Đại học Sư phạm Hà Nội

Giáo trình về trí tuệ nhân tạo | Đại học Sư phạm Hà Nội với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng, ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống.

Môn:
Trường:

Đại học Sư Phạm Hà Nội 2.1 K tài liệu

Thông tin:
108 trang 8 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Giáo trình về trí tuệ nhân tạo | Đại học Sư phạm Hà Nội

Giáo trình về trí tuệ nhân tạo | Đại học Sư phạm Hà Nội với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng, ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống.

143 72 lượt tải Tải xuống
Giáo trình
TRÍ TU NHÂN TO
ARTIFICIAL INTELLIGENCE
Phm Th Hoàn, Phm Th Anh Lê
Khoa Công ngh thông tin
Trường Đại hc Sư phm Hà Ni
Hà ni, 2011
MC LC
Chương 1 – Gii thiu ...............................................................................................5
1. Trí tu nhân to là gì? ......................................................................................................... 5
2. Lch s ................................................................................................................................ 6
3. Các lĩnh v a AI ............................................................................................................ 7 c c
4. Ni dung môn hc............................................................................................................... 9
Chương 2 – Bài toán và phương pháp tìm kiếm li gii .........................................10
1. Bài toán và các thành phn ca bài toán........................................................................... 10
2. Gii thut tng quát tìm kiếm li gii............................................................................... 14
3. Đánh giá gii thut tìm kiếm............................................................................................. 17
4. Các gii thut tìm kiếm không có thông tin phn hi (tìm kiếm mù)............................... 18
Chương 3 –Các phương pháp tìm kiếm heuristic ....................................................25
1. Gii thut tìm kiếm tt nht đầu tiên (best first search).................................................... 25
2. Các biến th c a gii thut best first search...................................................................... 28
3. Các gii thut khác............................................................................................................ 31
Chương 4 – Các gii thut tìm kiếm li gii cho trò chơi .......................................37
1. Cây trò chơi đầy ........................................................................................................... 37 đủ
2. Gii thut Minimax........................................................................................................... 39
3. Gii thut Minimax v n chi độ sâu h ế............................................................................ 41
4. Gii thut Minimax vi c t t a alpha-beta ........................................................................ 44
Chương 5 – Các phương pháp tìm kiếm li gii tha mãn các ràng buc ..............47
1. Các bài toán tha mãn các ràng buc................................................................................ 47
2. Gii thut quay lui vét cn ................................................................................................ 50
3. Các ci tiến ca gii thut quay lui ................................................................................... 51
4. Các gii thut ti ưu ng....................................................................................... 54 địa phươ
Chương 6 – Các phương pháp l p lu n trên logic mnh đề ....................................55
1. Lp lun và Logic ............................................................................................................. 55
2. Logic mnh ngh a.................................................................................. 55 đề: cú pháp, ng ĩ
3. Bài toán lp lun và các gii thut lp lun trên logic mnh đề........................................ 58
4. Câu dng chun h i và lu i............................................................................... 60 t phân gi
5. Câu dng Horn và tam đon lun...................................................................................... 63
6. Thut toán suy din da trên bng giá tr chân lý............................................................. 65
7. Thut toán suy din d i...................................................................... 65 a trên lut phân gi
8. Thut toán suy din tiến, lùi da trên các câu Horn ......................................................... 67
9. Kết chương........................................................................................................................ 70
Chương 7 – Các phương pháp l p lu n trên logic cp mt .....................................72
1. Cú pháp – ng nghĩa......................................................................................................... 74
2. Lp lun trong logic v t c p m t.................................................................................... 78
3. Phép đồ ng nht hai v t , thu t gi i đồng nht ................................................................. 80
4. Câu dng chun h ng quát................................................................... 82 i, lut phân gii t
5. Câu dng Horn và tam đon lun tng quát trong logic cp 1.......................................... 84
6. Gii thut suy din phân gii ............................................................................................ 86
7. Thut toán suy din tiến da trên câu Horn...................................................................... 89
8. Thut toán suy din lùi da trên câu Horn........................................................................ 91
Chương 8 – Prolog...................................................................................................92
1. Lp trình logic, môi trường lp trình SWI Prolog ............................................................ 92
2. Ngôn ng Prolog cơ bn, chương trình Prolog................................................................. 95
3. Câu truy vn...................................................................................................................... 97
4. V t phi logic (câu phi logic)........................................................................................... 97
5. Tr l n, quay lui, c nh............................................................................ 98 i truy v t, ph đị
6. V t qui ..................................................................................................................... 104 đệ
7. Cu trúc d liu trong Prolog.......................................................................................... 105
8. Thut toán suy din trong Prolog.................................................................................... 106
Chương 9 – Lp lun vi tri thc không chc chn.............................................. 107
Chương 10 – Hc mng nơron nhân to............................................................... 108
Chương 1 – Gii thiu
1. Trí tu nhân to là gì?
Để hi u trí tu nhân t o (artificial intelligence) chúng ta b t đầu vi khái ni m s
bay nhân to (flying machines), tc là cái máy bay.
Đã t lâu, loài người mong mun làm ra mt cái máy th di chuyn được
trên không trung không ph thuc vào địa hình dưới mt đất, hay nói cách khác
máy có th bay được. Không có gì ngc nhiên khi nhng ý tưởng đầu tiên làm máy bay là
t nghiên cu cách con chim bay. Nh ếng chi c máy biết bay được thiết kế theo nguyên lý
“v cánh” như con chim ch có th bay được quãng đường rt ngn và lch s hàng không
thc s sang mt trang mi k t anh em nhà Wright thiết kế y bay da trên các
nguyên lý ca khí động lc hc (aerodynamics).
Các máy bay hin nay, như đã th c try, s rt ln bay được quãng đường
th vòng quanh thế gii. Nó không nht thiết ph a con chim i nguyên bay c
nhưng vn bay được như chim (dáng v), và còn tt hơn chim.
Quay li câu hi Trí tu nhân t o là gì. Trí tu nhân t o trí thông minh ca máy
do con người to ra. Ngay t khi chiếc máy tính đin t đầ đờu tiên ra i, các nhà khoa hc
máy tính đã hướng đến phát hi n h th ng máy nh (gm c ph n cng phn mm)
sao cho nó có kh năng thông minh như loài người. Mc cho đến nay, theo quan nim
ca người viết, ước mơ này vn còn xa mi thành hin thc, tuy v y nh ng thành tu đạt
đượ được cũ ng không h nh: chúng ta đã làm c các h th ng (ph n m m chơi c vua
chy trên siêu máy tinh GeneBlue) th ã làm th thng được vua c ế gii; chúng ta đ
đượ được các phn m m th chng minh c các bài toán hình hc; v.v. Hay nói cách
khác, trong mt s lĩ ơ nh vc, máy tính th thc hi n tt h n ho c tương đương con
người (t i t t ct nhiên không ph các lĩnh vc). Đó chính là các h thng thông minh.
nhiu cách tiếp cn để m ra trí thông minh ca máy (hay trí tu nhân t o),
ch ng h n là nghiên cu cách b não người sn sinh ra trí thông minh ca loài người như
thế nào ri ta bt chước nguyên lý đó, nhưng cũng có nhng cách khác s dng nguyên lý
hoàn toàn khác vi cách sn sinh ra trí thông minh ca loài người mà vn làm ra cái máy
thông minh như hoc hơn người; cũng ging như máy bay hin nay bay tt hơn con chim
do nó có cơ ch chế bay không phi là ging như cơ ế bay ca con chim.
Như v y, trí tu nhân t o đây nói đến kh nă ng ca máy khi thc hi n các công
vic con người thường phi x lý; khi dáng v ng x hoc kết qu thc hin ca
máy là tt hơn hoc tương đương vi con người thì ta gi đó là máy thông minh hay máy
đ ó trí thông minh. Hay nói cách khác, đánh giá s thông minh c a máy không phi
da trên nguyên thc hin nhim v đó ging cách con người thc hin hay
không mà da trên kết qu hoc dáng v ng x bên ngoài ca gi ếng vi k t qu
hoc dáng v ng x ca con người hay không.
Các nhim v ca con ngườ ười th ng xuyên phi thc hin là: gii bài toán (tìm kiếm,
chng minh, lp lun), hc, , giao tiếp th hi ườn c m xúc, thích nghi v i môi tr ng xung
quanh, v.v., và da trên kết qu thc hin các nhim v t lu đó để kế n rng m đt ai ó
thông minh hay không. Môn hc Trí tu nhân t o nh m cung cp các phương pháp
lun để làm ra h thng có kh nă ng thc hi n các nhim v đó: gii toán, h c, giao ti ếp,
v.v. bt k cách nó làm có nh i hay không mà là kư con ngườ ết qu đạt được hoc dáng v
bên ngoài như con người.
Trong môn hc này, chúng ta s tìm hiu các phương pháp để làm cho máy tính biết
cách gii bài toán, biết cách lp lun, biết cách hc, v.v.
2. Lch s
Vào năm 1943, Warren McCulioch và Walter Pitts bt đầu thc hin nghiên cu ba cơ s
thuyết cơ bn: triết hc cơ bn chc năng ca các noron thn kinh; phân tích các
mnh đề logic; thuyết d đoán ca Turing. Các tác gi đã nghiên cu đề xuât
hình noron nhân to, mi noron đặc trư ng bi hai tr ng thái “b t”, “t t” phát hi n
mng noron có kh năng hc.
Thut ng “Trí tu nhân to” (Artificial Intelligence - AI) đưc thiế t l p bi John
McCarthy ti H i th o đầu tiên v ch đề này vào mùa năm 1956. Đồng thi, ông
cũng đề xut ngôn ng lp trình Lisp m t trong nh ng ngôn ng lp trình hàm tiêu
biu, được s d ĩ đng trong l nh vc AI. Sau ó, Alan Turing đưa ra "Turing test" như
mt phương pháp kim chng hành vi thông minh.
Thp k 60, 70 Joel Moses viết chương trình Macsyma - chương trình toán hc s dng
cơ s tri thc đầ đưu tiên thành công. Marvin Minsky Seymour Papert a ra các chng
minh đầu tiên v gii h n ca các m ng nơ-ron đơn gin. Ngôn ng lp trình logic Prolog
ra đời được phát trin bi Alain Colmerauer. Ted Shortliffe xây dng thành công mt
s h chuyên gia đầu tiên tr giúp chn đoán trong y hc, các h thng này s dng ngôn
ng lut để biu din tri thc và suy din.
Vào đầu nh ng n ăm 1980, nhng nghiên cu thành công liên quan đến AI như các h
chuyên gia (expert systems) – mt dng ca chương trình AI mô phng tri thc và các k
năng phân tích ca mt hoc nhiu chuyên gia con người
Vào nh ăng n m 1990 đầu thế k 21, AI đã đạt được nh ng thành t u to l n nh t, AI
được áp d ng trong logic, khai phá d li u, ch n đ oán y hc nhi u lĩ nh vc ng dng
khác trong công nghip. S thành công da vào nhiu yếu t: tă ăng kh n ng tính toán ca
máy tính, tp trung gi ế i quy t các bài toán con c th , xây d ng các mi quan h gia AI
và các lĩnh v ng tc khác gii quyết các bài toán tươ , và m t s chuyn giao mi c a các
nhà nghiên cu cho các phương pháp toán hc vng chc và chun khoa hc chính xác.
3. Các lĩnh vc ca AI
¾ Lp lun, suy din t đng: Khái ni m lp lu n (reasoning), suy di n (reference)
được s d ng r t ph biế ĩ n trong l nh vc AI. L p lu n là suy di n logic, dùng để ch
mt tiến trình rút ra kết lun (tri thc mi) t nhng gi ế thi t đã cho (được bi u din
dưới dng cơ s tri th ưc). Nh vy, để thc hin lp lun người ta cn các phương
pháp lưu tr c s tơ tri thc và các th c lp lun trên cơ s tri thc đó.
¾ Biu din tri thc: Mun máy tính th lư u tr x tri thc thì c n các
phương pháp biu din tri thc. Các phương pháp bi u di n tri thc đ ây bao g m
các ngôn ng bi u di n và các k thut x lý tri th c. Mt ngôn ng bi u di n tri thc
được đ ánh giá “t t” nế u nó tính bi u đạt cao các tính hi u qu ca thut toán
lp lun trên ngôn ng đó. Tính biu đạt ca ngôn ng th hi n kh nă ng bi u di n
mt phm vi rng ln các thông tin trong mt min ng dng. Tính hiu qu ca các
thut toán lp lu n th hin chi phí v thi gian và không gian dành cho vi c l p lu n.
Tuy nhiên, hai yếu t ế này dường như đối ngh ch nhau, tc n u ngôn ng tính
biu đt cao thì thut toán lp lu n trên đó s độ phc tp ln (tính hi u qu thp)
ngược li (ngôn ng đơn gin, tính bi u đạt th p thì thu t toán l p lu n trên đó
s hiu qu cao). Do đó, m ĩ t thách th c ln trong l nh vc AI xây d ng các
ngôn ng biu di u tn tri thc mà có th ng hai y cân b ế này, tc là ngôn ng có tính
biu ng đạt đủ tt (tùy theo t ng d ng) và có th l p lu n hi u qu .
¾ Lp k hoế ch: kh nă ng suy ra các mc đích c n đạt được đối vi các nhi m v đưa
ra, và xác định dãy các hành động cn thc hin để đạt được m đc ích đó.
¾ Hc máy: mt lĩ nh vc nghiên cu c đa AI ang được phát tri n m nh m
nhiu ng d ng trong các lĩnh vc khác nhau như khai phá d liu, khám phá tri
thc,…
¾ X lý ngôn ng t nhiên: là mt nhánh ca AI, t p trung vào các ng d ng trên ngôn
ng ca con người. Các ng dng trong nhn dng tiếng nói, nhn dng ch viế t, d ch
t động, tìm kiếm thông tin,…
¾ H chuyên gia: cung c p các h th ng kh nă ếng suy lu n để đưa ra nh ng k t
lun. Các h chuyên gia kh nă ng x lượng thông tin ln và cung c p các kết
lun d u ha trên nhng thông tin đó. rt nhi chuyên gia ni tiếng như các h
chuyên gia y hc MYCIN, đoán nhn cu trúc phân t t công thc hóa hc
DENDRAL, …
¾ Robotics
¾
4. Ni dung môn hc
Giáo trình này được viết vi các ni dung nhp môn v AI cho các sinh viên chuyên
ngành Tin hc Công ngh thông tin. Các tác gi có tham kho mt s tài li u, giáo
trình ca các trường Đại h i hc Quc gia ni, Đạ c Bách khoa ni, Ni dung
gm các phn sau:
Chương 1. Gii thiu: trình bày t ng quan v AI, l ch s ra đời phát trin các lính
vc ng dng ca AI.
Chương 2. Các phương pháp tìm kiế ếm li gi i: trình bày các k thu t tìm ki m cơ bn
đượ đểc áp dng gii quyết các v c cn đềđược áp d ĩng rng rãi trong các l nh v a trí
tu nhân to.
Chương 3. Các gii thut tìm kiếm li gii cho trò chơi: trình bày mt s k thut tìm
kiếm trong các trò chơi có đối th.
Chương 4. Các phương pháp lp lun trên logic mnh đề: trình bày pháp, ng nghĩa
ca logic mnh đề và m t s thu t toán l p lu n trên logic m nh đề.
Chương 5. Các phương pháp lp lun trên logic v t cp mt: trình bày pháp, ng
nghĩa ca logic v t c p mt m t s thu t toán l p lu n cơ b n trên logic v t cp
mt.
Chương 6. Prolog: Gii thi u chung v ngôn ng Prolog, cú pháp, ng nghĩa cu trúc
chương trình trong Prolog, mt s i c phiên bn m a Prolog như SWI Prolog,…
Chương 7. Lp lun vi tri thc không chc chn: Gii thiu v tri thc không chc chn
và mt s cách tiếp c n bi u di n và x lý tri thc không ch c ch n.
Chương 8. Hc mng noron nhân t o: Gii thi u v phương pháp các k thut cơ bn
trong lp lu ng noron nhân tn s dng m o.
Chương 2 – Bài toán và phương pháp tìm kiếm li gii
1. Bài toán và các thành phn ca bài toán
Chương này gii thi u các gi i thu t máy tính th gii các bài toán thông
thường đòi hi trí thông minh ca con người, như bài toán đong nước, bài toán 8 trên
bàn c bên d, bài toán tìm đường như mô t ưới đây. Để thiết kế gii thut chung gii các
bài toán này, chúng ta nên phát biu bài toán theo d ng 5 thành ph n: Tr ng thái bài toán,
trng thái đầu, trng thái đích, các phép chuyn trng thái, lược đồ chi phí các phép
chuyn trng thái (viết gn là chi phí).
a. Bài toán đong nước
S dng ba can 3 lít, 5 lít và 9 lít, làm thế nào để đong được 7 lít nước.
Bài toán này được phát biu li theo 5 thành phn như sau:
- Trng thái: Gi s nước có trong 3 can ln lượt là a, b, c (a 3, b 5, c 9), khi đó b
ba (a, b, c) là trng thái ca bài toán
- Trng thái đầu: (0, 0, 0) // c ba can đều rng
- Trng thái đích (-, -, 7) // can th 3 cha 7 lít nước
- Phép chuyn trng thái: t trng thái (a,b,c) có th n sang tr chuy ng thái (x,y,z) thông
qua các thao tác như làm rng 1 can, chuyn t can này sang can kia đến khi hết nước
can ngu n ho c can đích b đầy.
- Chi phí mi phép chuyn tr n trng thái: mi phép chuy ng thái có chi phí là 1.
3 l
5 l
9 l
Mt l i ci gi a bài toán là mt dãy các phép chuyn trng thái (đường đi) t trng thái
đầ đếu n trng thái đích. Bng dưới đây là 2 li gii ca bài toán trên:
a b c Å Đầu Æ a b c
0 0 0 0 0 0
3 0 0 0 5 0
0 0 3 3 2 0
3 0 3 3 0 2
0 0 6 3 5 2
3 0 6 Đích Æ 3 0 7
0 3 6 Li gii 2 (chi phí: 5)
3 3 6
1 5 6
0 5 7 Å Đích
Li gii 1 (chi phí: 9)
b. Bài toán di chuyn 8 s trên bàn c
Trng thái đầu Trng thái đích
Cho bàn c kích thước 3 x 3, trên bàn c 8 quân c đánh s t 1 đến 8 (hình v).
Trên bàn c có m t ô tr ng. Chúng ta có th chuy n m t quân cchung cnh vi ô
trng sang ô trng. Hãy tìm dãy các phép chuy ng thái ban n để t tr đầu v trng thái
mà các quan c được xếp theo trt t như Trng thái đ ích c a hình trên.
Bài toán di chuyn 8 s trên bàn c có th phát bi u dưới dng 5 thành phn như sau:
- Biu din tr ng thái: m ng 2 chi ư u kích thước 3x3, ph n t ca mng l u s hi u quân
c (t 0 đến 9, 0 v trí trng). Cũng th bi u di n tr ng thái bàn c b ng m ng
mt chiu gm 9 phn t: ba phn t đầu tiên bi u di n các ô thuc dòng đu tiên ca
bàn c, ba phn t tiếp bi u di n các quân c thuc dòng th hai, ba phn t cui
cùng biu din các quân c thu đc dòng cu i cùng. ây chúng tôi s d ng m ng hai
chiu 3x3 để cho ging vi bàn c trên thc tế.
- Trng thái đầu (hình v trên)
- Trng thái đích (hình v trên)
- Phép chuyn trng thái: đổi ch ô có s hiu 0 vi mt trong các ô có cùng cnh.
- Chi phí: mi phép chuyn có chi phí 1.
Li gii ca bài toán là dãy các phép chuyn t trng thái đ đếu n trng thái đích. Mt li
gii ca bài toán là: UP, UP, RIGHT, DOWN, LEFT, UP, RIGHT, RIGHT, DOWN,
LEFT, LEFT, UP, RIGHT, DOWN, RIGHT, DOWN (chú ý: up, down, right, left biu
din s dch chuyn ô trng lên trên, xung dưới, sang phi, sang trái)
c. Bài toán tìm đường đi
Mt ôtô robot tìm đường đi t thành ph Arad đến thành ph Bucharest. Biết rng xe
robot này không có bn y đồ đầ đủ như trên hình v trên, nhưng khi nó đến mt thành ph
mi, b c ế m bi n đọc được bi n ch đường đến các thành lân c n, trên bi n ch
đường có khong cách.
Bài toán tìm đường có th phát biu theo 5 thành phn như sau:
- Trng thái: v trí ca ôtô robot (tên thành ph)
- Trng thái đầu: Thành ph Arad
- Trng thái đích: Thành ph Bucharest
- Phép chuyn trng thái: t thành ph sang thành ph lân cn
- Chi phí: khong cách gia 2 thành ph trong phép chuyn trng thái
Li gii ca bài toán dãy các phép chuyn t trng thái đầu đến trng thái đích, hay
đườ đầ đếng đi t thành ph u n thành ph đích. M t ví d ca li gii bài toán là: Arad Æ
Sibiu Æ Fagaras Æ Bucharest.
2. Gii thut tng quát tìm kiếm li gii
a. Không gian trng thái ca bài toán
Mi bài toán vi 5 thành phn như t trên, chúng ta có th xây dng được mt cu
trúc đồ th vi các nút các tr ng thái ca bài toán, các cung phép chuy n tr ng thái.
Đồ th này được gi là không gian trng thái ca bài toán. Không gian trng thái có th
hn hoc hu hn. d, vi bài toán di chuyn 8 s trên bàn c, không gian trng
thái có s lượng là 8! (8 giai tha) trng thái.
Li gii ca bài toán mt đường đi trong không gian trng thái đim đầu trng
thái đầu và đim cui là trng thái đích. Nếu không gian trng thái ca bài toán là nh, có
th lit lưu va trong b nh ca máy tính thì vic tìm đường đi trong không gian
trng thái th áp dng các thut toán tìm đường đi trong thuyết đồ th. Tuy nhiên,
trong rt nhi c duyu trường hp, không gian trng thái ca bài toán rt ln, vi t toàn
b không gian trng thái không th. Trong môn hc Trí tu nhân to này, chúng ta s
tìm hiu các phương pháp tìm kiếm li gii trong các bài toán không gian trng thái
ln.
b. Gii thut tng quát tìm kiếm li gii ca bài toán
Vi các bài toán có 5 thành phn trên, chúng ta có gii thut chung để tìm kiếm li gii
ca bài toán. Ý tưởng sinh ra các li gii tim năng kim tra chúng phi li
gii thc s c đa bài toán. Mt li gi ăi ti m n ng m t đường i trong không gian trng
thái ca bài toán nút đầu trng thái đầu m i cung c a đường đi m t phép
chuyn h p l gia các trng thái k v i cung đó. L i gii thc s ca bài toán li gii
tim n m năng nút cui cùng trng thái đích. Các li gii ti ăng các đường đi
cùng nút đầu tiên dãy các cung dãy các phép chuyn h p l t tr đng thái đầu ó.
Các li gii tim năng th t chc theo cây, g c c a cây trng thái đầu, cây được
phát trin bng cách b sung vào các nút lin k vi tr đ ếng thái đầu, sau ó liên ti p b
sung vào các con ca các nút lá, …
Lược đồ chung để tìm li gi i ca bài toán 4 thành ph n trên là xây d ng cây li gi i ti m
năng (hay cây tìm kiế ă m) ki m tra li gi i ti m n ng có li gi i thc s ca bài
toán hay không. Các bước ca gii thut chung là như sau: xây dng cây tìm kiếm mà nút
gc là trng thái đầu, lp li 2 bước: kim tra xem trng thái đang xét có là trng thái đích
không, nếu trng thái đích thì thông báo li gii, nếu không thì m rng cây tìm kiếm
bng cách b sung các nút con các trng thái láng ging ca trng thái đang xét. Gii
thut chung được trình bày trong bng sau:
Đầu vào c a gi i thu t bài toán (problem) vi 5 thành ph n (bi u din trng thái tng
quát, trng thái đầu, trng thái đích, phép chuyn trng thái, chi phí phép chuyn trng
thái) mt chi c tìm kiến lượ ếm (strategy); đầu ra c a gi i thu t mt li gi i c a bài
toán hoc giá tr failure nếu bài toán không li gii. Gi i thu t sinh ra cây các li gi i
tim năng, nút gc trng thái đầu ca bài toán, m r ếng cây theo chi n lược (strategy)
đã định trước đến khi cây cha nút trng thái đích hoc không th m r ng cây được na.
Trong gii thut chung này, chiến lược tìm kiếm (strategy) s quyết định vic chn nút lá
nào trong st lá ca cây để m ế ư rng cây tìm ki m, ví d nh nút lá nào xu t hi n trong
cây sm hơn thì n trđược ch ước để phát trin cây (đây là chiến lược tìm kiếm theo chiu
Function General_Search(problem, strategy) returns a solution, or failure
cây-tìm-kiếm Å trng-thái-đầu;
while (1)
{
if (cây-tìm-kiếm không th m r ng được na) then return failure
nút-lá Å Chn-1-nút-lá(cây-tìm-kiếm, strategy)
if (node-lá là trng-thái-đích) then return Đường-đi(trng-thái-đầu, nút-lá)
else m-rng(cây-tìm-kiếm, các-trng-thái-k(nút-lá))
}
rng), hoc nút lá nào xut hin sau thì được chn để m r đng cây ( ây là chiến lược tìm
kiếm theo chiu sâu). Chiến lược tìm kiếm có th được cài đặt thông qua mt cu trúc d
liu để đưa vào ly ra trng thái ca cây tìm kiế m. Hai c u trúc d li u cơ bn
hàng đợi ngăn xếp. Hàng đợi s lưu các tr ng thái ca cây tr ng thái nào được
đư đợa vào hàng i trước s được l y ra trước, còn ngă ế n x p c u trúc d li u lưu trng
thái ca cây tìm kiếm vic chn nút ca cây s theo ki u vào trước ra sau. B ng
dưới đây chi tiết hóa thut toán tìm kiếm li gii trên vi chiến lược tìm kiếm được
th hin thông qua cu trúc d liu hàng đợi (queue) hoc ngăn xế p (stack). Trong gi i
thut chi tiết hơn này, cây tìm kiế m được bi u di n b ng m ng m t chiu father, trong đó
father(i) là ch nút cha ca nút i. Th t đc path(node,father) dùng để ln ngược đường i t
trng thái node v nút gc (trng thái đầu) (node được truy n giá tr là trng thái đích khi
th t i). c path được g
Function General_Search(problem, Queue/Stack) returns a solution, or failure
Queue/Stack Å make_queue/make_stack(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
while (1)
if Queue/Stack is empty then return failure;
node = pop(Queue/Stack) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(Queue/Stack, expand-nodes );
foreach ex-node in expand-nodes
father(ex-node) = node;
end
c. Cây tìm kiếm:
Trong quá trình tìm kiếm li gii, chúng ta thường áp dng mt chiến lược để sinh ra các
li gii tim năng. Các li gii tim năng được t chc thành cây mà gc là trng thái đầu
ca bài toán, các mc tiếp theo ca cây các nút k v i các nút mc trước. Thông
thường thì cây tìm kiếm được m rng đến nó cha trng thái đích là dng.
3. Đánh giá gii thut tìm kiếm
Mt gii thut tìm kiếm li gii ca bài toán ph thuc rt nhiu vào chiến lược tìm kiếm
(hay cu trúc d liu để lưu các nút c ếa cây trong quá trình tìm ki m). Để đánh giá
gii thut tìm kiếm người ta đưa ra 4 tiêu chí sau:
1. Tính đầy đủ: gi i gi u bài toán ti thut có tìm được l i ca bài toán không nế n ti
li gii?
2. Độ phc tp thi gian: thi gian ca gi i thu t kích c như thế nào đối vi bài
toán?
3. Độ phc tp không gian: Kích c ca b nh c n cho gi i thu t? Trong gi i thu t
tng quát trên, kích c b nh ch yế u ph thu c vào c u trúc d li u lưu các
trng thái lá ca cây tìm kiếm
4. Tính ti i ưu: Gii thut tìm ra li gii chi phí t ưu (nh nht hoc ln nht
tùy theo ng cnh ca bài toán)?
Function path(node,father[]) : print the solution
n Å node
while (n # empty)
cout<< n <<“ <-- ” ;
n = father[n];
end
Độ ph c tp thi gian độ ph c t ế p không gian ca gi i thu t tìm ki m li gi i ca bài
toán th đánh giá da trên kích thước đầu vào ca gi i thu t. Các tham s kích thước
đầu vào có th là:
- b nhân t nhánh ca cây tìm kiếm: s nhánh ti đ a c a m t nút, hay s phép
chuyn tr ng thái tng thái ti đa c a m t tr ng quát
- d – độ sâu ca li gii có chi phí nh nht
- m – độ sâu ti đa ca cây tìm kiếm (m có th là vô hn)
Trong các gii thut tìm kiếm li gii đề c ưp n đế chương này, chúng ta s đánh giá u,
nhược đim ca tng gii thut da trên 4 tiêu chí trên.
4. Các gii thut tìm kiếm không có thông tin phn hi (tìm kiếm mù)
Các gii thut tìm kiếm không s d ng thông tin phn h i (hay là gi ếi thu t tìm ki m mù)
là các gii thut ch s dng thông tin t 5 thành phn cơ bn ca bài toán (tr ng thái t ng
quát, trng thái đầu, trng thái đích, phép chuyn trng thái, chi phí). Ý tưởng chung cơ
bn ca các gii thut này là sinh ra cây li gii tim năng (cây tìm kiếm) mt cách có h
thng (không b sót và không lp li). Phn này s gii thiu các gii thut tìm kiếm theo
chiu rng, tìm kiếm theo chiu sâu, tìm ki n, tìm kiếm theo chiu sâu gii h ếm sâu
dn. Các gii thut này đều theo gi i thu t chung đã gii thi u bên trên, ch khác nhau
chiến lược tìm kiếm hay cu trúc d liu để lưu gi ly ra các nút ca cây tìm
kiếm.
a. Tìm kiếm theo chiu rng
Gii thut tìm kiếm li gii theo chiu r ng cài đặt c th ca gi i thu t chung tìm
kiếm li gii, trong đó s d ng c u trúc d li u ki u hàng đợi (queue) để lưu gi các
trng thái nút lá ca cây tìm kiếm. Các nút lá sinh ra trong quá trình thc thi gii thut s
đượ đợc c p nh t vào m t hàng i theo nguyên tc nút nào được đưa vào hàng đợi trước s
được ly ra trước trong quá trình m rng cây. Chi tiết ca gii thut được cho trong bng
bên dưới.
Chúng ta s minh h ế a vi c tìm ki m li gi i bng gii thut tìm kiếm theo chiu rng
bng d c th như sau. Gi s bài toán không gian các trng thái đầy đủ như hình
v ngay sau bng gii thut (trang sau), vi trng thái đầu là S, trng thái đích là G và các
phép chuyn trng thái là các cung ni gia các trng thái. Gi i thu t b t đầu xét vi hàng
đợ đầi cha trng thái u S, ly trng thái đầu hàng đợi ra kim tra xem trng
thái đích, nếu i giđích thì in l i, nếu không thì b sung các trng thái con ca vào
hàng đợi.
Function Breadth-Search(problem, Queue) returns a solution, or failure
Queue Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
while (1)
if Queue is empty then return failure;
node = pop(Queue) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(Queue, expand-nodes );
foreach ex-node in expand-nodes
father(ex-node) = node;
end
Không gian đầy đủ các trng thái ca bài toán
Bng phía dưới là din biến các biến chính ca gi ế i thu t: bi n tr ng thái đang xét – node,
biến ng đợi Queue, biến lưu thông tin v cây tìm ki m Father. Giế ếi thu t k t thúc
vi 8 vòng lp khi trng thái đang xét node = G và khi đó li gii ca bài toán là đường đi
G Å B Å S.
Đánh giá gii thut tìm kiếm theo chiu rng:
9 Tính đầy đủ: gi i thu t s cho li gi ế i ca bài toán n u bài toán tn t i li gi i và
nhân t nhánh b là hu hn
9
Độ phc tp thi gian: 1+b+b
2
+…+b
d
(s vòng l p khi g p tr ng thái đích) = O(b
d
)
9 Độ phc tp không gian: s l tượng ô nh i đa s dng trong gii thut (ch yếu là
bi
ến Queue, xem hình v dưới): b
d
9 Tính ti ư ế u: gi i thu t tìm ki m theo chi u r ng s tìm ra li gii vi ít trng thái
trung gian nht.
node Queue Father
S
S A, B, C Father[A,B,C]=S
A B, C, D, E Father[D,E]=A
B C,D,E,G Father[G]=B
C D, E, G, F Father[F]=C
D E,G, F, H Father[H]=D
E G, F, H
G F, H
Giá tr các biến trong
gii thut theo chiu rng
Cây tìm kiếm ca gii thut theo chiu rng
b. Tìm kiếm theo chiu sâu
Gii thut tìm kiếm theo chiu sâu hoàn toàn tương t như gii thut tìm kiếm theo chiu
rng, ch khác ch thay vì s dng cu trúc d liu hàng đợi, ta s d ng c u trúc d liu
ngăn xếp (Stack) để lư u gi các tr ếng thái ca cây tìm ki m. Đối vi cu trúc d liu
ngăn xếp, các trng thái đưa vào sau cùng s được ly ra trước đ m rng cây tìm kiếm.
Gii thut din biến các biến chính trong gii thut được trình bày trong các bng
hình v i G dưới đây. Kết qu ca gii thut là li gi Å E Å A Å S.
G
G
m
m
b
b
d
d
Hàng đợi trong gii thut tìm kiếm theo chiu r ng ch cha các nút lá ca cây tìm
ki
ếm, vì vy có kích thước là b
d
.
Đánh giá gii thut tìm kiếm theo chiu sâu:
9 Tính đầy đủ: gi i thu t không ch c chn cho li gii ca bài toán trong trường hp
không gian trng thái ca bài toán là vô hn
Function Depth-Search(problem, Stack) returns a solution, or failure
Stack Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
while (1)
if Stack is empty then return failure;
node = pop(Stack) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(Stack, expand-nodes );
foreach ex-node in expand-nodes
father(ex-node) = node;
end
Cây tìm kiếm ca gii thut theo chiu
node Stack father
S
S A, B, C Father[A,B,C]=S
A D, E, B, C Father[D,E]=A
D H, E, B, C Father[H]=D
H E, B, C
E G, B, C Father[G]=E
G
Giá tr các biến trong
gii thut theo chiu sâu
9
Độ phc tp thi gian: O(b
m
)
9 Độ phc tp không gian: O(b.m)
9 Tính ti ư ế u: gi i thu t tìm ki m theo chi u sâu không cho li gi i t i ưu.
c. Tìm kiếm theo chiu sâu có gii hn
Gii thut tìm kiếm theo chiu sâu trên ưu đim th sinh ra li gii nhanh
chóng không tn kém b nh c a máy tính. Tuy nhiên nế u không gian tr ng thái c a
bài toán hn thì rt th không tìm được li gii ca bài toán khi hướng tìm
kiếm không ch a tr ng thái đích. Để khc phc nhược đim này, chúng ta có th đặt gii
hn độ sâu trong gii thut: nếu độ sâu ca trng thái đang xét vượt quá ngưỡng nào đó
thì chúng ta không b sung các nút k vi tr ng thái này na chuy n sang hướng tìm
kiếm khác. Chi tiết ca gii thut được cho trong bng dưới đây, trong đó chúng ta đưa
thêm biến m ng m t chiu depth[i] lưu độ sâu ca trng thái i.
Function Depth-Limitted-Search(problem, maxDepth)
returns a solution, or failure
----------------------------------------------------------------------
Stack Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
depth(initial-state[problem]) = 0;
while (1)
if Stack is empty then return failure;
node = pop(Stack) ;
if test(node,Goal[problem]) then return path(node,father);
if (depth(node) < maxDepth)
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(Stack, expand-nodes );
foreach ex-node in expand-nodes
father(ex-node) = node;
end
d. Tìm kiếm sâu dn
Gii thut tìm kiếm vi chiu sâu gii h n trên ph thuc vào gii h n độ sâu la
chn ban đầu. Nếu biết trước trng thái đích s xut hi đn trong ph m vi độ sâu nào ó ca
cây tìm kiếm thì chúng ta i thuđặt gii hn độ sâu đó cho gi t. Tuy nhiên nếu chn độ
sâu ti đa không phù hp, gii thut tìm kiếm theo chiu sâu gii hn s không tìm
được li gi i ca bài toán. Chúng ta th gi thc hi n gi i thu t tìm kiếm li gi i độ
sâu khác nhau, tđến ln. Gii thut b sung như sau:
Function Iterative-deepening-Search(problem) returns a solution, or failure
for depth = 0 to do
result Å Depth-Limited-Search(problem, depth)
if result succeeds then return result
end
return failure
Chươ ương 3 –Các ph ng pháp tìm kiếm heuristic
1. Gii thut tìm kiếm tt nht đầu tiên (best first search)
Các gii thut trong mc 4 trên chung đặc đim tìm kiếm li gii mt cách h
thng: xây d ng t t c i ti không gian li gi m nă ng theo cách vét c n, không b sót
không l i. Trong rp l t nhiu tr p, các giường h i thut như v y không kh thi vì không
gian trng thái bài toán quá ln, tc độ x b nh ca máy tính không cho phép
duyt các li gii tim năng. Để h ến ch không gian cây các li gi ăi ti m n ng, chúng ta
đư địa ra mt hàm nh hướng vic m rng cây tìm kiế m. Theo cách này, chúng ta s m
rng cây theo các nút lá có nhiu tim năng cha trng thái đích hơn các nút lá khác.
d nh h ng m, đối vi bài toán 8 s, chúng ta đưa ra mt hàm đị ướ rng cây như sau:
gi s n m t trng thái bàn c (m t s sp xếp 8 quân c trên bàn c 3x3), hàm định
hướng h định nghĩa như sau:
h(n) = tng khong cách Manhatan các v trí c i v trí ca tng quân c trên bàn c n v a
nó trên bàn c đích.
Chng hn, nếu n trng thái đầu như trong hình ca mc 1.b, h(n) có th xác định như
sau:
Quân c V trí trên n V trí trên bàn
c đích
Khong cách (s ln dch
chuyn khi bàn c không có
quân c khác)
Trng thái n là trng thái đầu ca bài toán 8 s trong m c 1.b
1 (3,3) (1,3) 2
2 (2,3) (2,3) 0
3 (3,2) (3,3) 1
4 (1,1) (1,2) 1
5 (1,3) (2,2) 2
6 (3,1) (3,2) 1
7 (1,2) (1,1) 1
8 (2,1) (2,1) 0
h(n) = 2 + 0 + 1 + 1 + 2 + 1 + 1 + 0 = 8
Hàm h(n) như mô t trên phn ánh s “khác nhau” gia trng thái n vi trng thái đích,
h(n) càng nh thì n càng “ging” vi trng thái đích, khi n trùng vi tr đng thái ích thì
h(n) = 0.
Khi không gian bài toán quá ln, vic m rng cây theo chiế n lược theo chi u rng ho c
theo chiu sâu dn đến cây tìm kiếm quá l i gin mà không cha l i ca bài toán. Khi đó
chúng ta cn m n v rng cây theo hướng các nút lá có nhiu tri ng cha trng thái đích,
và hàm h(n) s giúp chúng ta m r rng cây. Chúng ta s m ng cây theo hướng các nút
lá có hàm h(n) nh nh n ht. Khi đó h được gi là thông tin ph i ca quá trình m rng
cây là có hp lý hay không (vì thế mà các phương pháp tìm kiếm trong mc này gi là
tìm kiếm có phn hi - informed search, chúng c m heuristic - dũng có tên là tìm kiế a
trên hàm đánh giá hp lý h).
Để m rng cây theo nút lá có giá tr h nh nh t, chúng ta s d ng m t c u trúc d li u là
danh sách (list) có sp xếp theo giá tr h. Gii thut chi tiết được trình bày trong bng sau
(được gi là gii thut Best-First-Search):
Chú ý rng, cu trúc gi t này gii thu ng vi các gi i thu t tìm kiếm theo chi u r ng hay
theo chiu sâu, ch khác ch, thay s dng hàng đợi hay ngă ến x p để lưu gi các
trng thái ca cây tìm kiếm, chúng ta s d ế ng danh sách s p x p theo giá tr hàm h.
Danh sách sp x p tế ăng hay gim ph thuc vào hàm h ng cnh ca bài toán, d
bài toán 8 s hàm h định nghĩa trên, danh sách cn s p x ếp theo th t tă ng d n để
khi ly phn t đầu danh sách ta c được nút lá “gn” vi đích nht.
Hình v sau minh ha vic m rng cây tìm kiếm khi s dng gii thut trên:
Function Best-First-Search(problem, list, h) returns a solution, or failure
list Å make-list(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
while (1)
if list is empty then return failure;
node =
pop(list) ; // node with max/min h
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(list, expand-nodes ,h);
foreach ex-node in expand-nodes
father(ex-node) = node;
end
Function push(list, expand-nodes ,h);
Chèn các nodes trong expand-nodes vào list sao cho mng list sp theo th t
tăng/gim theo hàm h
Cây có gc trng thái đầu vi giá tr h(đầu) = 8. T trng thái gc có hai phép chuyn:
chuyn ô trng đổi v trí cho ô s 7 (hàm h gim đi 1) đổi v trí ô trng cho ô s 8
(hàm h tăng lên 1). Lúc này danh sách sp xếp có 2 nút lá tương ng vi hai trng thái có
hàm h=7 h=9. Trong 2 nút này, gii thut s chn nút giá tr hàm h nh hơn
(h=7) để m rng cây. Tiếp tc m r ng cây theo hướng nút giá tr h nh nht
(trong trưng hp nhiu nút cùng giá tr nh nht thì chn nút nào xut hin
trước) thì ta được mt phn ca cây như trong hình v trên.
2. Các biến th ca gii thut best first search
Ý tưởng ca gii thut tìm kiếm tt nht đầu tiên (best first search) m rng cây tìm
kiếm theo hướng ưu tiên các nút lá có trin vng cha trng thái đích (da trên hàm đánh
giá h). Gii thut best-first-search có các biến th sau:
- Khi hàm h(n) chi phí ca dãy phép chuyn t trng thái đầ đếu n trng thái n thì gii
thut best-first-search tên gi khác gii thut tìm kiếm đều (uniform search). Trong
trường hp này, cây tìm kiếm s m rng đều v t ế t c các hướng theo v t d u loang t
trng thái đầu. Khi hàm chi phí c các a dãy phép chuyn s đỉnh trung gian thì gii
thut uniform search tr t tìm ki thành gii thu ếm theo chiu rng. Gii thut uniform
search s cho li gii vi chi phí nh nht, tuy nhiên cây tìm kiế m sinh ra trong gi i thu t
này thường có kích thước rt ln.
- Khi h(n) ước lượng chi phí/khong cách t n đến đích (ví d như khong cách
Manhatan trong bài toán 8 s trên) thì gii thut best-first-search được gi gi i thu t
tham ăn (greedy search). Gii thut tham ăn s chn nút n “gn” đến đích nht trong
s các nút ca cây tìm kiếm để m rng cây, không quan tâm đến chi phí t
trng thái đầu đến n. Do vy gii thut xu hướng cho ra kết qu trong thi gian nhanh
nht, nhưng không phi lúc nào cũng là li gii ngn nht.
- Khi h(n) = f(n) + g(n), trong đó f(n) là hàm chi phí/khong cách t trng thái đầu đến n
và g(n) là hàm ước lượng chi phí/khong cách t n đến trng thái đích, và nếu g(n) là ước
lượng dưới ca hàm chi phí/khong cách thc s t n đến tr ng thái đích thì gi i thu t
best-first-search được gi gii thu i thut A*. Gi t A* gii thut trung hòa gia hai
gii thu i thut uniform gi t greedy trên. A* cho li gii chi phí nh nht (bn
đọc th tìm hi u chng minh đi u này các tài li u khác) cây tìm kiếm kích
thước va phi.
Ví d, đối vi bài toán tìm đường đi t thành ph Arad đến thành ph Bucharest đã mô t
trong 1.b, nếu chúng ta s d ng kho ng cách Ơclit (kho ng cách theo đường chim bay) t
mi thành ph đến đích (xem hình v trên) thì các gii thut uniform, greedy A* s
cho các cây tìm kiếm như sau:
Mt phn cây tìm kiếm ca gii thut Uniform search
Cây tìm kiếm ca gii thut Greedy search
Cây tìm ki a giếm c i thut A*
3. Các gii thut khác
* Tìm kiếm leo đồi:
Ý tưởng: Tìm kiếm theo chiu sâu kết hp vi hàm đánh giá. M rng tr ng thái hi n t i
đánh giá các trng thái con ca bng hàm đánh giá heuristic. Ti m i b ước, nút
“tt nht” s i ti được chn để đ ếp.
Procedure Hill-Climbing_search;
Begin
1. Khi to ngăn xếp S ch ch a tr ng thái đầu;
2. Loop do
2.1 If S rng then {thông báo tht bi; stop};
2.2 Ly trng thái u đầu ngăn xếp S;
2.3 If u là trng thái kết thúc then
{thông báo thành công; stop};
2.4 For mi trng thái v k u do đặt v vào danh sách L;
2.5 Sp x ng dếp L theo th t tă n ca hàm đánh giá sao cho trng
thái tt nht đầu danh sách L;
2.6 Chuyn danh sách Lvào ngăn xếp S;
End;
Ví d : V thi ví d đồ không gian trng thái như hình 2.2 thì cây tìm kiếm leo đồi
tương ng như hình 2.4 :
Hn chế ca thut toán :
- Gii thu ng ct có khuynh hướng b sa ly nh c đại cc b:
+ L i tìm i gi được không ti ưu
+ Không tìm được li gii mc dù có tn ti li gii
- Gii thut có th gp vòng lp vô hn do không lưu gi thông tin v các trng thái đã
duyt.
* Tìm kiếm Beam
Để h ến ch không gian tìm kiếm, người ta đưa ra phương pháp tìm kiếm Beam. Đây
phương pháp tìm kiếm theo chiu rng nhưng hn chế s đỉnh phát trin mi
mc. Trong tìm kiếm theo chiu rng, ti m i m c ta phát trin tt c các đỉnh, còn
tìm kiếm Beam thì chn k đỉnh tt nht để phát trin. Các đỉnh này nh bđược xác đị i
hàm đánh giá. Ví d, vi đồ thì không gian trng thái như hình 2.2 ly k=2 thì cây
tìm ki c là các ếm Beam như hình 2.5. Các đỉnh được chn mi m đỉnh được tô màu
đỏ:
E
A
20
D
6
7
I
8
5
C
15
Cây tìm kiếm leo đồi
F
10
GB
0
* Tìm kiếm nhánh cn
Ý tưởng : thut toán tìm kiếm leo đồi k t hế p vi hàm đánh giá f(u). Ti mi bưc,
khi phát trin trng thái u, chn trng thái con v tt nht (f(v) nh nh t) ca u để phát
trin bước sau. Quá trình tiếp t c như v y cho đến khi gp trng thái wđích, hoc
w w không có đỉnh k, hoc f(w) ln hơn độ đườ dài ng đ đi t i ư u t m thi (đường i
đầ đườy đủ ng n nh t trong s nh ng ng đi đầy đủ đã tìm được). Trong các trường hp
này, chúng ta không phát trin đỉnh w n a, t c c t b nh ng nhánh xu t phát t w,
quay lên cha ca w để tiếp tc đi xu t nhng trng thái t t trong s nhng trng
thái còn li chưa được phát trin.
Procedure Branch-and-Bound;
Begin
1. Khi to ngăn xếp S ch ch a tr ng thái đầu;
Gán giá tr ban đầu cho cost; /*cost là giá tr đường đ i ti ưu t m thi*/
2. Loop do
2.1 If S rng then {thông báo tht bi; stop};
2.2 Ly trng thái u đầu ngăn xếp S;
H
G
K
E
A
20
D
6
7
I
8
12
5
3
B
0
C
15
y
tìm ki
ế
m Beam
F
10
B
0
G
5
2.3 If u là trng thái kết thúc then
if g(u)<=cost then {cost g(u); quay li 2.1};
2.4 if f(u)>cost then quay li 2.1;
2.5 For mi trng thái v k u do
{g(v) g(u)+k(u,v);
f(v) g(v) +h(v);
đặt v vào danh sách L1};
2.6 Sp x ng dếp L theo th t tă n ca hàm f;
2.7 Chuyn danh sách Lvào ngăn xếp S;
End;
d : Vi đồ th không gian trng thái như hình 2.7, đỉnh xut phát A đỉnh đích
B. Áp dng thut toán nhánh cn, ta xây dng được cây tìm kiếm như hình 2.9
giá tr c ta hàm f i các đỉnh được tính như bng 2.2:
Đỉnh phát
trin (u)
Đỉnh con
(v)
g(v) f(v) Đỉnh
chn
C 9 9+15=24
D 7 7+6=13 D
E 13 13+8=21
A
F 20 20+7=27
H 7+8=15 15+10=25 D
E 7+4=11 11+8=19 E
K 11+4=15 15+2=17 K E
I 11+3=14 14+4=18 I
K B 15+6=21 21+0=21
B cost := 21
K 14+9=23 23+2=25 I
B 14+5=19 19+0=19
B
B cost := 19
A
14
C
24
F
27
B
I
K
K
D
13
21
E
19
25
19
21
H
25
B
18
Cây tìm kiếm nhánh-cn
17
Tính giá tr hàm f cho thut toán
nhánh-cn
Nh n xét : Thu t toán nhánh-cn cũng là thut toán đầy đủ và ti ư ếu n u h(u) là hàm
đ đánh giá thp và có độ dài các cung không nh hơn m t s dương δ nào ó
Chương 4 – Các gii thut tìm kiếm l i cho trò chi gi ơi
Chương trình chơi c đầu tiên được viế ăt bi Claude Shannon vào n m 1950 đ ã m t
minh chng cho kh nă ng máy tính th làm được nh ng vi c đòi hi trí thông minh
ca con người. T đó người ta nghiên cu các chiến lược chơi cho máy tình vi các trò
chơi i tham gia). Viđối th (có hai ngườ c gii quyết bài toán này th đưa v bài
toán tìm kiếm trong không gian tr ếng thái, tc tìm mt chi n lượ ước chn các n c đi
hp l cho máy tính. Tuy nhiên, v ế n đề tìm ki m đây phc t p hơn so vi v n đề tìm
kiếm trong chương trước, vì người chơi không biết trước đối th s chn nước đi nào tiếp
theo. Chương này s ế trình bày m t s chi n lược tìm kiế ế ưm ph bi n nh Minimax,
phương pháp ct ct α-β.
1. Cây trò chơi đầy đủ
Các trò chơi đối th các đặc đim: hai ng a ra các nười thay phiên nhau đư ước đi
tuân theo các lu t c ), các lu a trò chơi (các nước đi hp l t này như nhau đối vi c
hai người chơi, chng hn các trò chơi c : c vua, c tướng, c ca rô (tic-tăc-toe), ….
d, trong chơi c vua, mt người điu khin quân Trng m đt người iu khin quân
Đen. Người chơi th la chn các nước đ i theo các lut vi các quân t t, xe, mã,…
Lut t t đi quân tt Trng, xe Trng, Trng,… ging lu đi quân t Đen, xe Đen,
Đen,…Hơn na, c hai người chơi đều biết đầy đủ các thông tin v tình thế cuc chơi.
Thc hi trong sn trò chơi là người chơi tìm kiếm nước đi t tt nh rt nhiu nước đi hp
l, ti m i l i c ượt chơ a mình, sao cho sau m đt dãy nước i đã th c hi n người chơi ph i
thng cuc.
Vn đề chơi c th được biu di n trong không gian tr ng thái, đó, mi tr ng thái
mt tình thế c sa cuc chơi (s p xếp các quân c trên bàn c):
- Trng thái xut phát s sp xếp các quân c ca hai bên khi bt đầu cuc chơi
(chưa ai đưa ra nước đi)
- Các toán t biến đổi trng thái là các nước đi hp l
- Các trng thái kết thúc các tình thế cuc chơi dng, thường được xác định bi
m it s đ u kin dng (chng hn, quân Trng thng hoc quân Đen thng hoc hai
bên hòa nhau)
- Hàm kết cuc: mang giá tr tương ng vi mi tr ế ng thái k t thúc. Ch ng h n, trong
c vua, hàm kết cuc giá tr 1 ti các tr ng thái Tr ng th ng, -1 ti các trng
thái Trng thua 0 t i các tr ng thái hai bên hòa nhau. Trong các trò chơi tính
đ đim khác thì hàm kết cuc th nhn các giá tr nguyên trong on [-m, m], vi m
là m t s nguyên dương nào đó.
Như v đ y, trong các trò chơ ơi đi th, người ch i ( i u khi n quân Tr ng gi tt
Trng) luôn tìm mt dãy các nước c đi xen k vi các nướ đi ca đối th (điu khin quân
Đen gi tt Đen) để t o thành mt đường đi t tr ng thái ban đầ đếu n tr ng thái kết
thúc là th ng. ng cho Tr
Không gian tìm kiếm đối vi các trò chơi này có th được bi u di n bi cây trò chơi như
sau: g a cây t phát, các c c ng vi trng thái xu đỉnh trên cây tương ng vi các trng
thái can c, các cung (u, v) nếu biế n đổi t tr ng thái u đến trng thái v. Các đỉnh
trên cây được gán nhãn đỉnh Trng (Đen) ng vi trng thái quân Trng (Đen) đưa
ra nước đi. Nếu mt đỉ đượnh u c gán nhãn là Trng (Đen) thì các đỉnh con v ca nó là tt
c các trng thái nhn được t u do Trng (Đen) thc hin mt nước đi hp l nào đó. Do
đ ó, các đỉnh trên cùng m t mc c a cây đều nhãn Tr ng ho c đều nhãn Đen,
các lá ca cây ng vi trng thái kết thúc.
Ví d : trò ch ơi Dodgem:
hai quân Trng hai quân Đen được xế p vào bàn c
3x3. Ban đầu các quân c được xếp như hình bên. Quân
Đen th đ i đến ô tr ng bên phi, trên hoc dưới.
Quân Trng th đi đến ô trng bên trên, bên trái hoc
bên phi. Quân Đen nếu ct ngoài cùng bên phi th
đ i ra kh i bàn c, quân Trng nếu hàng trên cùng có th
đ i ra kh i bàn c. Ai đưa đưc c hai quân c a mình ra
khi bàn c ho ếc t o ra tình th đối phương không đi
được là thng cuc.
Trò chơi Dod
g
em
2. Gii thut Minimax
Quá trình chơi c i h quá trình Trng Đen thay phiên nhau đưa ra các nước đ p
l cho đến khi dn đến trng thái kết thúc cuc chơi. Quá trình này biu din bi đường
đi t nút gc ti nút lá trên cây trò chơi. Gi s ti mt đỉnh u nào đó trên đường đi, nếu u
đỉnh Trng (Đen) thì c n ch n m đt nước i nào đ ó đến m t trong các đỉnh con Đen
(Trng) v ca u. Ti t đỉnh n Đen (Trng) v s ch đi tiếp đến m đỉnh con Trng (Đen) w
ca v. Quá trình này tiếp tc cho đế đạ đến khi t n m t đỉnh lá c a cây.
Chiến lược tìm nước đi ca Trng hay Đen luôn tìm nhng nước đi d n ti tr ng thái
tt nht cho mình ti nht cho đối th. Gi s Tr ng c n tìm nước đi ti đỉnh u, nước
đ đ i t i ưu cho Trng nước i dn ti đỉnh con v sao cho v tt nht trong s các đnh
con ca u. Đến l n nượt Đen ch ước đ i t v, Đen cũ đng ch n nước i t t nht cho mình. Để
chn nước đi ti i i ưu cho Tr ng t đnh u, cn xác định giá tr các đỉnh ca cây trò chơ
gc u. Giá tr ca các đỉnh ng vi giá tr c a hàm kết cu c. Đỉnh giá tr càng ln
càng t càng tt cho Tr nh giá trng, đỉ càng nh t cho Đen. Để xác định giá tr các
đỉnh ca cây trò chơi g đc u, ta i t mc th p nh t (các đỉnh lá) lên gc u. Gi s cn xác
định giá tr c a đỉ đỉnh v các nh con c a đã xác định. Khi đó, nếu v đỉnh Trng
en
Tr
ng
en
y
trò chơi Dod
g
em vi Đen đi trước
thì giá tr ca nó là giá tr ln nht trong các đỉnh con, nếu v là đỉnh Đen thì giá tr ca nó
là giá tr nh nht trong các đỉnh con.
Sau đây th t đc chn nước i cho Tr ng t i đỉ đỉnh u Minimax(u, v), trong đó v nh
con được chn ca u:
Procedure Minimax(u, v);
begin
val -;
for mi w là đỉnh con ca u do
if val(u) <= MinVal(w) then
{val MinVal(w); v w}
end;
---------------------------------------------------
Function MinVal(u); {hàm xác định giá tr cho các đỉnh Đen}
begin
if u là đỉnh kết thúc then MinVal(u) f(u)
else MinVal(u) min{MaxVal(v) | v là đỉnh con ca u}
end;
---------------------------------------------------
Function MaxVal(u); { hàm xác định giá tr cho các đỉnh Tr ng}
begin
if u là đỉnh kết thúc then MaxVal(u) f(u)
else MaxVal(u) max{MinVal(v) | v là đỉnh con ca u}
end;
Trong các th tc và hàm trên, f(u) là giá tr ca hàm k c tết cu i đỉnh kết thúc u.
Thut toán Minimax thu thuy t, chit toán tìm ki m theo chiế u sâu. V ế ến lược
Minimax cho phép tìm nước đi ti ư ếu cho Tr ng. Tuy nhiên trong thc t , ta không đủ
thi gian để tính toán nước đi ti ưu này. Bi thut toán tính toán trên toàn b cây trò
chơi (xem xét tt c các đỉnh ca cây theo kiu vét cn). Trong các trò ch i hay thì kích ơ
thước c c la cây trò chơi là c n. Chng hn, trong c vua, ch tính đến độ sâu 40 thì cây
trò ch
ơi đã đến 10
120
đỉnh. Nếu cây độ cao m ti mi đỉnh b nước đi thì độ
ph
c tp v thi gian ca thut toán Minimax là O(b
m
).
Trong thc tế, các trò chơi đều có gii hn v thi gian. Do đó, đ có th tìm nhanh nước
đ i tt (không phi t i ưu) thay s d ế ng hàm k t cuc xét t t c các đỉnh ca cây trò
chơi, ta s t b dng hàm đánh giá và ch xem xét m phn ca cây trò chơi.
3. Gii thut Minimax vi độ sâu hn chế
a) Hàm đánh giá
Hàm đánh giá eval cho mi đỉnh u đánh giá “mc độ li thế ca tr ng thái u. Giá tr
ca eval(u) là s dương càng ln thì trng thái u càng có li cho Tr ng, giá tr ca eval(u)
s dương càng nh thì tr ng thái u càng li cho Đen, eval(u)=0 thì tr ng thái u
không li cho đối th nào, eval(u)=+ thì u trng thái thng cuc cho Trng,
eval(u)=- thì u là trng thái thng cuc cho Đen.
Hàm đánh giá đóng vai trò rt quan trng trong các trò chơi, nếu hàm đ ánh giá t t s định
hướng chính xác vic l a ch n các nước đi tt. Vic thiết kế hàm đánh giá ph thuc vào
nhiu y u tế : các quân c còn li c a hai bên, s b trí các quân c này,… Để đưa ra hàm
đánh giá chính xác đòi hi nhiu thi gian tính toán, tuy nhiên, trong thc tế người chơi
b gii hn thi gian đưa ra nước đi. Vì vy, vic đưa ra hàm đánh giá ph thuc vào kinh
nghim ca người chơi. Sau đây là mt s ví d v cách xây dng hàm đánh giá:
d 1: Hàm đánh giá cho c vua. Mi loi quân được gán mt giá tr s phù h p v i
“sc mnh” ca nó. Ch ng h n, quân tt Trng (Đen) được gán giá tr 1 (-1), hoc
tượng Trng ( ng (Đen) được gán giá tr 3 (-3), xe Tr Đen) được gán giá tr 5 (-5) hu
Trng (Đen) được gán giá tr 9 (-9). Hàm đánh giá ca mt trng thái được tính bng cách
ly tng giá tr ca t đt c các quân c trong tr ng thái ó. Hàm đánh giá này được gi
hàm tuyến tính có tr ng s , vì có th bi u di n dưới d ng:
s
1 1 2 n
w + s w
2
+ … + s
n
w
Trong đó, w
i
là giá tr ca quân c loi i, s
i
là s quân loi đó.
Đây cách đánh giá đơn gi n, không tính đến s b trí c a các quân c, các mi
tương quan gia chúng.
d 2: Hàm đánh giá trng thái trong trò chơi Dodgem. Mi quân Trng được gán giá
tr tương ng vi các v trí trên bàn c như trong hình bên trái. Mi quân Đen được gán
giá tr các v trí tương ng nhu hình bên phi:
30 35 40 -10 -25 -40
15 20 25 -5 -20 -35
0 5 10 0 -15 -30
Ngoài ra, nếu quân Tr ng c ến tr c ti p mt quân Đen, được thêm 40 đim, nếu cn
gián tiếp được thêm 30 đim (xem hình dưới). T , nương t ếu quân Đen cn trc tiếp quân
Trng nó c thêm -40 đượ đim, cn gián tiếp được thêm -30 đim.
Áp dng cách tính hàm đánh giá nêu trên, ta tính được giá tr ca các trng thái các
hình dưới như sau:
Trng cn gián tiếp Đen
được thêm 30 đim
Trng c n tr c tiếp Đen
được thêm 40 đim
b) Thut toán
Để h ến ch không gian tìm kiếm, khi xác định nước đi cho Tr ng t i u, ta ch xem xét cây
gc u ti độ cao h nào đó. Áp dng th tc Minimax cho cây trò chơi gc u, độ cao h
s dng hàm đánh giá để xác định giá tr cho các lá ca cây.
Procedure Minimax(u, v, h);
begin
val -;
for mi w là đỉnh con ca u do
if val(u) <= MinVal(w, h-1) then
{val MinVal(w, h-1); v w}
end;
---------------------------------------------------
Function MinVal(u, h); {hàm xác định giá tr cho các đỉnh Đen}
begin
if u là t thúc đỉnh kế or h = 0 then MinVal(u, h) eval(u)
else MinVal(u, h) min{MaxVal(v, h-1) | v đỉnh con ca u}
end;
---------------------------------------------------
Function MaxVal(u, h); { hàm xác định giá tr cho các đỉnh Trng}
begin
if u là đỉnh kết thúc h =0 or then MaxVal(u, h) eval(u)
else MaxVal(u, h) nh con c max{MinVal(v, h-1) | v là đỉ a u}
end;
Giá tr hàm đánh giá:75=
(-10+0+5+10)+(40+30)
Giá tr hàm đánh giá:-5=
(-25+0+20+10)+(-40+30)
4. Gii thut Minimax vi ct ta alpha-beta
Trong chiến lược Minimax vi độ sâu hn chế thì s đỉnh ca cây trò chơi ph i xét v n
còn rt ln vi h>=3. Khi đánh giá đỉnh u t đ i độ sâu h, thu t toán Minimax òi hi ph i
đánh giá tt c các đỉnh ca cây gc u vi độ sâu h. Tuy nhiên, phương pháp ct ct
alpha-beta cho phép ct b nhng nhánh không cn thiết cho vic đánh giá đỉnh u.
Phương pháp này làm gi m bt s đỉnh ph i xét không ếnh hưởng đến k t qu đánh
giá đỉnh u.
Ý tưởng: Gi s t i thi i đim hin t đang ng nh đỉnh Tr a, đỉ aanh em là v đã được
đánh giá. Gi s cha c đ đ a đỉnh a b b u , có anh em là ã được ánh giá, và cha c a bc
như hình sau:
Khi đó ta giá tr đỉnh Trng c ít nht giá tr ca u, giá tr ca đỉnh Đen b nhiu nht
giá tr c đa v. Do đ ế ó, n u eval(u) > eval(v) ta không c n đi xung đ ánh giá đỉnh a
na vn không nh h ưởng đến đánh giá đỉnh c. Hay nói cách khác, ta th ct b
cây con gc a.
Lp lun tương t cho trường hp a đỉnh Đen, trường hp này nếu eval(u)<eval(v) ta
cũng ct b cây con gc a.
Để cài đ đỉt k thut này, đối vi các nh nm trên đường đi t g c ti đỉnh hi n thi, ta
s dng tham s α để ghi li giá tr ln nht trong các giá tr c đ đa các đỉnh con ã ánh giá
c
v a
b
u
max
max
min
Ct b
y
con
g
c a nếu eval
(
u
)
>eval
(
v
)
ca mt đỉnh Trng, tham s t trong các giá tr β để ghi li giá tr nh nh ca các đỉnh
con đã đánh giá c a m t đỉnh Đen.
Thut toán:
Procedure Alpha_beta(u, v);
begin
α←- ; β←- ;
for mi wđỉnh con ca u do
if α <= MinVal(w, α, ) β then
{α MinVal(w, α, β); v w}
end;
---------------------------------------------------
Function MinVal(u, α, β); {hàm xác định giá tr cho các đỉnh Đen}
begin
if uđỉnh kết thúc or u là lá ca cây hn chế then
MinVal(u, α, ) β eval(u)
else nh for mi đỉ v là con ca u do
{β min{β, MaxVal(v, α, β)} ;
If α >= β then exit};
/*ct b các cây con t các đỉnh v còn li */
MinVal(u, α, β β) ;
end;
---------------------------------------------------
Function MaxVal(u, α, ); {β hàm xác định giá tr cho các đỉnh Trng}
begin
if u là lá cđỉnh kết thúc or a cây hn chế then
MaxVal(u, α, ) β eval(u)
Else for m i đỉnh v là con ca u do
α α α max{ , MinVal(v, , β)} ;
If α >= β then exit};
/*c t b các cây con t các đỉnh v còn l i */
MaxVal(u, α α, β)
end;
Chươ ương 5 – Các ph ng pháp tìm ki a mãn ếm li gii th
các ràng buc
1. Các bài toán tha mãn các ràng buc
a. Bài toán 8 quân hu
Hãy đặt trên bàn c 8 quân hu sao cho không có hai quân hu nào cùng hang hoc cùng
ct hoc cùng đường chéo.
Bài toán 8 quân hu có th bi u di n bi 5 thành phn như sau:
- Trng thái: mng mt chiu 8 phn t HAU[0,1,…,7], phn t HAU[i] biu din dòng
đặ đặt con h ĩ u c t i. Ví d HAU[i]=j có ngh a là con h u ct I t dòng j.
- Trng thái đầu: Mt mng ngu nhiên 8 phn t, mi phn t nhn giá tr t 0 đến 7
- Trng thái đích: Gán các giá tr khác nhau phm vi t 0 đến 7 cho các phn t ca
mng sao cho i-HAU[i] j-HAU[j] (không nm trên cùng đường chéo ph) và
i+HAU[i] j + HAU[j] (không nm trên cùng đường chéo chính).
- Chi phí: không xác định
Trong bài toán này, trng thái đích là không tường minh mà được xác định bi tp các
ràng buc. Khác vi các bài toán trước, l i c i là i gi a bài toán này không ph đường đi
t trng thái đầu đến trng thái đích mà là mt phép gán các giá tr cho các biế n mô t
trong trng thái ca bài toán sao cho phép gán tha mãn các ràng bu c c a trng thái
đích.
Để gi i các bài toán tha mãn các ràng buc, chúng ta không c n xác định 5 thành phn
như các bài toán trong các chương trước, mà chúng ta cn quan tâm đến các thành phn
sau:
- T ế p các bi n mô t trng thái ca bài toán: HAU[0], HAU[1], .., HAU[7] trong bài
toán 8 quân hu (HAU[i] là s hiu dòng đặt con hu c t I, ví d HAU[0]=0 có
nghĩa là con hu ct đầu tiên (ct 0) s đặt dòng đầu tiên (dòng 0).
- Min giá tr cho các biến: HAU[i] Є {0, 1, 2, 3, 4, 5, 6, 7}
- Tp ràng buc: v i i j thì HAU[i] HAU[j] (không có hai con hu cùng hàng ngang),
i-HAU[i] j-HAU[j] (không có hai con h u nào cùng đường chéo ph); i+HAU[i]
j+HAU[j] (không có hai con hu nào cùng đường chéo chính)
Li gii ca bài toán là mt phép gán giá tr trong min giá tr ế cho các bi n sao cho tha
mãn các ràng buc ca bài toán.
b. Bài toán tô màu đồ th
S dng ba màu để tô bn đồ các tnh ca m t nước sao cho các t nh k nhau thì có màu
khác nhau. Ví d, n s dước Australia có 7 bang như hình v, ch ng ba màu: đỏ, xanh lơ
và xanh da tri để tô màu 7 bang ca nước Australia sao cho không có hai bang nào k
nhau li có màu ging nhau. Bài toán này có th mô t bng 3 thành phn như sau:
- Tp các biến: WA, NT, Q, NSW, V, SA, T (các biến là các ký t đầu ca tên các
bang)
- Min giá tr: 7 biến có th nhn các giá tr trong tp {đỏ, xanh lá cây, xanh da tri}
- Tp ràng buc: WANT, WASA, NTSA, NTQ, SAQ, SANSW, SAV,
QNSW, NSWV
Li gii ca bài toán tô màu đồ th là phép gán các giá tr {đỏ, xanh da tri, xanh lá cây}
cho tp 7 biến tha mãn tp các ràng buc.
c. Bài toán gii mã các ký t
Tìm các ch s thích hp cho các ký t để phép tính sau là đúng:
Bài toán gii mã các ký t được mô t bng 3 thành phn sau:
- Tp các biến: T, W, O, F, U, R, N1, N2, N3 (N1, N2, N3 là 3 s nh ca phép cng
các v trí hàng đơn v, hàng chc, hàng trăm)
- Min giá tr: Các biến có th nhn các giá tr: {0, 1, .., 9}
- Ràng buc: T, W, O, F, U, R phi khác nhau đôi mt; O + O = X +10.N1; N1 + W +
W = U + 10.N2; N2 + T + T = O + 10.N3; F=N3; T0; F0
Li gii ca bài toán là mt phép gán các ch s t 0 đến 9 cho các biế n và th a mãn t p
các ràng buc.
2. Gii thut quay lui vét cn
Vic gii bài toán tha mãn các ràng buc là tìm ra mt phép gán giá tr cho tp các biến
ca bài toán sao cho tp các ràng buc được tha mãn. Gi s bài toán cn gán giá tr cho
n biến, chúng ta có th tìm li gii ca bài toán b ng các bước mô t như sau:
- Bt đầu bng phép gán r ế ng, chưa gán giá tr cho bi n nào c { }.
- Nếu tt c các biến đã được gán giá tr, in ra li gii và thoát khi chương trình
- Tìm giá tr để gán cho biến chưa có giá tr mà không xung đột vi các các biến đã được
gán trước đó (xung đột hay không là da trên tp ràng buc). Nế u không tìm được giá tr
tha mãn các ràng buc cho biến đang xét thì hy b phép gán giá tr cho biến lin trước
đó và tìm giá trí mi cho nó.
- Nếu biến đầu tiên không còn giá tr phù h p để gán thì bài toán không có li gi i.
Gii thu i thut gán giá tr cho n biến như trên gi là gi t quay lui vét cn hay th và sai
(backtracking). Trong gii thut, mi bước thc hin mt phép gán vi cách làm ging
nhau và li gii ca bài toán ch xut hin bước gán cho biến cui cùng. Gii thut trên
có th cài đặt đệ quy như sau:
Function Backtracking-Search(problem) returns a solution, or failure
Return RescusiveBacktracking({},problem);
-------------------------------------------------------------
Function RescusiveBacktracking(assignment, problem) returns a solution, or failure
if (length(assignment)==n) return assignment ;
var Å Chn_biến_chưa_gán(problem, assignment);
for each value in Min_giá_tr(var,problem)
if KiemTraNhtQuán(assignment U{var=value}, problem)
assignment= assignment U{var=value}
RescusiveBacktracking(assignment, problem);
assignment= assignment - {var=value}
return failure;
Bn cht ca gii thut RescusiveBacktracking là phép duyt theo chiu sâu có thêm
bước kim tra s tha mãn ca các ràng buc mi bưc. Th t vic gán giá tr cho các
biến trong bài toán tô màu đồ th có th biu din bng đồ th sau:
Mt phn đồ th biu din th t phép gán giá tr
cho các biến ca gii thut Backtracking
3. Các ci tiến ca gii thut quay lui
Trong gii thu các bit RescusiveBacktracking trên, th t ến có th nh hưởng đến thi
gian và không gian b nh c ta gii thu t. Chúng ta có th thay đổi th các biến để gán
giá tr, và khi biến được chn, chúng ta có th ch n giá tr nào trước các giá tr khác trong
các giá tr hp l để gán cho biến đó. Đôi khi th t các biến và th t các giá tr gán cho
các biến làm tăng đáng k hi u qu ca gii thut.
a) Nguyên tc chn biến tiếp theo
Vì l i thui gii ca bài toán ch xut hin mc độ sâu n trong gi t đệ qui, vì vy
ResicusiveBacktracking ưu tiên phát trin theo chiu sâu để tìm ra phép gán đầy đủ (tc
là l t si gii) ca bài toán trong thi gian nhanh nh t. Khi m biến được gán giá tr,
min giá tr c ba các biến còn li cũng s co h p l i do t p các ràng bu c chi ph i. Vì
thế, để có th tìm kiếm được phép gán có độ sâu n nhanh nht mà không b hy b để gán
li giá tr cho biến thì có 2 nguyên tc sau:
- Nguyên tc 1: La chn biến mà min giá tr hp l còn li là ít nht (biến có ít la
ch n nh t nên được ch c tn trước để làm gim độ ph p ca cây tìm kiếm)
- Nguyên tc 2: La chn biến tham gia vào nhiu ràng buc nht (gán cho biến khó
tha mãn nht)
Trong hai nguyên tc trên, nguyên tc th nht được ưu tiên cao hơn và được áp dng
trong su t quá trình th c hi a gin c ế i thu t. Đối vi phép chn bi u đu tiên ho c trong
trường hp có nhiu biến có cùng s giá tr ít nht thì nguyên tc th hai s đưc s dng
để la chn biến tiếp theo.
Ví d, đối v thi bài toán tô màu đồ , ban đầu chúng ta ch ế n bi n SA để gán giá tr vì SA
tham gia vào nhiu mi ràng buc hơn (nguyên t ếc 2). Khi ch n màu bi n cho SA thì các
biến WA, NT, Q, NSW,V s được chn bước gán tiế p theo do ch còn 2 l a ch n là hai
màu còn li (nguyên tc 1), trong 5 biến này ta li ly biến NT, Q hoc NSW vì nó tham
gia vào nhiu ràng buc hơn (có th chn 1 trong ba biến này ngu nhiên). C như vy
chúng ta s u có nhi chn th t các biến còn li da trên Nguyên tc 1, nế u biến cùng
tha mãn nguyên tc 1 thì chn trong chúng biến tha mãn Nguyên tc 2.
b) Nguyên t giá trc chn th t gán cho biến
Mt khi mt biến được la chn để gán giá tr thì s có nhiu giá tr có thn cho biến
đó. Vic la chn th t giá tr gán cho biến có tác động không nh trong vic tìm ra li
gii đầu tiên. Trong trường h p bài toán c n tìm tt c li gi i ho c bài toán không có li
gii thì th t các giá tr gán cho biến không có tác dng.
Trong trường hp bài toán yêu cu tìm ra mt li gii và chúng ta mong mun tìm ra li
gii trong thi gian nhanh nht thì chúng ta s la ch n giá tr cho biến đang xét sao cho
nó ít ràng buc đến các biến còn l ế i nh t. Ví d: n u ta đã ch n WA=đỏ, NT=xanh da tri
và chúng ta đang xem xét gán giá tr cho biến Q. Có 2 giá tr có th gán cho Q mà không
b xung đột vi hai phép gán trước: đỏ và xanh da tri. Trong 2 cách này thì nếu gán xanh
da tri thì làm cho biến SA không còn giá tr ế để gán, còn n u gán màu đỏ thì s có 1 giá
tr có th n SA. V gán cho biế y trong trường hp này ta s gán màu đỏ cho biến Q để
tăng kh năng tìm i giđược l i đầu tiên.
c) Kim tra tiến (ki c – forward checking) m tra trướ
Trong nguyên tc chn th t giá tr gán cho mt bi i kiến, chúng ta cn ph m tra xem
giá tr ng th định gán s tác độ ế nào đối vi các biến chưa gán thông qua các ràng buc.
Vic hn xác định tác động trước như vy gi là forward checking. Forward checking còn
có tác dng hn ch n chế không gian tìm kiếm (h ế mi n giá tr cho các biến còn li khi
biến hi n t i được gán mt giá tr c th). Ví d, nếu ban đầu chúng ta gán WA màu đỏ
thì mi n giá tr ca các bang lân cn (NT và SA) s không th là màu đỏ được na. Nếu
gán tiếp Q là màu xanh lá cây thì NT và SA ch còn nh n giá tr là xanh da tri và NSW
ch còn mi n giá tr là màu đỏ (xem din biến mi n giá tr các biến thu hp dn trong quá
trình gán giá tr cho biến WA và Q)
d) Lan truyn ràng buc (constraint propagation)
Trong quá trình gán giá tr cho biế ến, n u mt biến có mà mi n giá tr ca nó không còn
giá tr nào hp l để gán thì chúng ta ph i hy b vic gán giá tr cho biến ngay trước đó
và gán bng giá tr khác. Nếu mt trong các biế n còn l i mà mi n giá tr ch 1 giá tr hp
lý thì chúng ta có th áp d ng t p các ràng buc liên quan đến biến đó để gim min giá
tr cho biến còn li khác. Chng h n, b ng forward checking chúng ta đã xác đị đượnh c
biến SA ch có giá tr màu xanh da tri thì chúng ta áp dng các ràng buc liên quan đến
SA để suy ra rng biến NSW không th nhn giá trí màu xanh da tri. Khi đó NSW ch
còn màu đỏ và áp dng các ràng buc liên quan đến NSW suy ra V không th nhn màu
đỏ, v.v. Qu trình lo i b mi n giá tr cho các biên còn l i da trên các ràng buc gi là
lan truyn ràng buc nhm gi m b t không gian tìm kiếm phép gán hp l.
4. Các gii thut ti ưu địa phương
Chươ ương 6 – Các ph ng pháp lp lun trên logic mnh đề
1. Lp lun và Logic
Loài người thông minh biế t l p lu n. Li u máy nh kh năng lp lun được
(như con người) không? Để tr li câu hi này, chúng ta trước hế ế ết hãy cho bi t th nào là
lp lun.
Lp lun hành động sinh ra m đt phát biu úng mi t các phát biu đúng
trước. Hay nói cách khác, mt người hoc mt h th t l ng được gi biế p lun nếu
ch ra rng mt phát biu nào đó có đúng (true) khi cho trước mt tp các phát bi đu úng
hay không? Các phát bi u ph i tuân theo mt tp các qui tc nht định (ng pháp)
cách xác định mt phát biu là đ úng (true) hay sai (false). Mt t p các qui t c qui định
ng pháp cách xác định ng nghĩa đúng/sai ca các phát biu gi logic. Như vy
logic là mt ngôn ngmi câu trong ngôn ng đó ng nghĩa (giá tr) đúng hoc
sai, và vì vy có th cho phép chúng ta lp lun, tc là mt câu mi có giá tr đúng không
khi cho các câu trước c đó là đúng hay không. Các câu cho trướ được g i là c ơ s tri thc
(Knowledge base - KB), câu cn chng minh đúng khi biết KB đúng gi câu truy
vn (query - q). Nếu q là đúng khi KB là đúng thì ta nói r ng KB suy di n ra q (ký hiu là
KB q).
Trong chương này các chương tiếp theo, chúng ta s xây dng các thu t gi i cho
phép l n tp lu đng trên các logic khác nhau. Các thu t gi i này giúp máy tính th
lp lun, rút ra phát biu mi t các phát biu cho trước.
2. Logic m ĩnh đề: cú pháp, ng ngh a
Logic đơn gi n nh t logic mnh nh đề. Các phát biu (câu) trong logic m đề được
hình thành t các ký hi u m nh đề (mi ký hi ĩ u có ngh a là mt mnh đề và vì v y có th
nh n giá tr đúng hoc sai tùy theo mnh đề đó là đúng hay sai trong thế gii thc) và các
ký hiu liên kết ¬ (vi ng nghĩa là ph định), (và), (hoc), (kéo theo), (tương
đươ đềng). Cú pháp và ng nghĩa ca logic mnh như sau:
2.1 Cú pháp:
¾ Các ký hiu:
9 Hng: true, false
9 Ký hi u: P, Q, … Mi ký hi u gi là ký hi u m nh đề ho c m nh đề
9 Các kết ni logic: ¬, ,
9 Các ký hiu “(“ và ”)”
¾ Qui tc xây d ng câu: Có hai lo i câu: câu đơn và câu phc
9 true và false là các câu (true là câu đơn h ng đúng, false là câu h ng sai).
9 Mi ký hi u m nh đ là mt câu, ví d P, Q là các câu (Câu đơn)
9 Nếu A và B là các câu thì các công th c sau cũng là câu (các câu ph c):
¬A
(A B)
(A B)
(A B)
(A B)
¾ Các khái nim qui ước khác: Sau này, để cho g n, ta b đi các d u “(“, “)”
không cn thiết. N u câu chế mt hiu mnh đề đơ thì ta g đi câu ó câu n
hoc câu phân t. Các câu không phi câu đơn thì gi câu phc. Nếu P
hiu m ng còn nh đề thì P ¬P gi là các literal, P literal dươ ¬P là literal âm.
Các câu phc dng A1 A2 An, trong đó các Ai các literal, được gi
các câu tuyn (clause).
2.2 Ng nghĩa: Qui định cách din dch cách xác định tính đúng (true) hay sai (false)
cho các câu.
¾ true là câu luôn có giá tr đúng, false là câu luôn có giá tr sai
¾ Mi ký hi u bi u di n (ánh x vi) mt phát bi u/m ếnh đề trong th gii thc; ký
hiu mnh đề có giá tr ế đúng (true) n u phát bi u/m nh đề đó là đ úng, có giá tr
là sai (false) nếu phát biu/mnh đề đị đó là sai, hoc có giá tr chưa xác nh (true
hoc false)
¾ Các câu phc bi u di n (ánh x vi) mt ph định, mi quan h ho ếc mi liên k t
gia các mnh đề/phát biu/câu phc trong thế gii thc. Ng nghĩa và giá tr ca
các câu phc này được xác định da trên các câu con thành phn ca nó, chng
hn:
9 ¬A có nghĩa là ph định m ếnh đ/ câu A, nh n giá tr true n u A là false
ngược li
9 A B nghĩa mi liên kết “A B”, nh n giá tr true khi c A B
true, và nh n giá tr false trong các tr ng hườ p còn li.
9 A B bi ế u di n mi liên k t “A ho c B”, nh n giá tr true khi ho c A ho c
B là true, và nh n giá tr false ch khi c A và B là false.
9 (A B) bi u di n m i quan h “A kéo theo B”, ch nh n giá tr false khi A
là true và B là false; nh ng h n giá tr true trong các trườ p khác
9 (A B) bi u di n mi quan h “A kéo theo B” và “B kéo theo A”
Như v y, vi c xác định tính đ úng/sai c a m t hi u m nh đề (m nh đề đơn)
da trên tính đúng sai ca s kin hoc thông tin mà nó ám ch, còn vic xác định
tính đúng sai ca mnh đề phc phi tuân theo các qui tc trên. Trong nhiu
trường hp, chúng ta (cn ch) biết tính đúng/sai ca các câu phc, còn tính
đúng/sai ca các câu đơn không c ến bi t hoc th l p lu n ra t các các câu
phc đã biết đúng/sai các qui tc chuyn đổi tính đúng/sai gia các câu đơn và
câu phc theo các qui tc trên.
2.3 Các ví d:
Gi A mnh đề “tôi chăm hc”, B mnh đề “tôi thông minh”, C mnh đề “tôi
thi đạt đim cao môn Trí tu nhân tao”; Ta có th biu din các câu sau trong logic mnh
đề:
- “Nế ău tôi ch m hc thì tôi thi đạt đim cao môn Trí tu nhân to”: A C
- “Tôi va ch c lăm h i va thông minh”: A B
- “Nế ă u tôi ch m hc ho c tôi thông minh thì tôi thi đạt đi m cao môn Trí tu nhân
to”: A B C
2.4 Các câu hng đúng:
Trong logic mnh đề, ta có:
9 ¬¬A A (lut ph định kép)
9 A ¬A (lut loi tr)
9 (A B) (A B) (B A)
9 (A B) ¬A B
9 ¬ ¬ (A B) A ¬B (lut DeMorgan đối vi phép )
9 ¬ (A B) ¬A ¬B (lut DeMorgan đối vi phép )
9 C (A B) (C A) (C B) (lut phân phi phép đối vi phép )
9 C (A B) (C A) (CB) (lut phân phi phép đối vi phép )
9 (A (A B)) B (Tam đo n lu n)
9 Lu t phân gi i (xem mc 4)
3. Bài toán lp lun và các gii thut l p lu n trên logic mnh đề
Như đã nói trong phn 1 ca Chương này, l p lu n tr li câu hi mt câu q
đúng khi cho cơ s tri thc (là mt câu phc là h i c a t p các câu cho trước) là đúng
hay không (KB q)? Mt cách đơn gi n nh t chúng ta lp bng giá tr chân cho
KBcho q và kim tra xem tt c các trường hp làm cho KB nhn giá tr true cũng
làm cho q nhn giá tr true không? Nếu có thì ta kết lun KB q, ngược li thì kết lun
không. Phương pháp suy lun này gi phương pháp lit th thut toán
hóa được (chi tiết xem trong m c 6 c a Chương này).
Mt cách tiếp cn khác để tr li cho câu hi KB q s d đng các lu t h ng úng
ca logic mnh đề (xem trong mc 2.4). Ban đầu KB bao gm tp các câu (h i c a
các câu), chúng ta áp dng các lut ca logic mnh đề trên tp các câu này để sinh ra
câu mi, ri b t c sung câu mi này vào KB, lp li áp dng lu a logic và sinh ra câu
mi, v.v., đến khi nào xut hin câu q trong KB thì dng li (khi đó KB q) hoc
không th sinh ra câu mi nào n ế a t KB (khi này ta k t lu n KB không suy ra được
q) Li gii cho bài toán suy din theo cách này m đt đường i t tr ng thái đầu n đế
trng thái đích ca bài toán tìm đường sau:
9 Trng thái đầu: KB
9 Các phép chuyn trng thái: các lut trong logic mnh đề, mi lut x áp dng
cho KB sinh ra câu m i x(KB), b sung câu m i này vào KB được trng thái
mi KB x(KB)
9 Trng thái đích: trng thái KB cha q
9 Chi phí cho mi phép chuyn: 1
Vì s lut hng đúng trong logic m nh là tương đối ln nên nhân t nhánh c a bài
toán trên cũng ln (tt c các cách áp dng các lut trên tp con tt c các câu
ca KB), vy không gian tìm kiếm li gii ca bài toán trên rt ln. Để hn
chế không gian tìm kiếm li gii ca bài toán, chúng ta biu din KB và q bng ch
các câu dng chun hi (xem mc 4), khi ó chúng ta chđ c n áp dng m t lo i
lut là lut phân gii trên KB và mi phép chuyn là mt phép phân gii hai câu có
cha ít nht mt literal là ph định ca nhau trong KB, kết qu ca phép phân gii
hai câu dng chu ng chun hi li là mt câu d n hi và được b sung vào KB, lp
li áp dng lut phân gii trên KB đến khi nào KB cha câu q thì dng. Chi tiết
thut toán suy din d a trên lu t phân gi i KB q được trình bày trong mc 7 ca
Chương này (thc tế thì thut toán suy din phân gii tr li bài toán tương đương
(KB ¬q) [].)
Gii thut suy din phân gii gii thut đầy đủ trong logic mnh đề, tc vi
mi câu q kéo theo được t KB (q đúng khi KB đúng) thì s d ng gi i thu t
suy din phân gii đều có th suy din được KB q (tc không có câu nào kéo
được t KB là không suy di n phân gi i được); bi vì b t c câu trong logic m nh
đề đề u có th biu din được bng câu dng chun hi (xem mc 4).
Do liên tc phi b sung các câu mi vào KB lp li tìm kiếm các cp câu
th phân gii vi nhau được nên nhân t nhánh ca cây tìm kiếm li gii tă ng d n
theo độ sâu ca cây tìm kiếm. vy không gian thi gian ca gii thut s
tăng rt nhanh, gii thut phân gii làm vic không hi u qu . Để khc phc nhược
đim này, người ta tìm cách bi u di n KB d ng các câu Horn áp dng ch mt
loi lut (tam đon lun, xem mc 5) để suy din (tam đon lun áp dng trên 2
câu dng Horn sinh ra câu mi cũng câu d ng Horn). Thu t gi i suy di n
tiến/lùi trên cơ s tri thc d ếng Horn trình bày chi ti t trong mc 8, nó độ phc
tp tuyến tính đối vi s câu trong KB. Tuy nhiên thut gii suy din tiến/lùi li là
không đầy đủ trong logic mnh đề, bi vì có nhng câu trong logic mnh đề không
th biu din được dưới dng Horn đ th áp dng được gii thut suy diến
tiến/lùi.
4. Câu dng chun hi và lut phân gii
¾ Câu d ng chu n h i câu h i c a các câu tuy n (clause). Như trên đã nói, câu
tuyn là câu dng A1 A2 An, trong đó các Ai các ký hiu mnh đề hoc
ph định ca ký hiu mnh đề. Vy câu dng chun hi có dng:
(A
11
A
12
A
1n
) (A
21
A
22
A
2m
) (A
k1
A
k2
A
kr
)
Vi A
ij
là các literal (là ký hiu mnh đề hoc ph định ca ký hiu mnh đề).
¾ Vi mt câu b t k trong logic m nh đề, li u có th bi u di n dưới d ng chu n hi
như trên được không? Câu tr li có. Vi câu s, chúng ta li t t t c các
hiu m p bnh đề xut hin trong nó, l ng giá tr chân để đánh giá s, khi đó s
hi các tuyn mi tuyn s tương ng vi dòng làm cho s bng true false. Vi
mi tuyn (tương ng vi mt dòng), nếu ct ca hiu mnh đề trên dòng đó
có giá tr true thì ký hi u m nh đề s là literal dương âm, còn nế u giá tr là false thì
ký hiu mnh đề s là literal âm dương trong câu tuy ến. Ví d , chúng ta mu n bi t
dng chun hi ca câu sau:
¬C AB
Trong câu trên, 3 hiu mnh đề A, B, C. Ta l p b ng giá tr chân
chuy n sang d ng chu n h i như bng sau:
A B C
¬C
A
B
Clause
F F F F
ABC
F F T T
F T F F
A ¬B C
F T T T
T F F F
¬A B C
T F T T
T T F T
T T T T
Dng chun hi:
¬C AB
= (AB BC) (A¬BC) (¬A C)
clause
clause
clause
¾ Vi cách chuy n mt câu sang d ng chu n hi như dung b ng giá tr chân
trên, chúng ta kh ng định b t k câu nào cũng th chuyn sang dng chun hi
được. Ngoài phương pháp s d ng b ng chân lý, chúng ta có th áp dng 4 qui tc
sau đây (theo th t được li t kê) để chuy n b t k câu nào sang d ng chu n hi
được.
9 QT1: Lo ế β β βi b : thay th α b ng (α ) ( α).
9 QT2: Lo ế β i b : Thay th α b ng ¬α β
9 QT3: chuy n ho c lo i b d u ¬ đặt trước các hi u b ng các lut
deMorgan lut ph định kép ¬( (αβ)= ¬α ¬β; ¬ α αβ)= ¬ ¬β;
¬¬α= α.
9 QT4: Áp dng lut phân ph i c a phép đối vi phép
Chng hn, chúng ta cn chuyn câu trong d trên sang dng chun hi, bng
cách áp dng l n l ượt các qui tc trên:
¬C AB
= ¬(¬C) (AB) (QT2)
= C (AB) (QT3)
= (CA) (C B) (QT4)
Chúng ta th d ũ ếng l i d ng chu n hi này, ho c c ng th ch ng minh ti p
rng công thc này công thc thu được t phương pháp lp bng trên
tương đương.
¾ Lu t phân gi i (resolution):
9 Lu t phân gi i:
Nếu chúng ta có hai clause sau là đúng:
(P
1
P
2
… P
i
P
n
)
(Q
1
Q
2
… Q
j
Q
m
)
và P
i
,Q
j
là các literal ph định ca nhau (P
i
=¬Q
j
)
thì chúng ta cũng có clause sau là đúng
(P
1 n 2
P
2
… P
i-1
P
i+1
P Q
1
Q … Q
j-1
Q )
j+1
Q
m
(Clause mi là tuyn các literal trong hai clause ban đầ ư đu nh ng b i P
i
và Q
j
)
9 Kế t qu c ũ a phép phân gi i c ng mt clause (tuy n các literal), hay nói
cách khác phép phân gii tính đóng, phân gii c a các clause m t
clause. Đây tính cht rt quan trong trong vi c xây d ng gi i thu t suy
din t động trình bày phía dưới.
¾ Câu d ng chu n tuyn (tham kho thêm): Câu dng chu n tuy n câu tuyn ca
các hi. Ging như c u trúc ca câu d ng chu n hi, câu d ng chu n tuy n cũng
có cu trúc như vy, nhưng chúng ta đổi ch d bu i du và ngược li. V i bt
k m ũt câu trong logic mnh đề, chúng ta c ng th bi u di n dưới dng
chun tuyn. Tuy nhiên chúng ta không lut đóng liên quan đến tuyn ca hai
câu hi để sinh ra câu hi m lu i ci như t phân gi a hai câu tuyn.
5. Câu dng Horn và tam đon lun
¾ Câu d ng Horn: Như trên ta đã ch ra r ng t t c các câu trong logic mnh đề đều
th bi n h u di n được dưới dng chu i, t i cc h a các clause, mi clause
có dng: P
1
P
2
… P
i
P
n
, vi P
i
là các literal. Nếu trong clause mà có nhiu
nht mt literal dương (tc là không có hiu ph định đằng trước) thì clause đó
gi là câu dng Horn. Như vy câu dng Horn là câu có mt trong ba dng:
¬P
1
¬P
2
¬P
n
(không có literal dương nào)
hoc P (có mt literal dương và không có literal âm nào)
hoc ¬P
1
¬P
2
¬P
n
Q (có mt literal dương Q ít nht mt
literal âm)
vi P
1
, P
2
,…,P
n
và Q là các ký hi u m nh đề.
Nế u chuy n các câu d ng Horn sang d ng lu t thì chúng có d ng như sau:
¬(P
1
P
2
P
n
)
hoc P
hoc P
1
P
2
P
n
Q (có mt literal dương là Q)
Trong đó câu d ng th hai câu ba gi câu Horn dương (có đúng 1 literal
dương) thường được s dng bi u di n tri thc trong cơ s tri th c KB, câu d ng
th nh u dit ch xut hin trong bi n các câu truy vn.
¾ Tam đo n lu n (hay lut Modus ponens):
Nếu chúng ta có các câu Horn dương sau là đúng:
P
1
,
P
2
,
P
n
P
1
P
2
P
n
Q
thì câu Q là đúng
¾ Kế t qu lu t Modus ponens t hai câu d ng Horn dương sinh ra câu Q cũng
dng Horn dương. Vì vy phép suy din tam đon lun là đóng trong các câu dng
Horn, kết qu tam đon lun t hai câu d ng Horn là câu d ng Horn. Tương t như
tính ch ng chut đóng ca phép phân gii trong trong các câu d n hi, tính cht
đóng ca phép suy lun này rt quan tr ng trong vi c thiết kế các gii thut suy
din t động đề da trên tam đon lun và các câu Horn (xem phn phía dưới).
¾ Không gi ng như câu d ng chu n hi, không ph i câu nào trong logic mnh đề
đều có th biu di ế n d ng Horn được. Chính vì th mà thu t gi i suy di n da trên
tam đon lu n ch đầy y đủ trong ngôn ng các câu Horn ch không đầ đủ trong
logic mnh đề.
6. Thut toán suy din da trên bng giá tr chân lý
Trong các phn còn li ca Chương này, chúng ta s xây dng các gi i thu t cài đặt
cho máy tính để nó biế t l p lu n. Gi i thu t l p lu n t động là gii thut ch ra rng
nếu KB (cơ s tri th c) là đúng thì câu truy vn q có đúng hay không?
Phương pháp lp lun đầu tiên là da li t kê các t t c các trường hp có th có ca
tp các ký hiu mnh đề, ri ki m tra xem li u t t c các trường hp làm cho KB đúng
xem q có đúng không. Chi tiết thut gii như bng sau:
Thut gii trên là sinh ra toàn b bng giá tr chân lý để đánh giá KB và q, nếu ch cn
mt trường hp KB đúng mà q sai thì q s ế k t lu n KB không suy di n được ra q.
Gi
i thut trên có độ phc tp thi gian là 2
n
* m, vi n là s ký hiu có trong KB,q và
m độ dài câu trong KB.
7. Thut toán suy din da trên lut phân gii
Để kh đ c phc nhược i m độ ph c t p thi gian ca gi i thut suy din da trên lit
trên, chúng ta đưa ra thut gii nhanh hơn, thi gian thc hin nhanh hơn.
Function Suydien_Lietke(KB, q) return true or false
symbols=get_list_of_symbols(KB,q);
n=
symbols.size();
int b_giá_tr[n]; //dùng để lưu b các giá tr logic (true:1, false:0)
for
(i=1; i2
n
; i++) {
b _giá_tr [1,..,n]=generate(i); // sinh ra b th i
if (evaluate(KB, b_giá_tr _giá_tr)==true && evaluate(q, b )=false)
return false
return true;
Gii thut da trên thc hin liên tiếp các lut phân gii trên các câu dng chun hi.
Để chng minh KB q ta s chng minh u tđi ương đương (KB ¬q []), tc
như chúng ta vn gi là chng minh bng phn chng: gi s q không đúng (¬q), khi
đó KB ¬q s d n đến mâu thun, tc là (KB ¬q) [].
Chúng ta s chuyn (KB ¬q) v dng chun hi, tc là hi các clause, hay chúng ta
chuyn KB ¬q thành hi các clause, sau đó áp dng liên tiếp lut phân gii (mc
4) trên các cp clause mà có ít nht m i ct literal đố a nhau để sinh ra mt clause mi,
clause mi này li b i l sung vào danh sách các clause đã r p li áp dng lut
phân gi i. Gi i thut dng khi có câu [] được sinh ra (khi đó ta kế t lu n KB q) ho c
không clause nào đượ được sinh ra (khi đó ta kế t lu n KB không suy di n c ra q).
Chi tiết thut gii cho trong hình trang sau.
Gii thut phân gii gii thut đầy đủ tt c các câu trong logic mnh đề đều
th bi u di n được dưới d i cng h a các clauses (dng chun hi). Tuy nhiên mi ln
phân gii sinh ra clause mi thì l i b sung vào danh sách các clauses để thc hin tìm
kiếm các cp clauses phân gii được vi nhau; vy s lượng clauses l n l p sau
li tăng lên so vi ln lp trước, dn đến vic tìm kiếm các clauses phân gii được vi
nhau là khó khăn hơn.
Gii thut phân gii trình bày như trên gii thut suy phân gii tiến, nghĩa t
trng thái đầu KB ¬q thc hin các thao tác chuyn tr ng thái (áp d ng lut phân
gii trên cp các clauses để sinh ra clauses mi b sung vào danh sách các clauses
hin có) đ sinh ra trng thái mi, đến khi nào trng thái mi cha câu [] (trng thái
đích) thì dng hoc không sinh ra trng thái mi được na.
Mt cách khác để thc hin suy din phân gii KB q xut phát t clause ¬q (coi
như trng thái đích) ta thc hin phân gii vi các clauses khác trong KB để sinh ra
clauses mi, r i t các clauses m i này thc hin tiếp vi các clauses khác ca KB để
sinh ra clauses mi hơn, đến khi nào [] được sinh ra hoc không sinh ra được clause
mi thì dng. Nói cách khác ch thc hin phân gii các clauses liên quan đến q.
Gii thut phân gii lùi s làm vic hiu qu hơn gi ế ếi thu t phân gi i ti n (chi ti t cài
đặt coi như là bài t p).
8. Thut toán suy din tiến, lùi da trên các câu Horn
Như ta ã thđ y trong mc 5, lut Modus ponens đóng trong các câu dng Horn
dương, nghĩa nếu hai câu dng Horn dương tha mãn các điu kin ca lut
Modus ponens thì s sinh ra câu dng Horn dương mi. Nếu chúng ta biu din được
KB và q bng các câu dng Horn dương thì có th s d ng lu t Modus ponens để suy
din.
Khi KB biu di n b ng hi các câu Horn dương, chúng ta các câu Horn dương này
thành 2 loi: (1) câu có đúng mt literal dương mà không có literal âm nào, đây là các
câu đơn hay các hiu mnh đề; (2) câu đúng mt literal dương ít nht
mt literal âm, đây các câu kéo theo phn thân ca phép kéo theo ch là mt
hiu mnh đề.
hai cách cài đặt thut gii suy din da trên lut Modus ponens trên các câu Horn
dương. Cách th nht bt đầu t các hiu mnh đề được cho đúng trong KB,
Function Resolution(KB, q) return true or false
clauses=get_list_of_clauses(KB ¬q);
new={};
do
for each Ci, Cj in clauses
new_clause= resol(Ci,Cj);
if new_clause=[] return true;
new=new
Υ
new_clause;
if new clauses return false;
clauses=clauses
Υ
new;
áp dng liên ti câu kéo theo trong KB ếp các lut Modus ponens trên các để suy din
ra các hiu mi, đến khi nào danh sách các hi u được suy di n ra cha hi u
đích q thì dng và thông báo suy di ến thành công. N u danh sách các ký hiu suy din
không cha q cũng không th sinh tiếp được na thì thông báo suy din tht bi.
Cách suy din này gi suy din tiến (hay suy din tam đon lu n ti ế n để phân bi t
vi suy din phân gii tiến trên).
Chi tiết gii thut cho trong b ng phía dưới. Gi i thut s dng danh sách các
hiu m o tnh đề được xác định true, true_symbols , danh sách này khi t các
hiu độc lp trong KB, sau đó b sung khi mt hiu mnh đề được suy din ra
true, đến khi nào danh sách chư a hi u truy v n q td ng ho c không b sung
được ký hiu nào na vào danh sách này.
Cách cài đặt th hai xut phát t đích q, chúng ta xem bao nhiêu câu Horn kéo
theo nào trong KB q phn đầu ca lut kéo theo, chúng ta li kim tra xem các
ký hiu mnh đề n m trong ph n đi u ki n ca các lu t này (các đích trung gian) xem
có suy din được t KB không, c áp dng ngược các lut đến khi nào các đích trung
gian được xác nhn đúng trong KB thì kết lun suy di n thành công, ho c kết lun
không thành công khi tt c các nhánh đều không chng minh được các đích trung
gian không suy din được t KB. Gii thut này gi gii tht suy din lùi (hoc
gii thut suy din tam đon lun lùi).
Function Forward_Horn(KB, q) return true or false
Input: - KB t p các câu Horn d ương, đánh s clause
1
, .., clause
n
- q: câu truy vn dng câu đơn (ký hiu mnh đề)
Output: true or false
Các biến địa phương:
- Int count[0.. n], count[i] là s ký hi u xu t hi n trong ph n điu ki n c a
clause
i
.
- Bool proved[danhsach_kyhieu]: proved[kyhieu]=1 nếu kyhieu đã được
chng minh là suy din được t KB, ngược li =0; ban đầu khi to=0
vi mi ký hiu
- working_symbols: danh sách ký hiu đang xem xét, khi đầu bng danh
sách các ký hiu độc lp trong KB
while working_symbols is not empty
p= pop(working_symbols);
if (!proved[p])
proved[p]=1;
for each clause
i
whose p appears
count[clause
i
] = count[clause
i
] -1;
if count[clause
i
]==0
if head[clause
i
]==q return true;
push (head[clause
i
], working_symbols);
return false;
9. Kết chương
Logic mnh đề ngôn ng để biu din các m nh đề. hai lo i m nh đề: m nh đề
đơ đ đền và mnh phc. Mnh đơn tương ng vi mt phát bi đu nào ó (mt s kin
hoc thông tin) th phán xét xem đúng hay sai da trên phát biu đó đúng
hay sai. Mnh đề phc biu din mi quan h hoc mi liên kết (ph định, hi, tuyn,
kéo theo, tương đương) gia các mnh đề con ca nó. Logic qui định tính đúng hay
sai ca mnh đề phc da trên tính đúng/sai ca các mnh đề con và da trên kiu ca
mi quan h/liên kết đó (là ¬, , , , hay ). Chính vic gán cho các câu
(mnh đề đơn hoc mnh đề phc) hoc giá tr đúng (true) hoc giá tr sai (false) theo
các qui tc ca logic giúp chúng ta phán xét được rng mt mnh đề này đúng khi
cho biết tp các mnh đề cho trước đúng, hay KB q. Lp lun là tr li cho câu
hi: cho KB đúng thì q đúng không?.
Trong Chương này chúng ta thu t giđã tìm hiu mt s i l p lu n (input KB q,
output true hoc false). Các gi i thu t l p lu n gm: l p lu n b ng li t kê, l p lun
da trên lut phân gii, lp lun da trên lut Modus ponens. Gi i thu t l p lu n b ng
lit kê các giá tr chân lý ca các ký hi u m nh đề xu t hi n trong KB và q có ưu đim
không đòi hi d ng c u trúc đặc bit nào cho các câu KB q, nhưng li độ
phc tp thi gian là hàm mũ đối vi s các ký hiu m nh đề. Gi i thu t da trên lu t
phân gii thì yêu cu KB và ¬q phi có dng chun hi, tc là chúng ta phi thc hin
chuyn KB ¬q thành dng chun hi ri mi áp d ng gi i thu t. May thay, t t c
các câu trong logic mnh đề đều th chuyn được v d ng chu n hi. Còn gi i
thut lp lun da trên lut Modus ponens thì yêu c u KB q ph i d ng câu
Horn. Không phi t t c các câu trong logic mnh đề đều chuyn v dng Horn được.
Tuy nhiên nếu KB q d ng Horn thì các gi i thu t suy di n tiến hoc lùi da trên
Modus ponens li làm vic rt hi u qu .
Các gii thut lp lun trên khi cài đặt cho máy tính s giúp máy tính kh năng
lp lun được.
Chươ ương 7 – Các ph ng pháp lp lun trên logic cp mt
Trong Ch , mương trước chúng ta đã tìm hiu logic mnh đề t ngôn ng đưa ra các qui
tc xác định ng pháp ng nghĩa (tính đúng/sai) các câu. Câu đơn gin nht trong
logic mnh đề các hiu m u dinh đ, bi n cho các s ki n ho c thông tin trong
thế gii thc. Câu ph c t p hơn liên kết các câu đơn bng các phép ni logic (¬, , , ,
) bi u di n m nh đề phc, t quan h ế ho c liên k t các mnh đ đơn. Như vy,
logic mnh đề ch có th biu di ế n được các M NH ĐỀ và các liên k t ho c quan h gia
các M c mNH ĐỀ. Vì vy s nh biu di n c a logic m ếnh đề ch gii h n trong th gii
các mnh đề. Nó không quan tâm đến ni dung các mnh đề như thế nào. Vì thếlogic
mnh đề nhng hn chế trong vic biu din suy din. d, nếu chúng ta cho cơ
s tri thc phát biu trong ngôn ng t nhiên như sau:
An là sinh viên.
Mi sinh viên đều hc gii.
Vi cơ s tri thc như v y ta th suy di n ra r ng “An hc gi i”. Tuy nhiên nếu s
dng logic mnh đề thì câu “An là sinh viên” có th biu din bng mthiu mnh đề
P1; còn câu “Mi sinh viên đều hc gii” thì thông thường bi u di n bng mt hiu
mnh đề, chng hn Q. Mnh đềchúng ta c n suy di n “An h c gii” ký hiu bi T1.
Khi đó cơ s tri thc có dng:
P1
Q
và mnh đề cn truy v n là T1. Vì logic m nh đề đế không quan tâm n ni dung bên trong
các mnh đề nên chúng ta không th thc hin suy di n {P1ế Q} T1 được chúng
chng liên quan gì vi nhau. Nếu chúng ta biế t được danh sách t t c các sinh viên, chng
hn {An, Bình, …, Yến} thì chúng ta th chuyn câu “Mi sinh viên đều hc gii”
thành câu phc “[An sinh viên thì An hc gii] [Bình sinh viên thì Bình hc
gii] …VÀ [Yến sinh viên thì Yến hc gii]” thì câu đó s bi u di n được thành
câu phc trong logic mnh đề dng:
(P1 T1) Tn) (P2 T2) (Pn
Vi P1,T1 hiu mnh đ đã nói trên; P2 mnh đề “Bình sinh viên”, T2
“Bình hc gii”, …, Pn là “Yến là sinh viên” và Tn là “Yến hc gii”.
Khi đó, s d ng m nh đ P1 đã biết là đúng thì ta áp dng lut Modus ponens trong logic
mnh đề thì suy din ra được T1.
Vi cách biu din câu “Mi sinh viên đều h c gi i” bng (P1 T1) (P2 T2)
(Pn Tn) trong logic mnh đề ta th “Modus ponens” vi câu trước đó P1 để
sinh ra T1. Tuy nhiên khi đó s câu có trong cơ s tri thc s là r t l n (có bao nhiêu sinh
viên thì by nhiêu câu Pi Ti), khi đó các thut toán suy din t động s tr nên
không hiu qu. quan trng hơn câu tính cht ph biến “Mi sinh viên đều hc
gii” không th nào biu din thành dng lit kê cho t ng sinh viên được. Logic mnh đề
thiếu các câu t đặc trưng cho mt lp các đi tượng (cũng gi ưng nh nếu mt ngôn
ng l ếp trình thi u các câu l nh l p như for, while ch c các kiu lnh đơn l
r nhánh), vì thế mà sc mnh biu din ca nó r t h n chế.
Trong chương này, chúng ta s xem xét logic cp mt, hay logic v t, mt m rng ca
logic mnh đề cho phép bi u di n nh ng mnh đề mang tính ph quát (“vi m i”)
nhng mnh đề mang tính đặc thù (“tn ti”) mt cách d dàng. Để làm được điu đó,
chúng ta phân tích mnh đề thành dng (ch ng - v t ) hoc (ch ng - v t - tân ng )
chuy thành n ch ng n ng đối tượng (ho ếc bi n) ca v t. vy câu đơn
ca logic cp mt dng V_t (ch _ng) ho c V _t (ch _ng, tân ng); ch ng h n
“An sinh viên” bi u di n Sinhvien(An); “An yêu Bình” bi u di n Yeu(An,Binh).
Chính thế ta gi logic v t. T các câu đơn như vy ta xây dng các câu
phc s d ng các ký hi u (¬, , , , )
, (hai hiu này không có trong logic
mnh đề). Quan trng hơn, làm thế nào chúng ta xây dng các thu t gi i l p lu n t động,
gii thut cài đặt cho máy tính để nó có th chng minh được KB q, vi KB và q là các
câu trong logic v t c ư p mt, tương t nh các gi i thu t phân gi i, gi i thu t suy di n
tiến, lùi trong logic mnh đề.
1. Cú pháp – ng nghĩa
1.1 Cú pháp
¾ Các ký hiu:
9 Ký hi u h ng:
Hng ca ngôn ng: true, false
Hng do người s d ng đặt cho tên đối tượng c th : An, Binh,...,
a,b,c, … (đối tượng là các ch ng ho c tân ng trong mnh đề).
9 hi ếu bi n (thường biế n đối tượng, đại di n cho ch ng ho c tân
ng): x,y,z,t,u, …
9 hi u v t: P, Q, hoc Sinhvien, Yeu, father, …(mi hiu tương
ng v t trong m nh đề). Mi hi u v t câu đơn trong logic c p mt
và có ng nghĩa true hay false.
9 hiu hàm: sin, cos, log, father, Chú ý hàm father (father(An)=Binh)
khác vi v t father (father(An,Binh)) ch hàm thì tr v giá tr còn v t
thì tr v true/false. Vi c xác định mt cái tên hàm hay v t tùy vào s
xut hin ca nó trong câu và các tham s ca nó.
9 Ký hi ếu k t ni logic: ¬, , , ,
9 Ký hiu lượng t: ,
9 Các ký hiu “(“ và ”)” ,”,”
¾ Qui t c xây d ng câu: Có 2 lo i câu: câu đơn và câu ph c. Chúng được định nghĩa
đệ qui như sau:
9 Câu đơn: true false các câu (true câu đơn hng đúng, false câu
hng sai).
9 Câu đơn: Ký_hiu_v_t(hng_thc_1, hng_thc_2, …, hng_thc_k)
là mt câu (câu đơn), trong đó hng_thc_i là biu thc ca các đối tượng,
pháp ca hng thc được xây dng t các hi ếu h ng, bi n hàm
như sau:
Các ký hi u h ng và các ký hi u biến là mt hng thc
Nếu t
1
, t
2
, ..,t
n
các hng thc f mt hiu hàm gm n tham
s thì f(t
1
, t , ..,t ) c
2 n
ũng là mt hng thc
Ví d v các câu đơn là:
love(An,Binh)
father(An,Nhan)
sinhvien(Hoa)
9 Câu phc: Nế u A, B là các câu và x là mt ký hi u biến thì các công thc
sau cũng là câu:
¬A
(A B)
(A B)
(A B)
(A B)
x, A
x, A
¾ Các khái nim và qui ước khác:
9 Nế u mt h ng thc không cha biến thì gi là hng thc nn
9 Mt câu đơn cũng có tên gi là câu phân t hay công thc phân t
9 Mt câu đơn hoc ph định ca mt câu đơn thì gi là literal
9 Trong công thc có ký hiu lượng t (x, A ho ếc x, A) các bi n x trong A
gi là biến buc (biến lượng t), biế n nào trong A không ph i là biến lượng
t thì gi biến t do. Các câu không biến t do gi câu đóng.
Trong môn hc này, chúng ta ch n các câu quan tâm đế đóng (ch các câu
đ óng mi xác định được tính đúng/sai c a nó, xem ph ĩn ng ngh a bên
dưới)
9 Mi n giá tr c đa m t biế ến t p hp các giá tr /đối tượng mà bi n ó có th
nhn.
1.2 Ng nghĩa (qui định cách din dch và xác định tính đúng/sai cho các câu)
9 Mt câu đơn đóng (không cha biế n) tương ng vi mt m nh đề (phát
biu, s kin, thông tin) nào đó trong thế gii thc, câu đơn giá tr chân
lý true hay false tùy theo mnh đề (phát biu, s ki n, thông tin) mà nó ám
chđúng hay sai trong thc tế.
9 Câu phc câu bi u di n (ánh x vi) m t ph định, m i quan h ho c
mi liên kết gia các mnh đề/phát biu/câu con hoc mt s ph biến hoc
đặ đềc thù c a m nh /phát bi ếu trong th gii th c. Ng nghĩa giá tr
chân ca các câu phc này được xác đnh da trên các câu con thành
phn ca nó, chng hn:
¬A nghĩa ph định m ếnh đề/ câu A, nh n giá tr true n u A
false và ngược li
A B nghĩ ế a mi liên k t “A B”, nh n giá tr true khi c A
và B là true, và nh false trong các trn giá tr ường hp còn li.
A B bi ế u di n mi liên k t “A ho c B”, nh n giá tr true khi ho c
A hoc B là true, và nh n giá tr false ch khi c A và B là false.
(A B) bi u di n mi quan h “A kéo theo B”, ch nh n giá tr
false khi A true B false; nh n giá tr true trong các trường
hp khác
(A B) bi u di n mi quan h “A kéo theo B” và “B kéo theo A”
x A bi u di n s ph biến c a A, nh n giá tr true t t c các câu
sinh ra t A bng cách thay x bi m i t tht giá tr/đố ượng c thuc
mi n giá tr biến x đều true, ng i thì câu phược l biế n này nh n
giá tr false
x A bi u di n s tn t i ca A, nh n giá tr true khi mt giá tr
x0 trong mi n giá tr ca biến x làm cho A true, false trong các
trường hp còn li.
Như v y, vi c xác đnh tính đ úng/sai c a mt câu đơn (v t) da trên
tính đúng sai ca s ki n ho c thông tin ám ch, còn vic xác định
tính đúng sai ca câu phc phi tuân theo các qui tc trên. Trong nhiu
trường hp, chúng ta (cn ch) biết tính đúng/sai ca các câu phc, còn tính
đúng/sai ca các câu đơn không cn biết hoc th l p lu n ra t các
các câu phc a đã biết đúng/sai các qui tc chuyn đổi tính đúng/sai gi
các câu c theo các qui tđơn và câu ph c trên.
1.3 Các ví d:
Các câu trong ngôn ng t t nhiên có th biu din trong logic v cp mt:
9 “An là sinh viên” Sinhvien(An)
9 “Nam là cha ca Hoàn” Cha(Nam,Hoàn)
9 “Mi sinh viên đều hc gii” x Sinhvien(x) Hocgioi(x)
(chú ý th i vường đ i i . Khác v x Sinhvien(x) Hocgioi(x))
9 “Trong sinh viên có bn hc gii” x Sinhvien(x) Hocgioi(x)
(chú ý th i vường đ i i . Khác v x Sinhvien(x) Hocgioi(x).
1.4 Các câu hng đúng (có giá tr chân lý luôn b ng true)
Ngoài các công câu hng đúng trong logic m nh đề, chúng ta thêm các câu h ng đúng
liên quan đến các lượng t như sau:
¾ x P(x) y P(y) (qui tc đổi tên)
¾ x P(x) y P(y) (qui tc đổi tên)
¾ xy P(x,y) yx P(x,y) (qui tc giao hoán)
¾ x y P(x,y) yx P(x,y) (qui tc giao hoán)
¾ ¬x P(x) ¬∃x P(x) (chuyn đổi gia )
¾ x P(x) ¬∀x ¬P(x) (chuyn đổi gia )
¾ ¬(x P(x)) x ¬P(x) (DeMorgan)
¾ ¬(x P(x)) ¬∀x ¬P(x) (DeMorgan)
¾ x P(x) P(a), vi a là giá tr thuc mi n giá tr ca X (loi b )
¾ x P(x) P(e), v t giá tri e là m vô danh, không có trong cơ s tri thc
(loi b )
¾ P(a) x P(x) (đưa ký hiêu vào)
¾ Lu t phân gi i t ng quát (xem m c 3 c a Chương này)
¾ Modus Ponens tng quát (xem mc 4 ca Chương này)
2. Lp lun trong logic v t cp mt
¾ Ví d: Xem xét bài toán l p lu n (hay ch ng minh) được phát bi u trong ngôn ng
t nhiên như sau:
Cho:
“An là con trai. Thy là con gái. Tóc ca con gái dài hơn tóc ca con trai”
Hãy chng minh:
“Tóc ca Thy dài hơn tóc ca An”
Bài toán này có th biu di p mn trong logic v t c t như sau:
Cho các câu sau (cơ s tri thc - KB) là đúng:
Contrai(An) (1)
Congai(Thuy) (2)
xy Contrai(x) Congai(y) Tocdaihon(y,x) (3)
Chúng ta cn chng minh (câu truy vn q):
Tocdaihon(Thuy,An).
Đây là mt l i gii ca bài toán trên (l i gii là dãy các bước áp dng lut logic v
t i cp mt để đưa cơ s tri thc v đ u cn chng minh):
Bước 1: T (1) và (2) ta áp dng lut đưa vào (A,B A B):
Contrai(An) Congai(Thuy) (4)
Bước 2: Áp dng lut lo i b trong (3) vi {x/An, y/Thuy} ta được:
Contrai(An) Congai(Thuy) Tocdaihon(Thuy,An) (5)
Bước 3: Áp dng lut Modus ponens cho (4) và (5) ta có:
Tocdaihon(Thuy,An) (6)
Đến đây ta được điu phi chng minh.
¾ Cũ ng gi ng như trong logic m nh đề, bài toán l p lu n (ch ng minh KB q)
th xem là bài toán tìm đường đi như sau:
9 Trng thái đầu: KB
9 Các phép chuy n tr ng thái: mi phép chuyn trng thái mt l n áp d ng
lut trong logic v t c ơ p mt (nhi u h n các lu t ca logic m nh đề) trên t p
câu trong KB. Mi lut i l áp dng cho KB sinh ra câu m l(KB), b sung câu
mi này vào KB được trng thái mi KB l(KB)
9 Trng thái đích: trng thái KB cha q
9 Chi phí cho mi phép chuyn: 1
¾ Bài toán trên có th ế tìm được li gi i b ng cách áp d ng các thu t toán tìm ki m
như ng đã trình bày trong các chươ đầu ca giáo trình này v ế tìm ki m. Tuy nhiên
không gian tìm kiếm li gii c t la bài toán này là r n. Cũng ging như trong
logic m n (q) nh đề, nếu cơ s tri thc (KB) và câu truy v được biu din bng
(ho c có th chuy n được sang) các câu có d ng thích hp, thì chúng ta có th ch
cn áp dng mt loi lut ca logic mnh đề để ch ng minh r ng KB q. C th
là nếu KB và q biu din được b ếng các câu Horn thì ch c n áp d ng liên ti p các
lut Modus ponens là chng minh được KB q (xem mc 5,7,8); còn nếu KB và
q bi ng chu n hu di n b ng các câu d i thì ta ch cn liên tiếp áp dng các lut
phân gii là thc hin được vi c suy di n KB q (xem mc 4,6).
3. Phép đồng nht hai v t, thut gi i đồng nh t
¾ Phép đồng nht là gì? Khi áp dng lu t trong logic v t, ta thường xuyên gp phi
vic đối sách các v t trong hai câu xem chúng th đồng nht được vi nhau
không (tc chúng s hoàn toàn như nhau trên mt b giá tr o đó. Ch ng h n
bước 2 trong chng minh d trên, khi áp dng Lu t lo i b hi u trong
câu có tính ph biến (3) đ được câu c th trên b giá tr (x=An, y=Thuy), ta ph i
đối sánh các cp v t <Contrai(An) Contrai(x)>, <Congai(Thuy)
Congai(y)> để tìm ra giá tr x=An, y=Thuy để cho các cp v t đó hoàn toàn
như nhau (để áp d ế ng các lu t ti p theo). Vi c đối sánh hai v t để tìm ra mt
b giá tr cho các biến sao cho hai v t đồng nht được gi phép đồng nht.
Vy phép đồng nht thao tác thc hin trên hai v t (ho c ph định ca v t)
và cho kết qus thay thế các biế n xu t hin trong các v t b ng các h ng thc
(các giá tr) để hai v t đó là như nhau.
¾ Ví d:
9 Đồng nht (Contrai(An), Contrai(y)) = {y/An}
| 1/108

Preview text:

Giáo trình
TRÍ TU NHÂN TO
ARTIFICIAL INTELLIGENCE
Phạm Thọ Hoàn, Phạm Thị Anh Lê Khoa Công nghệ thông tin
Trường Đại học Sư phạm Hà Nội Hà nội, 2011 MỤC LỤC
Chương 1 – Giới thiệu ...............................................................................................5
1. Trí tuệ nhân tạo là gì? ......................................................................................................... 5
2. Lịch sử ................................................................................................................................ 6 3. Các lĩnh vực c a AI ủ
............................................................................................................ 7
4. Nội dung môn học............................................................................................................... 9
Chương 2 – Bài toán và phương pháp tìm kiếm lời giải .........................................10
1. Bài toán và các thành phần của bài toán........................................................................... 10
2. Giải thuật tổng quát tìm kiếm lời giải............................................................................... 14
3. Đánh giá giải thuật tìm kiếm............................................................................................. 17
4. Các giải thuật tìm kiếm không có thông tin phản hồi (tìm kiếm mù)............................... 18
Chương 3 –Các phương pháp tìm kiếm heuristic ....................................................25
1. Giải thuật tìm kiếm tốt nhất đầu tiên (best first search).................................................... 25
2. Các biến thể của giải thuật best first search...................................................................... 28
3. Các giải thuật khác............................................................................................................ 31
Chương 4 – Các giải thuật tìm kiếm lời giải cho trò chơi .......................................37
1. Cây trò chơi đầy đủ........................................................................................................... 37
2. Giải thuật Minimax........................................................................................................... 39
3. Giải thuật Minimax với độ sâu hạn chế ............................................................................ 41
4. Giải thuật Minimax với cắt tỉa alpha-beta ........................................................................ 44
Chương 5 – Các phương pháp tìm kiếm lời giải thỏa mãn các ràng buộc ..............47
1. Các bài toán thỏa mãn các ràng buộc................................................................................ 47
2. Giải thuật quay lui vét cạn ................................................................................................ 50
3. Các cải tiến của giải thuật quay lui ................................................................................... 51
4. Các giải thuật tối ưu địa phư ng
ơ ....................................................................................... 54
Chương 6 – Các phương pháp lập luận trên logic mệnh đề ....................................55
1. Lập luận và Logic ............................................................................................................. 55
2. Logic mệnh đề: cú pháp, ngữ nghĩa.................................................................................. 55
3. Bài toán lập luận và các giải thuật lập luận trên logic mệnh đề........................................ 58
4. Câu dạng chuẩn h i và lu ộ
ật phân giải ............................................................................... 60
5. Câu dạng Horn và tam đoạn luận...................................................................................... 63
6. Thuật toán suy diễn dựa trên bảng giá trị chân lý............................................................. 65
7. Thuật toán suy diễn dựa trên luật phân giải...................................................................... 65
8. Thuật toán suy diễn tiến, lùi dựa trên các câu Horn ......................................................... 67
9. Kết chương........................................................................................................................ 70
Chương 7 – Các phương pháp lập luận trên logic cấp một .....................................72
1. Cú pháp – ngữ nghĩa......................................................................................................... 74
2. Lập luận trong logic vị t c
ừ ấp một.................................................................................... 78
3. Phép đồng nhất hai vị từ, thuật giải đồng nhất ................................................................. 80
4. Câu dạng chuẩn hội, luật phân giải t ng quát ổ
................................................................... 82
5. Câu dạng Horn và tam đoạn luận tổng quát trong logic cấp 1.......................................... 84
6. Giải thuật suy diễn phân giải ............................................................................................ 86
7. Thuật toán suy diễn tiến dựa trên câu Horn...................................................................... 89
8. Thuật toán suy diễn lùi dựa trên câu Horn........................................................................ 91
Chương 8 – Prolog...................................................................................................92
1. Lập trình logic, môi trường lập trình SWI Prolog ............................................................ 92
2. Ngôn ngữ Prolog cơ bản, chương trình Prolog................................................................. 95
3. Câu truy vấn...................................................................................................................... 97
4. Vị từ phi logic (câu phi logic)........................................................................................... 97
5. Trả lời truy vấn, quay lui, cắt, ph ủ đ nh
ị ............................................................................ 98
6. Vị từ đệ qui ..................................................................................................................... 104
7. Cấu trúc dữ liệu trong Prolog.......................................................................................... 105
8. Thuật toán suy diễn trong Prolog.................................................................................... 106
Chương 9 – Lập luận với tri thức không chắc chắn.............................................. 107
Chương 10 – Học mạng nơron nhân tạo............................................................... 108
Chương 1 – Gii thiu
1. Trí tu nhân to là gì? Để hiểu trí t ệ
u nhân tạo (artificial intelligence) là gì chúng ta ắ
b t đầu với khái niệm ự s
bay nhân tạo (flying machines), tức là cái máy bay.
Đã từ lâu, loài người mong muốn làm ra một cái máy mà có thể di chuyển được
trên không trung mà không phụ thuộc vào địa hình ở dưới mặt đất, hay nói cách khác là
máy có thể bay được. Không có gì ngạc nhiên khi những ý tưởng đầu tiên làm máy bay là
từ nghiên cứu cách con chim bay. Những chiếc máy biết bay được thiết kế theo nguyên lý
“vỗ cánh” như con chim chỉ có thể bay được quãng đường rất ngắn và lịch sử hàng không
thực sự sang một trang mới kể từ anh em nhà Wright thiết kế máy bay dựa trên các
nguyên lý của khí động lực học (aerodynamics).
Các máy bay hiện nay, như đã thấy, có sức trở rất lớn và bay được quãng đường
có thể vòng quanh thế giới. Nó không nhất thiết phải có nguyên lý bay của con chim
nhưng vẫn bay được như chim (dáng vẻ), và còn tốt hơn chim.
Quay lại câu hỏi Trí tuệ nhân tạo là gì. Trí t ệ
u nhân tạo là trí thông minh của máy
do con người tạo ra. Ngay từ khi chiếc máy tính điện tử đầu tiên ra đời, các nhà khoa học
máy tính đã hướng đến phát hiển ệ h t ố h ng máy tính (gồm ả
c phần cứng và phần mềm)
sao cho nó có khả năng thông minh như loài người. Mặc dù cho đến nay, theo quan niệm
của người viết, ước mơ này vẫn còn xa mới thành hiện thực, tuy vậy những thành tựu đạt
được cũng không hề nhỏ: chúng ta đã làm được các hệ t ố
h ng (phần mềm chơi cờ vua
chạy trên siêu máy tinh GeneBlue) có thể thắng được vua cờ thế giới; chúng ta đã làm
được các phần mềm có t ể
h chứng minh được các bài toán hình học; v.v. Hay nói cách
khác, trong một số lĩnh vực, máy tính có t ể h thực hiện tốt ơ
h n hoặc tương đương con
người (tất nhiên không phải tất cả các lĩnh vực). Đó chính là các hệ thống thông minh.
Có nhiều cách tiếp cận để làm ra trí thông minh của máy (hay là trí tuệ nhân tạo),
chẳng hạn là nghiên cứu cách bộ não người sản sinh ra trí thông minh của loài người như
thế nào rồi ta bắt chước nguyên lý đó, nhưng cũng có những cách khác sử dụng nguyên lý
hoàn toàn khác với cách sản sinh ra trí thông minh của loài người mà vẫn làm ra cái máy
thông minh như hoặc hơn người; cũng giống như máy bay hiện nay bay tốt hơn con chim
do nó có cơ chế bay không phải là giống như cơ chế bay của con chim. Như vậy, trí t ệ
u nhân tạo ở đây là nói đến khả năng của máy khi thực hiện các công
việc mà con người thường phải xử lý; và khi dáng vẻ ứng xử hoặc kết quả thực hiện của
máy là tốt hơn hoặc tương đương với con người thì ta gọi đó là máy thông minh hay máy
đó có trí thông minh. Hay nói cách khác, đánh giá sự thông minh ủ c a máy không phải
dựa trên nguyên lý nó thực hiện nhiệm vụ đó có giống cách con người thực hiện hay
không mà dựa trên kết quả hoặc dáng vẻ ứng xử bên ngoài của nó có giống với ế k t quả
hoặc dáng vẻ ứng xử của con người hay không.
Các nhiệm vụ của con người t ư
h ờng xuyên phải thực hiện là: gii bài toán (tìm kiếm,
chứng minh, lập luận), hc, giao tiếp, th hin cm xúc, thích nghi v i môi t ư
r ng xung
quanh, v.v., và dựa trên kết quả thực hiện các nhiệm vụ đó để kết luận rằng một ai đó có
là thông minh hay không. Môn học Trí tuệ nhân tạo nhằm cung cấp các phương pháp
luận để làm ra hệ thống có khả năng thực hiện các nhiệm vụ đó: giải toán, học, giao tiếp,
v.v. bất kể cách nó làm có như con ngư i
ờ hay không mà là kết quả đạt được hoặc dáng vẻ
bên ngoài như con người.
Trong môn học này, chúng ta sẽ tìm hiểu các phương pháp để làm cho máy tính biết
cách giải bài toán, biết cách lập luận, biết cách học, v.v.
2. Lch s
Vào năm 1943, Warren McCulioch và Walter Pitts bắt đầu thực hiện nghiên cứu ba cơ sở
lý thuyết cơ bản: triết học cơ bản và chức năng của các noron thần kinh; phân tích các
mệnh đề logic; và lý thuyết dự đoán của Turing. Các tác giả đã nghiên cứu đề xuât mô
hình noron nhân tạo, mỗi noron đặc trưng bởi hai t ạ r ng thái “ ậ b t”, “ ắ t t” và phát hiện
mạng noron có khả năng học.
Thuật ngữ “Trí tuệ nhân tạo” (Artificial Intelligence - AI) được thiết ậ l p bởi John
McCarthy tại Hội thảo đầu tiên về chủ đề này vào mùa hè năm 1956. Đồng thời, ông
cũng đề xuất ngôn ngữ lập trình Lisp – một trong những ngôn ngữ lập trình hàm tiêu
biểu, được sử dụng trong lĩnh vực AI. Sau đó, Alan Turing đưa ra "Turing test" như là
một phương pháp kiểm chứng hành vi thông minh.
Thập kỷ 60, 70 Joel Moses viết chương trình Macsyma - chương trình toán học sử dụng
cơ sở tri thức đầu tiên thành công. Marvin Minsky và Seymour Papert đưa ra các chứng
minh đầu tiên về giới hạn của các ạ
m ng nơ-ron đơn giản. Ngôn ngữ lập trình logic Prolog
ra đời và được phát triển bởi Alain Colmerauer. Ted Shortliffe xây dựng thành công một
số hệ chuyên gia đầu tiên trợ giúp chẩn đoán trong y học, các hệ thống này sử dụng ngôn
ngữ luật để biểu diễn tri thức và suy diễn.
Vào đầu những năm 1980, những nghiên cứu thành công liên quan đến AI như các hệ
chuyên gia (expert systems) – một dạng của chương trình AI mô phỏng tri thức và các kỹ
năng phân tích của một hoặc nhiều chuyên gia con người
Vào những năm 1990 và đầu thế kỷ 21, AI đã đạt được những thành tựu to lớn nhất, AI
được áp dụng trong logic, khai phá ữ d l ệ i u, c ẩ
h n đoán y học và nhiều lĩnh vực ứng dụng
khác trong công nghiệp. Sự thành công dựa vào nhiều yếu tố: tăng k ả h năng tính toán của
máy tính, tập trung giải quyết các bài toán con cụ t ể
h , xây dựng các mối quan hệ giữa AI
và các lĩnh vực khác giải quyết các bài toán tương tự, và một sự chuyển giao mới ủ c a các
nhà nghiên cứu cho các phương pháp toán học vững chắc và chuẩn khoa học chính xác.
3. Các lĩnh vc ca AI
¾ Lp lun, suy din t động: Khái niệm lập luận (reasoning), và suy diễn (reference)
được sử dụng rất phổ biến trong lĩnh vực AI. ậ
L p luận là suy diễn logic, dùng để c ỉ h
một tiến trình rút ra kết luận (tri thức mới) từ những giả thiết đã cho (được b ể i u diễn
dưới dạng cơ sở tri thức). N ư
h vậy, để thực hiện lập luận người ta cần có các phương
pháp lưu trữ cơ sở tri thức và các thủ tục lập luận trên cơ ở s tri thức đó.
¾ Biu din tri thc: Muốn máy tính có thể lưu trữ và xử lý tri thức thì ầ c n có các
phương pháp biểu diễn tri thức. Các phương pháp biểu diễn tri thức ở đây bao gồm
các ngôn ngữ biểu diễn và các kỹ thuật xử lý tri thức. Một ngôn n ữ g biểu diễn tri thức
được đánh giá là “ ố
t t” nếu nó có tính biểu đạt cao và các tính hiệu quả của thuật toán
lập luận trên ngôn ngữ đó. Tính biểu đạt của ngôn ngữ thể hiện khả năng biểu diễn
một phạm vi rộng lớn các thông tin trong một miền ứng dụng. Tính hiệu quả của các
thuật toán lập luận thể hiện chi phí về thời gian và không gian dành cho việc ậ l p luận.
Tuy nhiên, hai yếu tố này dường như đối ng ị h ch nhau, tức là ế n u ngôn ngữ có tính
biểu đạt cao thì thuật toán lập luận trên đó sẽ có độ phức tạp lớn (tính hiệu quả thấp)
và ngược lại (ngôn ngữ đơn giản, có tính biểu đạt t ấ h p thì th ậ u t toán ậ l p luận trên đó
sẽ có hiệu quả cao). Do đó, một thách t ứ
h c lớn trong ĩlnh vực AI là xây ự d ng các
ngôn ngữ biểu diễn tri thức mà có thể cân bằng hai yếu tố này, tức là ngôn ngữ có tính
biểu đạt đủ tốt (tùy theo từng ứng dụng) và có t ể h lập luận hiệu quả.
¾ Lp kế hoch: khả năng suy ra các mục đích cần đạt được đối với các nhiệm vụ đưa
ra, và xác định dãy các hành động cần thực hiện để đạt được mục đ ích đó.
¾ Hc máy: là một lĩnh vực nghiên cứu của AI đang được phát tr ể i n mạnh mẽ và có
nhiều ứng dụng trong các lĩnh vực khác nhau như khai phá dữ liệu, khám phá tri thức,…
¾ X lý ngôn ng t nhiên: là một nhánh của AI, tập trung vào các ứng dụng trên ngôn
ngữ của con người. Các ứng dụng trong nhận dạng tiếng nói, nhận dạng chữ viết, ị d ch
tự động, tìm kiếm thông tin,…
¾ H chuyên gia: cung cấp các hệ t ố h ng có k ả
h năng suy luận để đưa ra n ữ h ng kết
luận. Các hệ chuyên gia có khả năng xử lý lượng thông tin lớn và cung cấp các kết
luận dựa trên những thông tin đó. Có rất nhiều hệ chuyên gia nổi tiếng như các hệ
chuyên gia y học MYCIN, đoán nhận cấu trúc phân tử từ công thức hóa học DENDRAL, … ¾ Robotics ¾ …
4. Ni dung môn hc
Giáo trình này được viết với các nội dung nhập môn về AI cho các sinh viên chuyên
ngành Tin học và Công nghệ thông tin. Các tác giả có tham khảo một số tài liệu, giáo
trình của các trường Đại học Quốc gia Hà nội, Đại học Bách khoa Hà nội, … Nội dung gồm các phần sau:
Chương 1. Giới thiệu: trình bày tổng quan về AI, ịlch sử ra đời và phát triển và các lính vực ứng dụng của AI.
Chương 2. Các phương pháp tìm kiếm lời g ả
i i: trình bày các kỹ thuật tìm k ế i m cơ bản
được áp dụng để giải quyết các vấn đề và được áp dụng rộng rãi trong các lĩnh vực của trí tuệ nhân tạo.
Chương 3. Các giải thuật tìm kiếm lời giải cho trò chơi: trình bày một số kỹ thuật tìm
kiếm trong các trò chơi có đối thủ.
Chương 4. Các phương pháp lập luận trên logic mệnh đề: trình bày cú pháp, ngữ nghĩa
của logic mệnh đề và một ố s thuật toán ậ l p luận trên logic ệ m nh đề.
Chương 5. Các phương pháp lập luận trên logic vị từ cấp một: trình bày cú pháp, ngữ
nghĩa của logic vị từ cấp một và một ố s thuật toán ậ
l p luận cơ bản trên logic ị v từ cấp một.
Chương 6. Prolog: Giới thiệu chung ề
v ngôn ngữ Prolog, cú pháp, ngữ nghĩa và cấu trúc
chương trình trong Prolog, một số phiên bản mới của Prolog như SWI Prolog,…
Chương 7. Lập luận với tri thức không chắc chắn: Giới thiệu về tri thức không chắc chắn
và một số cách tiếp cận biểu diễn và xử lý tri thức không c ắ h c c ắ h n.
Chương 8. Học mạng noron nhân tạo: Giới thiệu về phương pháp và các kỹ thuật cơ bản
trong lập luận sử dụng mạng noron nhân tạo.
Chương 2 – Bài toán và phương pháp tìm kiếm li gii
1. Bài toán và các thành phn ca bài toán
Chương này giới thiệu các giải th ậ
u t máy tính có thể giải các bài toán mà thông
thường đòi hỏi trí thông minh của con người, như bài toán đong nước, bài toán 8 sô trên
bàn cờ, bài toán tìm đường như mô tả bên dưới đây. Để thiết kế giải thuật chung giải các
bài toán này, chúng ta nên phát biểu bài toán theo dạng 5 thành phần: Trạng thái bài toán,
trạng thái đầu, trạng thái đích, các phép chuyển trạng thái, lược đồ chi phí các phép
chuyển trạng thái (viết gọn là chi phí).
a. Bài toán đong nước 5 l 9 l 3 l
Sử dụng ba can 3 lít, 5 lít và 9 lít, làm thế nào để đong được 7 lít nước.
Bài toán này được phát biểu lại theo 5 thành phần như sau:
- Trạng thái: Gọi số nước có trong 3 can lần lượt là a, b, c (a ≤ 3, b ≤ 5, c ≤ 9), khi đó bộ
ba (a, b, c) là trạng thái của bài toán
- Trạng thái đầu: (0, 0, 0) // cả ba can đều rỗng
- Trạng thái đích (-, -, 7) // can thứ 3 chứa 7 lít nước
- Phép chuyển trạng thái: từ trạng thái (a,b,c) có thể chuyển sang trạng thái (x,y,z) thông
qua các thao tác như làm rỗng 1 can, chuyển từ can này sang can kia đến khi hết nước
ở can nguồn hoặc can đích bị đầy.
- Chi phí mỗi phép chuyển trạng thái: mỗi phép chuyển trạng thái có chi phí là 1.
Một lời giải của bài toán là một dãy các phép chuyển trạng thái (đường đi) từ trạng thái
đầu đến trạng thái đích. Bảng dưới đây là 2 lời giải của bài toán trên: a b c Å Đầu Æ a b c 0 0 0 0 0 0 3 0 0 0 5 0 0 0 3 3 2 0 3 0 3 3 0 2 0 0 6 3 5 2 3 0 6 Đích Æ 3 0 7 0 3 6
Li gii 2 (chi phí: 5) 3 3 6 1 5 6 0 5 7 Å Đích
Li gii 1 (chi phí: 9)
b. Bài toán di chuyn 8 s trên bàn c
Trạng thái đầu Trạng thái đích
Cho bàn cờ kích thước 3 x 3, trên bàn cờ có 8 quân cờ đánh số từ 1 đến 8 (hình vẽ).
Trên bàn cờ có một ô t ố
r ng. Chúng ta có thể chuyển một quân cờ có chung cạnh với ô
trống sang ô trống. Hãy tìm dãy các phép chuyển để từ trạng thái ban đầu về trạng thái
mà các quan cờ được xếp theo trật tự như Trạng thái đích của hình trên.
Bài toán di chuyển 8 số trên bàn cờ có thể phát biểu dưới dạng 5 thành phần như sau:
- Biểu diễn trạng thái: mảng 2 chiều kích thước 3x3, p ầ
h n tử của mảng lưu số h ệ i u quân
cờ (từ 0 đến 9, 0 là vị trí trống). Cũng có thể biểu diễn t ạ
r ng thái bàn cờ bằng mảng
một chiều gồm 9 phần tử: ba phần tử đầu tiên biểu diễn các ô thuộc dòng đầu tiên của
bàn cờ, ba phần tử tiếp biểu diễn các quân cờ thuộc dòng thứ hai, ba phần tử cuối
cùng biểu diễn các quân cờ thuộc dòng cuối cùng. Ở đây chúng tôi sử dụng mảng hai
chiều 3x3 để cho giống với bàn cờ trên thực tế.
- Trạng thái đầu (hình vẽ trên)
- Trạng thái đích (hình vẽ trên)
- Phép chuyển trạng thái: đổi chỗ ô có số hiệu 0 với một trong các ô có cùng cạnh.
- Chi phí: mỗi phép chuyển có chi phí 1.
Lời giải của bài toán là dãy các phép chuyển từ trạng thái đầu đến trạng thái đích. Một lời
giải của bài toán là: UP, UP, RIGHT, DOWN, LEFT, UP, RIGHT, RIGHT, DOWN,
LEFT, LEFT, UP, RIGHT, DOWN, RIGHT, DOWN (chú ý: up, down, right, left là biểu
diễn sự dịch chuyển ô trống lên trên, xuống dưới, sang phải, sang trái)
c. Bài toán tìm đường đi
Một ôtô robot tìm đường đi từ thành phố Arad đến thành phố Bucharest. Biết rằng xe
robot này không có bản đồ đầy đủ như trên hình vẽ trên, nhưng khi nó đến một thành phố
mới, nó có bộ cảm b ế
i n đọc được biển chỉ đường đến các thành lân cận, trên biển chỉ đường có khoảng cách.
Bài toán tìm đường có thể phát biểu theo 5 thành phần như sau:
- Trạng thái: vị trí của ôtô robot (tên thành phố)
- Trạng thái đầu: Thành phố Arad
- Trạng thái đích: Thành phố Bucharest
- Phép chuyển trạng thái: từ thành phố sang thành phố lân cận
- Chi phí: khoảng cách giữa 2 thành phố trong phép chuyển trạng thái
Lời giải của bài toán là dãy các phép chuyển từ trạng thái đầu đến trạng thái đích, hay là
đường đi từ thành phố đầu đến thành phố đích. ộ M t ví ụ
d của lời giải bài toán là: Arad Æ
Sibiu Æ Fagaras Æ Bucharest.
2. Gii thut tng quát tìm kiếm li gii
a. Không gian trng thái ca bài toán
Mỗi bài toán với 5 thành phần như mô tả ở trên, chúng ta có thể xây dựng được một cấu
trúc đồ thị với các nút là các trạng thái của bài toán, các cung là phép chu ể y n t ạ r ng thái.
Đồ thị này được gọi là không gian trạng thái của bài toán. Không gian trạng thái có thể là
vô hạn hoặc hữu hạn. Ví dụ, với bài toán di chuyển 8 số trên bàn cờ, không gian trạng
thái có số lượng là 8! (8 giai thừa) trạng thái.
Lời giải của bài toán là một đường đi trong không gian trạng thái có điểm đầu là trạng
thái đầu và điểm cuối là trạng thái đích. Nếu không gian trạng thái của bài toán là nhỏ, có
thể liệt kê và lưu vừa trong bộ nhớ của máy tính thì việc tìm đường đi trong không gian
trạng thái có thể áp dụng các thuật toán tìm đường đi trong lý thuyết đồ thị. Tuy nhiên,
trong rất nhiều trường hợp, không gian trạng thái của bài toán là rất lớn, việc duyệt toàn
bộ không gian trạng thái là không thể. Trong môn học Trí tuệ nhân tạo này, chúng ta sẽ
tìm hiểu các phương pháp tìm kiếm lời giải trong các bài toán có không gian trạng thái lớn.
b. Gii thut tng quát tìm kiếm li gii ca bài toán
Với các bài toán có 5 thành phần ở trên, chúng ta có giải thuật chung để tìm kiếm lời giải
của bài toán. Ý tưởng là sinh ra các lời giải tiềm năng và kiểm tra chúng có phải là lời
giải thực sự của bài toán. Một lời giải t ề i m năng là ộ
m t đường đi trong không gian trạng
thái của bài toán có nút đầu là trạng thái đầu và mỗi cung ủ c a đường đi là ộ m t phép
chuyển hợp lệ giữa các trạng thái kề với cung đó. Lời giải thực sự của bài toán là lời giải
tiềm năng có nút cuối cùng là trạng thái đích. Các lời giải tiềm năng là các đường đi có
cùng nút đầu tiên và dãy các cung là dãy các phép chuyển hợp lệ từ trạng thái đầu đó.
Các lời giải tiềm năng có thể tổ chức theo cây, ố g c ủ
c a cây là trạng thái đầu, cây được
phát triển bằng cách bổ sung vào các nút liền kề với trạng thái đầu, sau đó liên tiếp bổ
sung vào các con của các nút lá, …
Lược đồ chung để tìm lời giải của bài toán 4 thành p ầ
h n trên là xây dựng cây lời giải t ể i m
năng (hay là cây tìm kiếm) và kiểm tra lời giải t ề i m ă
n ng có là lời giải thực sự của bài
toán hay không. Các bước của giải thuật chung là như sau: xây dựng cây tìm kiếm mà nút
gốc là trạng thái đầu, lặp lại 2 bước: kiểm tra xem trạng thái đang xét có là trạng thái đích
không, nếu là trạng thái đích thì thông báo lời giải, nếu không thì mở rộng cây tìm kiếm
bằng cách bổ sung các nút con là các trạng thái láng giềng của trạng thái đang xét. Giải
thuật chung được trình bày trong bảng sau:
Đầu vào của giải th ậ
u t là bài toán (problem) với 5 thành phần (biểu diễn trạng thái tổng
quát, trạng thái đầu, trạng thái đích, phép chuyển trạng thái, chi phí phép chuyển trạng
thái) và một chiến lược tìm kiếm (strategy); đầu ra của giải th ậ u t là một lời giải ủ c a bài
toán hoặc giá trị failure nếu bài toán không có lời giải. Giải th ậ
u t sinh ra cây các lời giải
tiềm năng, nút gốc là trạng thái đầu của bài toán, mở rộng cây theo chiến lược (strategy)
đã định trước đến khi cây chứa nút trạng thái đích hoặc không thể mở rộng cây được nữa.
Function General_Search(problem, strategy) returns a solution, or failure
cây-tìm-kiếm Å trạng-thái-đầu; while (1) {
if (cây-tìm-kiếm không thể mở rộng được nữa) then return failure
nút-lá Å Chọn-1-nút-lá(cây-tìm-kiếm, strategy)
if (node-lá là trạng-thái-đích) then return Đường-đi(trạng-thái-đầu, nút-lá)
else mở-rộng(cây-tìm-kiếm, các-trạng-thái-kề(nút-lá)) }
Trong giải thuật chung này, chiến lược tìm kiếm (strategy) sẽ quyết định việc chọn nút lá
nào trong số nút lá của cây để mở rộng cây tìm k ế i m, ví ụ d n ư h nút lá nào x ấ u t hiện trong
cây sớm hơn thì được chọn trước để phát triển cây (đây là chiến lược tìm kiếm theo chiều
rộng), hoặc nút lá nào xuất hiện sau thì được chọn để mở rộng cây (đây là chiến lược tìm
kiếm theo chiều sâu). Chiến lược tìm kiếm có thể được cài đặt thông qua một cấu trúc dữ
liệu để đưa vào và lấy ra trạng thái lá của cây tìm kiếm. Hai ấ c u trúc dữ l ệ i u cơ bản là
hàng đợi và ngăn xếp. Hàng đợi sẽ lưu các trạng thái lá của cây và t ạ r ng thái nào được
đưa vào hàng đợi trước sẽ được ấ
l y ra trước, còn ngăn xếp là cấu trúc dữ l ệ i u lưu trạng
thái lá của cây tìm kiếm và việc chọn nút lá của cây sẽ theo kiểu vào trước ra sau. ả B ng
dưới đây là chi tiết hóa thuật toán tìm kiếm lời giải ở trên với chiến lược tìm kiếm được
thể hiện thông qua cấu trúc dữ liệu hàng đợi (queue) hoặc ngăn xếp (stack). Trong giải
thuật chi tiết hơn này, cây tìm kiếm được b ể
i u diễn bằng mảng một chiều father, trong đó
father(i) là chỉ nút cha của nút i. Thủ tục path(node,father) dùng để lần ngược đường đi từ
trạng thái node về nút gốc (trạng thái đầu) (node được truyền giá trị là trạng thái đích khi
thủ tục path được gọi).
Function General_Search(problem, Queue/Stack) returns a solution, or failure
Queue/Stack Å make_queue/make_stack(make-node(initial-state[problem]));
father(initial-state[problem]) = empty; while (1)
if Queue/Stack is empty then return failure;
node = pop(Queue/Stack) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]);
push(Queue/Stack, expand-nodes );
foreach ex-node in expand-nodes father(ex-node) = node; end
Function path(node,father[]) : print the solution n Å node
while (n # empty)
cout<< n <<“ <-- ” ; n = father[n]; end
c. Cây tìm kiếm:
Trong quá trình tìm kiếm lời giải, chúng ta thường áp dụng một chiến lược để sinh ra các
lời giải tiềm năng. Các lời giải tiềm năng được tổ chức thành cây mà gốc là trạng thái đầu
của bài toán, các mức tiếp theo của cây là các nút kề với các nút ở mức trước. Thông
thường thì cây tìm kiếm được mở rộng đến nó chứa trạng thái đích là dừng.
3. Đánh giá gii thut tìm kiếm
Một giải thuật tìm kiếm lời giải của bài toán phụ thuộc rất nhiều vào chiến lược tìm kiếm
(hay là cấu trúc dữ liệu để lưu các nút lá của cây trong quá trình tìm k ế i m). Để đánh giá
giải thuật tìm kiếm người ta đưa ra 4 tiêu chí sau:
1. Tính đầy đủ: giải thuật có tìm được lời giải của bài toán không nếu bài toán tồn tại lời giải?
2. Độ phức tạp thời gian: thời gian của giải th ậ
u t có kích cỡ như thế nào đối với bài toán?
3. Độ phức tạp không gian: Kích cỡ của bộ nhớ cần cho giải th ậ u t? Trong giải th ậ u t
tổng quát ở trên, kích cỡ bộ nhớ c ủ h yếu phụ th ộ
u c vào cấu trúc dữ l ệ i u lưu các
trạng thái lá của cây tìm kiếm
4. Tính tối ưu: Giải thuật có tìm ra lời giải có chi phí tối ưu (nhỏ nhất hoặc lớn nhất
tùy theo ngữ cảnh của bài toán)?
Độ phức tạp thời gian và độ phức tạp không gian của giải th ậ
u t tìm kiếm lời giải của bài
toán có thể đánh giá dựa trên kích thước đầu vào của giải th ậ
u t. Các tham số kích thước đầu vào có thể là:
- b – nhân tố nhánh của cây tìm kiếm: số nhánh tối đa ủ c a ộ m t nút, hay là ố s phép
chuyển trạng thái tối đa của một trạng thái tổng quát
- d – độ sâu của lời giải có chi phí nhỏ nhất
- m – độ sâu tối đa của cây tìm kiếm (m có thể là vô hạn)
Trong các giải thuật tìm kiếm lời giải đề cập đến ở chương này, chúng ta sẽ đánh giá ưu,
nhược điểm của từng giải thuật dựa trên 4 tiêu chí trên.
4. Các gii thut tìm kiếm không có thông tin phn hi (tìm kiếm mù)
Các giải thuật tìm kiếm không sử dụng thông tin phản ồ h i (hay là giải th ậ u t tìm k ế i m mù)
là các giải thuật chỉ sử dụng thông tin từ 5 thành phần cơ bản của bài toán (trạng thái ổ t ng
quát, trạng thái đầu, trạng thái đích, phép chuyển trạng thái, chi phí). Ý tưởng chung cơ
bản của các giải thuật này là sinh ra cây lời giải tiềm năng (cây tìm kiếm) một cách có hệ
thống (không bỏ sót và không lặp lại). Phần này sẽ giới thiệu các giải thuật tìm kiếm theo
chiều rộng, tìm kiếm theo chiều sâu, tìm kiếm theo chiều sâu có giới hạn, tìm kiếm sâu
dần. Các giải thuật này đều theo giải th ậ u t chung đã giới th ệ
i u bên trên, chỉ khác nhau ở
chiến lược tìm kiếm hay là cấu trúc dữ liệu để lưu giữ và lấy ra các nút lá của cây tìm kiếm.
a. Tìm kiếm theo chiu rng
Giải thuật tìm kiếm lời giải theo chiều rộng là cài đặt cụ t ể h của giải th ậ u t chung tìm
kiếm lời giải, trong đó có sử dụng cấu trúc ữ d l ệ
i u kiểu hàng đợi (queue) để lưu giữ các
trạng thái nút lá của cây tìm kiếm. Các nút lá sinh ra trong quá trình thực thi giải thuật sẽ
được cập nhật vào một hàng đợi theo nguyên tắc nút nào được đưa vào hàng đợi trước sẽ
được lấy ra trước trong quá trình mở rộng cây. Chi tiết của giải thuật được cho trong bảng bên dưới.
Chúng ta sẽ minh họa việc tìm k ế
i m lời giải bằng giải thuật tìm kiếm theo chiều rộng
bằng ví dụ cụ thể như sau. Giả sử bài toán có không gian các trạng thái đầy đủ như hình
vẽ ngay sau bảng giải thuật (trang sau), với trạng thái đầu là S, trạng thái đích là G và các
phép chuyển trạng thái là các cung nối giữa các trạng thái. Giải th ậ u t ắ b t đầu xét với hàng
đợi chứa trạng thái đầu S, lấy trạng thái ở đầu hàng đợi ra kiểm tra xem nó có là trạng
thái đích, nếu là đích thì in lời giải, nếu không thì bổ sung các trạng thái con của nó vào hàng đợi.
Function Breadth-Search(problem, Queue) returns a solution, or failure
Queue Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty; while (1)
if Queue is empty then return failure; node = pop(Queue) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]); push(Queue, expand-nodes );
foreach ex-node in expand-nodes father(ex-node) = node; end
Không gian đầy đủ các trng thái ca bài toán
Bảng phía dưới là diễn biến các biến chính của giải th ậ
u t: biến trạng thái đang xét – node,
biến hàng đợi – Queue, biến lưu thông tin về cây tìm kiếm – Father. Giải th ậ u t ế k t thúc
với 8 vòng lặp khi trạng thái đang xét node = G và khi đó lời giải của bài toán là đường đi G Å B Å S. node Queue Father S S A, B, C Father[A,B,C]=S A B, C, D, E Father[D,E]=A B C,D,E,G Father[G]=B C D, E, G, F Father[F]=C D E,G, F, H Father[H]=D E G, F, H G F, H
Cây tìm kiếm ca gii thut theo chiu rng
Giá tr các biến trong
gii thut theo chiu rng
Đánh giá giải thuật tìm kiếm theo chiều rộng:
9 Tính đầy đủ: giải th ậ
u t sẽ cho lời giải của bài toán ế
n u bài toán tồn tại lời giải và
nhân tố nhánh b là hữu hạn
9 Độ phức tạp thời gian: 1+b+b2+…+bd (số vòng lặp khi gặp trạng thái đích) = O(bd)
9 Độ phức tạp không gian: số lượng ô nhớ tối đa sử dụng trong giải thuật (chủ yếu là
biến Queue, xem hình vẽ dưới): bd
9 Tính tối ưu: giải th ậ u t tìm k ế i m theo ch ề
i u rộng sẽ tìm ra lời giải với ít trạng thái trung gian nhất. d m b G
Hàng đợi trong giải thuật tìm kiếm theo chiều rộng chỉ chứa các nút lá của cây tìm
kiếm, vì vậy có kích thước là bd.
b. Tìm kiếm theo chiu sâu
Giải thuật tìm kiếm theo chiều sâu hoàn toàn tương tự như giải thuật tìm kiếm theo chiều
rộng, chỉ khác ở chỗ thay vì sử dụng cấu trúc dữ liệu hàng đợi, ta sử dụng cấu trúc dữ liệu
ngăn xếp (Stack) để lưu giữ các trạng thái lá của cây tìm k ế
i m. Đối với cấu trúc dữ liệu
ngăn xếp, các trạng thái đưa vào sau cùng sẽ được lấy ra trước để mở rộng cây tìm kiếm.
Giải thuật và diễn biến các biến chính trong giải thuật được trình bày trong các bảng và
hình vẽ dưới đây. Kết quả của giải thuật là lời giải G Å E Å A Å S.
Function Depth-Search(problem, Stack) returns a solution, or failure
Stack Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty; while (1)
if Stack is empty then return failure; node = pop(Stack) ;
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]); push(Stack, expand-nodes );
foreach ex-node in expand-nodes father(ex-node) = node; end node Stack father S S A, B, C Father[A,B,C]=S A D, E, B, C Father[D,E]=A D H, E, B, C Father[H]=D H E, B, C E G, B, C Father[G]=E G
Giá tr các biến trong
gii thut theo chiu sâu
Cây tìm kiếm ca gii thut theo chiu
Đánh giá giải thuật tìm kiếm theo chiều sâu:
9 Tính đầy đủ: giải th ậ u t không c ắ
h c chắn cho lời giải của bài toán trong trường hợp
không gian trạng thái của bài toán là vô hạn
9 Độ phức tạp thời gian: O(bm)
9 Độ phức tạp không gian: O(b.m)
9 Tính tối ưu: giải th ậ u t tìm k ế i m theo ch ề
i u sâu không cho lời giải ố t i ưu.
c. Tìm kiếm theo chiu sâu có gii hn
Giải thuật tìm kiếm theo chiều sâu ở trên có ưu điểm là nó có thể sinh ra lời giải nhanh
chóng mà không tốn kém bộ nhớ của máy tính. Tuy nhiên nếu không gian t ạ r ng thái của
bài toán là vô hạn thì rất có thể nó không tìm được lời giải của bài toán khi hướng tìm
kiếm không chứa trạng thái đích. Để khắc phục nhược điểm này, chúng ta có thể đặt giới
hạn độ sâu trong giải thuật: nếu độ sâu của trạng thái đang xét vượt quá ngưỡng nào đó
thì chúng ta không bổ sung các nút kề với trạng thái này nữa mà chu ể y n sang hướng tìm
kiếm khác. Chi tiết của giải thuật được cho trong bảng dưới đây, trong đó chúng ta đưa
thêm biến mảng một chiều depth[i] lưu độ sâu của trạng thái i.
Function Depth-Limitted-Search(problem, maxDepth)
returns a solution, or failure
----------------------------------------------------------------------
Stack Å make-queue(make-node(initial-state[problem]));
father(initial-state[problem]) = empty;
depth(initial-state[problem]) = 0; while (1)
if Stack is empty then return failure; node = pop(Stack) ;
if test(node,Goal[problem]) then return path(node,father);
if (depth(node) < maxDepth)
expand-nodes Åadjacent-nodes(node, Operators[problem]); push(Stack, expand-nodes );
foreach ex-node in expand-nodes father(ex-node) = node; end
d. Tìm kiếm sâu dn
Giải thuật tìm kiếm với chiều sâu có giới hạn ở trên p ụ h thuộc vào giới ạ h n độ sâu lựa
chọn ban đầu. Nếu biết trước trạng thái đích sẽ xuất hiện trong phạm vi độ sâu nào đó của
cây tìm kiếm thì chúng ta đặt giới hạn độ sâu đó cho giải thuật. Tuy nhiên nếu chọn độ
sâu tối đa không phù hợp, giải thuật tìm kiếm theo chiều sâu có giới hạn sẽ không tìm
được lời giải của bài toán. Chúng ta có t ể
h gọi thực hiện giải th ậ
u t tìm kiếm lời giải ở độ
sâu khác nhau, từ bé đến lớn. Giải thuật bổ sung như sau:
Function Iterative-deepening-Search(problem) returns a solution, or failure
for depth = 0 to do
result Å Depth-Limited-Search(problem, depth)
if result succeeds then return result end return failure
Chương 3 –Các phương pháp tìm kiếm heuristic
1. Gii thut tìm kiếm tt nht đầu tiên (best first search)
Các giải thuật trong mục 4 ở trên có chung đặc điểm là tìm kiếm lời giải một cách có hệ
thống: xây dựng tất cả không gian lời giải tiềm năng theo cách vét cạn, không bỏ sót và
không lặp lại. Trong rất nhiều trường hợp, các giải thuật như vậy không khả thi vì không
gian trạng thái bài toán quá lớn, tốc độ xử lý và bộ nhớ của máy tính không cho phép
duyệt các lời giải tiềm năng. Để hạn chế không gian cây các lời giải t ề i m ă n ng, chúng ta
đưa ra một hàm định hướng việc mở rộng cây tìm kiếm. Theo cách này, chúng ta sẽ mở
rộng cây theo các nút lá có nhiều tiềm năng chứa trạng thái đích hơn các nút lá khác.
Ví dụ, đối với bài toán 8 số, chúng ta đưa ra một hàm định hướng mở rộng cây như sau:
giả sử n là một trạng thái bàn cờ ( ộ m t ự
s sắp xếp 8 quân cờ trên bàn cờ 3x3), hàm định
hướng h định nghĩa như sau:
h(n) = tổng khoảng cách Manhatan các vị trí của từng quân cờ trên bàn cờ n với vị trí của nó trên bàn cờ đích.
Chẳng hạn, nếu n là trạng thái đầu như trong hình của mục 1.b, h(n) có thể xác định như sau: Quân c
V trí trên n V trí trên bàn
Khong cách (s ln dch
c đích
chuyn khi bàn c không có
quân c khác)
Trạng thái n là trạng thái đầu của bài toán 8 số trong mục 1.b 1 (3,3) (1,3) 2 2 (2,3) (2,3) 0 3 (3,2) (3,3) 1 4 (1,1) (1,2) 1 5 (1,3) (2,2) 2 6 (3,1) (3,2) 1 7 (1,2) (1,1) 1 8 (2,1) (2,1) 0
h(n) = 2 + 0 + 1 + 1 + 2 + 1 + 1 + 0 = 8
Hàm h(n) như mô tả ở trên phản ánh sự “khác nhau” giữa trạng thái n với trạng thái đích,
h(n) càng nhỏ thì n càng “giống” với trạng thái đích, khi n trùng với trạng thái đ ích thì h(n) = 0.
Khi không gian bài toán quá lớn, việc mở rộng cây theo chiến lược theo chiều rộng h ặ o c
theo chiều sâu dẫn đến cây tìm kiếm quá lớn mà không chứa lời giải của bài toán. Khi đó
chúng ta cần mở rộng cây theo hướng các nút lá có nhiều triển vọng chứa trạng thái đích,
và hàm h(n) sẽ giúp chúng ta mở rộng cây. Chúng ta sẽ mở rộng cây theo hướng các nút
lá có hàm h(n) nhỏ nhất. Khi đó h được gọi là thông tin phản hồi của quá trình mở rộng
cây là có hợp lý hay không (vì thế mà các phương pháp tìm kiếm trong mục này gọi là
tìm kiếm có phản hồi - informed search, chúng cũng có tên là tìm kiếm heuristic - dựa
trên hàm đánh giá hợp lý h).
Để mở rộng cây theo nút lá có giá trị h nhỏ nhất, chúng ta sử dụng ộ m t ấ c u trúc dữ l ệ i u là
danh sách (list) có sắp xếp theo giá trị h. Giải thuật chi tiết được trình bày trong bảng sau
(được gọi là giải thuật Best-First-Search):
Function Best-First-Search(problem, list, h) returns a solution, or failure
list Å make-list(make-node(initial-state[problem]));
father(initial-state[problem]) = empty; while (1)
if list is empty then return failure;
node = pop(list) ; // node with max/min h
if test(node,Goal[problem]) then return path(node,father);
expand-nodes Åadjacent-nodes(node, Operators[problem]); push(list, expand-nodes ,h);
foreach ex-node in expand-nodes father(ex-node) = node; end
Function push(list, expand-nodes ,h);
Chèn các nodes trong expand-nodes vào list sao cho mảng list sắp theo thứ tự
tăng/giảm theo hàm h
Chú ý rằng, cấu trúc giải thuật này giống với các giải th ậ u t tìm kiếm theo ch ề i u rộng hay
theo chiều sâu, chỉ khác ở chỗ, thay vì sử dụng hàng đợi hay ngăn xếp để lưu giữ các
trạng thái lá của cây tìm kiếm, chúng ta sử dụng danh sách sắp xếp theo giá trị hàm h.
Danh sách sắp xếp tăng hay giảm phụ thuộc vào hàm h và ngữ cảnh của bài toán, ví dụ
bài toán 8 số và hàm h định nghĩa ở trên, danh sách cần sắp xếp theo thứ tự tăng dần để
khi lấy phần tử ở đầu danh sách ta cẽ được nút lá “gần” với đích nhất.
Hình vẽ sau minh họa việc mở rộng cây tìm kiếm khi sử dụng giải thuật trên:
Cây có gốc là trạng thái đầu với giá trị h(đầu) = 8. Từ trạng thái gốc có hai phép chuyển:
chuyển ô trống đổi vị trí cho ô số 7 (hàm h giảm đi 1) và đổi vị trí ô trống cho ô số 8
(hàm h tăng lên 1). Lúc này danh sách sắp xếp có 2 nút lá tương ứng với hai trạng thái có
hàm h=7 và h=9. Trong 2 nút lá này, giải thuật sẽ chọn nút có giá trị hàm h nhỏ hơn
(h=7) để mở rộng cây. Tiếp tục mở rộng cây theo hướng nút lá có giá trị h nhỏ nhất
(trong trường hợp có nhiều nút lá cùng có giá trị nhỏ nhất thì chọn nút lá nào xuất hiện
trước) thì ta được một phần của cây như trong hình vẽ trên.
2. Các biến th ca gii thut best first search
Ý tưởng của giải thuật tìm kiếm tốt nhất đầu tiên (best first search) là mở rộng cây tìm
kiếm theo hướng ưu tiên các nút lá có triển vọng chứa trạng thái đích (dựa trên hàm đánh
giá h). Giải thuật best-first-search có các biến thể sau:
- Khi hàm h(n) là chi phí của dãy phép chuyển từ trạng thái đầu đến trạng thái n thì giải
thuật best-first-search có tên gọi khác là giải thuật tìm kiếm đều (uniform search). Trong
trường hợp này, cây tìm kiếm sẽ mở rộng đều về tất ả c các hướng theo vết ầ d u loang từ
trạng thái đầu. Khi hàm chi phí của dãy phép chuyển là số các đỉnh trung gian thì giải
thuật uniform search trở thành giải thuật tìm kiếm theo chiều rộng. Giải thuật uniform
search sẽ cho lời giải với chi phí nhỏ nhất, tuy nhiên cây tìm kiếm sinh ra trong giải th ậ u t
này thường có kích thước rất lớn.
- Khi h(n) là ước lượng chi phí/khoảng cách từ n đến đích (ví dụ như khoảng cách
Manhatan trong bài toán 8 số ở trên) thì giải thuật best-first-search được gọi là giải th ậ u t
tham ăn (greedy search). Giải thuật tham ăn sẽ chọn nút lá n “gần” đến đích nhất trong
số các nút lá của cây tìm kiếm để mở rộng cây, và nó không quan tâm đến chi phí từ
trạng thái đầu đến n. Do vậy giải thuật có xu hướng cho ra kết quả trong thời gian nhanh
nhất, nhưng không phải lúc nào cũng là lời giải ngắn nhất.
- Khi h(n) = f(n) + g(n), trong đó f(n) là hàm chi phí/khoảng cách từ trạng thái đầu đến n
và g(n) là hàm ước lượng chi phí/khoảng cách từ n đến trạng thái đích, và nếu g(n) là ước
lượng dưới của hàm chi phí/khoảng cách thực sự từ n đến trạng thái đích thì g ả i i th ậ u t
best-first-search được gọi là giải thuật A*. Giải thuật A* là giải thuật trung hòa giữa hai
giải thuật uniform và giải thuật greedy ở trên. A* cho lời giải có chi phí nhỏ nhất (bạn đọc có thể tìm h ể
i u chứng minh điều này ở các tài l ệ
i u khác) và cây tìm kiếm có kích thước vừa phải.
Ví dụ, đối với bài toán tìm đường đi từ thành phố Arad đến thành phố Bucharest đã mô tả
trong 1.b, nếu chúng ta sử dụng kh ả
o ng cách Ơclit (khoảng cách theo đường chim bay) từ
mỗi thành phố đến đích (xem hình vẽ trên) thì các giải thuật uniform, greedy và A* sẽ
cho các cây tìm kiếm như sau:
Một phần cây tìm kiếm của giải thuật Uniform search
Cây tìm kiếm của giải thuật Greedy search
Cây tìm kiếm của giải thuật A*
3. Các gii thut khác
* Tìm kiếm leo đồi:
Ý tưởng: Tìm kiếm theo chiều sâu kết hợp với hàm đánh giá. Mở rộng trạng thái hiện tại
và đánh giá các trạng thái con của nó bằng hàm đánh giá heuristic. Tại mỗi bước, nút lá
“tốt nhất” sẽ được chọn để đi tiếp.
Procedure Hill-Climbing_search; Begin
1. Khởi tạo ngăn xếp S chỉ chứa trạng thái đầu; 2. Loop do
2.1 If S rỗng then {thông báo thất bại; stop};
2.2 Lấy trạng thái u ở đầu ngăn xếp S;
2.3 If u là trạng thái kết thúc then
{thông báo thành công; stop};
2.4 For mỗi trạng thái v kề u do đặt v vào danh sách L;
2.5 Sắp xếp L theo thứ tự tăng dần của hàm đánh giá sao cho trạng
thái tốt nhất ở đầu danh sách L;
2.6 Chuyển danh sách Lvào ngăn xếp S; End; Ví dụ : Với ví dụ đ
ồ thị không gian trạng thái như hình 2.2 thì cây tìm kiếm leo đồi
tương ứng như hình 2.4 : A 20 C E 15 7 6 D F I 10 8 B 0 5 G
Cây tìm kiếm leo đồi
Hạn chế của thuật toán :
- Giải thuật có khuynh hướng bị sa lầy ở những cực đại cục bộ:
+ Lời giải tìm được không tối ưu
+ Không tìm được lời giải mặc dù có tồn tại lời giải
- Giải thuật có thể gặp vòng lặp vô hạn do không lưu giữ thông tin về các trạng thái đã duyệt.
* Tìm kiếm Beam
Để hạn chế không gian tìm kiếm, người ta đưa ra phương pháp tìm kiếm Beam. Đây
là phương pháp tìm kiếm theo chiều rộng nhưng có hạn chế số đỉnh phát triển ở mỗi
mức. Trong tìm kiếm theo chiều rộng, tại mỗi mức ta phát triển tất cả các đỉnh, còn
tìm kiếm Beam thì chọn k đỉnh tốt nhất để phát triển. Các đỉnh này được xác đ n ị h bởi
hàm đánh giá. Ví dụ, với đồ thì không gian trạng thái như hình 2.2 và lấy k=2 thì cây
tìm kiếm Beam như hình 2.5. Các đỉnh được chọn ở mỗi mức là các đỉnh được tô màu đỏ: A 20 C 15 E 7 D 6 K 12 F 10 I G 8 5 0 B 5 G B H 3 0
Cây tìm kiếm Beam
* Tìm kiếm nhánh cn
Ý tưởng : thuật toán tìm kiếm leo đồi kết hợp với hàm đánh giá f(u). Tại mỗi bước,
khi phát triển trạng thái u, chọn trạng thái con v tốt nhất (f(v) nhỏ nhất) của u để phát
triển ở bước sau. Quá trình tiếp tục như vậy cho đến khi gặp trạng thái w là đích, hoặc
w không có đỉnh kề, hoặc w
f(w) lớn hơn độ dài đường đi ố t i ưu ạ t m thời (đường đi
đầy đủ ngắn nhất trong số những đường đi đầy đủ đã tìm được). Trong các trường hợp
này, chúng ta không phát triển đỉnh w nữa, ứ
t c là cắt bỏ những nhánh x ấ u t phát ừ t w,
và quay lên cha của w để tiếp tục đi xuống trạng thái tốt nhất trong số những trạng
thái còn lại chưa được phát triển.
Procedure Branch-and-Bound; Begin
1. Khởi tạo ngăn xếp S chỉ chứa trạng thái đầu;
Gán giá trị ban đầu cho cost; /*cost là giá tr đường đi ti ưu tm thi*/ 2. Loop do
2.1 If S rỗng then {thông báo thất bại; stop};
2.2 Lấy trạng thái u ở đầu ngăn xếp S;
2.3 If u là trạng thái kết thúc then
if g(u)<=cost then {cost ←g(u); quay lại 2.1};
2.4 if f(u)>cost then quay lại 2.1;
2.5 For mỗi trạng thái v kề u do
{g(v) ←g(u)+k(u,v); f(v) ←g(v) +h(v);
đặt v vào danh sách L1};
2.6 Sắp xếp L theo thứ tự tăng dần của hàm f;
2.7 Chuyển danh sách Lvào ngăn xếp S; End;
Ví dụ : Với đồ thị không gian trạng thái như hình 2.7, đỉnh xuất phát A và đỉnh đích
B. Áp dụng thuật toán nhánh – cận, ta xây dựng được cây tìm kiếm như hình 2.9 và
giá trị của hàm f tại các đỉnh được tính như bảng 2.2: Đỉnh phát Đỉnh con g(v) f(v) Đỉnh trin (u) (v) chn A C 9 9+15=24 D 7 7+6=13 D E 13 13+8=21 F 20 20+7=27 14 D H 7+8=15 15+10=25 A E 7+4=11 11+8=19 E 27 E K 11+4=15 15+2=17 K F I 11+3=14 14+4=18 I K B 15+6=21 21+0=21 24 C 13 21 E D B cost := 21 I K 14+9=23 23+2=25 B 14+5=19 19+0=19 B 25 H B cost := 19 E 19
Tính giá tr hàm f cho thut toán nhánh-cn 17 K I 18 21 B 19 B K 25
Cây tìm kiếm nhánh-cn
Nhận xét : Thuật toán nhánh-cận cũng là thuật toán đầy đủ và tối ưu nếu h(u) là hàm
đánh giá thấp và có độ dài các cung không nhỏ hơn một ố s dương δ nào đ ó
Chương 4 – Các gii thut tìm kiếm li gi i
cho trò chơi
Chương trình chơi cờ đầu tiên được viết bởi Claude Shannon vào ă n m 1950 đã là ộ m t
minh chứng cho khả năng máy tính có thể làm được những việc đòi hỏi trí thông minh
của con người. Từ đó người ta nghiên cứu các chiến lược chơi cho máy tình với các trò
chơi có đối thủ (có hai người tham gia). Việc giải quyết bài toán này có thể đưa về bài
toán tìm kiếm trong không gian trạng thái, tức là tìm một ch ế i n lược chọn các ư n ớc đi
hợp lệ cho máy tính. Tuy nhiên, vấn đề tìm k ế i m ở đây phức ạ t p hơn so với ấ v n đề tìm
kiếm trong chương trước, vì người chơi không biết trước đối thủ sẽ chọn nước đi nào tiếp
theo. Chương này sẽ trình bày một ố
s chiến lược tìm kiếm phổ biến như Minimax,
phương pháp cắt cụt α-β.
1. Cây trò chơi đầy đủ
Các trò chơi có đối thủ có các đặc điểm: hai người thay phiên nhau đưa ra các nước đi
tuân theo các luật của trò chơi (các nước đi hợp lệ), các luật này là như nhau đối với cả
hai người chơi, chẳng hạn các trò chơi cờ: cờ vua, cờ tướng, cờ ca rô (tic-tăc-toe), …. Ví
dụ, trong chơi cờ vua, một người điều khiển quân Trắng và một người điều khiển quân
Đen. Người chơi có thể lựa chọn các nước đi theo các luật với các quân tốt, xe, mã,…
Luật đi quân tốt Trắng, xe Trắng, mã Trắng,… giống luật đi quân tốt Đen, xe Đen, mã
Đen,…Hơn nữa, cả hai người chơi đều biết đầy đủ các thông tin về tình thế cuộc chơi.
Thực hiện trò chơi là người chơi tìm kiếm nước đi tt nht trong số rất nhiều nước đi hợp
lệ, tại mỗi lượt chơi của mình, sao cho sau một dãy nước đ
i đã thực hiện người chơi p ả h i thắng cuộc.
Vấn đề chơi cờ có thể được biểu diễn trong không gian trạng thái, ở đó, mỗi t ạ r ng thái là
một tình thế của cuộc chơi (sự sắp xếp các quân cờ trên bàn cờ):
- Trạng thái xuất phát là sự sắp xếp các quân cờ của hai bên khi bắt đầu cuộc chơi
(chưa ai đưa ra nước đi)
- Các toán tử biến đổi trạng thái là các nước đi hợp lệ
- Các trạng thái kết thúc là các tình thế mà cuộc chơi dừng, thường được xác định bởi
một số điều kiện dừng (chẳng hạn, quân Trắng thắng hoặc quân Đen thắng hoặc hai bên hòa nhau)
- Hàm kết cuộc: mang giá trị tương ứng với mỗi trạng thái kết thúc. C ẳ h ng hạn, trong
cờ vua, hàm kết cuộc có giá trị là 1 tại các trạng thái mà Trắng thắng, -1 tại các trạng
thái mà Trắng thua và 0 tại các t ạ
r ng thái hai bên hòa nhau. Trong các trò chơi tính
điểm khác thì hàm kết cuộc có thể nhận các giá trị nguyên trong đoạn [-m, m], với m
là một số nguyên dương nào đó.
Như vậy, trong các trò chơi có đối thủ, người c ơ h i đ ( iều khiển quân T ắ r ng – gọi tắt là
Trắng) luôn tìm một dãy các nước đi xen kẽ với các nư c
ớ đi của đối thủ (điều khiển quân
Đen – gọi tắt là Đen) để tạo thành một đường đi từ t ạ
r ng thái ban đầu đến trạng thái kết
thúc là thắng cho Trắng.
Không gian tìm kiếm đối với các trò chơi này có thể được biểu diễn bởi cây trò chơi như
sau: gốc của cây ứng với trạng thái xuất phát, các đỉnh trên cây tương ứng với các trạng
thái của bàn cờ, các cung (u, v) nếu có biến đổi từ t ạ
r ng thái u đến trạng thái v. Các đỉnh
trên cây được gán nhãn là đỉnh Trắng (Đen) ứng với trạng thái mà quân Trắng (Đen) đưa
ra nước đi. Nếu một đỉnh u được gán nhãn là Trắng (Đen) thì các đỉnh con v của nó là tất
cả các trạng thái nhận được từ u do Trắng (Đen) thực hiện một nước đi hợp lệ nào đó. Do
đó, các đỉnh trên cùng ộ m t mức ủ
c a cây đều có nhãn là Trắng hoặc đều có nhãn là Đen,
các lá của cây ứng với trạng thái kết thúc. Ví dụ: trò chơi Dodgem:
Có hai quân Trắng và hai quân Đen được xếp vào bàn cờ
3x3. Ban đầu các quân cờ được xếp như hình bên. Quân
Đen có thể đi đến ô trống bên phải, ở trên hoặc ở dưới.
Quân Trắng có thể đi đến ô trống bên trên, bên trái hoặc
bên phải. Quân Đen nếu ở cột ngoài cùng bên phải có thể
đi ra khỏi bàn cờ, quân Trắng nếu ở hàng trên cùng có thể Trò chơi Dodgem đi ra k ỏ
h i bàn cờ. Ai đưa được cả hai quân của mình ra khỏi bàn cờ hoặc ạ
t o ra tình thế mà đối phương không đi được là thắng cuộc. en Tr ng en
Cây trò chơi Dodgem với Đen đi trước
2. Gii thut Minimax
Quá trình chơi cờ là quá trình mà Trắng và Đen thay phiên nhau đưa ra các nước đi hợp
lệ cho đến khi dẫn đến trạng thái kết thúc cuộc chơi. Quá trình này biểu diễn bởi đường
đi từ nút gốc tới nút lá trên cây trò chơi. Giả sử tại một đỉnh u nào đó trên đường đi, nếu u
là đỉnh Trắng (Đen) thì cần chọn một nước đi nào đó đến một trong các đỉnh con Đen
(Trắng) v của u. Tại đỉnh Đen (Trắng) v sẽ chọn đi tiếp đến một đỉnh con Trắng (Đen) w
của v. Quá trình này tiếp tục cho đến khi đ ạt đ
ến một đỉnh lá của cây.
Chiến lược tìm nước đi của Trắng hay Đen là luôn tìm những nước đi dẫn tới t ạ r ng thái
tốt nhất cho mình và tồi nhất cho đối thủ. Giả sử Trắng cần tìm nước đi tại đỉnh u, nước đi ố
t i ưu cho Trắng là nước đi dẫn tới đỉnh con v sao cho v là tốt nhất trong số các đỉnh
con của u. Đến lượt Đen chọn nước đi từ v, Đen cũng chọn nước đ i ố t t nhất cho mình. Để
chọn nước đi tối ưu cho Trắng tại đỉnh u, cần xác định giá trị các đỉnh của cây trò chơi
gốc u. Giá trị của các đỉnh lá ứng với giá t ị r của hàm kết c ộ
u c. Đỉnh có giá trị càng lớn
càng tốt cho Trắng, đỉnh có giá trị càng nhỏ càng tốt cho Đen. Để xác định giá trị các
đỉnh của cây trò chơi gốc u, ta đi từ mức thấp nhất (các đỉnh lá) lên gốc u. Giả sử cần xác
định giá trị của đỉnh v mà các đỉnh con của nó đã xác định. Khi đó, nếu v là đỉnh Trắng
thì giá trị của nó là giá trị lớn nhất trong các đỉnh con, nếu v là đỉnh Đen thì giá trị của nó
là giá trị nhỏ nhất trong các đỉnh con.
Sau đây là thủ tục chọn nước đi cho Trắng tại đỉnh u Minimax(u, v), trong đó v là đỉnh con được chọn của u:
Procedure Minimax(u, v); begin val ←-∝;
for mỗi w là đỉnh con của u do
if val(u) <= MinVal(w) then {val ← MinVal(w); v ← w} end;
---------------------------------------------------
Function MinVal(u); {hàm xác định giá tr cho các đỉnh Đen} begin
if u là đỉnh kết thúc then MinVal(u) ← f(u)
else MinVal(u) ← min{MaxVal(v) | v là đỉnh con của u} end;
---------------------------------------------------
Function MaxVal(u); { hàm xác định giá tr cho các đỉnh Trng} begin
if u là đỉnh kết thúc then MaxVal(u) ← f(u)
else MaxVal(u) ← max{MinVal(v) | v là đỉnh con của u} end;
Trong các thủ tục và hàm trên, f(u) là giá trị của hàm kết cuộc tại đỉnh kết thúc u.
Thuật toán Minimax là thuật toán tìm kiếm theo chiều sâu. Về lý thuyết, chiến lược
Minimax cho phép tìm nước đi tối ưu cho T ắ
r ng. Tuy nhiên trong thực ế t , ta không có đủ
thời gian để tính toán nước đi tối ưu này. Bởi vì thuật toán tính toán trên toàn bộ cây trò
chơi (xem xét tất cả các đỉnh của cây theo kiểu vét cạn). Trong các trò chơi hay thì kích
thước của cây trò chơi là cực lớn. Chẳng hạn, trong cờ vua, chỉ tính đến độ sâu 40 thì cây
trò chơi đã có đến 10120 đỉnh. Nếu cây có độ cao m và tại mỗi đỉnh có b nước đi thì độ
phức tạp về thời gian của thuật toán Minimax là O(bm).
Trong thực tế, các trò chơi đều có giới hạn về thời gian. Do đó, để có thể tìm nhanh nước đi tốt (không phải ố
t i ưu) thay vì sử dụng hàm kết cuộc và xét ấ t t ả
c các đỉnh của cây trò
chơi, ta sử dụng hàm đánh giá và chỉ xem xét một bộ phận của cây trò chơi.
3. Gii thut Minimax vi độ sâu hn chế
a) Hàm đánh giá
Hàm đánh giá eval cho mỗi đỉnh u là đánh giá “mức độ lợi thế” của t ạ r ng thái u. Giá t ị r
của eval(u) là số dương càng lớn thì trạng thái u càng có lợi cho Trắng, giá trị của eval(u)
là số dương càng nhỏ thì t ạ
r ng thái u càng có lợi cho Đen, eval(u)=0 thì t ạ r ng thái u
không có lợi cho đối thủ nào, eval(u)=+∝ thì u là trạng thái thắng cuộc cho Trắng,
eval(u)=-∝ thì u là trạng thái thắng cuộc cho Đen.
Hàm đánh giá đóng vai trò rất quan trọng trong các trò chơi, nếu hàm đánh giá ố t t sẽ định
hướng chính xác việc lựa chọn các nước đi tốt. Việc thiết kế hàm đánh giá phụ thuộc vào
nhiều yếu tố: các quân cờ còn lại ủ
c a hai bên, sự bố trí các quân cờ này,… Để đưa ra hàm
đánh giá chính xác đòi hỏi nhiều thời gian tính toán, tuy nhiên, trong thực tế người chơi
bị giới hạn thời gian đưa ra nước đi. Vì vậy, việc đưa ra hàm đánh giá phụ thuộc vào kinh
nghiệm của người chơi. Sau đây là một số ví dụ về cách xây dựng hàm đánh giá:
Ví dụ 1: Hàm đánh giá cho cờ vua. Mỗi loại quân được gán một giá trị số phù hợp với
“sức mạnh” của nó. Chẳng hạn, quân tốt Trắng (Đen) được gán giá trị 1 (-1), mã hoặc
tượng Trắng (Đen) được gán giá trị 3 (-3), xe Trắng (Đen) được gán giá trị 5 (-5) và hậu
Trắng (Đen) được gán giá trị 9 (-9). Hàm đánh giá của một trạng thái được tính bằng cách
lấy tổng giá trị của tất ả c các quân cờ trong t ạ
r ng thái đó. Hàm đánh giá này được gọi là
hàm tuyến tính có trọng ố
s , vì có thể biểu diễn dưới ạ d ng: s1w1 + 2 s w2 + … + snwn
Trong đó, wi là giá trị của quân cờ loại i, si là số quân loại đó.
Đây là cách đánh giá đơn giản, vì nó không tính đến ự s bố trí ủ
c a các quân cờ, các mối tương quan giữa chúng.
Ví dụ 2: Hàm đánh giá trạng thái trong trò chơi Dodgem. Mỗi quân Trắng được gán giá
trị tương ứng với các vị trí trên bàn ờ
c như trong hình bên trái. Mỗi quân Đen được gán
giá trị ở các vị trí tương ứng nhu hình bên phải: 30 35 40 -10 -25 -40 15 20 25 -5 -20 -35 0 5 10 0 -15 -30
Ngoài ra, nếu quân Trắng cản trực t ế
i p một quân Đen, nó được thêm 40 điểm, nếu cản
gián tiếp được thêm 30 điểm (xem hình dưới). Tương tự, nếu quân Đen cản trực tiếp quân Trắng nó đư c
ợ thêm -40 điểm, cản gián tiếp được thêm -30 điểm.
Trng cn trc tiếp Đen
Trng cn gián tiếp Đen
được thêm 40 đim
được thêm 30 đim
Áp dụng cách tính hàm đánh giá nêu trên, ta tính được giá trị của các trạng thái ở các hình dưới như sau:
Giá tr hàm đánh giá:75=
Giá tr hàm đánh giá:-5= (-10+0+5+10)+(40+30) (-25+0+20+10)+(-40+30)
b) Thut toán
Để hạn chế không gian tìm kiếm, khi xác định nước đi cho Trắng tại u, ta chỉ xem xét cây
gốc u tại độ cao h nào đó. Áp dụng thủ tục Minimax cho cây trò chơi gốc u, độ cao h và
sử dụng hàm đánh giá để xác định giá trị cho các lá của cây.
Procedure Minimax(u, v, h); begin val ←-∝;
for mỗi w là đỉnh con của u do
if val(u) <= MinVal(w, h-1) then
{val ← MinVal(w, h-1); v ← w} end;
---------------------------------------------------
Function MinVal(u, h); {hàm xác định giá tr cho các đỉnh Đen} begin
if u là đỉnh kết thúc or h = 0 then MinVal(u, h) ← eval(u)
else MinVal(u, h) ← min{MaxVal(v, h-1) | v là đỉnh con của u} end;
---------------------------------------------------
Function MaxVal(u, h); { hàm xác định giá tr cho các đỉnh Trng} begin
if u là đỉnh kết thúc or h =0 then MaxVal(u, h) ← eval(u)
else MaxVal(u, h) ← max{MinVal(v, h-1) | v là đỉnh con của u} end;
4. Gii thut Minimax vi ct ta alpha-beta
Trong chiến lược Minimax với độ sâu hạn chế thì số đỉnh của cây trò chơi phải xét ẫ v n
còn rất lớn với h>=3. Khi đánh giá đỉnh u tới độ sâu h, th ậ
u t toán Minimax đòi hỏi phải
đánh giá tất cả các đỉnh của cây gốc u với độ sâu h. Tuy nhiên, phương pháp cắt cụt
alpha-beta cho phép cắt bỏ những nhánh không cần thiết cho việc đánh giá đỉnh u.
Phương pháp này làm giảm bớt số đỉnh phải xét mà không ảnh hưởng đến kết quả đánh giá đỉnh u.
Ý tưởng: Giả sử tại thời điểm hiện tại đang ở đỉnh Trắng a, đỉnh a có anh em là v đã được
đánh giá. Giả sử cha của đỉnh ab, b có anh em là u đã được đánh giá, và cha ủ c a bc như hình sau: c max u b min v a max
Cắt bỏ cây con gốc a nếu eval(u)>eval(v)
Khi đó ta có giá trị đỉnh Trắng c ít nhất là giá trị của u, giá trị của đỉnh Đen b nhiều nhất
là giá trị của v. Do đó, nếu eval(u) > eval(v) ta không ầ
c n đi xuống để đánh giá đỉnh a
nữa mà vẫn không ảnh hưởng đến đánh giá đỉnh c. Hay nói cách khác, ta có thể cắt bỏ cây con gốc a.
Lập luận tương tự cho trường hợp a là đỉnh Đen, trường hợp này nếu eval(u)cũng cắt bỏ cây con gốc a.
Để cài đặt kỹ thuật này, đối với các đỉnh nằm trên đường đi từ gốc tới đỉnh hiện thời, ta
sử dụng tham số α để ghi lại giá trị lớn nhất trong các giá trị của các đỉnh con đã đ ánh giá
của một đỉnh Trắng, tham số β để ghi lại giá trị nhỏ nhất trong các giá trị của các đỉnh con đã đánh giá của ộ m t đỉnh Đen. Thuật toán:
Procedure Alpha_beta(u, v); begin α←-∝; β←-∝;
for mỗi w là đỉnh con của u do
if α <= MinVal(w, α, β) then
{α ← MinVal(w, α, β); v ← w} end;
---------------------------------------------------
Function MinVal(u, α, β); {hàm xác định giá tr cho các đỉnh Đen} begin
if u là đỉnh kết thúc or u là lá của cây hạn chế then
MinVal(u, α, β) ← eval(u)
else for mỗi đỉnh v là con của u do
{β ← min{β, MaxVal(v, α, β)} ;
If α >= β then exit};
/*cắt bỏ các cây con từ các đỉnh v còn lại */ MinVal(u, α, β) ← β; end;
---------------------------------------------------
Function MaxVal(u, α, β); { hàm xác định giá tr cho các đỉnh Trng} begin
if u là đỉnh kết thúc or là lá của cây hạn chế the n MaxVal(u, α, β) ← eval(u)
Else for mỗi đỉnh v là con của u do α ← max α { , MinVal(v, α , β)} ;
If α >= β then exit};
/*cắt bỏ các cây con từ các đỉnh v còn lại */ MaxVal(u, α, β) ← α end;
Chương 5 – Các phương pháp tìm kiếm li gii tha mãn
các ràng buc
1. Các bài toán tha mãn các ràng buc
a. Bài toán 8 quân hu
Hãy đặt trên bàn cờ 8 quân hậu sao cho không có hai quân hậu nào cùng hang hoặc cùng
cột hoặc cùng đường chéo.
Bài toán 8 quân hậu có thể biểu diễn bởi 5 thành phần như sau:
- Trạng thái: mảng một chiều 8 phần tử HAU[0,1,…,7], phần tử HAU[i] biểu diễn dòng
đặt con hậu cột i. Ví ụ d HAU[i]=j có ng ĩ h a là con hậu cột I đ ặt ở dòng j.
- Trạng thái đầu: Một mảng ngẫu nhiên 8 phần tử, mỗi phần tử nhận giá trị từ 0 đến 7
- Trạng thái đích: Gán các giá trị khác nhau phạm vi từ 0 đến 7 cho các phần tử của
mảng sao cho i-HAU[i] ≠ j-HAU[j] (không nằm trên cùng đường chéo phụ) và
i+HAU[i] ≠ j + HAU[j] (không nằm trên cùng đường chéo chính).
- Chi phí: không xác định
Trong bài toán này, trạng thái đích là không tường minh mà được xác định bởi tập các
ràng buộc. Khác với các bài toán trước, lời giải của bài toán này không phải là đường đi
từ trạng thái đầu đến trạng thái đích mà là một phép gán các giá trị cho các biến mô ả t
trong trạng thái của bài toán sao cho phép gán thỏa mãn các ràng buộc ủ c a trạng thái đích.
Để giải các bài toán thỏa mãn các ràng buộc, chúng ta không ầ
c n xác định 5 thành phần
như các bài toán trong các chương trước, mà chúng ta cần quan tâm đến các thành phần sau:
- Tập các biến mô tả trạng thái của bài toán: HAU[0], HAU[1], .., HAU[7] trong bài
toán 8 quân hậu (HAU[i] là số hiệu dòng đặt con hậu ở cột I, ví ụ d HAU[0]=0 có
nghĩa là con hậu cột đầu tiên (cột 0) sẽ đặt ở dòng đầu tiên (dòng 0).
- Miền giá trị cho các biến: HAU[i] Є {0, 1, 2, 3, 4, 5, 6, 7}
- Tập ràng buộc: với i≠j thì HAU[i] ≠HAU[j] (không có hai con hậu cùng hàng ngang),
i-HAU[i] ≠ j-HAU[j] (không có hai con hậu nào cùng đường chéo phụ); i+HAU[i] ≠
j+HAU[j] (không có hai con hậu nào cùng đường chéo chính)
Lời giải của bài toán là một phép gán giá trị trong miền giá trị cho các biến sao cho thỏa
mãn các ràng buộc của bài toán.
b. Bài toán tô màu đồ th
Sử dụng ba màu để tô bản đồ các tỉnh của một nước sao cho các ỉtnh ề k nhau thì có màu
khác nhau. Ví dụ, nước Australia có 7 bang như hình vẽ, chỉ sử dụng ba màu: đỏ, xanh lơ
và xanh da trời để tô màu 7 bang của nước Australia sao cho không có hai bang nào kề
nhau lại có màu giống nhau. Bài toán này có thể mô tả bằng 3 thành phần như sau:
- Tập các biến: WA, NT, Q, NSW, V, SA, T (các biến là các ký tự đầu của tên các bang)
- Miền giá trị: 7 biến có thể nhận các giá trị trong tập {đỏ, xanh lá cây, xanh da trời}
- Tập ràng buộc: WA≠NT, WA≠SA, NT≠SA, NT≠Q, SA≠Q, SA≠NSW, SA≠V, Q≠NSW, NSW≠V
Lời giải của bài toán tô màu đồ thị là phép gán các giá trị {đỏ, xanh da trời, xanh lá cây}
cho tập 7 biến thỏa mãn tập các ràng buộc.
c. Bài toán gii mã các ký t
Tìm các chữ số thích hợp cho các ký tự để phép tính sau là đúng:
Bài toán giải mã các ký tự được mô tả bằng 3 thành phần sau:
- Tập các biến: T, W, O, F, U, R, N1, N2, N3 (N1, N2, N3 là 3 số nhớ của phép cộng ở
các vị trí hàng đơn vị, hàng chục, hàng trăm)
- Miền giá trị: Các biến có thể nhận các giá trị: {0, 1, .., 9}
- Ràng buộc: T, W, O, F, U, R phải khác nhau đôi một; O + O = X +10.N1; N1 + W +
W = U + 10.N2; N2 + T + T = O + 10.N3; F=N3; T≠0; F≠0
Lời giải của bài toán là một phép gán các chữ số từ 0 đến 9 cho các biến và thỏa mãn ậ t p các ràng buộc.
2. Gii thut quay lui vét cn
Việc giải bài toán thỏa mãn các ràng buộc là tìm ra một phép gán giá trị cho tập các biến
của bài toán sao cho tập các ràng buộc được thỏa mãn. Giả sử bài toán cần gán giá trị cho
n biến, chúng ta có thể tìm lời giải của bài toán bằng các bước mô ả t như sau:
- Bắt đầu bằng phép gán rỗng, chưa gán giá t ị r cho biến nào cả { }.
- Nếu tất cả các biến đã được gán giá trị, in ra lời giải và thoát khỏi chương trình
- Tìm giá trị để gán cho biến chưa có giá trị mà không xung đột với các các biến đã được
gán trước đó (xung đột hay không là dựa trên tập ràng buộc). Nếu không tìm được giá t ị r
thỏa mãn các ràng buộc cho biến đang xét thì hủy bỏ phép gán giá trị cho biến liền trước
đó và tìm giá trí mới cho nó.
- Nếu biến đầu tiên không còn giá trị phù hợp để gán thì bài toán không có lời giải.
Giải thuật gán giá trị cho n biến như trên gọi là giải thuật quay lui vét cạn hay thử và sai
(backtracking). Trong giải thuật, mỗi bước thực hiện một phép gán với cách làm giống
nhau và lời giải của bài toán chỉ xuất hiện ở bước gán cho biến cuối cùng. Giải thuật trên
có thể cài đặt đệ quy như sau:
Function Backtracking-Search(problem) returns a solution, or failure
Return RescusiveBacktracking({},problem);
-------------------------------------------------------------
Function RescusiveBacktracking(assignment, problem) returns a solution, or failure
if (length(assignment)==n) return assignment ;
var Å Chọn_biến_chưa_gán(problem, assignment);
for each value in Miền_giá_trị(var,problem)
if KiemTraNhấtQuán(assignment U{var=value}, problem)
assignment= assignment U{var=value}
RescusiveBacktracking(assignment, problem);
assignment= assignment - {var=value} return failure;
Bản chất của giải thuật RescusiveBacktracking là phép duyệt theo chiều sâu có thêm
bước kiểm tra sự thỏa mãn của các ràng buộc ở mỗi bước. Thứ tự việc gán giá trị cho các
biến trong bài toán tô màu đồ thị có thể biểu diễn bằng đồ thị sau:
Mt phn đồ th biu din th t phép gán giá tr
cho các biến ca gii thut Backtracking
3. Các ci tiến ca gii thut quay lui
Trong giải thuật RescusiveBacktracking ở trên, thứ tự các biến có thể ảnh hưởng đến thời
gian và không gian bộ nhớ của giải thuật. Chúng ta có thể thay đổi thứ tự các biến để gán
giá trị, và khi biến được chọn, chúng ta có thể chọn giá trị nào trước các giá trị khác trong
các giá trị hợp lệ để gán cho biến đó. Đôi khi thứ tự các biến và thứ tự các giá trị gán cho
các biến làm tăng đáng kể hiệu quả của giải thuật.
a) Nguyên tc chn biến tiếp theo
Vì lời giải của bài toán chỉ xuất hiện ở mức độ sâu n trong giải thuật đệ qui, vì vậy
ResicusiveBacktracking ưu tiên phát triển theo chiều sâu để tìm ra phép gán đầy đủ (tức
là lời giải) của bài toán trong thời gian nhanh nhất. Khi một số biến được gán giá trị,
miền giá trị của các biến còn lại cũng sẽ bị co hẹp lại do ậ
t p các ràng buộc chi p ố h i. Vì
thế, để có thể tìm kiếm được phép gán có độ sâu n nhanh nhất mà không bị hủy bỏ để gán
lại giá trị cho biến thì có 2 nguyên tắc sau:
- Nguyên tắc 1: Lựa chọn biến mà miền giá trị hợp lệ còn lại là ít nhất (biến có ít lựa
chọn nhất nên được chọn trước để làm giảm độ phức tạp của cây tìm kiếm)
- Nguyên tắc 2: Lựa chọn biến tham gia vào nhiều ràng buộc nhất (gán cho biến khó thỏa mãn nhất)
Trong hai nguyên tắc trên, nguyên tắc thứ nhất được ưu tiên cao hơn và được áp dụng
trong suốt quá trình thực hiện của giải th ậ
u t. Đối với phép chọn biếu đầu tiên hoặc trong
trường hợp có nhiều biến có cùng số giá trị ít nhất thì nguyên tắc thứ hai sẽ được sử dụng
để lựa chọn biến tiếp theo.
Ví dụ, đối với bài toán tô màu đ
ồ thị, ban đầu chúng ta chọn biến SA để gán giá trị vì SA
tham gia vào nhiều mối ràng buộc hơn (nguyên tắc 2). Khi c ọ
h n màu biến cho SA thì các
biến WA, NT, Q, NSW,V sẽ được chọn ở bước gán tiếp theo do c ỉ h còn 2 lựa c ọ h n là hai
màu còn lại (nguyên tắc 1), trong 5 biến này ta lại lấy biến NT, Q hoặc NSW vì nó tham
gia vào nhiều ràng buộc hơn (có thể chọn 1 trong ba biến này ngẫu nhiên). Cứ như vậy
chúng ta sẽ chọn thứ tự các biến còn lại dựa trên Nguyên tắc 1, nếu có nhiểu biến cùng
thỏa mãn nguyên tắc 1 thì chọn trong chúng biến thỏa mãn Nguyên tắc 2.
b) Nguyên tc chn th t giá tr gán cho biến
Một khi một biến được lựa chọn để gán giá trị thì sẽ có nhiều giá trị có thể gán cho biến
đó. Việc lựa chọn thứ ự
t giá trị gán cho biến có tác động không nhỏ trong việc tìm ra lời
giải đầu tiên. Trong trường hợp bài toán cần tìm tất ả
c lời giải hoặc bài toán không có lời
giải thì thứ tự các giá trị gán cho biến không có tác dụng.
Trong trường hợp bài toán yêu cầu tìm ra một lời giải và chúng ta mong muốn tìm ra lời
giải trong thời gian nhanh nhất thì chúng ta sẽ lựa chọn giá trị cho biến đang xét sao cho
nó ít ràng buộc đến các biến còn lại nhất. Ví dụ: ế n u ta đã c ọ
h n WA=đỏ, NT=xanh da trời
và chúng ta đang xem xét gán giá trị cho biến Q. Có 2 giá trị có thể gán cho Q mà không
bị xung đột với hai phép gán trước: đỏ và xanh da trời. Trong 2 cách này thì nếu gán xanh
da trời thì làm cho biến SA không còn giá trị để gán, còn nếu gán màu đỏ thì sẽ có 1 giá
trị có thể gán cho biến SA. Vậy trong trường hợp này ta sẽ gán màu đỏ cho biến Q để
tăng khả năng tìm được lời giải đầu tiên.
c) Kim tra tiến (kim tra trư c
– forward checking)
Trong nguyên tắc chọn thứ tự giá trị gán cho một biến, chúng ta cần phải kiểm tra xem
giá trị định gán sẽ tác động thế nào đối với các biến chưa gán thông qua các ràng buộc.
Việc hạn xác định tác động trước như vậy gọi là forward checking. Forward checking còn
có tác dụng hạn chế không gian tìm kiếm (hạn chế miền giá trị cho các biến còn lại khi
biến hiện tại được gán một giá trị cụ thể). Ví dụ, nếu ban đầu chúng ta gán WA màu đỏ
thì miền giá trị của các bang lân cận (NT và SA) sẽ không thể là màu đỏ được nữa. Nếu
gán tiếp Q là màu xanh lá cây thì NT và SA chỉ còn nhận giá trị là xanh da trời và NSW
chỉ còn miền giá trị là màu đỏ (xem diễn biến miền giá trị các biến thu hẹp dần trong quá
trình gán giá trị cho biến WA và Q)
d) Lan truyn ràng buc (constraint propagation)
Trong quá trình gán giá trị cho biến, nếu một biến có mà miền giá trị của nó không còn
giá trị nào hợp lệ để gán thì chúng ta phải hủy bỏ việc gán giá trị cho biến ngay trước đó
và gán bằng giá trị khác. Nếu một trong các biến còn lại mà m ề i n giá trị c ỉ h 1 giá trị hợp
lý thì chúng ta có thể áp dụng tập các ràng buộc liên quan đến biến đó để giảm miền giá
trị cho biến còn lại khác. Chẳng hạn, bằng forward checking chúng ta đã xác định được
biến SA chỉ có giá trị màu xanh da trời thì chúng ta áp dụng các ràng buộc liên quan đến
SA để suy ra rằng biến NSW không thể nhận giá trí màu xanh da trời. Khi đó NSW chỉ
còn màu đỏ và áp dụng các ràng buộc liên quan đến NSW suy ra V không thể nhận màu đỏ, v.v. Quả trình l ạ o i bỏ m ề
i n giá trị cho các biên còn lại dựa trên các ràng buộc gọi là
lan truyền ràng buộc nhằm giảm bớt không gian tìm kiếm phép gán hợp lệ.
4. Các gii thut ti ưu địa phương
Chương 6 – Các phương pháp lp lun trên logic mnh đề
1. Lp lun và Logic
Loài người thông minh vì biết ậ
l p luận. Liệu máy tính có khả năng lp lun được
(như con người) không? Để trả lời câu hỏi này, chúng ta trước hết hãy cho biết t ế h nào là lập luận.
Lập luận là hành động sinh ra một phát biểu đúng mới từ các phát biểu đúng có
trước. Hay nói cách khác, một người hoặc một hệ thống được gọi là biết lập luận nếu nó
chỉ ra rằng một phát biểu nào đó có đúng (true) khi cho trước một tập các phát biểu đúng
hay không? Các phát biểu phải tuân theo một tập các qui tắc nhất định (ngữ pháp) và
cách xác định một phát biểu là đúng (true) hay là sai (false). Một ậ t p các qui ắ t c qui định
ngữ pháp và cách xác định ngữ nghĩa đúng/sai của các phát biểu gọi là logic. Như vậy
logic là một ngôn ngữ mà mỗi câu trong ngôn ngữ đó có ngữ nghĩa (giá trị) là đúng hoặc
sai, và vì vậy có thể cho phép chúng ta lập luận, tức là một câu mới có giá trị đúng không
khi cho các câu trước đó là đúng hay không. Các câu cho trước được gọi là cơ sở tri thức
(Knowledge base - KB), câu cần chứng minh là đúng khi biết KB đúng gọi là câu truy
vấn (query - q). Nếu q là đúng khi KB là đúng thì ta nói rằng KB suy diễn ra q (ký hiệu là KB ╞ q).
Trong chương này và các chương tiếp theo, chúng ta sẽ xây dựng các th ậ u t giải cho
phép lập luận tự động trên các logic khác nhau. Các thuật giải này giúp máy tính có thể
lập luận, rút ra phát biểu mới từ các phát biểu cho trước.
2. Logic mnh đề: cú pháp, ng nghĩa
Logic đơn giản nhất là logic mệnh đề. Các phát biểu (câu) trong logic mệnh đề được
hình thành từ các ký hiệu mệnh đề (mỗi ký hiệu có nghĩa là một mệnh đề và vì vậy có thể
nhận giá trị đúng hoặc sai tùy theo mệnh đề đó là đúng hay sai trong thế giới thực) và các
ký hiệu liên kết ¬ (với ngữ nghĩa là phủ định), ∧ (và), ∨ (hoặc), ⇒ (kéo theo), ⇔ (tương
đương). Cú pháp và ngữ nghĩa của logic mệnh đề như sau: 2.1 Cú pháp: ¾ Các ký hiệu: 9 Hằng: true, false
9 Ký hiệu: P, Q, … Mỗi ký hiệu gọi là ký hiệu mệnh đề hoặc ệ m nh đề
9 Các kết nối logic: ¬, ∧, ∨
9 Các ký hiệu “(“ và ”)”
¾ Qui tắc xây dựng câu: Có hai loại câu: câu đơn và câu phức
9 true và false là các câu (true là câu đơn hằng đúng, false là câu ằ h ng sai).
9 Mỗi ký hiệu mệnh đề là một câu, ví dụ P, Q là các câu (Câu đơn)
9 Nếu A và B là các câu thì các công thức sau cũng là câu (các câu p ứ h c): ¬A (A ∧ B) (A ∨ B) (A ⇒ B) (A ⇔ B)
¾ Các khái niệm và qui ước khác: Sau này, để cho gọn, ta bỏ đi các ấ d u “(“, “)”
không cần thiết. Nếu câu chỉ có một ký hiệu mệnh đề thì ta gọi câu đó là câu đơn
hoặc câu phân tử. Các câu không phải là câu đơn thì gọi là câu phức. Nếu P là ký
hiệu mệnh đề thì P và ¬P gọi là các literal, P là literal dương còn ¬P là literal âm.
Các câu phức dạng A1 ∨ A2 ∨…∨An, trong đó các Ai là các literal, được gọi là các câu tuyển (clause).
2.2 Ng nghĩa: Qui định cách diễn dịch và cách xác định tính đúng (true) hay sai (false) cho các câu.
¾ true là câu luôn có giá trị đúng, false là câu luôn có giá t ị r sai
¾ Mỗi ký hiệu biểu diễn (ánh xạ với) một phát biểu/mệnh đề trong thế giới thực; ký
hiệu mệnh đề có giá trị là đúng (true) nếu phát biểu/mệnh đề đó là đúng, có giá t ị r
là sai (false) nếu phát biểu/mệnh đề đó là sai, hoặc có giá trị chưa xác đ ịnh (true hoặc false)
¾ Các câu phức biểu diễn (ánh xạ với) một phủ định, mối quan hệ hoặc mối liên ế k t
giữa các mệnh đề/phát biểu/câu phức trong thế giới thực. Ngữ nghĩa và giá trị của
các câu phức này được xác định dựa trên các câu con thành phần của nó, chẳng hạn:
9 ¬A có nghĩa là phủ định mệnh đề/ câu A, n ậ h n giá trị true ế n u A là false và ngược lại
9 A ∧ B có nghĩa là mối liên kết “A và B”, nhận giá trị true khi cả A và B là
true, và nhận giá trị false trong các trường hợp còn lại.
9 A ∨ B biểu diễn mối liên ế k t “A h ặ o c B”, n ậ h n giá trị true khi h ặ o c A h ặ o c
B là true, và nhận giá trị false chỉ khi cả A và B là false.
9 (A ⇒ B) biểu diễn mối quan hệ “A kéo theo B”, chỉ nhận giá trị false khi A
là true và B là false; nhận giá trị true trong các trường hợp khác
9 (A ⇔ B) biểu diễn mối quan hệ “A kéo theo B” và “B kéo theo A” Như vậy, v ệ
i c xác định tính đúng/sai ủ c a ộ m t ký hiệu ệ m nh đề ( ệ m nh đề đơn) là
dựa trên tính đúng sai của sự kiện hoặc thông tin mà nó ám chỉ, còn việc xác định
tính đúng sai của mệnh đề phức phải tuân theo các qui tắc trên. Trong nhiều
trường hợp, chúng ta (cần chỉ) biết tính đúng/sai của các câu phức, còn tính
đúng/sai của các câu đơn là không cần biết hoặc có thể lập luận ra từ các các câu
phức đã biết đúng/sai và các qui tắc chuyển đổi tính đúng/sai giữa các câu đơn và
câu phức theo các qui tắc trên.
2.3 Các ví d:
Gọi A là mệnh đề “tôi chăm học”, B là mệnh đề “tôi thông minh”, C là mệnh đề “tôi
thi đạt điểm cao môn Trí tuệ nhân tao”; Ta có thể biểu diễn các câu sau trong logic mệnh đề:
- “Nếu tôi chăm học thì tôi thi đạt điểm cao môn Trí tuệ nhân tạo”: A ⇒ C
- “Tôi vừa chăm học lại vừa thông minh”: A ∧ B - “Nếu tôi c ă
h m học hoặc tôi thông minh thì tôi thi đạt điểm cao môn Trí t ệ u nhân tạo”: A ∨ B ⇒ C
2.4 Các câu hng đúng:
Trong logic mệnh đề, ta có:
9 ¬¬A ⇔ A (luật phủ định kép)
9 A ∨ ¬A (luật loại trừ) 9 (A ⇔ B) ⇔ ( ⇒ A B) ∧ ( ⇒ B A) 9 (A⇒B) ⇔ ¬A ∨ B
9 ¬ (A∨B) ⇔ ¬A ∧ ¬B (luật DeMorgan đối với phép ∨)
9 ¬ (A∧B) ⇔ ¬A ∨ ¬B (luật DeMorgan đối với phép ∧)
9 C ∨ (A∧B) ⇔ (C∨A) ∧ ( ∨
C B) (luật phân phối phép ∨ đối với phép ∧)
9 C ∧ (A∨B) ⇔ (C∧A) ∨ (C∧B) (luật phân phối phép ∧ đối với phép ∨) 9 (A ∧ (A⇒B)) ⇒ B (Tam đoạn luận) 9 Luật phân g ả i i (xem mục 4)
3. Bài toán lp lun và các gii thut lp l
u n trên logic mnh đề
Như đã nói trong phần 1 của Chương này, lập luận là t ả
r lời câu hỏi một câu q có là
đúng khi cho cơ sở tri thức (là một câu phức là hội ủ c a ậ
t p các câu cho trước) là đúng
hay không (KB q)? Một cách đơn giản nhất là chúng ta lập bảng giá trị chân lý cho
KB và cho q và kiểm tra xem tất cả các trường hợp làm cho KB nhận giá trị true cũng
làm cho q nhận giá trị true không? Nếu có thì ta kết luận KB q, ngược lại thì kết luận
là không. Phương pháp suy luận này gọi là phương pháp liệt kê và có thể thuật toán
hóa được (chi tiết xem trong mục 6 của Chương này).
Một cách tiếp cận khác để trả lời cho câu hỏi KB q là sử dụng các l ậ u t ằ h ng đúng
của logic mệnh đề (xem trong mục 2.4). Ban đầu KB bao gồm tập các câu (hội ủ c a
các câu), chúng ta áp dụng các luật của logic mệnh đề trên tập các câu này để sinh ra
câu mới, rồi bổ sung câu mới này vào KB, lặp lại áp dụng luật của logic và sinh ra câu
mới, v.v., đến khi nào xuất hiện câu q trong KB thì dừng lại (khi đó KB q) hoặc
không thể sinh ra câu mới nào nữa từ KB (khi này ta ế k t l ậ
u n KB không suy ra được
q) Lời giải cho bài toán suy diễn theo cách này là một đường đi từ t ạ r ng thái đầu đến
trạng thái đích của bài toán tìm đường sau:
9 Trng thái đầu: KB
9 Các phép chuyn trng thái: các luật trong logic mệnh đề, mỗi luật x áp dụng
cho KB sinh ra câu mới x(KB), bổ sung câu ớ
m i này vào KB được trạng thái
mới KBx(KB )
9 Trng thái đích: trạng thái KB chứa q
9 Chi phí cho mi phép chuyn: 1
Vì số luật hằng đúng trong logic mệnh là tương đối lớn nên nhân tố nhánh của bài
toán trên cũng là lớn (tất cả các cách áp dụng các luật trên tập con tất cả các câu
của KB), vì vậy không gian tìm kiếm lời giải của bài toán trên là rất lớn. Để hạn
chế không gian tìm kiếm lời giải của bài toán, chúng ta biểu diễn KB và q bằng chỉ
các câu dạng chuẩn hội (xem mục 4), khi đó chúng ta chỉ cần áp dụng một l ạ o i
luật là luật phân giải trên KB và mỗi phép chuyển là một phép phân giải hai câu có
chứa ít nhất một literal là phủ định của nhau trong KB, kết quả của phép phân giải
hai câu dạng chuẩn hội lại là một câu dạng chuẩn hội và được bổ sung vào KB, lặp
lại áp dụng luật phân giải trên KB đến khi nào KB chứa câu q thì dừng. Chi tiết
thuật toán suy diễn dựa trên l ậ
u t phân giải KB q được trình bày trong mục 7 của
Chương này (thực tế thì thuật toán suy diễn phân giải trả lời bài toán tương đương
(KB ∧ ¬q) [].)
Giải thuật suy diễn phân giải là giải thuật đầy đủ trong logic mệnh đề, tức là với
mọi câu q mà kéo theo được từ KB (q đúng khi KB đúng) thì sử dụng giải th ậ u t
suy diễn phân giải đều có thể suy diễn được KB ╞ q (tức là không có câu nào kéo
được từ KB là không suy diễn phân giải được); bởi vì ấ b t cứ câu trong logic ệ m nh
đề đều có thể biểu diễn được bằng câu dạng chuẩn hội (xem mục 4).
Do liên tục phải bổ sung các câu mới vào KB và lặp lại tìm kiếm các cặp câu có
thể phân giải với nhau được nên nhân tố nhánh của cây tìm kiếm lời giải tăng dần
theo độ sâu của cây tìm kiếm. Vì vậy không gian và thời gian của giải thuật sẽ
tăng rất nhanh, giải thuật phân giải làm việc không hiệu quả. Để khắc phục nhược
điểm này, người ta tìm cách biểu diễn KB dạng các câu Horn và áp dụng chỉ một
loại luật (tam đoạn luận, xem mục 5) để suy diễn (tam đoạn luận áp dụng trên 2
câu dạng Horn và sinh ra câu mới cũng là câu dạng Horn). Th ậ u t giải suy diễn
tiến/lùi trên cơ sở tri thức dạng Horn trình bày chi t ế
i t trong mục 8, nó có độ phức
tạp tuyến tính đối với số câu trong KB. Tuy nhiên thuật giải suy diễn tiến/lùi lại là
không đầy đủ trong logic mệnh đề, bởi vì có những câu trong logic mệnh đề không
thể biểu diễn được dưới dạng Horn để có thể áp dụng được giải thuật suy diến tiến/lùi.
4. Câu dng chun hi và lut phân gii
¾ Câu dạng chuẩn hội là câu ộ h i ủ
c a các câu tuyển (clause). Như trên đã nói, câu
tuyển là câu dạng A1 ∨ A2 ∨…∨An, trong đó các Ai là các ký hiệu mệnh đề hoặc
phủ định của ký hiệu mệnh đề. Vậy câu dạng chuẩn hội có dạng:
(A11 ∨ A1 2∨…∨A1n) ∧ (A21 ∨ A2 2∨…∨A2m) ∧ …∧ (Ak1 ∨ Ak2 ∨…∨Akr) clause clause clause
Với Aij là các literal (là ký hiệu mệnh đề hoặc phủ định của ký hiệu mệnh đề).
¾ Với một câu bất kỳ trong logic ệ m nh đề, l ệ i u có t ể h biểu diễn dưới ạ d ng ch ẩ u n hội
như trên được không? Câu trả lời là có. Với câu s, chúng ta liệt kê tất ả c các ký
hiệu mệnh đề xuất hiện trong nó, lập bảng giá trị chân lý để đánh giá s, khi đó s là
hội các tuyển mà mỗi tuyển sẽ tương ứng với dòng làm cho s bằng true false. Với
mỗi tuyển (tương ứng với một dòng), nếu cột của ký hiệu mệnh đề trên dòng đó
có giá trị true thì ký hiệu mệnh đề sẽ là literal dương âm, còn nếu giá trị là false thì
ký hiệu mệnh đề sẽ là literal âm dương trong câu tuyển. Ví dụ, chúng ta m ố u n biết
dạng chuẩn hội của câu sau: ¬C ⇒ A∧B
Trong câu trên, có 3 ký hiệu mệnh đề là A, B, C. Ta lập bảng giá t ị r chân lý và
chuyển sang dạng chuẩn hội như bảng sau: A B C
¬C AB Clause Dạng chuẩn hội: ¬C ⇒ A∧B F F F F A∨B∨C
= (A∨B∨C) ∧ (A∨¬B∨C) ∧ (¬A∨B∨C) F F T T F T F F A∨¬ ∨ B C F T T T T F F F ¬A∨B∨C T F T T T T F T T T T T
¾ Với cách chuyển một câu sang ạ d ng ch ẩ
u n hội như dung bảng giá t ị r chân lý ở
trên, chúng ta khẳng định bất kỳ câu nào cũng có thể chuyển sang dạng chuẩn hội
được. Ngoài phương pháp sử dụng bảng chân lý, chúng ta có t ể h áp dụng 4 qui tắc
sau đây (theo thứ tự được liệt kê) để chu ể y n ấ
b t kỳ câu nào sang dạng chuẩn hội được.
9 QT1: Loại bỏ ⇔: thay t ế h α ⇔ β ằ
b ng (α ⇒ β)∧(β ⇒ α).
9 QT2: Loại bỏ ⇒: Thay t ế h α ⇒ β ằ b ng ¬α ∨ β 9 QT3: chuyển hoặc l ạ
o i bỏ dấu ¬ đặt trước các ký hiệu bằng các luật
deMorgan và luật phủ định kép ¬(α∨β)= ¬α ∧ ¬β; ¬(α∧β)= ¬α ∨ ¬β; ¬¬α= α.
9 QT4: Áp dụng luật phân phối ủ
c a phép ∧ đối với phép ∨
Chẳng hạn, chúng ta cần chuyển câu trong ví dụ trên sang dạng chuẩn hội, bằng
cách áp dụng lần lượt các qui tắc trên: ¬C ⇒ A∧B = ¬(¬C) ∨ (A∧B) (QT2) = C ∨ (A∧B) (QT3) = (C∨A) ∧ (C ∨ B) (QT4)
Chúng ta có thể dừng lại ạ d ng ch ẩ u n hội này, h ặ o c ũ c ng có thể c ứ h ng minh t ế i p
rằng công thức này và công thức thu được từ phương pháp lập bảng ở trên là tương đương. ¾ Luật phân g ả i i (resolution): 9 Luật phân g ả i i:
Nếu chúng ta có hai clause sau là đúng:
(P1 ∨ P2 ∨… Pi ∨…∨Pn) ∧
(Q1 ∨ Q2 ∨… Qj ∨…∨Qm)
và Pi,Qj là các literal phủ định của nhau (Pi=¬Qj)
thì chúng ta cũng có clause sau là đúng
(P1 ∨ P2 ∨… Pi-1 ∨ Pi+1 ∨…∨Pn∨Q1 ∨ 2
Q ∨… Qj-1∨ Qj+1 ∨…∨Qm)
(Clause mi là tuyn các literal trong hai clause ban đầ ư u nhng b đ i Pi và Qj) 9 Kết q ả u của phép phân g ả i i ũ c ng là một clause (tu ể y n các literal), hay nói
cách khác phép phân giải có tính đóng, phân giải của các clause là ộ m t
clause. Đây là tính chất rất quan trong trong việc xây dựng giải th ậ u t suy
diễn tự động trình bày phía dưới.
¾ Câu dạng chuẩn tuyển (tham khảo thêm): Câu dạng chuẩn tuyển là câu tuyển của
các hội. Giống như cấu trúc của câu ạ d ng chuẩn hội, câu ạ d ng ch ẩ u n tuyển cũng
có cấu trúc như vậy, nhưng chúng ta đổi chỗ dấu ∨ bởi dấu ∧ và ngược lại. Với bất
kỳ một câu trong logic mệnh đề, chúng ta ũ
c ng có thể biểu diễn nó dưới dạng
chuẩn tuyển. Tuy nhiên chúng ta không có luật đóng liên quan đến tuyển của hai
câu hội để sinh ra câu hội mới như luật phân giải của hai câu tuyển.
5. Câu dng Horn và tam đon lun
¾ Câu dạng Horn: Như trên ta đã chỉ ra ằ
r ng tất cả các câu trong logic mệnh đề đều
có thể biểu diễn được dưới dạng chuẩn hội, tức là hội của các clause, mỗi clause
có dạng: P1 ∨ P2 ∨… Pi ∨…∨Pn, với Pi là các literal. Nếu trong clause mà có nhiều
nhất một literal dương (tức là không có ký hiệu phủ định đằng trước) thì clause đó
gọi là câu dạng Horn. Như vậy câu dạng Horn là câu có một trong ba dạng:
¬P1 ∨ ¬P2 ∨… ∨¬Pn (không có literal dương nào)
hoặc P (có một literal dương và không có literal âm nào)
hoặc ¬P1 ∨ ¬P2 ∨… ∨¬Pn∨Q (có một literal dương là Q và ít nhất một literal âm)
với P1, P2,…,Pn và Q là các ký hiệu mệnh đề. Nếu chu ể y n các câu ạ d ng Horn sang dạng l ậ u t thì chúng có ạ d ng như sau: ¬(P1 ∧ P2 ∧… ∧Pn) hoặc P
hoặc P1 ∧ P2 ∧… ∧Pn ⇒ Q (có một literal dương là Q)
Trong đó câu dạng thứ hai và câu ba gọi là câu Horn dương (có đúng 1 literal
dương) thường được sử dụng biểu diễn tri thức trong cơ sở tri thức KB, câu ạ d ng
thứ nhất chỉ xuất hiện trong biểu diễn các câu truy vấn.
¾ Tam đoạn luận (hay luật Modus ponens):
Nếu chúng ta có các câu Horn dương sau là đúng: P1, P2, … Pn và P1 ∧ P2 ∧… ∧Pn ⇒ Q
thì câu Q là đúng ¾ Kết quả l ậ
u t Modus ponens từ hai câu ạ
d ng Horn dương sinh ra câu Q cũng có
dạng Horn dương. Vì vậy phép suy diễn tam đoạn luận là đóng trong các câu dạng
Horn, kết quả tam đoạn luận từ hai câu dạng Horn là câu dạng Horn. Tương tự như
tính chất đóng của phép phân giải trong trong các câu dạng chuẩn hội, tính chất
đóng của phép suy luận này là rất quan trọng trong việc thiết kế các giải thuật suy
diễn tự động đề dựa trên tam đoạn luận và các câu Horn (xem phần phía dưới).
¾ Không giống như câu ạ d ng ch ẩ u n hội, không p ả
h i câu nào trong logic mệnh đề
đều có thể biểu diễn ạ
d ng Horn được. Chính vì thế mà th ậ
u t giải suy diễn dựa trên
tam đoạn luận chỉ là đầy đủ trong ngôn ngữ các câu Horn chứ không đầy đủ trong logic mệnh đề.
6. Thut toán suy din da trên bng giá tr chân lý
Trong các phần còn lại của Chương này, chúng ta sẽ xây dựng các giải th ậ u t cài đặt
cho máy tính để nó biết ậ l p luận. Giải th ậ u t ậ
l p luận tự động là giải thuật chỉ ra rằng
nếu KB (cơ sở tri thức) là đúng thì câu truy vấn q có đúng hay không?
Phương pháp lập luận đầu tiên là dựa liệt kê các ấ t t ả
c các trường hợp có thể có của
tập các ký hiệu mệnh đề, rồi kiểm tra xem l ệ i u tất ả
c các trường hợp làm cho KB đúng
xem q có đúng không. Chi tiết thuật giải như bảng sau:
Function Suydien_Lietke(KB, q) return true or false
symbols=get_list_of_symbols(KB,q); n= symbols.size();
int bộ_giá_trị[n]; //dùng để lưu bộ các giá trị logic (true:1, false:0)
for (i=1; i≤2n; i++) { bộ_giá_t ị
r [1,..,n]=generate(i); // sinh ra bộ thứ i
if (evaluate(KB, bộ_giá_trị)==true && evaluate(q, bộ_giá_trị)=false) return false return true;
Thuật giải trên là sinh ra toàn bộ bảng giá trị chân lý để đánh giá KB và q, nếu chỉ cần
một trường hợp KB đúng mà q sai thì q sẽ ế k t l ậ
u n KB không suy diễn được ra q.
Giải thuật trên có độ phức tạp thời gian là 2n * m, với n là số ký hiệu có trong KB,q và m độ dài câu trong KB.
7. Thut toán suy din da trên lut phân gii
Để khắc phục nhược điểm độ phức ạ
t p thời gian của giải thuật suy diễn dựa trên liệt
kê ở trên, chúng ta đưa ra thuật giải nhanh hơn, thời gian thực hiện nhanh hơn.
Giải thuật dựa trên thực hiện liên tiếp các luật phân giải trên các câu dạng chuẩn hội.
Để chứng minh KB q ta sẽ chứng minh điều tương đương là (KB ∧ ¬q []), tức là
như chúng ta vẫn gọi là chứng minh bằng phản chứng: giả sử q không đúng (¬q), khi
đó KB ∧ ¬q sẽ ẫ
d n đến mâu thuẫn, tức là (KB ∧ ¬q) [].
Chúng ta sẽ chuyển (KB ∧ ¬q) về dạng chuẩn hội, tức là hội các clause, hay chúng ta
chuyển KB và ¬q thành hội các clause, sau đó áp dụng liên tiếp luật phân giải (mục
4) trên các cặp clause mà có ít nhất một literal đối của nhau để sinh ra một clause mới,
clause mới này lại bổ sung vào danh sách các clause đã có rồi lặp lại áp dụng luật
phân giải. Giải thuật dừng khi có câu [] được sinh ra (khi đó ta kết l ậ
u n KB q) hoặc
không có clause nào được sinh ra (khi đó ta kết l ậ
u n KB không suy diễn được ra q).
Chi tiết thuật giải cho trong hình ở trang sau.
Giải thuật phân giải là giải thuật đầy đủ vì tất cả các câu trong logic mệnh đề đều có
thể biểu diễn được dưới dạng hội của các clauses (dạng chuẩn hội). Tuy nhiên mỗi lần
phân giải sinh ra clause mới thì lại ổ
b sung vào danh sách các clauses để thực hiện tìm
kiếm các cặp clauses phân giải được với nhau; vì vậy số lượng clauses ở lần lặp sau
lại tăng lên so với lần lặp trước, dẫn đến việc tìm kiếm các clauses phân giải được với nhau là khó khăn hơn.
Giải thuật phân giải trình bày như trên là giải thuật suy phân giải tiến, có nghĩa là từ
trạng thái đầu KB ∧ ¬q thực hiện các thao tác chuyển trạng thái (áp dụng luật phân
giải trên cặp các clauses để sinh ra clauses mới và bổ sung vào danh sách các clauses
hiện có) để sinh ra trạng thái mới, đến khi nào trạng thái mới chứa câu [] (trạng thái
đích) thì dừng hoặc không sinh ra trạng thái mới được nữa.
Một cách khác để thực hiện suy diễn phân giải KB q là xuất phát từ clause ¬q (coi
như trạng thái đích) ta thực hiện phân giải với các clauses khác trong KB để sinh ra
clauses mới, rồi từ các clauses mới này thực hiện tiếp với các clauses khác của KB để
sinh ra clauses mới hơn, đến khi nào [] được sinh ra hoặc không sinh ra được clause
mới thì dừng. Nói cách khác là chỉ thực hiện phân giải các clauses liên quan đến q.
Giải thuật phân giải lùi sẽ làm việc hiệu quả hơn giải thuật phân giải t ế i n (chi tiết cài đặt coi như là bài ậ t p).
Function Resolution(KB, q) return true or false
clauses=get_list_of_clauses(KB ∧ ¬q); new={}; do
for each Ci, Cj in clauses new_clause= resol(Ci,Cj); if new_clause=[] return true; new=new Υ new_clause;
if new ⊆ clauses return false; clauses=clauses Υ new;
8. Thut toán suy din tiến, lùi da trên các câu Horn
Như ta đã thấy trong mục 5, luật Modus ponens là đóng trong các câu dạng Horn
dương, có nghĩa là nếu hai câu dạng Horn dương thỏa mãn các điều kiện của luật
Modus ponens thì sẽ sinh ra câu dạng Horn dương mới. Nếu chúng ta biểu diễn được
KB và q bằng các câu dạng Horn dương thì có thể sử dụng l ậ u t Modus ponens để suy diễn.
Khi KB biểu diễn bằng hội các câu Horn dương, chúng ta các câu Horn dương này
thành 2 loại: (1) câu có đúng một literal dương mà không có literal âm nào, đây là các
câu đơn hay là các ký hiệu mệnh đề; (2) câu có đúng một literal dương và có ít nhất
một literal âm, đây là các câu kéo theo mà phần thân của phép kéo theo chỉ là một ký hiệu mệnh đề.
Có hai cách cài đặt thuật giải suy diễn dựa trên luật Modus ponens trên các câu Horn
dương. Cách thứ nhất là bắt đầu từ các ký hiệu mệnh đề được cho là đúng trong KB,
áp dụng liên tiếp các luật Modus ponens trên các câu kéo theo trong KB để suy diễn
ra các ký hiệu mới, đến khi nào danh sách các hiệu được suy diễn ra chứa ký h ệ i u
đích q thì dừng và thông báo suy diễn thành công. Nếu danh sách các ký hiệu suy diễn
không chứa q và cũng không thể sinh tiếp được nữa thì thông báo suy diễn thất bại.
Cách suy diễn này gọi là suy diễn tiến (hay suy diễn tam đoạn luận tiến để phân biệt
với suy diễn phân giải tiến ở trên).
Chi tiết giải thuật cho trong bảng ở phía dưới. Giải thuật sử dụng danh sách các ký
hiệu mệnh đề được xác định là true, true_symbols , danh sách này khởi tạo từ các ký
hiệu độc lập trong KB, sau đó bổ sung khi một ký hiệu mệnh đề được suy diễn ra là
true, đến khi nào danh sách chưa ký hiệu truy vấn q thì dừng hoặc không bổ sung
được ký hiệu nào nữa vào danh sách này.
Cách cài đặt thứ hai là xuất phát từ đích q, chúng ta xem có bao nhiêu câu Horn kéo
theo nào trong KB có q là phần đầu của luật kéo theo, chúng ta lại kiểm tra xem các
ký hiệu mệnh đề nằm trong p ầ
h n điều kiện của các l ậ
u t này (các đích trung gian) xem
có suy diễn được từ KB không, cứ áp dụng ngược các luật đến khi nào các đích trung
gian được xác nhận là đúng trong KB thì kết luận suy diễn thành công, hoặc kết luận
không thành công khi có tất cả các nhánh đều không chứng minh được các đích trung
gian không suy diễn được từ KB. Giải thuật này gọi là giải thật suy diễn lùi (hoặc là
giải thuật suy diễn tam đoạn luận lùi).
Function Forward_Horn(KB, q) return true or false
Input: - KB tập các câu Horn dương, đánh số clause1, .., clausen
- q: câu truy vấn dạng câu đơn (ký hiệu mệnh đề) Output: true or false Các biến địa phương:
- Int count[0.. n], count[i] là số ký hiệu xuất hiện trong phần điều kiện của clausei.
- Bool proved[danhsach_kyhieu]: proved[kyhieu]=1 nếu kyhieu đã được
chứng minh là suy diễn được từ KB, ngược lại =0; ban đầu khởi tạo=0 với mọi ký hiệu
- working_symbols: danh sách ký hiệu đang xem xét, khởi đầu bằng danh
sách các ký hiệu độc lập trong KB
while working_symbols is not empty p= pop(working_symbols); if (!proved[p]) proved[p]=1;
for each clausei whose p appears
count[clausei] = count[clausei] -1; if count[clausei]==0
if head[clausei]==q return true;
push (head[clausei], working_symbols); return false;
9. Kết chương
Logic mệnh đề là ngôn ngữ để biểu diễn các mệnh đề. Có hai l ạ o i ệ m nh đề: ệ m nh đề
đơn và mệnh đề phức. Mệnh đề đơn tương ứng với một phát biểu nào đó (một sự kiện
hoặc thông tin) và có thể phán xét xem nó đúng hay sai dựa trên phát biểu đó là đúng
hay sai. Mệnh đề phức biểu diễn mối quan hệ hoặc mối liên kết (phủ định, hội, tuyển,
kéo theo, tương đương) giữa các mệnh đề con của nó. Logic qui định tính đúng hay
sai của mệnh đề phức dựa trên tính đúng/sai của các mệnh đề con và dựa trên kiểu của
mối quan hệ/liên kết đó (là ¬, ∧, ∨, ⇒, hay là ⇔). Chính vì việc gán cho các câu
(mệnh đề đơn hoặc mệnh đề phức) hoặc giá trị đúng (true) hoặc giá trị sai (false) theo
các qui tắc của logic giúp chúng ta phán xét được rằng một mệnh đề này là đúng khi
cho biết tập các mệnh đề cho trước là đúng, hay là KB q. Lập luận là trả lời cho câu
hỏi: cho KB đúng thì q có đúng không?.
Trong Chương này chúng ta đã tìm hiểu một số thuật giải ậ
l p luận (input là KB và q,
output là true hoặc false). Các giải th ậ u t ậ l p l ậ u n gồm: ậ
l p luận bằng liệt kê, lập luận
dựa trên luật phân giải, lập luận dựa trên luật Modus ponens. Giải th ậ u t ậ l p luận bằng
liệt kê các giá trị chân lý của các ký hiệu mệnh đề x ấ
u t hiện trong KB và q có ưu điểm
là không đòi hỏi dạng cấu trúc đặc biệt nào cho các câu KB và q, nhưng lại có độ
phức tạp thời gian là hàm mũ đối với số các ký hiệu mệnh đề. Giải th ậ u t dựa trên l ậ u t
phân giải thì yêu cầu KB và ¬q phải có dạng chuẩn hội, tức là chúng ta phải thực hiện
chuyển KB và ¬q thành dạng chuẩn hội rồi mới áp dụng giải th ậ u t. May thay, tất cả
các câu trong logic mệnh đề đều có thể chuyển được về dạng ch ẩ u n hội. Còn giải
thuật lập luận dựa trên luật Modus ponens thì yêu cầu KB và q p ả h i có ạ d ng câu
Horn. Không phải tất cả các câu trong logic mệnh đề đều chuyển về dạng Horn được.
Tuy nhiên nếu KB và q ở dạng Horn thì các g ả i i th ậ u t suy d ễ
i n tiến hoặc lùi dựa trên
Modus ponens lại làm việc rất hiệu quả.
Các giải thuật lập luận ở trên khi cài đặt cho máy tính sẽ giúp máy tính có khả năng lập luận được.
Chương 7 – Các phương pháp lp lun trên logic cp mt
Trong Chương trước chúng ta đã tìm hiểu logic mệnh đề, một ngôn ngữ đưa ra các qui
tắc xác định ngữ pháp và ngữ nghĩa (tính đúng/sai) các câu. Câu đơn giản nhất trong
logic mệnh đề là các ký hiệu mệnh đề, nó biểu diễn cho các sự kiện hoặc thông tin trong
thế giới thực. Câu phức tạp hơn liên kết các câu đơn bằng các phép nối logic (¬, ∧, ∨, ⇒,
⇔) biểu diễn mệnh đề phức, mô ả t quan hệ hoặc liên ế
k t các mệnh đề đơn. Như vậy,
logic mệnh đề chỉ có thể biểu diễn được các Ệ M NH ĐỀ và các liên ế k t hoặc quan ệ h giữa
các MỆNH ĐỀ. Vì vậy sức mạnh biểu diễn của logic mệnh đề c ỉ h giới ạ h n trong thế giới
các mệnh đề. Nó không quan tâm đến nội dung các mệnh đề như thế nào. Vì thế mà logic
mệnh đề có những hạn chế trong việc biểu diễn và suy diễn. Ví dụ, nếu chúng ta cho cơ
sở tri thức phát biểu trong ngôn ngữ tự nhiên như sau: An là sinh viên.
Mọi sinh viên đều học giỏi.
Với cơ sở tri thức như vậy ta có t ể
h suy diễn ra rằng “An học giỏi”. Tuy nhiên nếu sử
dụng logic mệnh đề thì câu “An là sinh viên” có thể biểu diễn bằng một ký hiệu mệnh đề
P1; còn câu “Mọi sinh viên đều học giỏi” thì thông thường biểu diễn bằng một ký hiệu
mệnh đề, chẳng hạn Q. Mệnh đề mà chúng ta cần suy diễn “An học giỏi” ký hiệu bởi T1.
Khi đó cơ sở tri thức có dạng: P1 Q
và mệnh đề cần truy vấn là T1. Vì logic mệnh đề không quan tâm đến nội dung bên trong
các mệnh đề nên chúng ta không thể thực hiện suy diến {P1∧Q} ╞ T1 được vì chúng
chẳng liên quan gì với nhau. Nếu chúng ta biết được danh sách tất ả c các sinh viên, chẳng
hạn {An, Bình, …, Yến} thì chúng ta có thể chuyển câu “Mọi sinh viên đều học giỏi”
thành câu phức “[An là sinh viên thì An học giỏi] VÀ [Bình là sinh viên thì Bình học
giỏi] VÀ …VÀ [Yến là sinh viên thì Yến học giỏi]” thì câu đó sẽ biểu diễn được thành
câu phức trong logic mệnh đề dạng:
(P1 ⇒ T1) ∧ (P2 ⇒ T2) ∧ … ∧ (Pn ⇒ Tn)
Với P1,T1 là ký hiệu mệnh đề đã nói ở trên; P2 là mệnh đề “Bình là sinh viên”, T2 là
“Bình học giỏi”, …, Pn là “Yến là sinh viên” và Tn là “Yến học giỏi”.
Khi đó, sử dụng mệnh đề P1 đã biết là đúng thì ta áp dụng luật Modus ponens trong logic
mệnh đề thì suy diễn ra được T1.
Với cách biểu diễn câu “Mọi sinh viên đều học giỏi” bằng (P1 ⇒ T1) ∧ (P2 ⇒ T2) ∧ …
∧ (Pn ⇒ Tn) trong logic mệnh đề ta có thể “Modus ponens” với câu trước đó là P1 để
sinh ra T1. Tuy nhiên khi đó số câu có trong cơ sở tri thức sẽ là ấ r t ớ l n (có bao nhiêu sinh
viên thì có bấy nhiêu câu Pi ⇒ Ti), và khi đó các thuật toán suy diễn tự động sẽ trở nên
không hiệu quả. Và quan trọng hơn câu có tính chất phổ biến “Mọi sinh viên đều học
giỏi” không thể nào biểu diễn thành dạng liệt kê cho từng sinh viên được. Logic mệnh đề
thiếu các câu mô tả đặc trưng cho một lớp các đối tượng (cũng giống n ư h nếu một ngôn
ngữ lập trình mà thiếu các câu lệnh lặp như for, while mà c ỉ
h cỏ các kiểu lệnh đơn lẻ và
rẽ nhánh), vì thế mà sức mạnh biểu diễn của nó rất ạ h n chế.
Trong chương này, chúng ta sẽ xem xét logic cấp một, hay logic vị từ, một mở rộng của
logic mệnh đề mà cho phép biểu diễn những mệnh đề mang tính phổ quát (“với ọ m i”) và
những mệnh đề mang tính đặc thù (“tồn tại”) một cách dễ dàng. Để làm được điều đó,
chúng ta phân tích mệnh đề thành dạng (chủ ngữ - vị từ) hoặc (chủ n ữ g - vị từ - tân n ữ g )
và chuyển chủ ngữ và tân ngữ thành đối tượng (hoặc biến) của vị từ. Vì vậy mà câu đơn
của logic cấp một có dạng Vị_từ(c ủ h _ngữ) hoặc ị V _từ(c ủ
h _ngữ, tân ngữ); chẳng hạn
“An là sinh viên” biểu diễn là Sinhvien(An); “An yêu Bình” biểu diễn là Yeu(An,Binh).
Chính vì thế mà ta gọi nó là logic vị từ. Từ các câu đơn như vậy ta xây dựng các câu
phức sử dụng các ký h ệ
i u (¬, ∧, ∨, ⇒, ⇔) và ∀ ,∃ (hai ký hiệu này không có trong logic
mệnh đề). Quan trọng hơn, làm thế nào chúng ta xây dựng các thuật giải ậ l p luận tự động,
giải thuật cài đặt cho máy tính để nó có thể chứng minh được KB q, với KB và q là các
câu trong logic vị từ cấp một, tương tự như các g ả i i th ậ
u t phân giải, giải th ậ u t suy diễn
tiến, lùi trong logic mệnh đề.
1. Cú pháp – ng nghĩa 1.1 Cú pháp ¾ Các ký hiệu: 9 Ký hiệu hằng:
 Hằng của ngôn ngữ: true, false
 Hằng do người sử dụng đặt cho tên đối tượng cụ thể: An, Binh,...,
a,b,c, … (đối tượng là các chủ ngữ hoặc tân ngữ trong mệnh đề).
9 Ký hiệu biến (thường là biến đối tượng, đại diện cho chủ ngữ h ặ o c tân ngữ): x,y,z,t,u, …
9 Ký hiệu vị từ: P, Q, … hoặc Sinhvien, Yeu, father, …(mỗi ký hiệu tương
ứng vị từ trong mệnh đề). Mỗi ký hiệu vị từ là câu đơn trong logic ấ c p một
và có ngữ nghĩa true hay false.
9 Ký hiệu hàm: sin, cos, log, father, … Chú ý hàm father (father(An)=Binh)
khác với vị từ father (father(An,Binh)) ở chỗ hàm thì trả về giá t ị r còn vị từ
thì trả về true/false. V ệ
i c xác định một cái tên là hàm hay ị v từ tùy vào ự s
xuất hiện của nó trong câu và các tham số của nó.
9 Ký hiệu kết nối logic: ¬, ∧, ∨, ⇒, ⇔
9 Ký hiệu lượng tử: ∀, ∃
9 Các ký hiệu “(“ và ”)” ,”,” ¾ Qui tắc xây ự
d ng câu: Có 2 loại câu: câu đơn và câu p ứ
h c. Chúng được định nghĩa đệ qui như sau:
9 Câu đơn: true và false là các câu (true là câu đơn hằng đúng, false là câu hằng sai).
9 Câu đơn: Ký_hiu_v_t(hng_thc_1, hng_thc_2, …, hng_thc_k)
là mt câu (câu đơn), trong đó hng_thc_i là biểu thức của các đối tượng,
cú pháp của hng thc được xây dựng từ các ký hiệu hằng, biến và hàm như sau:
 Các ký hiệu hằng và các ký hiệu biến là một hạng thức
 Nếu t1, t2, ..,tn là các hạng thức và f là một ký hiệu hàm gồm n tham
số thì f(t1, t2, ..,tn) cũng là một hạng thức
Ví dụ về các câu đơn là: love(An,Binh) father(An,Nhan) sinhvien(Hoa)
9 Câu phức: Nếu A, B là các câu và x là một ký hiệu biến thì các công thức sau cũng là câu: ¬A (A ∧ B) (A ∨ B) (A ⇒ B) (A ⇔ B) ∀x, A ∃x, A
¾ Các khái niệm và qui ước khác: 9 Nếu một ạ
h ng thức không chứa biến thì gọi là hạng thức nền
9 Một câu đơn cũng có tên gọi là câu phân tử hay công thức phân tử
9 Một câu đơn hoặc phủ định của một câu đơn thì gọi là literal
9 Trong công thức có ký hiệu lượng tử (∀x, A hoặc ∃x, A) các biến x trong A
gọi là biến buộc (biến lượng tử), biến nào trong A không phải là biến lượng
tử thì gọi là biến tự do. Các câu mà không có biến tự do gọi là câu đóng.
Trong môn học này, chúng ta chỉ quan tâm đến các câu đóng (chỉ các câu
đóng mới xác định được tính đúng/sai ủ
c a nó, xem phần ngữ nghĩa bên dưới) 9 Miền giá trị của ộ
m t biến là tập hợp các giá t ị
r /đối tượng mà biến đó có thể nhận.
1.2 Ng nghĩa (qui định cách diễn dịch và xác định tính đúng/sai cho các câu)
9 Một câu đơn đóng (không chứa biến) là tương ứng với một ệ m nh đề (phát
biểu, sự kiện, thông tin) nào đó trong thế giới thực, câu đơn có giá trị chân
lý true hay false tùy theo mệnh đề (phát biểu, sự kiện, thông tin) mà nó ám
chỉ là đúng hay sai trong thực tế.
9 Câu phức là câu biểu diễn (ánh xạ với) một phủ định, ố m i quan hệ h ặ o c
mối liên kết giữa các mệnh đề/phát biểu/câu con hoặc một sự phổ biến hoặc đặc thù của ệ
m nh đề/phát biểu trong thế giới thực. N ữ g nghĩa và giá trị
chân lý của các câu phức này được xác định dựa trên các câu con thành
phần của nó, chẳng hạn:
 ¬A có nghĩa là phủ định mệnh đề/ câu A, nhận giá trị true ế n u A là false và ngược lại
 A ∧ B có nghĩa là mối liên ế k t “A và B”, n ậ
h n giá trị true khi cả A
và B là true, và nhận giá trị false trong các trường hợp còn lại.
 A ∨ B biểu diễn mối liên ế k t “A hoặc B”, n ậ h n giá trị true khi h ặ o c
A hoặc B là true, và nhận giá trị false chỉ khi cả A và B là false.
 (A ⇒ B) biểu diễn mối quan ệ
h “A kéo theo B”, chỉ nhận giá trị
false khi A là true và B là false; nhận giá trị true trong các trường hợp khác
 (A ⇔ B) biểu diễn mối quan hệ “A kéo theo B” và “B kéo theo A”
 ∀x A biểu diễn sự phổ biến của A, nhận giá trị true tất ả c các câu
sinh ra từ A bằng cách thay x bởi một giá trị/đối tượng cụ thể thuộc
miền giá trị biến x đều là true, ngược lại thì câu phổ biến này nhận giá trị false
 ∃x A biểu diễn sự tồn tại của A, nhận giá trị true khi có một giá t ị r
x0 trong miền giá trị của biến x làm cho A true, false trong các trường hợp còn lại. Như vậy, v ệ
i c xác định tính đúng/sai ủ
c a một câu đơn (vị từ) là dựa trên
tính đúng sai của sự kiện hoặc thông tin mà nó ám chỉ, còn việc xác định
tính đúng sai của câu phức phải tuân theo các qui tắc trên. Trong nhiều
trường hợp, chúng ta (cần chỉ) biết tính đúng/sai của các câu phức, còn tính
đúng/sai của các câu đơn là không cần biết hoặc có thể lập luận ra từ các
các câu phức đã biết đúng/sai và các qui tắc chuyển đổi tính đúng/sai giữa
các câu đơn và câu phức theo các qui tắc trên.
1.3 Các ví d:
Các câu trong ngôn ngữ tự nhiên có thể biểu diễn trong logic vị từ cấp một: 9 “An là sinh viên” Sinhvien(An)
9 “Nam là cha của Hoàn” Cha(Nam,Hoàn)
9 “Mọi sinh viên đều học giỏi”
∀x Sinhvien(x) ⇒ Hocgioi(x)
(chú ý ∀ thường đi với ⇒. Khác với ∀x Sinhvien(x) ∧ Hocgioi(x))
9 “Trong sinh viên có bạn học giỏi” ∃x Sinhvien(x) ∧ Hocgioi(x)
(chú ý ∃ thường đi với ∧. Khác với ∃x Sinhvien(x) ⇒ Hocgioi(x).
1.4 Các câu hng đúng (có giá trị chân lý luôn bằng true)
Ngoài các công câu hằng đúng trong logic mệnh đề, chúng ta thêm các câu ằ h ng đúng
liên quan đến các lượng tử như sau: ¾ ∀x P(x) ⇔ ∀y P(y) (qui tắc đổi tên) ¾ ∃x P(x) ⇔ ∃y P(y) (qui tắc đổi tên)
¾ ∀x∀y P(x,y) ⇔ ∀y∀x P(x,y) (qui tắc giao hoán) ¾ ∃x∃y P(x,y) ⇔ ∃y∃x P(x,y) (qui tắc giao hoán)
¾ ∀x P(x) ⇔ ¬∃x ¬P(x)
(chuyển đổi giữa ∀ và ∃) ¾ ∃x P(x) ⇔ ¬∀x ¬P(x)
(chuyển đổi giữa ∀ và ∃)
¾ ¬(∀x P(x)) ⇔ ∃x ¬P(x) (DeMorgan)
¾ ¬(∃x P(x)) ⇔ ¬∀x ¬P(x) (DeMorgan)
¾ ∀x P(x) ⇒ P(a), với a là giá trị thuộc m ề i n giá trị của X (loại bỏ ∀) ¾ ∃x P(x) ⇒
P(e), với e là một giá trị vô danh, không có trong cơ ở s tri thức (loại bỏ ∃) ¾ P(a) ⇒ ∃x P(x) (đưa ký hiêu ∃ vào) ¾ Luật phân g ả i i tổng quát (xem ụ m c 3 của Chương này)
¾ Modus Ponens tổng quát (xem mục 4 của Chương này)
2. Lp lun trong logic v t cp mt
¾ Ví dụ: Xem xét bài toán lập luận (hay c ứ
h ng minh) được phát biểu trong ngôn ngữ tự nhiên như sau: Cho:
“An là con trai. Thủy là con gái. Tóc của con gái dài hơn tóc của con trai” Hãy chứng minh:
“Tóc của Thủy dài hơn tóc của An”
Bài toán này có thể biểu diễn trong logic vị từ cấp một như sau:
Cho các câu sau (cơ sở tri thức - KB) là đúng: Contrai(An) (1) Congai(Thuy) (2)
∀x∀y Contrai(x) ∧ Congai(y) ⇒ Tocdaihon(y,x) (3)
Chúng ta cần chứng minh (câu truy vấn q): Tocdaihon(Thuy,An).
Đây là một lời giải của bài toán trên ( ờ
l i giải là dãy các bước áp dụng luật logic vị
từ cấp một để đưa cơ sở tri thức về điều cần chứng minh):
Bước 1: Từ (1) và (2) ta áp dụng luật đưa ∧ vào (A,B ⇒ A ∧ B): Contrai(An) ∧ Congai(Thuy) (4)
Bước 2: Áp dụng luật loại bỏ ∀ trong (3) với {x/An, y/Thuy} ta được:
Contrai(An) ∧ Congai(Thuy) ⇒ Tocdaihon(Thuy,An) (5)
Bước 3: Áp dụng luật Modus ponens cho (4) và (5) ta có: Tocdaihon(Thuy,An) (6)
Đến đây ta được điều phải chứng minh.
¾ Cũng giống như trong logic ệ m nh đề, bài toán ậ
l p luận (chứng minh KB q) có
thể xem là bài toán tìm đường đi như sau:
9 Trng thái đầu: KB
9 Các phép chuyn trng thái: mỗi phép chuyển trạng thái là một lần áp dụng
luật trong logic vị từ cấp một (nh ề i u hơn các l ậ u t của logic ệ m nh đề) trên ậ t p
câu trong KB. Mỗi luật l áp dụng cho KB sinh ra câu mới l(KB), bổ sung câu
mới này vào KB được trạng thái mới KBl(KB )
9 Trng thái đích: trạng thái KB chứa q
9 Chi phí cho mi phép chuyn: 1
¾ Bài toán trên có thể tìm được lời giải ằ b ng cách áp ụ d ng các th ậ u t toán tìm k ế i m
như đã trình bày trong các chương đầu của giáo trình này về tìm k ế i m. Tuy nhiên
không gian tìm kiếm lời giải của bài toán này là rất lớn. Cũng giống như trong
logic mệnh đề, nếu cơ sở tri thức (KB) và câu truy vấn (q) được biểu diễn bằng (hoặc có t ể h chu ể
y n được sang) các câu có ạ
d ng thích hợp, thì chúng ta có t ể h chỉ
cần áp dụng một loại luật của logic mệnh đề để chứng minh rằng KB q. Cụ thể
là nếu KB và q biểu diễn được bằng các câu Horn thì chỉ ầ
c n áp dụng liên tiếp các
luật Modus ponens là chứng minh được KB q (xem mục 5,7,8); còn nếu KB và
q biểu diễn bằng các câu dạng chuẩn hội thì ta chỉ cần liên tiếp áp dụng các luật
phân giải là thực hiện được việc suy diễn KB q (xem mục 4,6).
3. Phép đồng nht hai v t, thut gii đồng n h t
¾ Phép đồng nht là gì? Khi áp dụng luật trong logic ị
v từ, ta thường xuyên gặp phải
việc đối sách các vị từ trong hai câu xem chúng có thể đồng nhất được với nhau
không (tức là chúng sẽ hoàn toàn như nhau trên một bộ giá trị nào đó. Chẳng hạn
ở bước 2 trong chứng minh ví dụ trên, khi áp dụng L ậ u t l ạ o i bỏ ký hiệu ∀ trong
câu có tính phổ biến (3) để được câu cụ t ể h trên bộ giá t ị r (x=An, y=Thuy), ta p ả h i
đối sánh các cặp vị từ , Congai(y)> để tìm ra giá trị x=An, y=Thuy để cho các cặp vị từ đó là hoàn toàn
như nhau (để có áp dụng các l ậ u t t ế
i p theo). Việc đối sánh hai vị từ để tìm ra một
bộ giá trị cho các biến sao cho hai vị từ là đồng nhất được gọi là phép đồng nhất.
Vậy phép đồng nhất là thao tác thực hiện trên hai vị từ (hoặc phủ định của ị v từ)
và cho kết quả là sự thay thế các biến xuất hiện trong các vị từ bằng các ạ h ng thức
(các giá trị) để hai vị từ đó là như nhau. ¾ Ví dụ:
9 Đồng nhất (Contrai(An), Contrai(y)) = {y/An}