Các kết quả thực nghiệm giải bài toá n2

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán dijkstra fibonacci heap, thuật toán ACO tìm đường đi tối ưu và ứng dụng (Trang 68 - 74)

Thực nghiệm tiến hành trên 3 bộ test, mỗi bộ test được chương trình thực hiện 06 lần. Mỗi lần thực hiện, chương trình sẽ tự động khởi tạo lại cường độ vết mùi nếu qua 10000 vòng lặp mà độ dài G-best không thay đổi. Kết quả được thống kê trong bảng 3.2. Trong bảng 3.2: N là số đỉnh (nút giao thông), M là số cung (số các đường một chiều nối trực tiếp hai nút giao thông), K là số nút giao thông buộc phải đi qua, NC là số vòng lặp trong vòng repeat, X, Y hiểu như trong công thức (2.1), SK là số kiến tham gia tìm lời giải.

Bảng 3.2. Thống kê kết quả thực nghiệm chương trình giải bài toán 2

Tên test N M K NC X Y SK ĐỘ DÀI ĐƯỜNG ĐI

Test00 1000 10994 21 200000 1 2 15 116793, 118358, 117187, 116778, 116458, 116587 1000 10994 21 10000 1 16 15 111766, 111968, 111415, 111944, 112052,112147 1000 10994 21 200000 1 16 15 106916, 108236, 106410, 106270, 105933, 106936 Test01 1000 10994 41 400000 1 2 20 208911, 208911, 208911, 208911, 208911, 208911 1000 10994 41 400000 1 6 20 208911, 208911, 208911, 208911, 208911, 208911 1000 10994 41 400000 1 12 20 208819, 204349, 208911, 202159, 208766, 207800 Test02 1200 26181 51 1 1 2 25 119549, 119549, 119549, 119549, 119549, 119549, 1200 26181 51 100000 1 2 25 119549, 119549, 119549, 119549, 119549, 119549, 1200 26181 51 400000 1 2 25 119549, 119549, 119549, 119549, 119549, 119549,

Dưới đây là kết quả chụp lại màn hình trong một lần chạy thử chương trình với bộ test00:

Thống kê kết quả ở bảng 3.2 cho ta một số nhận xét sau:

+ Thuật toán luôn có tính hội tụ (số vòng lặp càng nhiều thì lời giải thu được càng có xu hướng tốt hơn (test00, test01).

+ Khi độ dài G-best lớn làm cho Tmin, Tmax rất bé, vì thế mùi ở đa số các

cung nhanh chóng giảm về Tmin, do đó nếu tỉ lệ giữa Y và X nhỏ thì khả năng

tìm được lời giải tốt hơn G-best hiện có là rất khó, do đó khả năng hội tụ rất

chậm. Ví dụ ở test00 khi y = 2, x = 1 số vòng lặp lên đến 200000 nhưng kết quả vẫn không tốt bằng khi cho y = 16, x = 1 mà số vòng lặp chỉ là 10000.

Hay như ở test01: Khi x = 1, y = 2 hoặc y = 6, kết quả cho thấy G-best không thay đổi khi số vòng lặp lên tới 400000 (khi số vòng lặp = 1 kết quả vẫn như vậy), tuy nhiên khi tăng y lên 12 thì thu được G-best tốt hơn như đã thấy.

Tác giả đề xuất một cách khắc phục tình trạng độ dài G-best quá lớn là co độ dài G–best theo một hệ số c với c là một tham số. Tuy nhiên vấn đề này cần được nghiên cứu kỹ thêm nữa.

+ Khi số đỉnh trong G1 lớn, do G1 là đồ thị đầy đủ nên số cung rất lớn nên số cách đi cũng rất lớn, dẫn đến khả năng tìm được đường đi tốt hơn G- best hiện có là rất thấp nếu thủ tục tkcb dùng thông tin heuristic mạnh tìm được lời giải ban đầu tốt. Kết quả ở test02 thể hiện điều này.

Các tệp input trong các test thử nghiệm chương trình này được tạo ngẫu nhiên theo thuật toán sau:

- N, M, s, K nhập từ bàn phím.

- Xây dựng ma trận trọng số c của đồ thị G như sau: Ban đầu c[i,j] := 0

i, j = 1.. N. Thực hiện M lần tìm cặp số nguyên dương ngẫu nhiên u, v thỏa

mãn 1 ≤ u ≠ v ≤ N và c[u,v] = 0 (dùng vòng lặp repeat để tìm cặp u, v). Với

mỗi cặp (u,v) như vậy ta gán cho c[u,v] một trọng số dương nào đó bằng hàm random.

- Để đảm bảo đồ thị liên thông mạnh, xuất phát từ đỉnh 1 ta duyệt một vòng qua tất cả các đỉnh theo thứ tự tăng dần rồi quay về 1, nếu c[i, i+1] = 0 thì c[i, i +1] được gán cho một trọng số không âm (thường là khá lớn để các cung này ít khả năng được chọn) và tăng M lên 1 đơn vị, làm tương tự với

cung (N, 1).

- Dựa vào ma trận trọng số c vừa xây dựng, in ra tệp input biểu diễn đồ thị G ở dạng danh sách cạnh.

3.3. Kết luận chương

Chương 3 của luận văn đã áp dụng thuật toán Dijkstra Fibonacci heap và thuật toán MMAS để giải quyết hai bài toán có nhiều ứng dụng trong thực tế đó là bài toán tìm đường đi ngắn nhất giữa hai điểm trên mạng giao thông và bài toán TSP mở rộng. Với bài toán tìm đường đi ngắn nhất, khi áp dụng Dijkstra Fibonacci heap thì hiệu quả hơn rất nhiều so với khi áp dụng thuật toán Dijkstra nguyên thủy. Trong trường hợp số đỉnh lớn và đồ thị thưa chương trình áp dụng Dijkstra Fibonacci heap có thể chạy nhanh hơn hàng trăm lần.

Đối với bài toán TSP mở rộng nếu tìm lời giải chính xác thì ta phải xét tất cả các hoán vị của k +1 nên độ phức tạp của thuật toán là (k +1)!. Vì vậy

chương trình chỉ có thể thực hiện với k nhỏ cỡ vài chục. Khi áp dụng thuật

toán MMAS, tuy kết quả chỉ là gần đúng nhưng chương trình có thể thực hiện được với k lên đến hàng nghìn. Khi kết hợp cả MMAS và Dijkstra Fibonacci heap thì ở phần xây dựng đồ thị G1 độ phức tạp chỉ là O(k (n log n +m)),

còn nếu dùng thuật toán khác như thuật toán Floyd thì độ phức tạp là O(k n3)

hoặc nếu dùng thuật toán Dijkstra bình thường thì độ phức tạp là O(kn2). Vì

vậy khi đồ thị thưa thì việc dùng Dijkstra Fibonacci heap cũng giúp nâng cao hiệu quả của thuật toán rất nhiều.

KẾT LUẬN

Đề tài đã trình bày, ứng dụng hai thuật toán tìm đường đi tối ưu:

- Thuật toán Dijkstra Fibonacci heap tương đối mạnh, nó có thể được ứng dụng để giải quyết các bài toán cả trong nghiên cứu lý thuyết và trong thực tiễn. Điểm mấu chốt của Fibonacci heap là nó trì hoãn một số thao tác chưa cần thực hiện khi còn có thể, mục đích của việc này là nhằm chờ đến lúc buộc phải thực hiện các công việc đã trì hoãn thì thực hiện cùng một lúc nhiều công việc, điều đó giúp giảm bớt các phép tính toán. Mặt khác, nếu số lượng các cây trong một Fibonacci heap không lớn thì có thể nhanh chóng xác định nút cực tiểu mới bằng thủ tục EXTRACT_MIN. Luận văn đã ứng dụng thành công Dijkstra Fibonacci heap vào việc giải bài toán tìm đường đi ngắn nhất trên mạng giao thông, hiệu quả của nó đã được trình bày trong chương 3.

- Thuật toán ACO là thuật toán tối ưu gần đúng, tuy nhiên nó có thể được ứng dụng để giải quyết các bài toán thực tiễn một cách hiệu quả. Thuật ACO kết hợp thông tin heuristic và thông tin về cường độ vết mùi nhờ mô phỏng hoạt động của đàn kiến có các ưu điểm nổi trội sau: Việc tìm kiếm ngẫu nhiên dựa trên các thông tin heuristic cho phép tìm kiếm linh hoạt và mềm dẻo trên miền rộng hơn thuật toán heuristic sẵn có, do đó cho ta lời giải tốt hơn và có thể tìm được lời giải tối ưu. Việc sử dụng thông tin về cường độ vết mùi cho phép ta từng bước thu hẹp không gian tìm kiếm mà vẫn không loại bỏ các lời giải tốt, do đó nâng cao chất lượng thuật toán.

Đề tài đã sử dụng kết hợp hai thuật toán Dijkstra Fibonacci heap và ACO (MMAS) giải quyết thành công bài toán TSP mở rộng - đây là một bài toán thường hay gặp trong thực tế. Quá trình thực nghiệm chương trình giải quyết bài toán này đã cho chương trình chạy thử trên 03 bộ test, các kết quả nhận được cho thấy thuật toán dùng trong chương trình là hiệu quả.

Hướng phát triển của đề tài: Việc nghiên cứu các cấu trúc dữ liệu trừu

tượng và ứng dụng chúng để cải tiến các thuật toán, việc tìm tòi nâng cấp các thuật toán, ứng dụng các thuật toán mới vào việc giải quyết các bài toán thực tiễn là những vấn đề đang được nhiều người quan tâm. Trong khuôn khổ của một luận văn nên đề tài này mới chỉ nghiên cứu một cấu trúc dữ liệu trừu tượng là Fibonacci heap và ứng dụng để cải tiến thuật toán Dijkstra tìm đường đi tối ưu. Về thuật toán tối ưu đàn kiến cũng mới dừng lại ở những nghiên cứu ứng dụng ban đầu. Trong tương lai đề tài này có thể được mở rộng nghiên cứu sâu rộng hơn về các cấu trúc dữ liệu trừu tượng và các ứng dụng của chúng. Thuật toán tối ưu đàn kiến là thuật toán tương đối mới, quy tắc cập nhật mùi quyết định lớn đến hiệu quả của thuật toán, vì thế đề tài cũng có thể được phát triển theo hướng nghiên cứu xây dựng các quy tắc cập nhật mùi mới tốt hơn và ứng dụng thuật toán này vào việc giải quyết một số các bài toán trong các lĩnh vực như sinh học, tin học, điện điện tử ...

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Đỗ Đức Đông (2012), Phương pháp tối ưu đàn kiến và ứng dụng - Luận án tiến sĩ công nghệ thông tin, Trường đại học công nghệ - Đại học Quốc gia Hà Nội. [2] Đỗ Xuân Lôi (1995), Cấu trúc dữ liệu và giải thuật, Nhà xuất bản khoa học và

kỹ thuật.

[3] Nguyễn Đức Nghĩa, Nguyễn Tô Thành (1997), Toán rời rạc, Nhà xuất bản giáo dục.

Tiếng Anh

[4] Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest (1990),

Introduction to Algorithms, Cambridge, Massachusetts.

[5] Marco Dorigo and Thomas Stutzle (2004), Ant Colony Optimization,The MIT

Press,Cambridge, Masachusetts.

[6] MIHAEL L. FREDMAN, ROBERT ENDRE TARJAN (1987), Fibonacci

Heaps and Their Uses in Improved Network Optimization Algorithms.

Một phần của tài liệu (LUẬN văn THẠC sĩ) thuật toán dijkstra fibonacci heap, thuật toán ACO tìm đường đi tối ưu và ứng dụng (Trang 68 - 74)

Tải bản đầy đủ (PDF)

(74 trang)