You are on page 1of 30

Ref: http://www.cs.cmu.

edu/~awm/tutorials

TRÍ TUỆ NHÂN TẠO


Tìm kiếm có thông tin heuristic, A*
Nội dung trình bày
2

 Tìm kiếm có thông tin heuristic tốt nhất


 Những ñiểm không thích hợp của tìm kiếm tốt nhất
 Mẹo: tính luôn chi phí ñi ñến trạng thái hiện tại.
 Việc tìm kiếm kết thúc khi nào?
 Heuristic chấp nhận ñược
 Tìm kiếm A* là ñầy ñủ
 Tìm kiếm A* luôn dừng
 Khuyết ñiểm của A*
 Tiết kiệm nhiều bộ nhớ với IDA* (Iterative Deepening A*)
Tìm kiếm với thông tin heuristic
3

Các phương pháp tìm kiếm mù (blind search):


thông tin về trạng thái ñích không ñóng vai trò
trong việc tìm kiếm.
S Nên ñi
ñường nào?

a b c

Có thể sử dụng ước lượng khoảng cách ñến ñích


giữa các trạng thái ñể tìm ñường ñi?
Tìm kiếm với thông tin heuristic (tt)
4

Giả sử ngoài việc ñặc tả tìm kiếm chuẩn ta cũng có một


heuristic.
Một hàm heuristic ánh xạ một trạng thái
thành một ước lượng về chi phí ñến
ñích từ trạng thái ñó.
Bạn có thể nghĩ ra ví dụ về heuristics?
VD. ñối với bài toán 8-puzzle?
VD. ñể lập ñường ñi trong ma trận?

Ký hiệu heuristic bằng một hàm h(s)


Heuristic theo Khoảng cách Euclide
5

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9
Tìm kiếm với thông tin heuristic tốt nhất
(Best-first)
6

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9
Tìm kiếm tốt nhất (tt)
7

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9

PQ = {(Start,12)}
Tìm kiếm tốt nhất (tt)
8

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9

PQ = {(e,4),(d,8),(p,11)}
Tìm kiếm tốt nhất (tt)
9

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9

PQ = {(h,6),(r,6),(d,8),(p,11)}
Tìm kiếm tốt nhất (tt)
10

a GOAL
2 2
h=0
h=8 c
b 2
5
1 8 h=5 h=4
h=11
2 e
3 d
f
h=8 9 1 9
h=4
START
h
1 4 h=6 5
h=12
4 3
p 15 r
q
h=11 h=6
h=9

PQ = {(r,6),(d,8),(q,9),(p,11)}
Heuristic trong bài toán 8-puzzle
11

 Theo số ô nằm sai vị trí

1 5 1 2 3
2 6 3 h=6 4 5 6
7 4 8 7 8
A* dừng khi nào?
17

Ý tưởng: Ngay khi nó phát sinh ñược trạng thái ñích?


Xem ví dụ sau:
1
1 S h=3
B 1
h=7 h=8
A h=2 C

7 D 1
h=1

7
G h=0
Thuật toán tìm kiếm tốt nhất
13

Init-PriQueue(PQ)
Insert-PriQueue(PQ,START,h(START))
while (PQ khác rỗng và PQ không chứa trạng thái ñích)
(s , h ) := Pop-least(PQ)
Với mỗi s’ trong succs(s)
Nếu s’ không có trong PQ và s’ chưa ñược viếng trước ñó bao
giờ
Insert-PriQueue(PQ,s’,h(s’))
Thuật toán ðủ Tối ưu Thời gian Không gian
Best First
BestFS
Search
C K O(min(N,BLMAX)) O(min(N,BLMAX))

Một vài cải tiến của thuật toán này có thể làm cho mọi việc
tốt ñẹp hơn. Nó là thứ mà chúng ta gọi là: A*….

* Việc sử dụng heuristic làm thay ñổi B


