Bài giảng Kỹ thuật lập trình - Chương 3: Kỹ thuật tìm kiếm

Nội dung

 Biểu diễn bài toán trong Không Gian Trạng Thái

 Các chiến lược tìm kiếm

– Tìm kiếm mù

– Tìm kiếm kinh nghiệm (heuristic).

 Tìm kiếm trên không gian trạng thái:

– Tìm kiếm theo chiều rộng (breath – first search)

– Tìm kiếm theo chiều sâu (depth – first search)

– Tìm kiếm sâu bằng cách đào sâu nhiều lần (depth – first

search with iterative deepening)

 Sử dụng không gian trạng thái để biễu diễn suy luận

với phép tính vị từ: Đồ thị Và/Hoặc (And/Or Graph)

pdf 32 trang yennguyen 5060
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 3: Kỹ thuật tìm kiếm", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật lập trình - Chương 3: Kỹ thuật tìm kiếm

Bài giảng Kỹ thuật lập trình - Chương 3: Kỹ thuật tìm kiếm
TTNT. p.1
CHƯƠNG 3: KỸ 
THUẬT TÌM KIẾM:
Lec 3
Giải quyết vấn đề bằng 
tìm kiếm: tìm kiếm mù 
TTNT. p.2
Nội dung
 Biểu diễn bài toán trong Không Gian Trạng Thái
 Các chiến lược tìm kiếm 
– Tìm kiếm mù
– Tìm kiếm kinh nghiệm (heuristic).
 Tìm kiếm trên không gian trạng thái: 
– Tìm kiếm theo chiều rộng (breath – first search)
– Tìm kiếm theo chiều sâu (depth – first search)
– Tìm kiếm sâu bằng cách đào sâu nhiều lần (depth – first 
search with iterative deepening)
 Sử dụng không gian trạng thái để biễu diễn suy luận 
với phép tính vị từ: Đồ thị Và/Hoặc (And/Or Graph)
TTNT. p.3
Giải quyết vấn đề bằng tìm kiếm 
 Khi biểu diễn một vấn đề như là một đồ thị không gian 
trạng thái, chúng ta có thể sử dụng lý thuyết đồ thị để 
phân tích cấu trúc và độ phức tạp của các vấn đề cũng 
như các thủ tục tìm kiếm.
5 6
Riverbank1
Riverbank 2
Island1 Island 2
1
2 3
4
7
Hệ thống cầu thành phố Konigsberg và biểu diễn đồ thị tương ứng
i1 
i2 
rb1 
rb2 
b2 
b3 
b1 
b6 
b5 b7 
b4 
TTNT. p.4
Bài toán tìm kiếm
 Tìm kiếm: là tìm một đối tượng thoả mãn một số đòi hỏi 
nào đó, trong một tập hợp rộng lớn các đối tượng
 Các kỹ thuật tìm kiếm đuợc áp dụng rộng rãi trong lĩnh 
vực TTNT :
– Tìm kiếm mù : không có hiểu biết gì về các đối tượng để 
hướng dẫn tìm kiếm
– Tìm kiếm kinh nghiệm (heuristic) : dựa vào kinh nghiệm và 
hiểu biết về vấn đề cần giải quyết để xây dựng hàm đánh giá 
hướng dẫn sự tìm kiếm.
• Tìm kiếm tối ưu
• Tìm kiếm có đối thủ : tìm kiếm nước đi trong các trò chơi hai người (cờ 
vua, cờ tướng,...)
TTNT. p.5
Không gian trạng thái 
 Không gian tìm kiếm : bao gồm tất cả các đối tượng mà ta cần quan tâm tìm 
