1. TRÍ TUỆ NHÂN TẠO
Artificial Intelligence
GV: Nguyễn Hữu Tuân
Khoa Công nghệ Thông tin
Đại học CN GTVT
Email: tuannh@utt.edu.vn
Hà Nội - 2015
2. Chương 2: TÌM KIẾM TRÊN KHÔNG
GIAN TRẠNG THÁI
(State Space Search)
3. 2.1 Bài toán tìm kiếm
Tìm kiếm cái gì?
Biểu diễn và tìm kiếm là kỹ thuật phổ biến giải các bài
toán trong lĩnh vực AI
Các vấn đề khó khăn trong tìm kiếm với các bài toán
AI
- Đặc tả vấn đề phức tạp
- Không gian tìm kiếm l ớn
- Đặc tính đối tượng tìm kiếm thay đổi
- Đáp ứng thời gian thực
- Meta knowledge và kết quả “tối ưu”
Khó khăn v ề kỹ thuật
Slide 23
4. Cấu trúc chung của bài toán tìm kiếm
Một cách chung nhất, nhiều vấn đề - bài toán phức tạp đều
có dạng "tìm đường đi trong đồ thị" hay nói một cách
hình thức hơn là "xuất phát từ một đỉnh của một đồ thị,
tìm đường đi hiệu quả nhất đến một đỉnh nào đó".
Một phát biểu khác thường gặp của dạng bài toán này là:
Cho trước hai trạng thái T0 và TG hãy xây dựng chuỗi tr ạng thái
T0, T1, T2, ..., Tn-1, Tn = TG sao cho :
thỏa mãn một điều ki ện cho trước (thường là nhỏ nhất).
Slide 24
5. 2.2 Giải thuật tổng quát
Ký hiệu:
s đỉnh xu ất phát
g: đỉnh đích
n: đỉnh đang xét
Γ(n): tập các đỉnh có thể đi trực tiếp từ đỉnh n
Open: tập các đỉnh có thể xét ở bước kế tiếp
Close: tập các đỉnh đã xét
Slide 25
6. 2.2 Giải thuật tổng quát (tiếp)
Begin
Open := {s};
Close := ø;
While (Open <> ø) do
begin
n:=Retrieve(Open);
if (n=g) then Return True;
Open := Open ∪ Γ(n); // ( Γ(n) - Close)
Close := Close ∪ {n};
end;
Return False;
End;
Slide 26
7. Ví dụ:
Xét graph sau:
B
E
H
A
C D
F G
I J
s = A là đỉnh bắt đầu
g= G là đỉnh đích
Slide 27
8. 2.3 Breath First Search - Ví d ụ
Xét graph sau: L ần l ặp n Γ(n) Open Close
B
E
H
0
A 1
2
3
C D
5
6
F G 7
I J
A {B, C, D}
B {E, F}
C {F, G}
4 D ø
E {H, I}
F {J}
G
True
{A} ø
{B, C, D} {A}
{C, D, E, F} {A, B}
{D, E, F, G} {A, B, C}
{E, F, G} {A, B, C, D}
{F, G, H, I} {A, B, C, D, E}
{G, H, I, J} {A, B, C, D, E, F}
Slide 28
9. 2.3 Breath First Search - Ví dụ
Xét graph sau:A->U Lần lặp n Γ(n) Open Close
B
E
A
C
F G
0
1
2
3
D
5
6
7
8
9
A
B
C
4 D
E
F
G
H
I
{B, C, D}
{E, F}
{F, G}
ø
{H, I}
{J}
ø
Ø
ø
Ø
{A} ø
{B,C,D} {A}
{C,D, E,F} {A, B}
{D,E, F,G} {A, B, C}
{E, F, G} {A, B, C, D}
{F, G, H, I} {A, B, C, D, E}
{G, H, I, J} {A, B, C, D, E, F}
{H, I, J} {A, B, C, D, E, F,G}
{I, J} {A,B,C, D, E, F,G,H}
{J} {A,B,C, D, E,
10 J Ø F,G,H,I}
H I J {A,B,C, D, E,
FALSE F,G,H,I,J}
Slide 29
11. 2.4 Depth First Search - Ví dụ
Xét graph sau: Lần lặp n Γ(n) Open Close
B
E
H
A
C
F
I J
0
1 A {B, C, D}
2 B {E, F}
3 E {H, I}D
4 H Ø
5 I Ø
6 F {J}G
7 J Ø
8 C {F, G}
9 G True
{A}
{B, C, D}
{E, F, C, D}
{H, I, F, C, D}
{I, F, C, D}
{F, C, D}
{J, C, D}
{C, D}
{G, D}
ø
{A}
{A, B}
{A, B, E}
{A, B, E, H}
{A, B, E, H, I}
{A, B, E, H, I, F}
{A, B, E, H, I, F,J}
{A,B,E,H,I, F,J,C}
Slide 31
12. Breath First vs Depth First
Breath First: open được tổ chức dạng FIFO
Depth First: open được tổ chức dạng LIFO
Hi ệu qu ả
- Breath First luôn tìm ra nghiệm có số cung nhỏ nhất
- Depth First “thường” cho kết quả nhanh hơn.
K ết qu ả
- BFS, DFS chắc chắn tìm ra kết quả nếu có.
Bùng nổ tổ hợp là khó khăn lớn nhất cho các giải thuật
này.
Giải pháp cho bùng nổ tổ hợp??
Slide 32
13. Tìm kiếm rộng
1.
2.
2.
3.
4.
5.
6.
Open = [A]; closed = []
Open = [B,C,D];
closed = [A]
Open = [C,D,E,F];
closed = [B,A]
Open = [D,E,F,G,H]; closed = [C,B,A]
Open = [E,F,G,H,I,J]; closed = [D,C,B,A]
Open = [F,G,H,I,J,K,L];closed = [E,D,C,B,A]
Open = [G,H,I,J,K,L,M];(vì L đã có trong open);
closed = [F,E,D,C,B,A]
…
Slide 33
14. Tìm kiếm sâu
1.
2.
3.
4.
5.
6.
7.
8.
9.
Open = [A]; closed = []
Open = [B,C,D]; closed = [A]
Open = [E,F,C,D];closed = [B,A]
Open = [K,L,F,C,D];
closed = [E,B,A]
Open = [S,L,F,C,D];
closed = [K,E,B,A]
Open = [L,F,C,D];
closed = [S,K,E,B,A]
Open = [T,F,C,D];
closed = [L,S,K,E,B,A]
Open = [F,C,D];
closed = [T,L,S,K,E,B,A]
…
Slide 34
15. Depth first search có giới hạn
Depth first search có khả năng lặp vô tận do các trạng
thái con sinh ra liên tục. Độ sâu tăng vô tận.
Khắc phục bằng cách giới hạn độ sâu của giải thuật.
Sâu bao nhiêu thì vừa?
Chiến lược giới hạn:
- Cố định một độ sâu MAX, như các danh thủ chơi cờ tính
trước được số nước nhất định
- Theo cấu hình resource của máy tính
- Meta knowledge trong việc định giới hạn độ sâu.
Giới hạn độ sâu => co hẹp không gian trạng thái => có
thể mất nghiệm.
Slide 35
17. 3.1 Heuristic là gì
Heuristic là gì?
– Heuristic là những tri thức được rút tỉa từ những kinh nghiệm,
“trực giác” của con người.
– Heuristic có thể là những tri thức “đúng” hay “sai”.
– Heuristic là những meta knowledge và “thường đúng”.
Heuristic dùng để làm gì?
Trong những bài toán tìm kiếm trên không gian trạng thái, có 2 trường
hợp cần đến heuristic:
1. Vấn đề có thể không có nghiệm chính xác do các mệnh đề
không phát biểu chặt chẽ hay thiếu dữ liệu để khẳng định kết
quả.
2. Vấn đề có nghiệm chính xác nhưng phí tổn tính toán để tìm ra
nghiệm là quá lớn (hệ quả của bùng nỗ tổ hợp)
Heuristic giúp tìm kiếm đạt kết quả với chi phí thấp hơn
18. Heuristic (tt)
Heuristic dùng như thế nào trong SSS?
– Tìm kiếm trên không gian trạng thái theo chiều nào? Sâu hay rộng?
– Tìm theo Heuristic : Heuristic định hướng quá trình tìm kiếm theo hướng
mà “nó” cho rằng khả năng đạt tới nghiệm là cao nhất. Không “sâu” cũng
không “rộng”
Kết quả của tìm kiếm với Heuristic
– Việc tìm kiếm theo định hướng của heuristic có kết quả tốt hay xấu tùy
theo heuristic “đúng” hay “sai”.
– Heuristic có khả năng bỏ xót nghiệm
– Heuristic càng tốt càng dẫn đến kết quả nhanh và tốt.
Làm sao tìm được Heuristic tốt???
19. Best First Search
Procedure Best_First_Search;
Begin
open:=[start]; close:=[];
While (open<>[]) do
begin Lấy phần tử đầu tiên X khỏi Open.
if X là goal then return path từ start đến
X
else begin
sinh ra các nút con của X;
for mỗi nút con Y của X do
case Y of
Y không có trong open hay close:
begin gán giá trị heuristic cho Y;
đưa Y vào open; end;
Y đã có trong Open:
if đến được Y bằng một path ngắn hơn
then gán path ngắn hơn này cho Y trên
Open.
Y đã có trên close:
if đến được Y bằng một path ngắn hơn
then begin xóa Y khỏi danh sách Close;
thêm Y vào danh sách Open; end;
end; /*end case*/
Đưa X vào close;
Xếp thứ tự các trạng thái trên Open theo
giá trị Heuristic (tăng dần)
end; / while/
return failure;
End;
21. Best First Search (tt)
Best First search vs Depth First & Breath First
– Best First search tương tự như Depth First & Breath First nhưng phần tử
được xét tiếp theo là phần tử có giá trị heuristic tốt nhất.
– Cần có một hàm đánh giá các trạng thái để xác định giá trị heuristic cho
các trạng thái.
– Không gian trạng thái vẫn không thay đổi về “toàn cục“ tuy nhiên thường
Heuristic search có không gian trạng thái làm việc nhỏ hơn Depth First và
Breath First. Tại sao??
Do sự định hướng các trạng thái kế tiếp theo hướng có khả năng tìm ra
nghiệm nhanh hơn nên số trạng thái xét dư thừa sẽ hạn chế sinh ít
trạng thái con hơn
Điều này cũng là nguyên nhân làøm cho Best First Search có thể dẫn
đến kết quả là “nghiêäm phụ” thay vì “nghiệm tối ưu”.
22. Hàm lượng giá Heuristic
Hàm lượng giá Heuristic là hàm ước lượng phí tổn để đi từ trạng thái hiện
tại đến trạng thái goal.
Cơ sở để xác định hàm lượng giá là dựa vào tri thức/kinh nghiệm thu thập
được.
Hàm lượng giá cho kết quả đúng (gần thực thế) hay sai (xa giá trị thực) sẽ
dẫn đến kết quả tìm được tốt hay xấu.
Không có chuẩn mực cho việc đánh giá một hàm lượng giá Heuristic. Lý
do:
– Không có cấu trúc chung cho hàm lượng giá
– Tính đúng/sai thay đổi liên tục theo từng vấn đề cụ thể
– Tính đúng/sai thay đổi theo từng tình huống cụ thể trong một vấn
đề
Có thể dùng nhiều hàm lượng giá khác nhau theo tình huống cần
hàm lượng giá về các hàm lượng giá.
23. Hàm lượng giá Heuristic
Xét bài toán 8 pussle với
goal là:
1 2 3
8 4
7 6 5
Heuristic 1: Tổng số miếng
sai vị trí
Heuristic 2: Tổng khoảng
cách sai vị trí của từng
miếng.
Heuristic 3: Số cặp hoán đổi
vị trí nhân cho 2
5 6 0
3 4 0
5 6 0
2 8 3
1 6 4
7 5
2 8 3
1 4
7 6 5
2 8 3
1 6 4
7 5
Việc chọn lựa hàm Heuristic là khó khăn và có ý
nghĩa quyết định đối với tốc độ của giải thuật
24. Hàm lượng giá Heuristic
Xét lại hoạt động của giải thuật Best First Search:
– Khi có 2 nút cùng có giá trị kỳ vọng đạt đến mục tiêu bằng nhau
thì nút có path từ nút bắt đầu đến nút đó ngắn hơn sẽ được chọn
trước như vậy nút này có giá trị Heuristic tốt hơn.
– Hay nói cách khác hàm lượng giá Heuristic cho nút gần start hơn
là tốt hơn nếu kỳ vọng đến goal là bằng nhau.
– Vậy chọn nút nào nếu kỳ vọng của 2 nút khác nhau? Nút kỳ vọng
tốt hơn nhưng xa start hay nút kỳ vọng xấu hơn nhưng gần root
Hàm lượng giá bao gồm cả 2 và có cấu trúc:
F(n) := G(n) + H(n)
G(n): phí tổn thực từ root đến n
H(n): phí tổn ước luợng heuristic từ n đến goal.
25. Ví dụ – Best first search
Xét ví dụ là bài toán 8 puzzle với:
2 8 3
1 6 4
7 5
Bắt đầu
1 2 3
8 4
7 6 5
Mục tiêu
Hàm lượng giá: F(n) = G(n) + H(n)
Với G(n): số lần chuyển vị trí tile đã thực hiện
H(n): Số tile nằm sai vị trí
Nút X có giá trị heuristic tốt hơn nút Y nếu F(x) < F(y).
Ta có hoạt động của giải thuật Best First search trên như hình sau:
26. Ví dụ – Best first search (tt)
57
461
3821 State A
F(a) =0+4=4
57
461
382x State B
F(b) =1+5=6 567
41
3822 State C
F(c) =1+3=4 57
461
382x State D
F(c) =1+5=6
567
41
3823 State E
F(e) =2+3=5 567
481
324 State F
F(f) =2+3=5 567
41
382x State G
F(g) =2+4=6
567
412
38x State H
F(h) =3+3=6 56
417
382x State I
F(i) =3+4=7
27. Ví dụ – Best first search (tt)
567
481
324 State F
F(f) =2+3=5
567
481
325 State J
F(j) =3+2=5 567
481
32x State K
F(k) =3+4=7 567
41
382y State Close
567
481
32y Close
567
48
3216 State L
F(l) =4+1=5
567
481
32y State Close
567
48
3217 State M
F(m) =5+0=5 56
487
321x State N
F(n) =5+1=7
28. Lần X Open Close
0
1
2
3
4
5
6
7
A4
C4
E5
F5
J5
l5
m5
[a4]
[c4,b6,d6]
[e5,f5,g6,b6,d6]
[f5,h6,g6,b6,d6,i7]
[j5,h6,g6,b6,d6,k7,i7]
[l5,h6,g6,b6,d6,k7,i7]
[m5,h6,g6,b6,d6,k7,i7,n7]
[]
[a4]
[a4,c4]
[a4,c4,e5]
[a4,c4,e5,f5]
[a4,c4,e5,f5,j5]
[a4,c4,e5,f5,j5,l5]
29. Biến thể của Best First Search
Giải thuật best-first-search có các biến thể sau:
Khi 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).
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 thuật tham ăn
(greedy search).
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 thì giải thuật best-
first-search được gọi là giải thuật A*.
30. Thuật toán A*
Thuật toán A* sử dụng tìm kiếm tốt nhất đầu tiên với hàm
đánh giá f(u)
Begin
1. Khởi tạo danh sách L chỉ chứa trạng thái đầu;
2. Loop do
2.1 If L rỗng then {thông báo thất bại; stop};
2.2 Lấy trạng thái u ở đầu danh sách L;
2.3 If u là trạng thái kết thúc then
{ thông báo thành công; stop }
31. 2.4 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 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;
End;
32. Ví dụ: cho không gian trạng thái với hàm đánh giá :
33.
34. Đánh giá giải thuật Heuristic
Admissibility – Tính chấp nhận
Một giải thuật Best first search với hàm đánh giá
F(n) = G(n) + H(n) với
N : Trạng thái bất kỳ
G(n) : Phí tổn đi từ nút bắt đầu đến nút n
H(n) : Phí tổn ước lượng heuristic đi từ nút n đến goal
Được gọi là giải thuật A
Một giải thuật tìm kiếm được xem là admissible nếu đối với
một đồ thị bất kỳ nó luôn dừng ở path nghiệm tốt nhất (nếu
có).
Giải thuật A*: Là giải thuật A với hàm heuristic H(n)luôn
luôn ≤ giá trị thực đi từ n đến goal.
Giải thuật A* là admissible
35. Các giải thuật khác
Tìm kiếm leo đồi (hill-climbing)
Ý 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.
36. Tìm kiếm leo đồi
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;
37.
38.
39. Thuật toán nhánh – cận
Sử dụng thuật toán leo đồi với hàm đánh giá f(u)
Trong thuật toán này, tại mỗi bước khi phát triển trạng thái
u, ta sẽ chọn trạng thái tốt nhất v (f(v) nhỏ nhất) trong số
các trạng thái kề u để phát triển trạng thái tiếp theo.
Đi xuống cho tới khi gặp v là đích, hoặc v không có đỉnh
kề, hoặc gặp v mà f(v) lớn hơn đường đi tối ưu tạm thời.
Trong trường hợp này không phát triển đỉnh v nữa, mà quay
lên cha của v để tiếp tục đi xuống những trạng thái tốt nhất
còn lại chưa xét.
40. Thuật toán nhánh – cận (tt)
Procedure Branch_and_Bound_search;
Begin
1. Khởi tạo danh sách L chỉ chứa trạng thái đầu;
Gán giá trị ban đầu cho cost;
2. Loop do
2.1 If L rỗng then {thông báo thất bại; stop};
2.2 Lấy trạng thái u ở đầu danh sách L;
2.3 If u là trạng thái kết thúc then
if g(u) ≤ y then {y ← g(y); Quay lại 2.1};
2.4 If f(u) > y then Quay lại 2.1
41. 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.5 Sắp xếp L1 theo thứ tự tăng dần của hàm đánh giá;
2.6 Chuyển L1 vào đầu danh sách L sao cho trạng thái tốt nhất ở
đầu L1 ở đầu danh sách L;
End;
42. Ví dụ: cho không gian trạng thái với hàm đánh giá :