ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH ĐẠI HỌC CÔNG NGHỆ THÔNG TIN LẬP TRÌNH SYMBOLIC CHO TRÍ TUỆ NHÂN TẠO ĐỀ TÀI: BÀI TOÁN NGƯỜI ĐƯA THƯ Giảng viên hướng dẫn: PGS TS. Đỗ Văn Nhơn Học viên thực hiện: Ngô Hải Linh MSHV: CH1101019 Lớp cao học khóa 6 TP Hồ Chí Minh, tháng 1/2013 Bài toán người đưa thư MỤC LỤC Mở đầu 2 1. Phát biểu bài toán 3 2. Thuật toán tìm tất cả đường đi và chu trình Hamilton 3 3. Một số thuật toán Heuristic cho bài toán người đưa thư 4 1. Giải thuật láng giềng gần nhất 4 2. Chuyển cặp hay heuristic Lin-Kernighan 4 3. k-opt heuristic 5 4. v-opt (variable-opt) heuristic 5 4. Cài đặt thuật toán 5 Kết luận 6 Lập trình symbolic cho Trí tuệ nhân tạo Trang 2 Bài toán người đưa thư MỞ ĐẦU Maple là một hệ thống tính toán trên các biểu thức đại số và minh họa toán học mạnh mẽ. Từ khi ra đời đến nay, Maple đã phát triển qua rất nhiều phiên bản khác nhau, Maple có thể chạy trên nhiều hệ điều hành khác nhau. Trải qua nhiều phiên bản, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh giúp tính toán toán học ở bậc phổ thông và đại học. Bên cạnh đó, Maple còn là một ngôn ngữ lập trình thủ tục khá đơn giản và mạnh mẽ, có khả năng tương tác với các ngôn ngữ lập trình khác. Trong bài viết này, em sử dụng công cụ Maple để giải bài toán Người đưa thư: “Để tiết kiệm thời gian đi đưa thư trong một địa phương. Người đưa thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi ngắn nhất”. Thông qua những buổi giảng dạy và hướng dẫn của thầy Đỗ Văn Nhơn, giúp em nắm được kiến thức tổng quát về tính toán hình thức trên máy tính và việc lập trình tính toán hình thức, từ đó dùng công cụ lập trình symbolic trong việc thiết kế cài đặt một số chương trình giải quyết các vấn đề của trí tuệ nhân tạo như các thuật giải heuristic, biểu diễn và xử lý trí thức, suy luận dựa trên cơ sở tri thức. Do khả năng và kiến thức có hạn, nên bài viết còn nhiều sai sót. Em xin chân thành cảm ơn thầy đã giảng dạy và hướng dẫn để hoàn thành bài viết này. Lập trình symbolic cho Trí tuệ nhân tạo Trang 3 Bài toán người đưa thư 1. Phát biểu bài toán Bài toán: Để tiết kiệm thời gian đi đưa thư trong một thành phố. Người đưa thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi ngắn nhất. Hình 1: Đồ thị G có trọng số dương Bài toán có thể phát biểu lại như sau: Giả sử có một đồ thị có trọng số dương, tìm đường đi ngắn nhất qua tất cả các đỉnh của đồ thị rồi trở về đỉnh ban đầu. Cho đồ thị G = (V, E). Trong đó: V là tập cạnh của đồ thị. E là tập đỉnh của đồ thị. 2. Thuật toán tìm tất cả đường đi và chu trình Hamilton Phát biểu thuật toán như sau: B1: Đưa đỉnh x vào đường đi. B2: Kiểm tra chu trình đã đi hết tất cả các đỉnh chưa? và đồng thời kiểm tra đỉnh đầu và đỉnh cuối của chu trình có cạnh nối hay không? Nếu true → chu trình Hamilton. Ngược lại gọi B3. B3: Duyệt hết tất cả các đỉnh kề với x. B4: Kiểm tra đỉnh kề đã đi qua chưa? Nếu true → gọi lại hàm đệ qui tìm chu trình Hamilton. B5: Xóa đỉnh kề ra khỏi chu trình. Lập trình symbolic cho Trí tuệ nhân tạo Trang 4 Bài toán người đưa thư Đồ thị có n đỉnh, khi đó thuật toán tối ưu cho bài toán này sẽ là thuật toán tìm đường đi ngắn nhất cho chu trình Haminton. Do đó, thuật toán tối ưu sẽ có độ phức tạp là O(n!) Không thể thực hiện thuật toán khi số đỉnh lớn. 3. Một số thuật toán Heuristic cho bài toán người đưa thư 3.1. Giải thuật láng giềng gần nhất Theo kinh nghiệm của con người trong thực tế thì khi ta đi trên những đoạn đường ngắn nhất thì cuối cùng ta sẽ có một hành trình ngắn nhất → giải thuật láng giềng gần nhất (Nearest Neighbor) hay còn gọi là thuật giải tham lam (Greedy Algorithm). Phát biểu thuật toán như sau: While (chưa đi hết các đỉnh) { Khi đã đến một đỉnh của đồ thị. Chọn đỉnh kế tiếp theo nguyên tắc: liệt kê tất cả các con đường từ đỉnh hiện tại đến các đỉnh chưa đi đến, rồi chọn con đường ngắn nhất. } Ví dụ về thuật giải trên: với một đồ thị trọng số dương như hình 1 trên. Nếu ta xuất phát từ đỉnh sổ 1, thì đỉnh tiếp theo phải đến là 2 (vì cạnh 1-2 có trọng số nhỏ nhất so với các đỉnh chưa đến của 1), như vậy tiếp theo ta sẽ đến các đỉnh theo thứ tự là 5, 3, 4 và trở về 1. Như vậy đường đi ngắn nhất theo giải thuật trình bày trên tìm được là: 1 + 3 + 2 + 1+ 7 = 14 Đánh giá: Giải thuật này nhanh chóng đưa ra một đường đi ngắn và hiệu quả, có độ phức tạp là O(n 2 ). Tuy nhiên, có nhiều cách sắp xếp đặc biệt các thành phố làm cho giải thuật trên đưa ra đường đi có độ phức tạp xấu nhất. 3.2. Chuyển cặp hay heuristic Lin-Kernighan Kỹ thuật chuyển cặp hay “2-opt” bao gồm việc lặp lại việc xóa 2 cạnh và thay chúng bằng hai cạnh khác nối đoạn tạo bởi cạnh bị xóa tạo thành đường đi ngắn hơn. Đây là trường hợp đặc biệt của kỹ thuật k-opt. Lập trình symbolic cho Trí tuệ nhân tạo Trang 5 Bài toán người đưa thư 3.3. k-opt heuristic Lấy một đường đi và xóa k cạnh đôi một không có điểm chung. Xây dựng lại đường đi từ những mảnh còn lại để không có hai mảnh đường đi nào nối với nhau (không nối hai điểm đầu cuối của 2 mảnh với nhau sẽ tạo thành đường đi khép kín). Điều này làm đơn giản hóa bài toán Người đưa thư thành bài toán đơn giản hơn rất nhiều. Mỗi điểm đầu cuối có thể được nối tới 2k − 2 điểm khác có thể: trong số 2k tổng số điểm đầu cuối có thể, trừ ra hai điểm đầu cuối của mảnh đang xem xét. 3.4. v-opt (variable-opt) heuristic Kỹ thuật v-opt là sự tông quát hóa của k-opt kỹ thuật. Trong khi kỹ thuật k-opt xóa đi một số lượng cố định (k cạnh) từ đường đi ban đầu, còn kỹ thuật v-opt không xóa đi một số lượng cạnh cố định. Thay vì vậy nó phát triển tập này khi quá trình tìm kiếm tiếp tục. Kỹ thuật v-opt được xem như một trong số những giải thuật heuristic mạnh cho bài toán và có thể giải quyết các trường hợp đặc biệt, như bài toán chu trình Hamilton. 4. Cài đặt thuật toán Chương trình được viết bằng phần mềm Maple 16. Chương trình thực hiện 2 thuật giải là tìm tất cả chu trình Hamilton (thuật toán đệ quy) và thuật giải heuristic tìm đường đi Hamilton ngắn nhất (thuật giải Nearest Neighbor). - Kết quả thử nghiệm thuật toán Hamilton sử dụng đệ quy: > > > Chu trinh Hamilton : [1, 2, 3, 4, 5, 1] [1, 2, 3, 5, 4, 1] [1, 2, 4, 3, 5, 1] [1, 2, 4, 5, 3, 1] [1, 2, 5, 3, 4, 1] [1, 2, 5, 4, 3, 1] [1, 3, 2, 4, 5, 1]… Lập trình symbolic cho Trí tuệ nhân tạo Trang 6 Bài toán người đưa thư - Kết quả thử nghiệm thuật giải Nearest Neighbor: > > > > [1, 2, 5, 3, 4, 1] KẾT LUẬN Qua bài viết trên cho chúng ta có cái nhìn khái quát về các giải thuật heuristic tìm đường đi, chu trình Hamilton ngắn nhất. Và ứng dụng phần mềm Maple để giải quyết các vấn đề của trí tuệ nhân tạo như các thuật giải heuristic trên. Tài liệu tham khảo chính: (1) Bài giảng Lập trình symbolic cho trí tuệ nhân tạo - PGS. TS. Đỗ Văn Nhơn. (2) Lý thuyết đồ thị –Trần Đan Thư và Dương Anh Đức. Lập trình symbolic cho Trí tuệ nhân tạo Trang 7 . thành bài viết này. Lập trình symbolic cho Trí tuệ nhân tạo Trang 3 Bài toán người đưa thư 1. Phát biểu bài toán Bài toán: Để tiết kiệm thời gian đi đưa thư trong một thành phố. Người đưa thư. tìm chu trình Hamilton. B5: Xóa đỉnh kề ra khỏi chu trình. Lập trình symbolic cho Trí tuệ nhân tạo Trang 4 Bài toán người đưa thư Đồ thị có n đỉnh, khi đó thuật toán tối ưu cho bài toán này. khảo chính: (1) Bài giảng Lập trình symbolic cho trí tuệ nhân tạo - PGS. TS. Đỗ Văn Nhơn. (2) Lý thuyết đồ thị –Trần Đan Thư và Dương Anh Đức. Lập trình symbolic cho Trí tuệ nhân tạo Trang 7