kiếm (có thể là không gian liên tục (không gian các véc tơ thực n chiều) hoạc 
không gian các đối tượng rời rạc.
 Toán tử : mô tả hành động hoặc phép biến đổi để đưa một trạng thái tới trạng 
thái khác
Ví dụ : Bài toán tìm đường đi : các con đường nối các thành phố sẽ được biểu 
diễn bởi các toán tử --->Giải bài toán bằng tìm một dãy các toán tử để đưa 
trạng thái ban đầu (điểm xuất phát) về trạng thái kết thúc (điểm đích)
 Biểu diễn một bài toán trong không gian trạng thái, cần xác định các yếu tố :
+ Trạng thái ban đầu
+ Một tập hợp các toán tử
+ Một tập hợp các trạng thái kết thúc (trạng thái đích).
 Không gian trạng thái có thể được biểu diễn bởi một đồ thị có hướng: mỗi đỉnh 
của đồ thị tương đương với một trạng thái, nếu toán tử R biến đổi trạng thái u 
thành trạng thái v thì cung (u,v) được gán nhãn R
TTNT. p.6
Một phần KGTT triển khai 
trong Tic-tac-toe
Đồ thị có hướng không 
lặp (directed acyclic 
graph - DAG) 
TTNT. p.7
Trò đố 8 ô hay 15 ô
Trạng thái ban đầu Trạng thái đích
 Trò đố
15 ô
 Trò đố
8 ô
 Cần biểu diễn KGTT cho bài toán này như thế 
nào?
1 2 3 4
12 13 14 5
11 15 6
10 9 8 7
1 2 3
8 4
7 6 5
11 14 4 7
10 6 5
1 2 13 15
9 12 8 3
2 8
3 5 7
6 2 1
TTNT. p.8
KGTT của 8-puzzle sinh ra bằng phép 
“di chuyển ô trống”
Có khả năng xảy ra 
vòng lặp không?
TTNT. p.9
Một ví dụ của bài toán TSP
 Cần biểu diễn KGTT cho bài toán này như thế 
nào?
TTNT. p.10
KGTT của bài toán TSP
Mỗi cung được 
đánh dấu bằng 
tổng giá của con 
đường từ nút bắt 
đầu đến nút hiện 
tại.
TTNT. p.11
Cây tìm kiếm
 Quá trình tìm kiếm được xem như quá trình xây 
dựng cây tìm kiếm.
 Cây tìm kiếm: 
– Gốc = trạng thái ban đầu
– Đỉnh = trạng thái của không gian trạng thái
A
I
D
C
F
K
E
G
B
Đồ thị không gian trạng thái
A
B
I G
G K
C
E
G
F
K E F
KKG
C
K
F
D
Cây tìm kiếm
TTNT. p.12
Các chiến lược tìm kiếm
 Tìm kiếm mù: không có sự hướng dẫn nào cho 
tìm kiếm, chỉ phát triển các trạng thái ban đầu 
cho tới khi gặp một trạng thái đích nào đó.
 Tìm kiếm kinh nghiệm (heuristic): tìm kiếm dựa 
vào hiểu biết về các vấn đề, dựa vào kinh 
nghiệm, trực giác để đánh giá các trạng thái
TTNT. p.13
Tìm kiếm theo bề rộng
 Trạng thái chọn để phát triển là trạng thái được sinh ra trước các 
trạng thái chờ phát triển khác
 Thuật toán:
Procedure Breadth_first_Search;
begin
1. Khởi tạo dsách L chỉ chứa trạng thái ban đầu;
2. Loop do
2.1 if L rỗng then {thông báo tìm kiếm thất bại; stop};
2.2 Loại 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 tìm kiếm thành công; stop};
2.4 for mỗi trạng thái v kề u do
{Đặt v vào cuối danh sách L;
father(v)  u};
end;
TTNT. p.14
Đánh giá thuật toán
 Danh sách L được xử lý như hàng đợi
 Nếu bài toán có nghiệm (tồn tại đường đi từ trạng 
thái ban đầu tới trạng thái đích) thì thuật toán sẽ 
tìm ra nghiệm và đường đi là ngắn nhất.
 Nếu bài toán vô nghiệm, không gian trạng thái hữu 
hạn, thuật toán dừng và thông báo vô nghiệm.
 Gọi b là nhân tố nhánh, nghiệm của bài toán là 
đường đi có độ dài d, độ phức tạp O(bd).
TTNT. p.15
Tìm kiếm theo độ sâu
 Trạng thái chọn phát triển là trạng thái được sinh ra sau cùng.
 Thuật toán:
Procedure Depth_first_Search;
begin
1. Khởi tạo dsách L chỉ chứa trạng thái ban đầu;
2. Loop do
2.1 if L rỗng then {thông báo tìm kiếm thất bại; stop};
2.2 Loại 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 tìm kiếm thành công; stop};
2.4 for mỗi trạng thái v kề u do
{Đặt v vào đầu danh sách L;
father(v)  u};
end;
TTNT. p.16
Đánh giá thuật toán
 Nếu bài toán có nghiệm, không gian trạng thái 