Thuật toán A*
21

 Priority queue PQ ban ñầu rộng.


 V (= tập các (bộ ba (state,f,backpointer)) ñã thăm trước ñó bắt ñầu là
rỗng.
 ðặt S vào PQ và V với ñộ ưu tiên f(s) = g(s) + h(s)
 PQ rỗng?
 Có? Không có lời giải.
 Không? Loại bỏ node với f(n) thấp nhất khỏi queue. Gọi nó
là n.
 Nếu n là một ñích, dừng và báo thành công.
 “Mở” n : Với mỗi n' trong succs(n)
 ðặt f’ = g(n') + h(n') = g(n) + cost(n,n') + h(n')
 Nễu n' chưa thấy trước ñó, hay n' ñã mở với f(n')>f’, hay n'
hiện trong PQ với f(n')>f’
 Thì ðặt/Cập nhật n' trong PQ với ñộ ưu tiên f’ và cập nhật V
ñể bao gồm (state=n', f ’, BackPtr=n).
 Ngược lại bỏ qua n'
A* - Ý tưởng Cơ bản
15

 Best-first: Khi bạn mở một node n, lấy node con n' và


ñặt nó vào PriQueue với ñộ ưu tiên h(n')

 A*: Khi bạn mở một node n, lấy node con n' và ñặt nó
vào PriQueue với ñộ ưu tiên

(Chi phí ñi ñến n') + h(n') (1)

ðặt g(n) = Chi phí ñi ñến n (2)

và ñịnh nghĩa…

f(n) = g(n) + h(n) (3)


A* không ngớ ngẩn!
16

2 1 1 2
S A B C G

h=4 h=3 h=2 h=1 h=0


A* dừng khi nào?
17

Ý tưởng: Ngay khi nó phát sinh ñược trạng thái ñích?


Xem ví dụ sau:
1
1 S h=3
B 1
h=7 h=8
A h=2 C

7 D 1
h=1

7
G h=0
Quy tắc Dừng A* ðúng ðắn:
18

A* Dừng Chỉ Khi một Trạng Thái ðích ðược Lấy ra


khởi Priority Queue
1
1 S h=3
B 1
h=7 h=8
A h=2 C

7 D 1
h=1

7
G h=0
Các trạng thái quay lại A*
19

Một câu hỏi khác: ðiều gì xảy ra nếu A* quay lại một trạng
thái ñã mở, và tìm ñược một ñường ngắn hơn?

1
1 S h=3
B 1
h=7 h=8
A C h=2

1/2 D 1
h=1
Trong ví dụ này một trạng
thái ñã mở ñược mở lại. 7
Như thế nào và tại sao ? G
Các trạng thái quay lại A*
20

ðiều gì nếu A* thăm một trạng thái ñã có trong hàng ñợi?

h=8
1
1 S h=3
B 1
h=7
A C h=8

1/2 D 1
h=1
Trong ví dụ này một trạng thái ñã
có trong hàng ñợi và ñang ñợi mở lưu ý rằng giá trị
G 7 h này ñã thay
có ñộ ưu tiên tăng vọt lên. Như
thế nào và tại sao? ñổi so với trang
trước.
Thuật toán A*
21

 Priority queue PQ ban ñầu rộng.


 V (= tập các (bộ ba (state,f,backpointer)) ñã thăm trước ñó bắt ñầu là
rỗng.
 ðặt S vào PQ và V với ñộ ưu tiên f(s) = g(s) + h(s)
 PQ rỗng?
 Có? Không có lời giải.
 Không? Loại bỏ node với f(n) thấp nhất khỏi queue. Gọi nó
là n.
 Nếu n là một ñích, dừng và báo thành công.
 “Mở” n : Với mỗi n' trong succs(n)
 ðặt f’ = g(n') + h(n') = g(n) + cost(n,n') + h(n')
 Nễu n' chưa thấy trước ñó, hay n' ñã mở với f(n')>f’, hay n'
hiện trong PQ với f(n')>f’
 Thì ðặt/Cập nhật n' trong PQ với ñộ ưu tiên f’ và cập nhật V
ñể bao gồm (state=n', f ’, BackPtr=n).
 Ngược lại bỏ qua n'
A* Có Bảo ñảm Tìm thấy ðường ñi Tối
ưu?
22

1 A
1
h=6

h=0
S h=7
G

Không. Và ví dụ sau cho thấy tại sao.


Heuristic chấp nhận ñược
23

 ðặt h*(n) = chi phí tối thiểu thấp nhất từ n ñến


ñích.
 Một heuristic h là chấp nhận ñược nếu
h(n) <= h*(n) với mọi trạng thái n.
 Một heuristic chấp nhận ñược ñảm bảo không
bao giờ ước tính quá chi phí ñến ñích.
 Một heuristic chấp nhận ñược là tối ưu.
Ví dụ 8-Puzzle
24

Trạng thái 1 5 Trạng thái 1 2 3


ví dụ ñích
2 6 3 4 5 6
7 4 8 7 8
Heuristics nào sau ñây là chấp nhận ñược?
• h(n) = Số ô nằm sai vị trí trong
trạng thái n
• h(n) = 0 • h(n) = min (2, h*(n))
• h(n) = Tổng khoảng cách • h(n) = h*(n)
Manhattan giữa mỗi ô so với vị trí • h(n) = max (2,
ñích h*(n))
• h(n) = 1
A* với heuristic chấp nhận ñược bảo
ñảm ñường ñi tối ưu
25

 Chứng minh ñơn giản


 (Bạn có thể tự chứng minh…?)
So sánh Lặp Sâu dần với A*
26

Trong sách của Russell and Norvig, trang 107, Hình4.8

Với 8-puzzle, số trạng thái ñược


mở trung bình trong 100 bài toán
ñược chọn ngẫu nhiên trong ñó
ñường ñi tối ưu dài…
…4 bước …8 bước …12 bước

Lặp Sâu dần 112 6,300 3.6 x 106


Tìm kiếm A* dùng “số ô sai vị 13 39 227
trí” làm heuristic
A* dùng “Tổng khoảng cách 12 25 73
Manhattan” làm heuristic
A* : Khuyết ñiểm
27

 A* có thể dùng nhiều bộ nhớ.


Trên lý thuyết:
O(số trạng thái)
 Với không gian tìm kiếm thực
sự lớn, A* sẽ dùng hết bộ nhớ.
IDA* : Tìm kiếm Với Bộ nhớ Giới hạn
28

 A* lặp với ñộ sâu tăng dần. Thật sự, rất khác so với A*. Giả sử chi
phí là số nguyên.
1. Thực hiện lặp-không dùng DFS, không mở rộng node nào có
f(n) > 0. Có tìm thấy ñích? Nếu có, dừng.
2. Thực hiện lặp-không dùng DFS, không mở rộng node nào có
f(n) > 1. Có tìm thấy ñích? Nếu có, dừng.
3. Thực hiện lặp-không dùng DFS, không mở rộng node nào có
f(n) > 2. Có tìm thấy ñích? Nếu có, dừng.
4. Thực hiện lặp-không dùng DFS, không mở rộng node nào có
f(n) > 3. Có tìm thấy ñích? Nếu có, dừng.
…lặp lại ñiều này, tăng ngưỡng f(n) lên một 1 mỗi lần, cho
ñến khi dừng.
 Cái này
 ðầy ñủ
 Bảo ñảm tìm ñược lời giải tối ưu
 Nói chung tốn chi phí nhiều hơn A*.
ðiều cần nắm
29

 Hiểu thấu ñáo A*.


 Có thể chạy tay các ví dụ thực thi A*

ñơn giản.
 Hiểu ñược “tính chấp nhận ñược” của
heuristics. Chứng minh tính ñầy ñủ,
bảo ñảm tính tối ưu của ñường ñi.
 Có thể nhận xét về các ñánh giá.
Thắc mắc
30