1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài Tập Lớn Môn Trí Tuệ Nhân Tạo : Ứng dụng thuật toán tìm kiếm vào bài toán rót nước

29 36 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Bài tập lớn môn trí tuệ nhân tạo bài tập lớn tim hiểu về thuật toán tìm kiếm vào bài toán rót nước Tìm hiểu thuật toán tìm kiếm trong không gian trạng thái xây dựng chương trình tìm hiểu về thuật toán theo chiều sâu tìm hiểu về thuật toán theo chiều rộng thuật toán AT thuật toan AKT thuật giải A

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN ===== o0o ===== BÀI TẬP LỚN MƠN: TRÍ TUỆ NHÂN TẠO Đề tài: Ứng dụng thuật tốn tìm kiếm vào tốn rót nước Mục lục LỜI MỞ ĐẦU Phần I TÌM HIỂU THUẬT TỐN TÌM KIẾM TRONG KHƠNG GIAN TRẠNG THÁI 1.1 Thuật tốn tìm kiếm theo chiều sâu (Depth First Search) 1.2 Thuật tốn tìm kiếm theo chiều rộng (Breadth First Search) .7 1.3 Thuật toán AT 10 1.3.1 Khái niệm: 10 3.2 Phương pháp: Sử dụng hai danh sách CLOSE OPEN 10 1.4Thuật toán AKT 12 1.4.1 Thuật toán 13 1.4.2 Ví dụ 14 1.55 Thuật giải A* 15 1.5.1 Khái niệm 15 1.5.2 Các tính chất .17 1.5.3 Ví Dụ 18 Phần II XÂY DỰNG CHƯƠNG TRÌNH 22 2.1 Mô tả toán 22 2.4 Đồ thị toán 23 2.5 Lưu đồ thị vào máy tính danh sách kề 26 2.6 Trạng thái đỉnh 27 2.7 Cài đặt thuật toán 27 2.8 Truy xuất đường từ bảng cha gán trạng thái cho đỉnh 28 2.9 Kết 29 LỜI MỞ ĐẦUI MỞ ĐẦU ĐẦUU Để hoàn thành báo cáo này, chúng em nhận nhiều hướng dẫn từ phía thầy khoa Sự giảng dạy chu đáo, tận tình giúp đỡ nhiệt tình từ thầy giúp chúng em hiểu nhiều vấn đề hoàn thành báo cáo tốt Chúng em tỏ lòng biết ơn sâu sắc với cô Lê Thị Thuỷ, người tận tình hướng dẫn giúp đỡ, bảo nhóm em suốt q trình nghiên cứu đề tài hoàn thành báo cáo Sau khoảng thời gian cô Lê Thị Thủy đưa đề tài, chúng em nỗ lực cố gắng việc tìm hiểu đề tài Các bạn nhóm cộng chăm giúp đỡ lẫn báo cáo hoàn hảo đến thời điểm Một lần nhóm em xin cảm ơn giảng viên Lê Thị Thủy, bạn lớp tập thể nhóm làm việc hoàn thành tốt báo cáo Chúng em xin chân thành cảm ơn! Phần I TÌM HIỂU THUẬT TỐN TÌM KIẾM TRONG KHƠNG GIAN TRẠNG THÁI Vấn đề tìm kiếm, cách tổng quát, hiểu tìm đối tượng thỏa mãn số địi hỏi đó, tập hợp rộng lớn đối tượng Chúng ta kể nhiều vấn đề mà việc giải quy vấn đề tìm kiếm Các trị chơi, chẳng hạn cờ vua, cờ carơ xem vấn đề tìm kiếm Trong số nhiều nước phép thực hiện, ta phải tìm nước dẫn tới tình kết mà ta người thắng Trong lĩnh vực nghiên cứu Trí Tuệ Nhân Tạo, thường xuyên phải đối đầu với vấn đề tìm kiếm Các kỹ thuật tìm kiếm áp dụng để giải vấn đề áp dụng rộng rãi lĩnh vực nghiên cứu khác Trí Tuệ Nhân Tạo Trong phần này, nghiên cứu thuật tốn tìm kiếm theo chiều sâu thuật tốn tìm kiếm theo chiều rộng tốn tìm kiếm trạng thái mục tiêu khơng gian trạng thái 1.1 Thuật tốn tìm kiếm theo chiều sâu (Depth First Search) t tốn tìm kiếm theo chiều sâu (Depth First Search) m theo chiều sâu (Depth First Search) u sâu (Depth First Search) a Tư tưởng chiến lược tìm kiếm theo chiều sâu  Từ đỉnh xuất phát duyệt đỉnh kề • Các đỉnh đồ thị duyệt theo nhánh đến nút • Nếu chưa tìm thấy đỉnh TG quay lui tới đỉnh để sang nhánh khác • Việc tìm kiếm kết thúc tìm thấy đỉnh TG hết đỉnh b Thuật toán tìm kiếm theo chiều sâu Lưu trữ: Sử dụng hai danh sách DONG MO đó: DONG: Chứa đỉnh xét, hoạt động theo kiểu FIFO (hàng đợi) MO: chứa đỉnh xét , hoạt động theo kiểu LIFO (ngăn xếp) MO = Ø; MO = MO  {T0} T0} } while (MO != Ø) {T0} n = get(MO) // lấy đỉnh đầu danh sach MO if (n==TG) // n trạng thái kết thúc return TRUE // tìm kiếm thành cơng, dừng DONG = DONG  {T0} n} //đánh dấu n xét for đỉnh kề v n if (v chưa đc xét) //v chưa DONG MO = MO  {T0} v} //đưa v vào đầu DS MO father(v)=n// lưu lại vết đường từ n đến v } c Ví dụ thuật tốn tìm kiếm theo chiều sâu Cho đồ thị hình vẽ sau: A B M X N Y R C U S L V G D O I P J H Đỉnh đầu T0} =A, TG = {T0} R} Tìm đường p từ To đến TG phương pháp tìm kiếm theo chiều sâu? n B(n) MO DONG A A B, C, D B, C, D A B M, N M, N, C, D A,B M X, Y X, Y, N, C, D A,B,M X  Y, N, C, D A,B,M,X Y R, S R, S, N, C, D A,B,M,X,Y R  đích  dừng Xây dựng đường có hành trình: p = A -> B -> M -> Y -> R Nhận xét: + Nếu đồ thị G tồn đường từ T0} đến đỉnh TG  Goal hàm DFS dừng lại cho đường p có độ dài không ngắn + Với DFS đỉnh duyệt theo nhánh (theo chiều sâu) + Thuật toán DFS có độ phức tạp O(bd) với b bậc d chiều sâu Tuy nhiên trường hợp xấu O(bd) 1.2 Thuật tốn tìm kiếm theo chiều sâu (Depth First Search) t tốn tìm kiếm theo chiều sâu (Depth First Search) m theo chiều sâu (Depth First Search) u rộng (Breadth First Search) ng (Breadth First Search) a Tư tưởng chiến lược tìm kiếm theo chiều rộng • Từ đỉnh xuất phát duyệt tất đỉnh kề • Làm tương tự với đỉnh vừa duyệt • Quá trình duyệt kết thúc tìm thấy đỉnh TG hết đỉnh để duyệt b Thuật tốn tìm kiếm theo chiều rộng Lưu trữ: Sử dụng hai danh sách DONG MO hoạt động theo kiểu FIFO (hàng đợi) DONG: Chứa đỉnh xét MO: chứa đỉnh xét MO = Ø; MO = MO ∪ {T0} T0} } while (MO != Ø) {T0} n = get(MO) // lấy đỉnh đầu danh sach MO if (n==TG) // n trạng thái kết thúc return TRUE // tìm kiếm thành cơng, dừng DONG = DONG ∪ {n} //đánh dấu n xét for đỉnh kề v n if (v chưa đc xét) //v chưa DONG MO = MO ∪ {v} //đưa v vào cuối DS MO father(v)=n// lưu lại vết đường từ n đến v } Chúng ta có số nhận xét sau thuật tốn tìm kiếm theo chiều rộng: Trong tìm kiếm theo chiều rộng, trạng thái sinh trước phát triển trước, danh sách MỞ xử lý hàng đợi Trong bước 2, ta cần kiểm tra xem n có trạng thái kết thúc hay khơng Nói chung trạng thái kết thúc xác định số điều kiện đó, ta cần kiểm tra xem n có thỏa mãn điều kiện hay khơng Nếu tốn có nghiệm (tồn đường từ trạng thái ban đầu tới trạng thái đích), thuật tốn tìm kiếm theo chiều rộng tìm nghiệm, đồng thời đường tìm ngắn Trong trường hợp toán vô nghiệm không gian trạng thái hữu hạn, thuật tốn dừng cho thơng báo vơ nghiệm Đánh giá tìm kiếm theo chiều rộng: Bây ta đánh giá thời gian nhớ mà tìm kiếm theo chiều rộng đòi hỏi Giả sử , trạng thái phát triển sinh b trạng thái kề Ta gọi b nhân tố nhánh Giả sử rằng, nghiệm tốn đường có độ dài d Bởi nhiều nghiệm tìm đỉnh mức d tìm kiếm, số đỉnh cần xem xét để tìm nghiệm là: + b + b2 +… + bd-1 + k Trong k 1, 2, …, bd Do số lớn đỉnh cần xem xét là: + b + b2 +… + bd-1 Như vậy, độ phức tạp thời gian thuật tốn tìm kiếm theo chiều rộng O(bd) Độ phức tạp không gian O(bd), ta cần lưu vào danh sách MỞ tất đỉnh tìm kiếm mức d, số đỉnh bd c Ví dụ thuật tốn tìm kiếm theo chiều rộng Cho đồ thị hình vẽ sau: A B M X C N Y U R S D L O V G I P J H Đỉnh đầu T0} =A, TG= {T0} N}.Tìm đường p từ To đến TG phương pháp tìm kiếm theo chiều rộng? n B(n) MO DONG A A B, C, D B, C, D A B M, N C, D, M, N A,B C L D, M, N, L A,B,C D O, P M, N, L, O, P A,B,C,D M X, Y N, L, O, P, X, Y A,B,C,D,M N  đích  dừng Xây dựng đường có hành trình: p = A -> B -> N Nhận xét: + Nếu đồ thị tồn đường từ T0} đến đỉnh TG  Goal hàm BFS dừng lại cho đường p có độ dài ngắn + Với BFS đỉnh duyệt theo mức (theo chiều rộng) + Thuật tốn BFS có độ phức tạp O(bd) với b bậc d chiều sâu 1.3 Thuật tốn tìm kiếm theo chiều sâu (Depth First Search) t toán AT 1.3.1 Khái niệm: Thuật giải AT phương pháp tìm kiếm theo kiểu BeFS với chi phí đỉnh giá trị hàm g (tổng chiều dài thực đường từ đỉnh bắt đầu đến đỉnh tại) Cho đồ thị G = (V, E) với V: tập đỉnh; E: Tập cung Với cung người ta gắn thêm đại lượng gọi giá cung C : E → R+ e → C(e) Khi đường p = n1, n2, …nk có giá tính theo công thức: k -1  C(p) =C(ni , ni+1 ) i=1 Vấn đề đặt tìm đường p tù T0} đến đỉnh TG ∈ Goal cho c(p) → Vào: - Đồ thị G = (V, E) C: E → R+ e → C(e) - Đỉnh đầu T0} Goal chứa tập đỉnh đoch Ra: Đường p: T0} → TG ∈ Goal cho: C(p) = g(nk) = {T0} g(n)/n ∈ Goal } 3.2 Phương pháp: Sử dụng hai danh sách CLOSE OPEN void AT() {T0} OPEN ={T0} T0} }, g(T0} ) = 0} , CLOSE = ∅ while OPEN ≠ ∅do {T0} n ← getNew(OPEN) TG) then return True // lấy đỉnh n cho g(n) → if (n = else {T0} for each m ∈ A(n) if(m ∈ OPEN) and (m ∈CLOSE) then {T0} g(m) = g(n) + cost(m,n) OPEN = OPEN ∪{T0} m} } else g(m) = min{T0} g(m), gnew(m)} CLOSE = CLOSE ∪ {T0} n} } return False; } Ví dụ 2: Cho đồ thị (hình 3) Đỉnh xuất phát A Goal = {T0} D, H} A 10 h=2 f=2 h=2 f=3 h=3 f=4 g=1 h=1 f=3 g=2 h=2 f=4 h=3 f=5 g=3 h=2 f=5 h=0 f=3 h=1 f=4 1.55 Thuật tốn tìm kiếm theo chiều sâu (Depth First Search) t giải A*i A* 1.5.1 Khái niệm A* phiên đặc biệt AKT áp dụng cho trường hợp đồ thị Thuật tốn tìm đường từ nút khởi đầu tới nút đích cho trước (hoặc tới nút thỏa mãn điều kiện đích) Thuật toán sử dụng "đánh giá heuristic" để xếp loại nút theo ước lượng tuyến đường tốt qua nút Thuật tốn duyệt nút theo thứ tự đánh giá heuristic Ý tưởng trực quan Xét tốn tìm đường - toán mà A* thường dùng để giải A* xây dựng tăng dần tất tuyến đường từ điểm xuất phát tìm thấy đường chạm tới đích 15 Tuy nhiên, tất thuật tốn tìm kiếm có thơng tin (informed tìm kiếm thuật tốn), xây dựng tuyến đường "có vẻ" dẫn phía đích Để biết tuyến đường có khả dẫn tới đích, A* sử dụng "đánh giá heuristic" khoảng cách từ điểm cho trước tới đích Trong trường hợp tìm đường đi, đánh giá khoảng cách đường chim bay - đánh giá xấp xỉ thường dùng cho khoảng cách đường giao thơng Điểm khác biệt A* tìm kiếm theo lựa chọn tốt cịn tính đến khoảng cách qua Điều làm cho A* "đầy đủ" "tối ưu", nghĩa là, A* ln tìm thấy đường ngắn tồn đường A* không đảm bảo chạy nhanh thuật tốn tìm kiếm đơn giản Trong môi trường dạng mê cung, cách để đến đích trước hết phải phía xa đích cuối quay lại Trong trường hợp đó, việc thử nút theo thứ tự "gần đích thử trước" gây tốn thời gian Thuật toán A* A* lưu giữ tập lời giải chưa hoàn chỉnh, nghĩa đường qua đồ thị, nút xuất phát Tập lời giải lưu hàng đợi ưu tiên (priority queue) Thứ tự ưu tiên gán cho đường định hàm Trong đó, chi phí đường thời điểm tại, nghĩa tổng trọng số cạnh qua hàm đánh giá heuristic chi phí nhỏ để đến đích từ Ví dụ, "chi phí" tính khoảng cách qua, khoảng cách đường chim bay hai điểm đồ đánh giá heuristic cho khoảng cách phải tiếp Hàm có giá trị thấp độ ưu tiên cao (do sử dụng cấu trúc heap tối thiểu để cài đặt hàng đợi ưu tiên này) function A*(điểm_xuất_phát,đích) var đóng:= tập rỗng var q:= tạo_hàng_đợi(tạo_đường_đi(điểm_xuất_phát)) while q tập rỗng 16 var p:= lấy_phần_tử_đầu_tiên(q) var x:= nút cuối p if x in đóng continue if x = đích return p bổ sung x vào tập đóng foreach y in các_đường_đi_tiếp_theo(p) đưa_vào_hàng_đợi(q, y) return failure Trong đó, đường (p) trả tập hợp đường tạo việc kéo dài p thêm nút kề cạnh Giả thiết hàng đợi xếp tự động giá trị hàm "Tập hợp đóng" (đóng) lưu giữ tất nút cuối p (các nút mà đường mở rộng đó) để tránh việc lặp lại chu trình (việc cho thuật tốn tìm kiếm theo đồ thị) Đôi hàng đợi gọi cách tương ứng "tập mở" Tập đóng bỏ qua (ta thu thuật tốn tìm kiếm theo cây) ta đảm bảo tồn lời giải hàm các_đường_đi_tiếp_theo chỉnh để loại bỏ chu trình 1.5.2 Các tính chất Cũng tìm kiếm theo chiều rộng (breadth-first search), A* thuật tốn đầy đủ (complete) theo nghĩa ln ln tìm thấy lời giải tốn có lời giải Nếu hàm heuristic h có tính chất thu nạp (admissible), nghĩa khơng đánh giá cao chi phí nhỏ thực việc tới đích, thân A* có tính chất thu nạp (hay tối ưu) sử dụng tập đóng Nếu khơng sử dụng tập đóng hàm h phải có tính chất đơn điệu (hay qn) A* có tính chất tối ưu Nghĩa khơng 17 đánh giá chi phí từ nút tới nút kề cao chi phí thực Phát biểu cách hình thức, với nút x,y y nút x: h(x) ≤ g(y) – g(x) + h(y) A* cịn có tính chất hiệu cách tối ưu (optimally efficient) với hàm heuristic , có nghĩa khơng có thuật tốn sử dụng hàm heuristic mà phải mở rộng nút A*, trừ có số lời giải chưa đầy đủ mà dự đốn xác chi phí đường tối ưu 1.5.3 Ví Dụ Trạng thái ban đầu T0 = A, trạng thái đoch Goal = {B}, số ghi cạnh cung độ dài đường đi, số cạnh đỉnh giá trị hàm h Đồ thị áp dụng cho A* Ban đầu OPEN = {A, g(A) = 0, f(A) = 14} Phát triển đỉnh A sinh đỉnh C, D, E F Tính giá trị hàm f đỉnh ta có: OPEN = { g(C) = 9, f(C) = + 15 = 24, cha(C) = A, g(D) = 7, f(D) = +6 = 13, cha(D) = A, 18 g(E) = 13, f(E) = 13 + = 21, cha(E) = A, g(F) = 20, f(F) = 20 +7 = 27, cha(F) = A } CLOSE = {A, g(A) = 0, f(A) = 14} Do f(D) = 13 nho nên chọn D để phát triển Phát triển D, ta nhận đỉnh H E g(H) = g(D) + cost(D, H) = + = 15, f(H) = 15 + 10 = 25 g(E) = g(D) + cost(D, E) = + = 11, f(E) = 11 + =19 Bây ta bo sung hai đỉnh vào tập OPEN Tuy nhiên tập OPEN lúc có đỉnh E nên cần phải so sánh g(E) có g(E) vùa tonh Ta so sánh hai giá trị giữ lại giá trị nho Do OPEN = {g(C) = 9, f(C) = + 15 = 24, cha(C) = A, g(E) = 11, f(E) = 11 + 8= 19, cha(E) = D, g(F) = 20, f(F) = 20 +7 = 27, cha(F) = A, g(H) = 15, f(H) = 15 + 10 = 25, cha(H) = D } CLOSE = {A, g(A) = 0, f(A) = 14, D, g(D) = 7, f(D) = + = 13, cha(D) = A } Với lập luận tương tự ta chọn đỉnh E để phát triển Các đỉnh E K I OPEN = {g(C) = 9, f(C) = + 15 = 24, cha(C) = A, g(F) = 20, f(F) = 20 +7 = 27, cha(F) = A g(H) = 15, f(H) = 15 + 10 = 25, cha(H) = D, g(K) = 17, f(K) = 17 + = 19, cha(K) = E, g(I) = 19, f(I) = 19 + = 23, cha(I) = E } 19 CLOSE = {A, g(A) = 0, f(A) = 14, D, g(D) = 7, f(D) = + = 13, cha(D) = A E, g(E) = 11, f(E) = 11 + = 19, cha(E) = D } Chọn đỉnh K để phát triển Các đỉnh tiếp K B OPEN = {g(C) = 9, f(C) = + 15 = 24, cha(C) = A, g(F) = 20, f(F) = 20 +7 = 27, cha(F) = A g(H) = 15, f(H) = 15 + 10 = 25, cha(H) = D g(I) = 19, f(I) = 19 + = 23, cha(I) = E, g(B) = 23, f(B) = 23 + = 23, cha(B) = K } CLOSE= { A, g(A) = 0} , f(A) = 14, D, g(D) = 7, f(D) = + = 13, cha(D) = A, E, g(E) = 11, f(E) = 11 + = 19, cha(E) = D, g(K) = 17, f(K) = 17 + = 19, cha(K) = E } Trong tập OPEN có f(B) = f(I) nên chọn ngẫu nhiên hai đỉnh giả sử chọn đỉnh B để phát triển Do B ∈ Goal nên trình tìm kiếm kết thúc Để đưa đường ta try ngược lại tập CLOSE Khi đường tìm có chi phí c(p)= 23 trình tự đỉnh Nhận xét: p: A  D  E  K  B Đường tìm khơng phải tốt Nếu h(n) = trường hợp A* trở thành AT 20

Ngày đăng: 21/08/2023, 09:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w