hữu hạn thì thuật toán sẽ tìm ra nghiệm. Nếu 
không gian trạng thái vô hạn thì có thể không tìm 
ra nghiệm không nên dùng thuật toán này với 
bài toán có cây tìm kiếm chứa các nhánh vô hạn.
 Nghiệm bài toán là đường đi có độ dài d, cây tìm 
kiếm có nhân tố nhánh b, độ phức tạp trong 
trương hợp tồi nhất O(bd), độ phức tạp không 
gian là O(db).
TTNT. p.17
Các chiến lược cho TK-KGTT
 TK hướng từ dữ liệu (Data-driven Search)
– Suy diễn tiến (forward chaining)
 TK hướng từ mục tiêu (Goal-driven Search)
– Suy diễn lùi (backward chaining)
TTNT. p.18
TK hướng từ dữ liệu
 Việc tìm kiếm đi từ 
dữ liệu đến mục tiêu
 Thích hợp khi:
– Tất cả hoặc một phần dữ liệu được cho từ đầu.
– Có nhiều mục tiêu, nhưng chỉ có một số ít các phép toán có thể 
áp dụng cho một trạng thái bài toán. 
– Rất khó đưa ra một mục tiêu hoặc giả thuyết ngay lúc đầu.
TTNT. p.19
TK hướng từ mục tiêu
 Việc tìm kiếm đi từ 
mục tiêu trở về 
dữ liệu.
 Thích hợp khi:
– Có thể đưa ra mục tiêu hoặc giả thuyết ngay lúc đầu.
– Có nhiều phép toán có thể áp dụng trên 1 trạng thái của bài 
toán => sự bùng nổ số lượng các trạng thái. 
– Các dữ liệu của bài toán không được cho trước, nhưng hệ 
thống phải đạt được trong quá trình tìm kiếm.
TTNT. p.20
Các phương pháp tìm kiếm trên đồ thị 
KGTT:
Phát triển từ giải thuật quay lui (back –
tracking):
 Tìm kiếm rộng (breath-first search)
 Tìm kiếm sâu (depth-first search)
 TK sâu bằng cách đào sâu nhiều lần (depth-first 
search with iterative deepening)
TTNT. p.21
Tìm kiếm theo chiều rộng
1. Open = [A]; closed = []
2. Open = [B,C,D]; 
closed = [A]
2. Open = [C,D,E,F];
closed = [B,A]
3. Open = [D,E,F,G,H];
closed = [C,B,A]
4. Open = [E,F,G,H,I,J];
closed = [D,C,B,A]
5. Open = [F,G,H,I,J,K,L]; 
closed = [E,D,C,B,A]
6. Open = [G,H,I,J,K,L,M];
(vì L đã có trong open);
closed = [F,E,D,C,B,A]
TTNT. p.22
Tìm kiếm theo chiều sâu
1. Open = [A]; closed = []
2. Open = [B,C,D]; closed = [A]
3. Open = [E,F,C,D];closed = [B,A]
4. Open = [K,L,F,C,D];
closed = [E,B,A]
5. Open = [S,L,F,C,D];
closed = [K,E,B,A]
6. Open = [L,F,C,D]; 
closed = [S,K,E,B,A]
7. Open = [T,F,C,D];
closed = [L,S,K,E,B,A]
8. Open = [F,C,D]; 
closed = [T,L,S,K,E,B,A]
9. 
TTNT. p.23
Tìm kiếm Sâu hay Rộng? (1)
 Có cần thiết tìm một đường đi ngắn nhất đến 
mục tiêu hay không?
 Sự phân nhánh của không gian trạng thái
 Tài nguyên về không gian và thời gian sẵn có
 Khoảng cách trung bình của đường dẫn đến trạng 
thái mục tiêu.
 Yêu cầu đưa ra tất cả các lời giải hay chỉ là lời 
giải tìm được đầu tiên.
TTNT. p.24
Tìm kiếm sâu bằng cách đào sâu nhiều lần
(depth-first iterative deepening)
 Độ sâu giới hạn (depth bound): giải thuật TK sâu sẽ 
quay lui khi trạng thái đang xét đạt đến độ sâu giới hạn 
đã định.
 TK Sâu bằng cách đào sâu nhiều lần: TK sâu với 
độ sâu giới hạn là 1, nếu thất bại, nó sẽ lặp lại GT TK 
sâu với độ sâu là 2, GT tiếp tục cho đến khi tìm được 
mục tiêu, mỗi lần lặp lại tăng độ sâu lên 1.
 GT này có độ phức tạp về thời gian cùng bậc với 
TK Rộng và TK Sâu.
TTNT. p.25
Trò chơi ô đố 8-puzzle
T
he
 8
-p
uz
zl
e 
se
ar
ch
ed
 b
y 
a 
p
ro
du
ct
io
n 
sy
st
em
 w
it
h 
lo
op
 d
et
ec
ti
o
n 
an
d 
d
ep
th
 b
ou
nd
 5
TTNT. p.26
Đồ thị Và/Hoặc
 Sử dụng KGTT để biễu diễn suy luận với phép tính 
vị từ
 Là phương pháp qui bài toán về các bài toán con.
 Một tập hợp các mệnh đề / câu vị từ tạo thành một 
đồ thị Và/Hoặc (And/Or graph) hay siêu đồ thị 
(hypergraph).
 Trong đồ thị Và/Hoặc:
– Các nút AND biểu thị sự phân chia bài toán, tất cả các bài toán 
con phải được chứng minh là đúng.
– Các nút OR biểu thị các chiến lược giải quyết bài toán khác 
nhau, chỉ cần chứng minh một chiến lược đúng là đủ
 Có thể áp dụng TK theo kiểu hướng từ dữ liệu hay từ 
mục tiêu.
 Trong giải thuật cần ghi nhận diễn tiến của quá trình.
TTNT. p.27
Ví dụ Đồ thị Và/Hoặc
 Giả sử một tình huống với các mệnh đề sau:
a b c
ab d ac e
bd f f g
ae h
Hãy trả lời các câu hỏi sau:
1. h có đúng không?
2. h có cón đúng nêu b sai?
TTNT. p.28
Cây nghiệm
 Gốc của cây ứng với bài toán cần giải
 Các lá là các đỉnh kết thúc (ứng với các bài toán sơ cấp)
 Nếu u là đỉnh trong của cây, thì các đỉnh con của u là các 
đỉnh kề u theo một toán tử nào đó.
 Các đỉnh được gán nhãn giải được hoặc không giải được
– Đỉnh giải được:
• Đỉnh kết thúc
• Đỉnh không kết thúc nhưng có toán tử R sao cho tất cả các đỉnh kề của 
nó theo R đều giải được.
– Đỉnh không giải được:
• Đỉnh không kết thúc và không có đỉnh kề
• u không phải đỉnh kết thúc và mọi toán tử R áp dụng được tại u đều có 
đỉnh v kề u theo R không giải được.
TTNT. p.29
Tìm kiếm trên đồ thị VÀ/HOẶC
 Sử dụng kỹ thuật tìm kiếm theo chiều sâu để đánh dấu các đỉnh
 Function Solvable(u);
Begin
1. If u là đỉnh kết thúc then
{Solvable true; stop};
2. If u không là đỉnh kết thúc và không có đỉnh kề then
{Solvable false; stop};
3. For mỗi toán tử R áp dụng được tại u do
{OKtrue;
for mỗi v kề u theo R do
if Solvable(v) = false then
{OKfalse; exit};
if OK then
{Solvable(u)true; 
operator(u)R; stop}
}
4. Solvable(u)false;
End;
TTNT. p.30
Ví dụ: Hệ Tư Vấn Tài Chính
Đồ Thị And/Or 
biểu diễn phần 
KGTT đã duyệt 
qua để đi đến lời 
giải
TTNT. p.31
VÍ DỤ ĐỒ THỊ AND/OR:
Cho một bài toán được mô tả bằng 
các câu vị từ:
Hãy vẽ đồ thị AND/OR biểu diễn 
phần KGTK để trả lời câu hỏi: “Fred 
đang ở đâu?” (Áp dụng suy diễn lùi)
TTNT. p.32
Bài Tập Chương 3

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_chuong_3_ky_thuat_tim_kiem.pdf