Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
305,06 KB
Nội dung
lOMoARcPSD|12114775 TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUN ĐÊỀ HỌC PHẦỀN NHẬP MƠN TRÍ TUỆ NHẦN TẠO ĐÊỀ TÀI: Áp dụng thuật giải best first search để tìm điểm dồ Sinh viên thực : NGUYÊỄN VŨ THÀNH NAM NGUYÊỄN ĐÔỀNG QUẦN Giảng viên hướng dẫẫn : VŨ VĂN ĐỊNH Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : HỆ THƠỐNG THƯƠNG MẠI ĐIỆN Lớp : D14HTTMDT1 Khóa : 2019 Hà Nội,tháng 10 năm 2021 TỬ lOMoARcPSD|12114775 Báo cáo mơn học Nhập mơn trí tuệ nhẫn tạo Đềề bài: Không gian trạng thái mô tả đôồ giao thông c m ột xã, ph ường Hãy xây dựng chương trình cho phép tm kiếếm đường t đ ỉểm trến b ản đôồ đếến m ột ểm khác trến đôồ bằồng phương pháp tm kiếếm Greedy Best First Search Tền học viền: Khuẫất Đình Đăng Giảng viền: TS Ngô Hữu Phúc Yều cầều: Mô bằồng chương trình Ngơn ngữ sử dụng VC++.Net ho ặc C#.NET lOMoARcPSD|12114775 I Phương pháp tm kiêấm Greedy Best First Search Phương pháp tm kiếếm Greedy Best First Search m ột dạng đặc biệt c ph ương pháp tm kiếếm Greedy Best First Search Lâếy ý tưởng giải thu ật tm kiếếm theo chiếồu r ộng kếết h ợp v ới hàm đánh giá để tm kiếếm không gian trạng thái Hàm đánh giá a Khái niệm Trong tm kiếếm sử dụng kinh nghiệm, ta xây dựng hàm đánh giá h(n) V ới môỗi tr ạng thái u thuộc vào không gian trạng thái, hàm đánh giá seỗ xác đ ịnh “giá” c tr ạng thái “Giá” c u m ột giá trị sôế h(u) tượng trưng cho “độ tôết ” trạng thái u, t ức kh ả nằng t u đ ược đếến đích Trong tm kiếếm sử dụng kinh nghiệm, hàm đánh giá có vai trò râết quan tr ọng Nếếu xây d ựng đ ược hàm đánh giá tôết, việc tm kiếếm seỗ râết nhanh Ng ược l ại, v ới m ột hàm đánh giá tơồi, cơng vi ệc tm kiếếm chệch hướng tm kiếếm hiệu Không có m ột ph ương pháp chung đ ể xây d ựng hàm đánh giá tổng quát cho toán Việc xây d ựng hàm đánh giá tùy thu ộc vào vâến đếồ câồn gi ải quyếết b Một sơế ví dụ vếồ hàm đánh giá Trong tốn tm kiếếm đường trến đơồ, có th ể xây d ựng hàm đánh giá: ⚫ Đường chim bay từ thành phôế sang thành phôế khác, ho ặc ⚫ Sử dụng khoảng cách thực trến đường thành phôế, ho ặc ⚫ Sử dụng khoảng cách sôế trọng sôế khác ảnh h ưởng t ới vi ệc tm kiếếm (đóng vai trị làm tằng thời gian di chuyển thành phôế), Xét tốn sơế, ta xây dựng hàm đánh giá nh sau: ⚫ Hàm H1: với trạng thái u, H1(u) sôế quân sai v ị trí // H1(u) = Trạng thái đích lOMoARcPSD|12114775 Trạng thái đích u ⚫ Hàm H2: H2(u) tổng khoảng cách vị trí quân trạng thái u v ới v ị trí tr ạng thái đích // H2(u) = Phương pháp Greedy Best First Search a Ý tưởng Tìm kiếếm Greedy Best First Search = tm kiếếm theo chiếồu r ộng + hàm đánh giá Hàm đánh giá sử dụng phương pháp tm kiếếm hàm ước l ượng giá t tr ạng thái u đếến trạng thái đích Tức xác định khả nằng t tr ạng thái u đ ược đếến tr ạng thái đích Node lựa chọn để phát triển bước kếế tếếp node có “giá” đếến tr ạng thái đích “tơết nhâết ” theo yếu câồu toán Tức chọn node “được cho là” gâồn với tr ạng thái đích nhâết đ ể phát tri ển Ví dụ: tm kiếếm trến đôồ, hàm h(n) = Khoảng cách theo đường chim bay t n đếến thành phơế đích Tìm kiêấm đường với giá tnh theo Km: lOMoARcPSD|12114775 Ở ví dụ trến, xết phát từ thành phơế Arad đếến đích thành phơế Bucharest b Cài đặt Sử dụng hàng đợi có ưu tến Sằếp xếếp node hàng đ ợi theo th ứ t ự tằng dâồn c hàm đánh giá Procedure Greedy_Best_First_Search; Begin Khởi tạo queue L chứa trạng thái ban đầu; Loop If L rỗng then { thông báo thất bại; stop; } Loại trạng thái u đầu queue L; If u trạng thái kết thúc then { thông báo thành công; stop; } For trạng thái v kề u Xen v vào queue L cho node L xếp theo thứ tự tăng dần hàm đánh giá; lOMoARcPSD|12114775 End; c Đánh giá giải thuật GBFS ● Tính đủ: Khơng Có thể vào vịng lặp quẩn (trường hợp tốn có khơng gian tr ạng thái vơ hạn ta duyệt phải nhánh vô hạn nghi ệm c tốn khơng nằồm trến nhánh đó.) ● Độ phức tạp thời gian: O(bm) Nếếu hàm heuristc xâếp xỉ tơết thực tếế th ời gian ch ạy seỗ giảm râết nhiếồu ● Độ phức tạp không gian: O(bm) Lưu trữ tâết Nodes ● Tính tơối ưu: khơng có tnh đủ nến giải thuật khơng có tnh tơếi ưu lOMoARcPSD|12114775 II Các kêất đạt Mô đôồ giao thông xã, phường Bản đôồ giao thông xã, phường mơ tả ch ương trình nh m ột đôồ th ị vô h ướng Môỗi đỉnh đôồ thị tượng trưng cho điểm trến đôồ Môỗi đ ỉnh đ ược gán m ột sôế th ứ t ự Môỗi c ạnh nôếi đỉnh trến đôồ thị tượng trưng cho đường nôếi ểm trến b ản đôồ Tr ọng sôế gằến v ới môỗi cạnh nôếi đỉnh đôồ thị tượng trưng cho kho ảng cách th ực tếế gi ữa ểm trến b ản đôồ Giá trị ghi trến môỗi cạnh đôồ thị khoảng cách thực tếế điểm trến đôồ Giá trị ghi môỗi đỉnh đôồ thị giá trị hàm đánh giá tnh đỉnh Xây dựng hàm đánh giá h(n) Giá trị hàm đánh giá h(n) môỗi đỉnh u thuộc không gian trạng thái xác định bằồng tổng khoảng đường chim bay từ trạng cách theo thái u đếến trạng thái đích khoảng cách th ực tếế t trạng thái tr ước expand tr ạng thái u đếến h(u) = dcb(u, e) + d(father(u),u) Trong đó, dcb(u,e) khoảng cách tnh theo đường chim bay t u đếến đích; father(u) tr ạng thái “cha” trạng thái u, trước expand u; d(father(u),u) kho ảng cách th ực tếế t father(u) đếến u Kếết làm a Các bước xây dựng đôồ tm đường trến đôồ ⚫ Click vào background để tạo đỉnh ⚫ Click vào đỉnh rế chuột đếến đỉnh khác đ ể t ạo cạnh nơếi sau nh ập đ ộ dài c ạnh nôếi ⚫ Nhập đỉnh bằết đâồu đỉnh kếết thúc ⚫ Nhâến Tìm để bằết đâồu tm kiếếm lOMoARcPSD|12114775 ⚫ Thông báo kếết thơng qua MessageBox RichTextBox b Câếu trúc chương trình Các lớp chương trình: ⚫ Lớp dinh mơ tả đỉnh đôồ thị tương ứng với điểm trến đôồ L ớp đ ược khai báo thuộc tnh sau: private Graphics gr; private int x, y, ID; private int r = 30; public double H; private SolidBrush sbr = new SolidBrush(Color.Blue); private bool selected; - gr, sbr sử dụng để hiển thị hình dạng đỉnh - x, y xác định vị trí tâm đỉnh - ID xác định sôế thứ tự đỉnh - R: bán kính đỉnh (đỉnh thể m ột hình trịn bán kính r) - H giá trị hàm đánh giá đỉnh - Selected xác định đỉnh có chọn bằồng chu ột hay khơng Các phương thức lớp: public bool ifChecked(int _x, int _y) xác định có phải đỉnh trỏ đến chuột hay không public void show(PaintEventArgs e) hiển thị đỉnh hình trịn bán kính r số thứ tự đỉnh public void showH(PaintEventArgs e) hiển thị giá trị hàm đánh giá bên hình trịn ⚫ Lớp canh mô tả cạnh đôồ thị tương ứng với đ ường trến b ản đôồ Các thu ộc tnh lớp canh private int xdau, ydau, xcuoi, ycuoi; // tọa độ đỉnh cạnh private int dinhdau, dinhcuoi; // số thứ tự đỉnh lOMoARcPSD|12114775 private Graphics gr; private Pen pen = new Pen(Color.Black, 1); // gr pen dùng để “vẽ” cạnh hình private int dodai; // độ dài cạnh Các phương thức lớp: public void show(PaintEventArgs e) // hiển thị cạnh hình đường thẳng public void showS(PaintEventArgs e) // hiển thị độ dài cạnh ⚫ Lớp bando thực châết ma trận kể đơồ thị Lớp ch ỉ có thu ộc tnh, m ột m ảng chiếồu public int[,] duongdi; ma tr ận kếồ c đơồ th ị m ột sôế nguyến public int sophantu; thể sơế chiếồu ma trận Lớp có contructor tnh toán giá tr ị c ma trận kếồ dựa vào đỉnh cạnh đôồ th ị ⚫ Lớp GBFS định nghĩa thuật toán GBFS Các thuộc tnh l ớp đ ược khai báo nh sau: ArrayList alC; // mảng cạnh đồ thị ArrayList alD; // mảng đỉnh đồ thị dinh start, end; // đỉnh bắt đầu đỉnh kết thúc int tongquangduong; // độ dài đường tìm từ đỉnh đầu đến đỉnh kết thúc int sodinh; // số đỉnh đồ thị int[,] Matrix; // ma trận kề đồ thị Các phương thức lớp: public double birdFly(dinh p) // trả khoảng cách đường chim bay từ đỉnh p đến đỉnh kết thúc double F(dinh p,dinh cha) lOMoARcPSD|12114775 // tính tốn giá trị hàm đánh giá p public void GBFS_algorith(RichTextBox r, ArrayList arrlCanh) // tìm kiếm đường từ đỉnh bắt đầu đến đỉnh kết thúc thuật tốn GBFS Thơng báo kết thơng qua RichTextBox MessageBox c Xử lí kiện Sự kiện Paint PictureBox: private void pictureBox1_Paint(object sender, PaintEventArgs e) // hiển thị cạnh, đỉnh đồ thị Sự kiện nhâến chuột: private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { //nếu nhấn chuột trái if (e.Button == MouseButtons.Left) { foreach (dinh temp in pList) // nhấn vào đỉnh if (temp.ifChecked(e.X, e.Y)) { drag = true; // cập nhật tọa độ đỉnh đầu, đỉnh cuối cạnh trùng với tọa độ tâm đỉnh nhấn c.X1 = c.X2 = temp.X; c.Y1 = c.Y2 = temp.Y; // lưu ID đỉnh đầu cạnh = ID đỉnh nhấn c.P1 = temp.getID; return; Downloaded by Vu Vu (quangchinhlas199@gmail.com) lOMoARcPSD|12114775 } // nhấn vị trí “trống” if (ID