You are on page 1of 36

Trí tuệ nhân tạo

GV: Nguyễn Thị Như Email: nhunthp@gmail.com

Chương 2. Các chiến lược tìm kiếm mù
I. Biểu diễn vấn đề trong không gian trạng thái (KGTT) - Vấn đề là gì? - Một bài toán nào đó cần giải quyết, chẳng hạn như một trò chơi, c.minh một định lý,… - Một lớp rộng các bài toán có thể giải quyết bằng cách biểu diễn bởi các trạng thái và các tóan tử (phép biến đổi trạng thái).

I. Biểu diễn vấn đề trong không gian trạng thái
Ví dụ: Trò chơi cờ ta canh

Biểu diễn vấn đề trong không gian trạng thái Định nghĩa • KGTT là một bộ bốn (X. G là tập trạng thái đích. G). u0.I. gồm các phép biến đổi. . F. trong đó: X là tập các trạng thái u0 là trạng thái bắt đầu F là tập các toán tử.

I. Biểu diễn vấn đề trong không gian trạng thái KGTT của trò chơi 8 số sinh ra bằng phép “di chuyển ô trống” .

• Trạng thái đích của một bài toán có thể nhiều hơn một • Toán tử là một phép biển đổi hợp lệ chuyển từ trạng thái này sang trạng thái khác. từ trạng thái ban đầu. Biểu diễn vấn đề trong không gian trạng thái Các thành phần của KGTT • Sự sắp xếp các số tại mỗi thời điểm là một trạng thái • Hình bên trái là trạng thái ban đầu. • Bằng các tóan tử. • Hình bên phải là trạng thái kết thúc hay trạng thái đích (goal).I. tiếp .

mỗi cung là một toán tử. • Nghiệm của bài toán nếu như ta tìm được đường đi từ trạng thái bắt đầu đến một trong các trạng thái đích.I. Biểu diễn vấn đề trong không gian trạng thái Biểu diễn KGTT • Không gian trạng thái có thể biểu diễn bằng đồ thị có hướng: mỗi đỉnh là một trạng thái. .

. việc chọn trạng thái nào để tiếp tục mở rộng được gọi là chiến lược tìm kiếm. từ một trạng thái nào đó chưa phải là trạng thái đích. • Để được lời giải.II. • Tập các trạng thái được mở rộng sẽ có nhiều phần tử. kiểm tra cho đến khi tìm được trạng thái đích hoặc không mở rộng được KGTT. Chiến lược tìm kiếm? • Khi tìm kiếm lời giải. mở rộng. ta dựa theo toán tử sinh ra tập các trạng thái mới: mở rộng. ta phải liên tục chọn trạng thái mới.

. .Tính tối ưu: tốt hơn so với một số chiến lược khác hay không.Độ phức tạp thời gian: mất thời gian bao lâu để tìm được lời giải.Độ phức tạp không gian: tốn bao nhiêu đơn vị bộ nhớ để tìm được lời giải.Tính đầy đủ: chiến lược phải đảm bảo tìm được lời giải nếu có.II. . Chiến lược tìm kiếm? Đánh giá chiến lược tìm kiếm . .

• Đây là cơ sở để chúng ta cải tiến và thu được những chiến lược hiệu quả hơn. • Phát triển từ giải thuật quay lui (back tracking) • Nói chung tìm kiếm mù sẽ không hiệu quả. .III. Các chiến lược tìm kiếm mù Tìm kiếm mù? • Trạng thái được chọn để phát triển chỉ đơn thuần dựa theo cấu trúc của KGTT mà không có thông tin hướng dẫn nào khác.

Tìm kiếm mù theo chiều rộng (Breath first search) • Trạng thái được ưu tiên phát triển là trạng thái được sinh ra trước.III. • Dùng danh sách open chứa các trạng thái sinh ra đang chờ phát triển • Danh sách closed chứa các trạng thái đã được khảo sát. . Các chiến lược tìm kiếm mù 1.

1. Tìm kiếm theo chiều rộng Thuật toán procedure bfs. closed:=[]. begin open:=[start]. gọi nó là u if (u là một đích) then thông báo kết quả. thoát else begin Đưa u vào closed Phát sinh các con v của u Loại các con đã có trong open+closed Đưa các con còn lại vào bên phải open (1) end . while open<>[] do begin loại tt ngoài cùng bên trái của open.

