Báo cáo đồ án trí tuệ nhân tạo : GIẢI THUẬT TÌM KIẾM THEO CHIỀU SÂU (DEPTH FIRST SEARCH)

11 4.2K 23
Báo cáo đồ án trí tuệ nhân tạo : GIẢI THUẬT TÌM KIẾM THEO CHIỀU SÂU (DEPTH FIRST SEARCH)

Đ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

A.Thuật toán tìm kiếm theo chiều sâu (Depth First Search) •Việc tìm kiếm tối ưu trong không gian trạng thái là công việc đã sớm được nghiên cứu trong ngành Trí Tuệ Nhân Tạo. Việc tiếp cận này đòi hỏi chúng phải giải quyết một số lượng lớn thông tin (bùng nổ tổ hợp), đôi khi đòi hỏi một thời gian tìm kiếm không thể chấp nhận được (có khi lên đến hàng vạn năm). Do đó, việc tìm ra một giãi thuật tìm kiếm nhanh, hiệu quả là công việc cần thiết. Trong phần này, chúng ta sẽ lần lượt tìm hiểu hai giải thuật cổ điển cũng như đánh giá khả năng của nó.Sau đó, chúng ta sẽ demo 1 chương trình được viết trong ngôn ngữ C# (trong bộ.net của Microsoft). 1.Khái niệm: •Tìm kiếm theo chiều sâu luôn luôn mở rộng một trong các nút ở mức sâu nhất của cây. Chỉ khi phép tìm kiếm đi tới một điểm cụt (một nút không phải đích mà không có phần mở rộng), việc tìm kiếm sẽ quay lại và mở rộng đối với những nút nông hơn. 2.Đánh giá: •Đủ? Không đủ (không gian vô hạn hoặc loop) oNếu sửa để tránh trùng lặp  đủ trong không gian hữu hạn. •Thời gian? O(bm) oRất xấu nếu m lớn hơn nhiều so với d oNhưng nếu mật độ lời giải trong không gian lớn thì có thể nhanh hơn BFS •Không gian? O(bm), i.e., độ phức tạp tuyến tính. •Tối ưu? không 3.Cài đặt thuật toán tìm kiếm theo chiều sâu: •Giải thuật: -Đưa điểm bắt đầu vào Stack -Trong khi Stack chưa rỗng: + Ta sẽ bỏ 1 đỉnh của Stack ra: nếu đây là đích  kết thúc + Nếu không: ứng với các đỉnh kề với đỉnh vừa bỏ ra, ta lại cho vào Stack. Depth First Search: Procedure Depth_First_Search; begin 1. Khởi tạo danh sách L chỉ chứa trạng thái ban đầu u0; 2. loop do 2.1. if L rỗng then {thông báo 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 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;}; end;

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN MÔN HỌC: TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: GIẢI THUẬT TÌM KIẾM THEO CHIỀU SÂU (DEPTH FIRST SEARCH) Giảng viên : Thầy NGÔ HỮU PHÚC SV thực hiện : ĐÀO NGỌC ANH Lớp : TIN HỌC 5A HÀ NỘI, THÁNG 3 NĂM 2010 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A A. Thuật toán tìm kiếm theo chiều sâu (Depth First Search) • Việc tìm kiếm tối ưu trong không gian trạng thái là công việc đã sớm được nghiên cứu trong ngành Trí Tuệ Nhân Tạo. Việc tiếp cận này đòi hỏi chúng phải giải quyết một số lượng lớn thông tin (bùng nổ tổ hợp), đôi khi đòi hỏi một thời gian tìm kiếm không thể chấp nhận được (có khi lên đến hàng vạn năm). Do đó, việc tìm ra một giãi thuật tìm kiếm nhanh, hiệu quả là công việc cần thiết. Trong phần này, chúng ta sẽ lần lượt tìm hiểu hai giải thuật cổ điển cũng như đánh giá khả năng của nó.Sau đó, chúng ta sẽ demo 1 chương trình được viết trong ngôn ngữ C# (trong bộ.net của Microsoft). 1. Khái niệm: • Tìm kiếm theo chiều sâu luôn luôn mở rộng một trong các nút ở mức sâu nhất của cây. Chỉ khi phép tìm kiếm đi tới một điểm cụt (một nút không phải đích mà không có phần mở rộng), việc tìm kiếm sẽ quay lại và mở rộng đối với những nút nông hơn. 2. Đánh giá: • Đủ? Không đủ (không gian vô hạn hoặc loop) o Nếu sửa để tránh trùng lặp  đủ trong không gian hữu hạn. • Thời gian? O(b m ) o Rất xấu nếu m lớn hơn nhiều so với d o Nhưng nếu mật độ lời giải trong không gian lớn thì có thể nhanh hơn BFS • Không gian? O(bm), i.e., độ phức tạp tuyến tính. • Tối ưu? không 3. Cài đặt thuật toán tìm kiếm theo chiều sâu: • Giải thuật: - Đưa điểm bắt đầu vào Stack - Trong khi Stack chưa rỗng: + Ta sẽ bỏ 1 đỉnh của Stack ra: nếu đây là đích  kết thúc + Nếu không: ứng với các đỉnh kề với đỉnh vừa bỏ ra, ta lại cho vào Stack. Depth First Search: Procedure Depth_First_Search; begin 1. Khởi tạo danh sách L chỉ chứa trạng thái ban đầu u0; 2. loop do 2.1. if L rỗng then {thông báo 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 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;}; end; Phân tích thời gian của giải thuật DFS: Trang 2 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A Thời gian thực hiện giải thuật DFS trên một ma trận 2 chiều luôn tỉ lệ với n 2 vì mỗi thành phần trên ma trận đều phải được kiểm tra qua một lần. Do đó với ma trận vuông nxn thì chi phí để duyệt qua n dòng và n cột tương ứng nxn = n 2 So sánh giữa DFS và BrFS : Khi DFS thực hiện thì nó luôn chiếm dụng nhiều cùng nhớ hơn (do đặc thù của Stack) và nó luôn tìm kiếm trên những vùng không cần thiết. Trong khi, BrFS lại luôn tìm thấy lời giải trong một kết quả tối ưu. Demo việc tìm kiếm DFS: Mô tả bài toán: Không gian trạng thái được mô tả là ma trận có kích thước mxn. Trên khôn gian trạng thái, có nơi được phép đến, có nơi không được phép đến. Hãy xây dựng chương trình tạo ngẫu nhiên không gian trạng thái này, vị trí bắt đầu, vị trí cần tìm và sử dụng giải thuật tìm kiếm theo chiều sâu. Đánh giá giải thuật thông qua không gian trạng thái thực tế. • Ta sẽ tạo ra một ma trận bất kỳ với 2 giá trị 0 và 1 tương ứng với: o 0 = đi được o 1 = không đi được o Từ ma trận này ta sẽ nhập vào vị trí của điểm bắt đầu và điểm kết thúc để chương trình kiểm tra xem có đường đi hay không có đường đi từ điểm bắt đầu đến điểm kết thúc. o Sau đó sẽ thể hiện kết quả trên phần ”Mô phỏng” bằng hình vẽ để người xem dễ dàng nhận ra kết quả của bài toán. • Mô hình của bài toán bao gồm: o Class ”banco” o Form • Class ”banco” class banco { int dong,cot; int[,] a; int step = 25; public banco(int d, int c,int[,] ain) { dong = d; cot = c; a = ain; } Image kodi = Image.FromFile(Application.StartupPath + "\\kodi.jpg"); Image di = Image.FromFile(Application.StartupPath + "\\di.jpg"); public void Show(PaintEventArgs e) { for (int i = 0; i < dong; i++) for (int j = 0; j < cot; j++) if (a[i, j] == 1) e.Graphics.DrawImage(kodi, j * step, i * step); else e.Graphics.DrawImage(di, j * step, i * step); } Trang 3 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A - Thể hiện trên pictureBox1 ma trận mxn được biểu diễn dưới dạng hình ảnh ”kodi.jpg” và ”di.jpg” public void ShowWay(PaintEventArgs e,Point[,] father,Point sp, Point ep) { Point wp = new Point(); wp = ep; e.Graphics.FillEllipse(new SolidBrush(Color.Blue), wp.Y * step + 10, wp.X * step + 10, 5, 5); while (wp != sp) { wp = father[wp.X, wp.Y]; e.Graphics.FillEllipse(new SolidBrush(Color.Blue), wp.Y * step + 10, wp.X * step + 10, 5, 5); } } - Đánh dấu những ô đi được để tới đích bằng cách vẽ vào giữa ô đó một vòng tròn nhỏ có màu xanh da trời. • Form: - Ma trận xác lập đường đi: + arrX = { 0, 1,0, -1 } + arrY = { -1, 0, 1, 0 } - Ma trận arrCheck để đánh dấu điểm nào đã duyệt qua. (có cùng kích cỡ với ma trận được tạo ra) - pC: là điểm (đỉnh) được “pop” ra ngoài để kiểm tra. - Điều kiện: if (i >= 0 && i <= cot-1 && j >= 0 && j <= dong-1) để tránh xét ra ngoài ma trận Trang 4 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A Trang 5 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A • Hàng: nhập số hàng của ma trận • Cột: nhập số cột của ma trận  khi click vào button ” Tạo ma trận” thì ma trận sẽ được thể hiện trên ô Richtextbox ngay bên cạnh. Trang 6 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A • Điểm đầu: nhập vị trí (x,y) của điểm bắt đầu. Ví dụ: 0,0 • Điểm cuối: nhập vị trí đích đến (x,y) của điểm kết thúc. Ví dụ: 5,5  Khi click vào button “Tìm đường” sẽ có 2 trường hợp xảy ra: - Nếu tìm được tới đích sẽ xuất hiện messagebox “ Trang 7 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A - Ngược lại nếu ko tìm được đường đi sẽ xuất hiện message box “khong co duong di” như sau: Trang 8 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A • Mô phỏng: - Khi chương trình tìm ra được đường đi, nó sẽ mô phỏng trên ô picturesBox như sau: Trang 9 Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A - Những ô có chấm tròn màu xanh da trời thể hiện đường đi từ điểm bắt đầu đến điểm kết thúc. Ở đây nó sẽ đi theo các vị trí như sau: 2,1<-2,2<-3,2<-3,3<-2,3<-1,3<-1,4<-0,4<-0,3<-0,2<-0,1<-0,0<-1,0 Trang 10 [...].. .Thuật toán Depth First Search- Đào Ngọc Anh – TIN HỌC 5A B Đánh giá giải thuật: - Thời gian thực hiện giải thuật DFS trên một ma trận 2 chiều luôn tỉ lệ với n 2 vì mỗi thành phần trên ma trận đều phải được kiểm tra qua một lần Do đó với ma trận vuông nxn thì chi phí để... n2 Khi DFS thực hiện thì nó luôn chiếm dụng nhiều bộ nhớ hơn (do đặc thù của Stack cứ lớn dần khi không gian trạng thái cần xét càng lớn) và nó luôn tìm kiếm trên những vùng không cần thiết Do đó dễ dẫn đến tình tràng tràn bộ nhớ gây lỗi Tài liệu tham khảo: 1 Slide bài giảng môn AI của thầy Ngô Hữu Phúc biên soạn 2 “Practical Artificial Intelligence Programming in Java”, Mark Watson 3 Các website về . TIN MÔN HỌC: TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: GIẢI THUẬT TÌM KIẾM THEO CHIỀU SÂU (DEPTH FIRST SEARCH) Giảng viên : Thầy NGÔ HỮU PHÚC SV thực hiện : ĐÀO NGỌC ANH Lớp : TIN HỌC 5A HÀ NỘI, THÁNG 3 NĂM 2010 Thuật. kiếm tối ưu trong không gian trạng thái là công việc đã sớm được nghiên cứu trong ngành Trí Tuệ Nhân Tạo. Việc tiếp cận này đòi hỏi chúng phải giải quyết một số lượng lớn thông tin (bùng nổ. gian trạng thái này, vị trí bắt đầu, vị trí cần tìm và sử dụng giải thuật tìm kiếm theo chiều sâu. Đánh giá giải thuật thông qua không gian trạng thái thực tế. • Ta sẽ tạo ra một ma trận bất

Ngày đăng: 25/03/2014, 22:17

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan