Báo cáo trí tuệ nhân tạo :xây dựng chương trình cho phép tìm kiếm đường đi từ 1 điểm trên bản đồ đến 1 điểm khác trên bản đồ theo phương pháp tìm kiếm Nhành và cận

19 1.9K 17
Báo cáo trí tuệ nhân tạo :xây dựng chương trình cho phép tìm kiếm đường đi từ 1 điểm trên bản đồ đến 1 điểm khác trên bản đồ theo phương pháp tìm kiếm Nhành và cận

Đ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 số 15: Không gian trạng thái được mô tả là bản đồ giao thông của 1 xã, phường nào đó. Hãy xây dựng chương trình cho phép tìm kiếm đường đi từ 1 điểm trên bản đồ đến 1 điểm khác trên bản đồ theo phương pháp tìm kiếm Nhành và cậnI.Cơ sở lý thuyết:1.Bài toán tìm kiếmBài toán tìm kiếm có thể hiểu 1 cách tổng quát là: Trong 1 tập hợp rất nhiều đối tượng tìm một đối tượng thỏa mãn một số yêu cầu nào đó. Ví dụ như các trò chơi, ví dụ như cờ caro, cờ vua cũng có thể xem là 1 bài toán tìm kiếm, hoặc tìm đường đi cũng là 1 bài toán tím kiếm khá cơ bản và được tập trung nghiên cứu trong môn:” Nhập môn Trí tuệ Nhân tạo “Kỹ thuật tìm kiếm được chia ra làm 3 loại:- Kỹ thuật tìm kiếm mù: Trong bài toán này, chúng ta hoàn toàn không biết gì về các đối tượng để hướng dẫn tìm kiếm mà chỉ đơn thuần là xem xét tất cả các đối tượng của 1 hệ thống để phát hiện ra đối tượng cần tìm. Một số kỹ thuật tìm kiếm mù: Tìm kiếm theo chiều rộng (Breadth-first search) và tìm kiếm theo chiều sâu (depth-first search)- Kỹ thuật tìm kiếm có kinh nghiệm (Tìm kiếm với hàm Heuristic): Hàm Heuristic là hàm đánh giá được xây dựng nhờ vào kinh nghiệm và sự hiểu biết của chúng ta về vấn đề cần giải quyết. Một số kỹ thuật tìm kiếm có kinh nghiệm: Tìm kiếm beam, Tìm kiếm leo đồi.- Kỹ thuật tìm kiếm tối ưu: Trong không gian trạng thái cần tìm kiếm, mỗi 1 đối tượng x đều gắn với 1 số đo giá trị của nó là f(x) , mục tiêu đặt ra là tìm đối tượng có giá trị f(x) lớn nhất hoặc nhỏ nhất. Hàm f(x) được gọi là hàm mục tiêu. Một số kỹ thuật tìm kiếm tối ưu: Các kỹ thuật tìm đường đi ngắn nhất trong không gian trạng thái (Thuật toán A*, thuật toán nhánh và cận, …..), các kỹ thuật tìm kiếm đối tượng tốt nhất (Tìm kiếm leo đồi, tìm kiềm Gradient, …), tìm kiếm bắt chước sự tiến hóa (Thuật toán gene)Trong các kỹ thuật tìm kiếm, đồ án này sử dụng kỹ thuật tìm kiếm tối ưu Nhánh và cận.2. Thuật toán Nhánh và cận: Thuật toán nhánh và cận là thuật toán sử dụng tìm kiếm leo đồi với hàm đánh giá f(u)a.Tìm kiếm leo đồi Tìm kiếm leo đồi là phương pháp tìm kiếm theo chiều sâu có sử dụng hàm đánh giá Khác với phương pháp tìm kiếm theo chiều sâu, khi phát triển 1 đỉnh u, ta lựa chọn trong số các đỉnh con của u, đỉnh nào có nhiều hứa hẹn nhất thì phát triển, việc xác định đỉnh nào có nhiều hứa hẹn nhất được thực hiện bởi hàm đánh giáVD: Xét không gian trạng thái , Tìm đường

Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CƠNG NGHỆ THƠNG TIN BÁO CÁO MƠN HỌC TRÍ TUỆ NHÂN TẠO Giáo viên hướng dẫn: Ngô Hữu Phúc HÀ NỘI 3/2010 Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Báo cáo đồ án môn: Trí tuệ nhân tạo Giáo viên: Ngơ Hữu Phúc Sinh Viên: Nguyễn Thế Định – Tin học 5A Đồ án số 15: Không gian trạng thái mô tả đồ giao thơng xã, phường Hãy xây dựng chương trình cho phép tìm kiếm đường từ điểm đồ đến điểm khác đồ theo phương pháp tìm kiếm Nhành cận I Cơ sở lý thuyết: 1.Bài tốn tìm kiếm Bài tốn tìm kiếm hiểu cách tổng quát là: Trong tập hợp nhiều đối tượng tìm đối tượng thỏa mãn số yêu cầu Ví dụ trị chơi, ví dụ cờ caro, cờ vua xem tốn tìm kiếm, tìm đường tốn tím kiếm tập trung nghiên cứu môn:” Nhập môn Trí tuệ Nhân tạo “ Kỹ thuật tìm kiếm chia làm loại: - Kỹ thuật tìm kiếm mù: Trong tốn này, hồn tồn khơng biết đối tượng để hướng dẫn tìm kiếm mà đơn xem xét tất đối tượng hệ thống để phát đối tượng cần tìm Một số kỹ thuật tìm kiếm mù: Tìm kiếm theo chiều rộng (Breadth-first search) tìm kiếm theo chiều sâu (depth-first search) - Kỹ thuật tìm kiếm có kinh nghiệm (Tìm kiếm với hàm Heuristic): Hàm Heuristic hàm đánh giá xây dựng nhờ vào kinh nghiệm hiểu biết vấn đề cần giải Một số kỹ thuật tìm kiếm có kinh nghiệm: Tìm kiếm beam, Tìm kiếm leo đồi - Kỹ thuật tìm kiếm tối ưu: Trong khơng gian trạng thái cần tìm kiếm, đối tượng x gắn với số đo giá trị f(x) , mục tiêu đặt tìm đối tượng có giá trị f(x) lớn nhỏ Hàm f(x) gọi hàm mục tiêu Một số kỹ thuật tìm kiếm tối ưu: Các kỹ thuật tìm đường ngắn khơng gian trạng thái (Thuật toán A*, thuật toán nhánh cận, … ), kỹ thuật tìm kiếm đối tượng tốt (Tìm kiếm leo đồi, tìm kiềm Gradient, …), tìm kiếm bắt chước tiến hóa (Thuật tốn gene) Trong kỹ thuật tìm kiếm, đồ án sử dụng kỹ thuật tìm kiếm tối ưu Nhánh cận Thuật toán Nhánh cận: Thuật toán nhánh cận thuật tốn sử dụng tìm kiếm leo đồi với hàm đánh giá f(u) Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A a Tìm kiếm leo đồi Tìm kiếm leo đồi phương pháp tìm kiếm theo chiều sâu có sử dụng hàm đánh giá Khác với phương pháp tìm kiếm theo chiều sâu, phát triển đỉnh u, ta lựa chọn số đỉnh u, đỉnh có nhiều hứa hẹn phát triển, việc xác định đỉnh có nhiều hứa hẹn thực hàm đánh giá VD: Xét khơng gian trạng thái , Tìm đường từ A đến B: - Đầu vào: Trạng thái đầu A, trạng thái kết thúc B - Thực thuật toán: Bước 1: Xét A sinh C,D,E với h(C) = 15, h(D) = 6, h(E) = h(D) nhỏ nên chọn D Bước : Xét D sinh I, F với h(F) = 10, h(I) = h(I) nhỏ nên chọn I Bước 3: Xét I sinh B G B trạng thái kết thúc - Thuật toán biểu diễn thơng qua sau: Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Cài đặt thuật toán: Procedure Hill_Climbing_Search; Begin Bước 1: Khởi tạo danh sách L chứa trạng thái đầu; Bước 2: Loop If L rỗng then { thông báo thất bại; stop; } Loại trạng thái u đầu danh sách 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 đặt v vào L cho phần tử đưa vào đầu danh sách L có đánh giá giảm dần; Bước 3: End; b Thuật toán nhánh cận Trong thuật toán này, bước phát triển trạng thái u, chọn lấy trang thái v số trạng thái kề với u cho f(v) đạt Làm tương tự khi: - V đích, Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A - V ko có đỉnh kề, - V có f(v) lớn độ dài đường thời Khi đó, không phát triển đỉnh v mà quay cha v để tìm trạng thái tốt trạng thái chưa xét Ví dụ thuật tốn Nhánh cận: Xét khơng gian trạng thái trên, tìm đường ngắn từ A đến B Đầu vào: A trang thái ban đầu, B trạng thái đích Thực thuật tốn:  Phát triển A, có đỉnh C, D, E, F với f(C) = 24; f(D) = 13; f(E) = 21; f(F) = 27  Chọn D, sinh H, E (mới) với f(H) = 25; f(E) = 19  Chọn E, sinh K, I với f(K) = 17; f(I) = 18 Chọn K, sinh B với f(B) = g(B) = 21 → đường tạm thời 21  Từ B, quay K Từ K quay E  Từ E, sang I, f(I) = 18 < độ dài tạm thời 21 Sinh K, B với f(K) = 25, f(B) = g(B) = 19 → đường tạm thời 19  Với B, khơng tìm điểm có chi phí tốt  Vậy đường tối ưu có độ dài 19 Thuật tốn biểu diễn qua sau: Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Cài đặt thuật toán: Procedure Branch_and_Bound; Begin Khởi tạo danh sách L chứa trạng thái ban đầu; Gán giá trị ban đầu cho cost; Loop 2.1 If L rỗng then stop; 2.2 Loại trạng thái u đầu danh sách L; 2.3 If u trạng thái kết thúc then if g(u) ≤ cost then { cost ← g(u); quay lại 2.1;} 2.4 If f(u) > cost then quay 2.1; 2.5 For trạng thái v kề u { g(v) ← g(u)+k(u,v); f(v) ← g(v)+h(v); đặt v vào danh sách L1} 2.6 Sắp xếp L1 theo thứ tự tăng hàm f; 2.7 Chuyển L1 vào đầu danh sách L cho L trạng thái đầu L1 vào đầu L; End; Nhận xét: Thuật toán nhánh cận thuật toán đầy đủ tối ưu nếu: - Hàm đánh giá h(u) đánh giá thấp Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc - Sinh viên : Nguyễn Thế Định – Tin học 5A Độ dài cung khơng nhỏ số dương Từ sở lý thuyết trên, em xây dựng chương trình:” Tìm đường ngắn “ dùng thuật toán Nhánh cận: II Đồ án: Giao diện chương trình: Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc - Sinh viên : Nguyễn Thế Định – Tin học 5A Giao diên chương trình gồm có: • combobox dùng để lựa chọn điểm xuất phát đich đến • label để hiển thị: độ dài tối ưu, đường tối ưu đường khác trình duyệt • ô picturebox dùng để hiển thị đồ giao thơng • buttton: button tìm đường để bắt đầu trình tìm kiếm sau chọn điểm xuất phát đich đến, button thoát để khỏi chương trình • 32 button dùng để đánh dấu mốc đồ Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Các bước xây dựng chương trình a Cấu trúc liệu: u cầu tốn:: Khơng gian trạng thái mô tả đồ giao thông xã, phường Hãy xây dựng chương trình cho phép tìm kiếm đường từ điểm đồ đến điểm khác đồ theo phương pháp tìm kiếm Nhành cận Đầu vào: đồ giao thông Không gian trạng thái xét đồ giao thơng: - Các đường có mũi tên đường chiều, chiều đường theo chiều mũi tên Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A - Đặt button để xác định điểm mốc - Lưu tọa độ button vào mảng: vittribtn(2,n) (Chỉ số n >= số nút đồ) Nút A có tọa độ (Ax, Ay) lưu mảng vitribtn sau Vitribtn(1,A) = Ax Vitribtn(2,A) = Ay vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, 1) = 66 1) = 51 2) = 210 2) = 3) = 307 3) = 25 4) = 201 4) = 67 5) = 295 5) = 88 6) = 373 6) = 101 7) = 137 7) = 162 8) = 184 8) = 171 9) = 280 9) = 193 10) = 388 10) = 216 11) = 401 11) = 127 12) = 507 12) = 242 13) = 122 13) = 202 14) = 175 14) = 222 15) = 269 15) = 252 16) = 314 16) = 266 17) = 384 17) = 289 18) = 531 18) = 273 19) = 529 19) = 327 20) = 306 20) = 291 21) = 226 21) = 314 22) = 287 22) = 336 23) = 416 23) = 366 24) = 529 Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, vitribtn(1, vitribtn(2, 24) 25) 25) 26) 26) 27) 27) 28) 28) 29) 29) 30) 30) 31) 31) 32) 32) = = = = = = = = = = = = = = = = = Sinh viên : Nguyễn Thế Định – Tin học 5A 390 69 336 182 385 258 413 42 118 150 57 168 376 260 146 118 Mảng vitribth lưu tọa độ 32 nút từ đến 32 tương ứng đồ - Việc xác định đường chiều chiều đồ giải sau: Khi có mốc button, Ví dụ đường Trần Phú đồ đường chiều Chiều đường Trần Phú theo hướng button ta đặt vào là: 12 -> 10 -> -> -> Vậy: Ta từ 12 đến 10 ko từ 10 đến 12 Đường Hùng Vương đường chiều, Chiều đường Hùng Vương theo hướng button: 14 -> -> -> Hoặc: -> -> -> 14 Vậy: Ta từ 14 đến hoăc đến 14 Vì vậy: Ta dùng mảng duong2chieu(n,n) (Chỉ số n >= số nút đồ) để xác định có đường hay ko từ nút A đến nút B Nếu từ nút A đến nut B, ta cho giá trị duong2chieu(A,B) = 1, Nếu từ nút A ko thể đến nút B ta cho giá trị duong2chieu(A,B) = Ví dụ: Vậy duong2chieu(A,B) = duong2chieu(B,A) = đường AB đường chiều Nếu duong2chieu(A,B) = duong2chieu(B,A) = đường A đến B đường chiều, từ A đến B ko từ B đến A Việc gán vào mảng duong2chieu(50,50) đồng thời biến đồ ta có thành đồ khơng gian trạng thái với nút đường chúng Trong toán cụ thể này, mảng duong2chieu có giá trị sau: Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc duong2chieu(2, 29) = duong2chieu(29, 2) = duong2chieu(32, 28) = duong2chieu(7, 32) = duong2chieu(32, 29) = duong2chieu(29, 32) = duong2chieu(30, 13) = duong2chieu(30, 28) = duong2chieu(28, 30) = duong2chieu(4, 29) = duong2chieu(29, 4) = duong2chieu(1, 29) = duong2chieu(29, 1) = duong2chieu(7, 28) = duong2chieu(1, 28) = duong2chieu(28, 1) = duong2chieu(4, 2) = duong2chieu(2, 4) = duong2chieu(4, 8) = duong2chieu(8, 4) = duong2chieu(8, 7) = duong2chieu(2, 3) = duong2chieu(3, 2) = duong2chieu(4, 5) = duong2chieu(5, 4) = duong2chieu(3, 5) = duong2chieu(5, 3) = duong2chieu(6, 3) = duong2chieu(3, 6) = duong2chieu(5, 6) = duong2chieu(6, 5) = duong2chieu(5, 9) = duong2chieu(9, 5) = duong2chieu(9, 8) = duong2chieu(6, 11) = duong2chieu(11, 6) = duong2chieu(12, 11) = duong2chieu(11, 12) = duong2chieu(12, 18) = duong2chieu(18, 12) = duong2chieu(18, 19) = duong2chieu(19, 24) = duong2chieu(10, 11) = duong2chieu(11, 10) = duong2chieu(10, 9) = duong2chieu(7, 13) = duong2chieu(13, 7) = duong2chieu(8, 14) = duong2chieu(14, 8) = duong2chieu(13, 14) = duong2chieu(14, 15) = duong2chieu(14, 21) = duong2chieu(21, 14) = duong2chieu(13, 25) = duong2chieu(25, 13) = duong2chieu(9, 15) = duong2chieu(15, 9) = duong2chieu(15, 16) = duong2chieu(16, 17) = Sinh viên : Nguyễn Thế Định – Tin học 5A Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc duong2chieu(17, duong2chieu(16, duong2chieu(20, duong2chieu(17, duong2chieu(20, duong2chieu(21, duong2chieu(26, duong2chieu(25, duong2chieu(26, duong2chieu(27, duong2chieu(20, duong2chieu(22, duong2chieu(23, duong2chieu(22, duong2chieu(27, duong2chieu(24, duong2chieu(18, duong2chieu(31, duong2chieu(17, duong2chieu(31, duong2chieu(10, duong2chieu(31, 19) 20) 16) 20) 17) 15) 21) 26) 25) 26) 22) 20) 22) 27) 22) 23) 31) 16) 31) 17) 31) 10) = = = = = = = = = = = = = = = = = = = = = = Sinh viên : Nguyễn Thế Định – Tin học 5A 1 1 1 1 1 1 1 1 1 1 1 Sau gán giá trị cho mảng duong2chieu(n,n) ta có khơng gian trạng thái sau: Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Và bây giờ, toán tìm đường đồ tốn tìm đường khơng gian trạng thái b Thuật tốn: Thuật tốn tìm kiếm Nhánh cận trình bầy phần Cơ sở lý thuyết cần xác định điểm xuất phát đích đến - Nút xuất phát nhập combobox1 - Dích đến nhập combobox2 Hàm mục tiêu f(u) dùng để so sánh hàm Heuristic F(u) = g(u) + h(u) G(u): Quãng đường từ điểm xuất phát đến u H(u): Giá trị ước lượng quãng đường từ u đến đích – Trong tốn h(u) khoảng cách đường chim bay từ u đến đích Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngơ Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Từ yêu cầu đó, ta cần có hàm tính khoảng cách điểm Public Function tinhkc(ByVal ox1 As Double, ByVal oy1 As Double, ByVal ox2 As Double, ByVal oy2 As Double) As Double Return (Math.Sqrt((ox2 - ox1) * (ox2 - ox1) + (oy2 - oy1) * (oy2 - oy1))) End Function Hàm tinhkc dùng để tính khoảng cách điểm A B với tham số truyền ox1: tọa độ x A, oy1: tọa độ y A, ox2: tọa độ x B oy2: tọa độ y B Công thức tính quảng cách: Math.Sqrt((ox2 - ox1) * (ox2 - ox1) + (oy2 - oy1) * (oy2 - oy1))) Hàm trả giá trị khoảng cách A B theo kiểu double Hàm duyệt trạng thái con: Public Sub dttcon(ByVal cha As Integer, ByVal gcha As Double) nhocha = cha demmc = Dim kcconcha As Double For i = To 32 If duong2chieu(cha, i) = Then mangcon(0, demmc, cha) = i ' Gán nút i vào mảng kcconcha = tinhkc(vitribtn(1, cha), vitribtn(2, cha), vitribtn(1, i), vitribtn(2, i)) ' Khoảng cách nút i nút cha mangcon(1, i, cha) = gcha + kcconcha 'Giá trị hàm G(i) = G(cha) + kc từ nút i đến cha mangcon(2, i, cha) = tinhkc(vitribtn(1, i), vitribtn(2, i), vitribtn(1, dich), vitribtn(2, dich)) ' h(i) - Giá trị ước lượng từ nút i đến đích demmc += End If Next ' Nếu số nút > xắp xếp nút giảm dần theo giá trị f Dim a, b, fa, fb As Double If demmc > Then For i = To demmc - For j = i + To demmc - a = mangcon(0, i, cha) b = mangcon(0, j, cha) fa = mangcon(1, a, cha) + mangcon(2, a, cha) fb = mangcon(1, b, cha) + mangcon(2, b, cha) If fa < fb Then temp = a a = b Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A b = temp mangcon(0, i, cha) = a mangcon(0, j, cha) = b End If Next Next End If If demmc = Then ktracon = True Else ktracon = False End If End Tham số truyền vào gồm nút cha G(nút cha) Dùng vòng lặp for chạy biến i từ đến số điểm mốc (32) Nếu giá trị i mà có đường từ nút cha đến nút I (duong2chieu(cha,i) = 1) i nút cha Mỗi nút i cần lưu lại giá trị -Lưu lại i -Lưu lại giá trị h(i) - Quãng đường ước lượng từ nút i đến đích -Lưu lại giá trị f(i) – f(i) = g(cha) + khoảng cách từ nút i đến nút cha Với g(cha) quãng đường qua nút cha -Lưu lại cha nút i Các giá trị Ta lưu vào mảng là: mangcon(2,n) (n >= số nút đồ) Mang(0,demmc,cha) lưu giá trị I (Giá trị nút con) Mang(1, I, cha) lưu giá trị hàm G(i) Mang(2, i, cha) lưu lại giá trị h(u) Biến nhocha dùng để lưu lại cha nút i Sau tìm i nút cha, Nếu số từ trở lên, ta dùng thuật toán xắp xếp bọt để xắp xếp i tìm theo thứ tự giảm dần giá trị f(i) Nếu nút cha nhập vào ko có con, Ta trả giá trị ktracon = false Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Sau xây dựng xong hàm duyệt trạng thái (dttcon) ta bắt đầu vào thuật tốn tìm kiếm Nhánh cận thực click button Tìm đường (btntimduong) ' - Sự kiện click vào nút tìm đường -Private Sub btntimduong_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btntimduong.Click khoitao() Dim nutdangxet, nutcha, sonutdiqua, nhokqtoiuu, nhovitri, soduongdi As Integer Dim quangduong, cost, costphu, nhotam As Double Mangduongdi(1, 50) = New Integer mangvidu(1, 50) = New Integer soduongdi = sonutdiqua = cost = 100000 quangduong = Try dich = Convert.ToDouble(ComboBox2.Text) start = Convert.ToDouble(ComboBox1.Text) stackduyet.Push(start) stackduyet.Push(start) Mangduongdi(0, 0) = start Mangduongdi(1, 0) = start lap: If stackduyet.Count = Then GoTo ketqua Else nutdangxet = stackduyet.Pop nutcha = stackduyet.Pop temp = mangcon(1, nutdangxet, nutcha) quangduong = temp + mangcon(2, nutdangxet, nutcha) If nutdangxet = dich Then soduongdi += If quangduong < cost Then ' Lưu lại quãng đường tối ưu tr'c costphu = cost nhotam = nhokqtoiuu For i = To nhotam mangvidu(0, i) = mangketqua(0, i) mangvidu(1, i) = mangketqua(1, i) Next 'Update quãng đường tối ưu cost = temp nhokqtoiuu = sonutdiqua ' Lưu lại vị trí sát đích For i = To sonutdiqua mangketqua(0, i) = Mangduongdi(0, i) mangketqua(1, i) = Mangduongdi(1, i) Next GoTo lap Else ' -Lưu lại đường khác costphu = temp Thuật toán Nhánh cận Giáo viên hướng dấn : Ngô Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A nhotam = sonutdiqua For i = To sonutdiqua mangvidu(0, i) = Mangduongdi(0, i) mangvidu(1, i) = Mangduongdi(1, i) Next ' GoTo lap End If Else If quangduong < cost Then dttcon(nutdangxet, mangcon(1, nutdangxet, nutcha)) ' Nếu nút duyệt ko có -> Bỏ qua If ktracon = True Then GoTo lap End If For i = To sonutdiqua If sonutdiqua > Then If nutdangxet = Mangduongdi(0, i) And nutcha = Mangduongdi(1, i) Then For j = i To sonutdiqua Mangduongdi(0, j) = Mangduongdi(1, j) = Next GoTo lap End If End If Next 'Gán vào mảng tạm đường For i = To sonutdiqua If nutcha Mangduongdi(0, sonutdiqua - i) Then vitribtn(0, sonutdiqua - i) = vitribtn(1, sonutdiqua - i) = Else nhovitri = sonutdiqua - i Exit For End If Next sonutdiqua = nhovitri + Mangduongdi(0, sonutdiqua) = nutdangxet Mangduongdi(1, sonutdiqua) = nutcha For i = To demmc - stackduyet.Push(nhocha) stackduyet.Push(mangcon(0, i, nhocha)) Next Else GoTo lap End If End If GoTo lap End If ketqua: ' Đường tối ưu Thuật tốn Nhánh cận Giáo viên hướng dấn : Ngơ Hữu Phúc Sinh viên : Nguyễn Thế Định – Tin học 5A Label4.Text = Convert.ToString(cost * 2) + " (mét)" For i = To nhokqtoiuu Label6.Text += Convert.ToString(mangketqua(0, i)) + " -> " Next Label6.Text += Convert.ToString(dich) ' Hiển thị đường khác trình duyet: If soduongdi > Then For i = To nhotam Label8.Text +=Convert.ToString(mangvidu(0, i)) + " ->" Next Label8.Text = Label8.Text + Convert.ToString(dich) + " = " + Convert.ToString(costphu * 2) Else Label8.Text = "Ko tim thay duong nao khac qua trinh duyet" End If Catch ex As Exception MsgBox("Nhập lại giá trị combobox") End Try End Sub III.-Kết thu từ chương trình tìm đường sử dụng thuật tốn Nhánh cận: Khn khổ đồ án giới hạn việc minh họa cho thuật toán Nhánh cận, chưa hướng tới việc áp dụng thực tế Nếu muốn áp dụng cho thực tế cần nhiều thời gian trình tìm hiểu hơn, sau kết thúc mơn học này, em mong thầy giúp đỡ em để em hồn thành chương trình cách hồn thiện Em xin cám ơn ! IV.Tài liệu tham khảo: -Slide bải giảng thầy Ngô Hữu Phúc -Và số tài liệu khác ... tả đồ giao thơng xã, phường Hãy xây dựng chương trình cho phép tìm kiếm đường từ đi? ??m đồ đến đi? ??m khác đồ theo phương pháp tìm kiếm Nhành cận I Cơ sở lý thuyết: 1. Bài tốn tìm kiếm Bài tốn tìm kiếm. .. 2 01 4) = 67 5) = 295 5) = 88 6) = 373 6) = 10 1 7) = 13 7 7) = 16 2 8) = 18 4 8) = 17 1 9) = 280 9) = 19 3 10 ) = 388 10 ) = 216 11 ) = 4 01 11) = 12 7 12 ) = 507 12 ) = 242 13 ) = 12 2 13 ) = 202 14 ) = 17 5 14 )... xây dựng chương trình a Cấu trúc liệu: Yêu cầu tốn:: Khơng gian trạng thái mơ tả đồ giao thông xã, phường Hãy xây dựng chương trình cho phép tìm kiếm đường từ đi? ??m đồ đến đi? ??m khác đồ theo phương

Ngày đăng: 25/03/2014, 21:52

Từ khóa liên quan

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

Tài liệu liên quan