BÁO CÁO BÀI TẬP LỚN MÔN HỌC NHẬP MÔN TRÍ TUỆ NHÂN TẠO Tên đề tài Các thuật toán tìm kiếm nâng cao Học viên thực hiện Trần Huy Hoàng Lê Văn Linh Thạch Xuân Bách Trần Văn Trung Nội dung thực hiện A Lý.
Trang 1Tên đề tài: Các thuật toán tìm kiếm nâng cao
Học viên thực hiện: Trần Huy Hoàng
Lê Văn Linh
Thạch Xuân Bách Trần Văn Trung
Trang 2Nội dung thực hiện:
A- Lý thuyết
I Các chiến lược tìm kiếm mù
1. Tìm kiếm theo chiều rộng
2. Tìm kiếm theo chiều sâu
3. Tìm kiếm với độ sâu hạn chế
II Các chiến lược tìm kiếm kinh nghiệm
1. Tìm kiếm leo đồi (hill climbing search)
2. Tìm kiếm ưu tiên tốt nhất – Best First Search (Best-FS)
3. Tìm kiếm Beam (Beam Search)
III Các chiến lược tìm kiếm tối ưu
Trang 3A- Lý thuyết
I. Các chiến lược 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
Nói chung tìm kiếm mù sẽ không hiệu quả
Đâ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
1 Tìm kiếm theo chiều rộng (BFS)
Ý tưởng:
Trạng thái được ưu tiên phát triển là trạng thái được sinh ra trước
Phát triển ra 2 bên của node
Trang 4loại tt ngoài cùng bên trái của open, gọi nó là u
if (u là một đích) then thông báo kết quả, thoátelse begin
Đưa u vào closedPhát sinh các con v của uLoạ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
endThông báo thất bại
End
Nhận xét:
Trong thuật toán tìm kiếm theo chiều rộng, trạng thái nào được sinh ra trước sẽ được phát triển trước, do
đó danh sách L được sử dụng là hàng đợi
Nếu bài toán có nghiệm (tồn tại đường đi từ trạng thái đầu tới trạng thái kết thúc), thì thuật toán sẽ tìm được nghiệm
Đánh giá:
Giả sử mỗi trạng thái trung bình sinh ra b trạng thái con (kề), b - gọi là nhân tố nhánh.
Thời gian: 1+b+b 2 +b 3 +… +b d + b(b d -1) = O(bd+1)
Không gian: O(b d+1 ) (lưu mọi node của cây).
Không gian lưu trữ rất tốn kém
Trang 52 Tìm kiếm theo chiều sâu (DFS)
Ý tưởng:
Mở rộng nút có độ sâu hơn trước các nút khác đang chờ xử lý
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
Trang 6loạ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ả, 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
Thông báo thất bại
End
Nhận xét:
Thuật toán tìm kiếm theo chiều rộng luôn tìm ra nghiệm nếu bài toán có nghiệm
Tuy nhiên, không phải với bất kỳ bài toán có nghiệm nào thuật toán tìm kiếm theo chiều sâu cũng tìm ra nghiệm (với bài toán có nghiệm và không gian tìm kiếm hữu hạn mới tìm được nghiệm)
Tại sao? Trong trường hợp không gian trạng thái là vô hạn, thì có thể nó không tìm ra nghiệm vì ta luôn đi sâu xuống, nếu ta đi theo nhánh vô hạn mà nghiệm không nằm trên nhánh đó thì thuật toán sẽ không dừng
Trang 73 Tìm kiếm với độ sâu hạn chế
Ý tưởng:
Mở rộng nút có độ sâu hơn trước các nút khác đang chờ xử lý
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
Không tiếp tục mở rộng khi đến 1 độ sâu d cố định nào đó
Đầu vào:
Các node và các cạnh của đồ thị, độ sâu ban đầu
Dùng danh sách open chứa các trạng thái sinh ra đang chờ phát triển
Đầu ra:
Danh sách closed chứa các trạng thái đã được khảo sát
Ví dụ:
Tìm kiếm sâu dần l =1
Trang 8 Tìm kiếm sâu dần l =2
Trang 9 Tìm kiếm sâu dần l =3
Trang 11II.1.Khái quát chung
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
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.
Trong các thuật toán tìm kiếm theo kinh nghiệm ta đưa ra hàm đánh giá:
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
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, nếu tính được nghĩa là đã tìm được lời giải!
Tuy nhiên, nhờ kinh nghiệm trong nhiều bài toán cụ thể, có thể ước lượng được g.trị này
Chẳng hạn ta xét hàm đánh giá trong vi dụ này: 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, 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á.
Dễ thấy, nếu u là trạng thái đích thì h(u)=0 Mỗi u ta có
một giá trị ước lượng là h(u) h(B)=3; h(C)=1
Trang 12II.2.1 Tìm kiếm leo đồi – Hill Climbing Search
Ý tưởng:
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 Nếu không có thuật tóan phải dừng 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
Khác với tìm kiếm sâu, leo đồi không lưu tất cả các con mà chỉ lưu đúng một t.thái được chọn nếu có
loại tt ngoài cùng bên trái của open, 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
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
End
Trang 130 15
Đồ thị không gian trạng thái
E
A 20
D 6
7
I 8
5
C 15
Cây tìm kiếm leo đồi
F 10
G B
0 10
Trang 14 Hiệu quả khi có một hàm đánh giá tốt Bế tắc nếu
◦ Gặp điểm cực đại địa phương
◦ Khu vực bình nguyên
Giải pháp xáo trộn ngẫu nhiên.
Không có giải pháp tổng quát.
II.2.2 Tìm kiếm ưu tiên tốt nhất – Best First Search (Best-FS)
Best-FS kết hợp tìm kiếm sâu và rộng.
Best-FS “cẩn thận” hơn ghi nhớ lại các một số trạng thái không tốt hơn trước đó để còn có thể quay lại.
Trang 15loại trạng thái ngoài cùng bên trái của open, gọi nó là u
if (u là một đích) then thông báo thắng lợi, thoátelse begin
Đưa u vào closedPhát sinh các con v của uLoạ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áiend
endThông báo thất bại
end
Trang 16
Đầu vào: Trạng thái đầu là A, trạng thái
kết thúc là B.
Thực hiện:
A được xét → C, D, E.
Chọn D, vì h(D) = 6 (min), sinh ra F,I.
Trong số các đỉnh chưa xét C,E,F,I;
Trang 17 Nhận xét, đánh giá:
Một cách đầy đủ, để 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.
II.2.3 Tìm kiếm Beam (beam search)
Ý tưởng: tìm kiếm beam (beam search) giống tìm kiếm theo chiều rộng Tuy nhiên, trong tìm
kiếm Beam ở mỗi mức chỉ hạn chế phát triển k đỉnh tốt nhất (các đỉnh này được xác định bởi
Trang 181 Giải thuật A*
A* là giải thuật tổng quát hơn BestFS, nó tìm kiếm trên KGTT là đồ thị
Vì là đồ thị nên phát sinh nhiều vấn đề khi tìm đường đi tối ưu
Để ý rằng nghiệm là đường đi nên ta phải lưu lại vết của đường đi này
Trong các giải thuật trước, để tập trung cho tư tưởng chính của các giải thuật đó chúng ta bỏ qua chi tiết này, nhưng trong giải thuật này chi tiết này được đề cập vì nó liên quan đến nghiệm một cách trực tiếp
Mỗi trạng thái u tùy ý sẽ gồm bốn yếu tố (g(u), h(u), f(u), cha(u)) Trong đó:
G(u), h(u), f(u) đã biết
Cha(u) là nút cha của nút u
Trang 1919
Trang 20Bước Open closed
Trang 21 Ở bước 2, mọi việc xảy ra bình thường
Ở bước 3, tìm được đường đi đến C qua B ngắn hơn nên các giá trị của C trong open phải được sửa đổi
Ở bước 4, mặc dù B đã nằm trong closed, tức đã xét xong nhưng đường đi mới qua D đến B ngắn hơn nên B phải được lấy khỏi closed chuyển qua open chờ xét lại với giá trị mới
Ở bước 5, lại xảy ra việc chỉnh sửa các giá trị của C như ở bước 3.
Giải thuật dừng ở bước 6 và đường đi thu được độ dài 5 như sau A-D-B-C-G
Chú ý
Trạng thái đã lưu trong open vẫn có thể thay đổi giá trị.
Thậm chí lưu trong closed cũng phải bị xóa đi và chuyển qua open với các giá trị mới
Trang 22loại u ngoài cùng bên trái của open
Đưa u vào closed;
if (u là một đích) then thông báo thắng lợi, thoát else
begin
Sinh các con v của u;
For v thuộc con(u) do begin
Trang 23Đưa v vào open;
Loại v’ khỏi closed;
Trang 24 Kết quả.
Một hàm đánh giá h(u) được gọi là chấp nhận được hay là hàm đánh giá thấp nếu như h(u)<=h*(u) với moi u, ở đây h*(u) là đường đi ngắn nhất từ u đến đích.
Nếu hàm đánh giá h(u) là chấp nhận được thì thuật toán A* là tối ưu.
A* là thuật tóan hiệu quả nhất trong các thuật toán đầy đủ và tối ưu
Trang 31Cut tỉa gốc a nếu eval(u)>eval(v).