6.C.A] Open = [D. 4. (vì L đã có trong open).M].G.B.G.D. 3.A] .I.K.A] Open = [E.C. closed = [C.1.D.H.H.I.K.H. closed = [D.C. closed = [F.F.F].H]. closed = [A] Open = [C.E. Tìm kiếm theo chiều rộng 1. closed = [B.E.B.A] Open = [F.E.J. 2.C.D].F.I. 7.G.J]. Open = [A]. closed = [] Open = [B.B.L].J.B.A] Open = [G. closed = [E. 5.L.D.

. • Danh sách open bổ sung phần tử bên phải. • Nếu vô nghiệm và KGTT hữu hạn thì thuật toán sẽ dừng và thông báo vô nghiệm. Tìm kiếm theo chiều rộng Nhận xét • Các trạng thái con phát sinh nhờ các toán tử hợp lệ. • Thuật tóan khảo sát tất cả các nút ở độ sâu d sau đó mới đến mức d+1 nên chắc chắn tìm được nghiệm.1. lấy phần tử bên trái.

gọi là nhân tố nhánh. • Giả sử đường đi nghiệm có độ dài d. . b . Tìm kiếm theo chiều rộng Đánh giá • Giả sử mỗi trạng thái trung bình sinh ra b trạng thái con (kề). Tình trạng xấu nhất phải khảo sát là ? • Độ phức tạp thời gian là O(b^d).1. độ phức tạp không gian cũng là O(b^d).

các nút mới được sinh ra chờ xử lý phải được bỏ bên trái của hàng đợi open (tại câu lệnh 1).2. . • Khi nào không mở rộng được nữa thì mới quay lại nút ở độ sâu thấp hơn. • Do đó. Tìm kiếm theo chiều sâu (Depth First Search) Đánh giá • Mở rộng nút có độ sâu hơn trước các nút khác đang chờ xử lý.

begin open:=[start]. Tìm kiếm theo chiều sâu Thuật toán procedure bfs. closed:=[].2. thoát else begin Đưa u vào closed Phát sinh các con v của u Loại các con đã có trong open+closed Đưa các con còn lại vào bên trái open (1) end end . while open<>[] do begin loại tt u ngoài cùng bên trái của open if (u là một đích) then thông báo kết quả.

K.C.E. Open = [A].S. Open = [T.C.F.F.L.E.D]. Open = [S. closed = [S.C. Open = [E.2.D].F.A] 8.D]. Open = [L.K.C. closed = [] 2.C. closed = .F.L.A] 5.B.D].D].B. Tìm kiếm theo chiều sâu 1. closed = [A] 3.C.B.A] 6.B. closed = [K.closed = [B. Open = [F. closed = [E. closed = [L.A] 4. Open = [K.D].C. Open = [B.F.E.A] 7.D].

• Độ phức tạp không gian là O(bd) • Cơ hội để tìm thấy đích nhanh hơn nếu nó nằm ở phần KGTT bên trái. . • Độ phức tạp thời gian của DFS vẫn là O(b^d) vì trong trường hợp xấu nhất các nút được khảo sát vẫn như BFS.2. Tìm kiếm theo chiều sâu Nhận xét • Khảo sát nút ở độ sâu d thì DFS lưu trữ b*d nút. khi đó BFS phải lưu trữ b^d nút.

Tìm kiếm theo chiều sâu Hạn chế • Bỏ qua cơ hội tìm thấy ngay trạng thái đích khi trạng thái này nằm gần gốc.2. Không nên sử dụng khi KGTT có độ sâu lớn hoặc vô hạn. . • DFS là chiến lược không đầy đủ. • Nghiệm nói chung không phải là đường đi ngắn nhất. không tối ưu. • Nếu KGTT vô hạn có thể không tìm được trạng thái đích.

Câu hỏi So sánh tìm kiếm sâu và rộng? .

• Sử dụng thông tin của trạng thái kết hợp với nhận xét dựa theo kinh nghiệm để cải tiến là quan điểm chung của các chiến lược tìm kiếm kinh nghiệm. Các chiến lược tìm kiếm kinh nghiệm Nguyên nhân • Các chiến lược tìm kiếm mù kém hiệu quả và không thể áp dụng được trong nhiều trường hợp.Chương 3. .

Hàm đánh giá .1.

có thể ước lượng được g.1. nhờ kinh nghiệm trong nhiều bài toán cụ thể. Kí hiệu là h(x). . nếu tính được nghĩa là đã tìm được lời giải! • Tuy nhiên. Hàm đánh giá Khái niệm • Hàm đánh giá là một hàm ước lượng khả năng về đích của mỗi trạng thái. x: giá trị đánh giá (h là viết tắt của heuristic) • Chỉ là ước lượng vì nói chung chúng ta không thể tính toán chính xác khả năng này.trị này.

số này càng nhỏ thì trạng thái đó càng có khả năng về đích • Có thể dùng số này làm giá trị cho hàm đánh giá. . Hàm đánh giá Ví dụ • Nếu đếm các số sai vị trí của một trạng thái so với trạng thái đích thì B là 3 và C là 1. • Như vậy.1.

Mỗi u ta có một giá trị ước lượng là h(u) h(B)=3. Giá trị hàm càng nhỏ thì khả năng về đích của trạng thái càng lớn. . nếu u là trạng thái đích thì h(u)=0. h(C)=1 Hàm đánh giá còn được gọi là hàm heuristic.1. Dễ thấy. Hàm đánh giá Hình thức hóa • • • • Trong đó X là KGTTcủa bài toán.

1. h(E) . Hàm đánh giá Tính h(D).

ta có thể xây dựng hàm h bằng tổng khoảng cách phải di chuyển của các ô sai vị trí. . Hàm đánh giá • h(D)=h(E)=2 • Về mặt đường đi qua các ô ngang dọc để di chuyển về đúng vị trí thì (D) phải di chuyển đọan đường xa hơn (E) nên có thể là (D) không tốt bằng (E).1. • Theo nhận xét này.

Các bước xây dựng + Biểu diễn bài toán bằng một KGTT thích hợp + Xây dựng hàm đánh giá + Thiết kế chiến lược chọn trạng thái .

• Nếu chỉ chọn một trạng thái tốt hơn: leo đồi đơn giản. trạng thái tốt nhất: leo đồi dốc đứng. • Sử dụng hàm h để biết trạng thái nào tốt hơn.HCS) • Chọn một trạng thái tốt hơn trạng thái đang khảo sát để phát triển.thái được chọn nếu có. leo đồi không lưu tất cả các con mà chỉ lưu đúng một t. .2. • Khác với tìm kiếm sâu. Các chiến lược tìm kiếm kinh nghiệm Tìm kiếm leo đồi (Hill climbing search . Nếu không có thuật tóan phải dừng.

closed:=[].HCS) • Thuật toán procedure hcs(start). begin open:=[start]. thoát else begin Đưa u vào closed Phát sinh các con v của u Loại các con đã có trong open+closed Chọn con tốt nhất và hơn u đưa vào bên trái open end end Thông báo thất bại . while open<>[] do begin loại tt ngoài cùng bên trái của open.2. Các chiến lược tìm kiếm kinh nghiệm Tìm kiếm leo đồi (Hill climbing search . gọi nó là u if (u là một đích) then thông báo kết quả.

HCS) u nhược điểm: Nhanh. Các chiến lược tìm kiếm kinh nghiệm ìm kiếm leo đồi (Hill climbing search .2. có thể thất bại iệu quả: nếu có một hàm đánh giá tốt ế tắc: khi gặp cực đại địa phương hoặc bình nguyên .

chiến lược này có thể lui ra được mà không bị bế tắc. • Best-FS “cẩn thận” hơn ghi nhớ lại các một số . Các chiến lược tìm kiếm kinh nghiệm Tìm kiếm tốt nhất (Best First Search) • Chọn trạng thái tốt nhất trong open để phát triển. • Lưu trữ tất cả các trạng thái anh em nên khi đi vào ngõ cụt. kể cả trạng thái này không tốt bằng trạng thái đã sinh ra nó.2.

closed:={ }. gọi nó là u if (u là một đích) then thông báo thắng lợi. thoát else begin Đưa u vào closed Phát sinh các con v của u Loại các con v đã có mặt trong open + closed Đưa các con còn lại vào open Sắp xếp open sao cho phần tử tốt nhất nằm bên trái end . while open<>{ } do begin loại trạng thái ngoài cùng bên trái của open. begin open:={u0}.2. Các chiến lược tìm kiếm kinh nghiệm Tìm kiếm tốt nhất (Best First Search) Thuật toán procedure Best_FS.

3. closed = [A5] Đánh giá B4. tìm được lời giải! . open = [O2.Tìm kiếm tốt nhất (Best First Search) 1. open = [C4. 6.D6].E5.A5] Đánh giá O2.F5.D6].D6].G4.D6]. 5. open = [H3. closed = [C4.F5.H3. closed = [H3. 2.B4.E5.C4.E5. closed = [B4.B4.A5] Đánh giá H3.E5. closed = [O2. open = [A5].B4. open = [P3. closed = [] Đánh giá A5.G4.D6].F5. 4.F5.A5] Đánh giá P3.G4. open = [B4.A5] Đánh giá C4.C4.P3. 7.C4.

2. . để có được kết quả là đường đi nghiệm chúng ta phải lưu ý thêm về việc lưu giữ các trạng thái cha để truy lại vết của đường đi này. Các chiến lược tìm kiếm kinh nghiệm Chú ý Một cách đầy đủ.