1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thuật toán dijkstra fibonacci heap thuật toán aco tìm đường đi tối ưu và ứng dụng

73 542 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 73
Dung lượng 790,99 KB

Nội dung

i LỜI CAM ĐOAN Tôi xin cam đoan luận văn kết nghiên cứu riêng Các thông tin trích dẫn luận văn lấy từ nguồn công khai đồng ý tác giả Các kết nêu luận văn kết nghiên cứu riêng tác giả luận văn, chưa có công bố công trình khác Thái Nguyên, ngày 10 tháng năm 2015 Học viên Nghiêm Quang Khải ii LỜI CẢM ƠN Được phân công trường Đại Học Công Nghệ Thông Tin Và Truyền Thông - Đại Học Thái Nguyên đồng ý thầy giáo hướng dẫn PGS - TS Đoàn Văn Ban, thực đề tài “Thuật toán Dijkstra Fibonacci heap, thuật toán ACO tìm đường tối ưu ứng dụng” Để hoàn thành đề tài này, nhận hướng dẫn tận tình chu đáo thầy hướng dẫn PGS – TS Đoàn Văn Ban, qua cho phép bày tỏ lòng biết ơn chân thành tới Thầy gia đình Thầy Tôi xin tỏ lòng cảm ơn thầy cô tận tình hướng dẫn, giảng dạy lớp cao học 12G suốt hai năm qua, cám ơn tri thức thầy cô truyền thụ, cảm ơn tình cảm chân thành thầy cô dành cho lớp Xin chân thành cám ơn ý kiến đóng góp quý báu thầy cô giáo bạn đồng nghiệp đề tài Chắc chắn đề tài không tránh khỏi thiếu sót, mong nhận ý kiến đóng góp thầy cô, bạn đồng nghiệp bạn độc giả, xin chân thành cảm ơn Thái Nguyên, ngày 10 tháng năm 2015 Học viên Nghiêm Quang Khải iii MỤC LỤC LỜI CAM ĐOAN .i LỜI CẢM ƠN ii MỞ ĐẦU CHƯƠNG CÁC THUẬT TOÁN TÌM ĐƯỜNG ĐI TỐI ƯU TRÊN ĐỒ THỊ 1.1 Các khái niệm lý thuyết đồ thị 1.1.1 Định nghĩa đồ thị 1.1.2 Các thuật ngữ 1.1.3 Đường đi, chu trình, đồ thị liên thông 1.1.4 Đồ thị có trọng số 1.2 Cây 1.3 Bài toán đường tối ưu đồ thị 1.4 Thuật toán Dijkstra 10 1.4.1 Phát biểu toán 10 1.4.2.Mô tả thuật toán 10 1.5 Thuật toán Dijkstra kết hợp với Fibonacci heap 11 1.5.1 Hàng đợi ưu tiên 11 1.5.2 Fibonacci heap 14 1.5.3 Sơ đồ thuật toán Dijkstra kết hợp với Fibonacci Heap 30 1.6 Kết luận chương 32 CHƯƠNG 33 THUẬT TOÁN ĐÀN KIẾN GIẢI BÀI TOÁN TÌM ĐƯỜNG ĐI TỐI ƯU 33 2.1 Từ kiến tự nhiên đến kiến nhân tạo 33 2.1.1 Kiến tự nhiên 33 2.1.2 Kiến nhân tạo 36 2.2 Thuật toán ACO tổng quát giải toán chào hàng 37 2.2.2 Thuật toán ACO tổng quát giải toán TSP 38 2.3 Các thuật toán ACO giải toán TSP 39 2.3.1 Thuật toán AS 40 2.3.2 Thuật toán ACS 42 2.3.3 Thuật toán Max-Min (MMAS) 44 2.4 Một số vấn đề việc áp dụng ACO tìm đường tối ưu 46 iv 2.4.1 ACO kết hợp với tìm kiếm cục 46 2.4.2 Thông tin heuristic 47 2.4.3 Số lượng kiến 47 2.4.4 Tham số bay 48 2.4.5 Một số đề xuất cải tiến 48 2.5 Kết luận chương 49 CHƯƠNG 50 ỨNG DỤNG THUẬT TOÁN DIJKSTRA FIBONACCI HEAP, THUẬT TOÁN ACO GIẢI CÁC BÀI TOÁN TÌM ĐƯỜNG ĐI TRÊN MẠNG GIAO THÔNG 50 3.1 Ứng dụng Dijkstra Fibonacci heap 50 13.1.1 Phát biểu toán 50 3.1.2 Mô hình hoá toán 50 3.1.3 Mô tả input, output 50 3.1.4 Một số kiểu liệu biến chương trình 51 3.1.5 Một số hàm thủ tục chương trình 52 3.1.6.Sơ đồ thuật toán 55 3.1.7 Các kết thực nghiệm giải toán 56 3.2 Ứng dụng Dijkstra Fibonacci heap, ACO giải toán TSP mở rộng 58 3.2.1 Phát biểu toán 58 3.2.2 Mô hình hoá toán 58 3.2.3 Mô tả input, output 58 3.2.4 Thuật toán tổng quát giải toán 59 3.2.5 Một số hàm thủ tục chương trình 59 3.2.6 Sơ đồ tổng quát thuật toán giải toán 62 3.2.7 Các kết thực nghiệm giải toán 63 3.3 Kết luận chương 65 KẾT LUẬN 67 TÀI LIỆU THAM KHẢO 69 MỞ ĐẦU Thuật toán tìm đường tối ưu có nhiều ứng dụng thực tế, xây dựng thuật toán tốt giúp tiết kiệm nhiều tiền bạc, thời gian, công sức người Một số toán thực tế điển hình cần phải sử dụng thuật toán tìm đường tối ưu như: - Tìm đường từ địa điểm A đến địa điểm B cho độ dài đường tối ưu nhanh giá cước nhỏ - Tìm đường ngắn xuất từ điểm cho trước, qua số địa điểm cố định cho trước quay trở điểm xuất phát - Tương tự ta có toán tìm đường cho gói tin gửi từ nút A đến nút B mạng máy tính cho giá cước nhỏ nhanh - Tìm đường tối ưu cho robot, cho tên lửa hành trình, máy bay, phi thuyền v.v toán quan tâm Đã có nhiều công trình nghiên cứu lĩnh vực có nhiều thuật toán tiếng phát minh như: Thuật toán Bellman – Ford, thuật toán Dijkstra, thuật toán Floyd, thuật toán Johnson… Tuy nhiên việc nghiên cứu cải tiến nâng cao hiệu thuật toán tìm đường tối ưu nhận quan tâm nhiều người, nhiều tổ chức, quan Vì lý nói gợi ý PGS – TS Đoàn Văn Ban, tác giả chọn đề tài để nghiên cứu luận văn tốt nghiệp thạc sĩ  Phạm vi nghiên cứu đề tài Các khái niệm đồ thị, thuật toán tìm đường tối ưu đồ thị, cấu trúc liệu Fibonacci heap, ứng dụng cấu trúc liệu vào việc cải tiến nâng cao hiệu thuật toán tìm đường tối ưu đồ thị Ứng dụng thuật toán tìm đường tối ưu đồ thị nghiên cứu để giải số toán tìm đường tối ưu mạng giao thông  Hướng nghiên cứu đề tài - Nghiên cứu thuật toán Dijkstra tìm đường tối ưu đồ thị, nghiên cứu Fibonacci heap ứng dụng cấu trúc liệu để cải tiến thuật toán Dijkstra - Nghiên cứu thuật toán tối ưu đàn kiến, ứng dụng thuật toán để giải toán tìm đường tối ưu đồ thị - Ứng dụng hai thuật toán giải số toán tìm đường tối ưu mạng giao thông  Đề tài gồm có chương: Chương 1: Trình bày số khái niệm đồ thị, số dạng toán tìm đường tối ưu đồ thị, phần chủ yếu chương trình bày Fibonacci heap dùng cấu trúc liệu để cải tiến nâng cao hiệu thuật toán Dijkstra Chương 2: Trình bày thuật toán tối ưu đàn kiến thuật toán ACO giải toán tìm đường tối ưu Thuật toán đàn kiến thuật toán tương đối khả ứng dụng thực tế cao Chương 3: Ứng dụng thuật toán Dijkstra cải tiến thuật toán đàn kiến vào việc giải số toán tìm đường tối ưu mạng giao thông  Ý nghĩa khoa học đề tài: - Thuật toán Dijkstra Fibonacci heap thuật toán mạnh, ứng dụng để giải toán nghiên cứu lý thuyết thực tiễn Hiện thuật toán chưa phổ biến Việt Nam, đề tài có ích cho người quan tâm đến lĩnh vực Đề tài giúp cho em học sinh Chuyên Tin có thêm công cụ mạnh để giải số toán có liên quan lập trình - Thuật toán ACO thuật toán gần đúng, nhiên hiệu việc giải toán thực tiễn Đề tài ứng dụng thành công hai thuật toán nói vào việc giải số toán mà thực tiễn đặt CHƯƠNG CÁC THUẬT TOÁN TÌM ĐƯỜNG ĐI TỐI ƯU TRÊN ĐỒ THỊ 1.1 Các khái niệm lý thuyết đồ thị 1.1.1 Định nghĩa đồ thị Đồ thị cấu trúc rời rạc bao gồm đỉnh cạnh nối đỉnh Chúng ta phân biệt loại đồ thị khác kiểu số lượng cạnh nối hai đỉnh đồ thị Định nghĩa 1.1 Đơn đồ thị vô hướng G = (V,E) bao gồm V tập đỉnh, E tập cặp thứ tự gồm hai phần tử khác V gọi cạnh [3] Định nghĩa 1.2 Đa đồ thị vô hướng G = (V,E) bao gồm V tập đỉnh, E họ cặp thứ tự gồm hai phần tử khác V gọi cạnh Hai cạnh e1 e2 gọi cạnh lặp chúng tương ứng với cặp đỉnh [3] Định nghĩa 1.3 Đơn đồ thị có hướng G = (V,E) bao gồm V tập đỉnh, E tập cặp có thứ tự gồm hai phần tử khác V gọi cung [3] Định nghĩa 1.4 Đa đồ thị có hướng G = (V,E) bao gồm V tập đỉnh, E họ cặp có thứ tự gồm hai phần tử khác V gọi cung Hai cung e1 e2 gọi cung lặp chúng tương ứng với cặp đỉnh [3] Hình 1.1 Hai loại đồ thị bản: a) Đồ thị vô hướng (6 đỉnh, cạnh) b) Đồ thị có hướng (5 đỉnh, cung) 1.1.2 Các thuật ngữ Định nghĩa 1.5 Hai đỉnh u v đồ thị vô hướng G gọi kề (u,v) cạnh đồ thị G Nếu e = (u,v) cạnh đồ thị nói cạnh liên thuộc với hai đỉnh u v, nói cạnh e nối đỉnh u đỉnh v, đồng thời đỉnh u v gọi đỉnh đầu cạnh (u,v) [3] Để biết cạnh liên thuộc với đỉnh, đưa vào định nghĩa sau: Định nghĩa 1.6 Gọi bậc đỉnh v đồ thị vô hướng số cạnh liên thuộc với kí hiệu deg(v) Định lý 1.1 Giả sử G = (V, E) đồ thị vô hướng với m cạnh Khi 2m   deg(v) [3] vV Hệ 1.1 Trong đồ thị vô hướng, số đỉnh bậc lẻ (nghĩa có bậc số lẻ) số chẵn [3] Định nghĩa 1.7 Nếu e = (u,v) cung đồ thị có hướng G nói hai đỉnh u v kề nhau, nói cung (u,v) nối đỉnh u đỉnh v nói cung khỏi đỉnh u vào đỉnh v Đỉnh u(v) gọi đỉnh đầu (cuối) cung (u,v) [3] Định nghĩa 1.8 Chúng ta gọi bán bậc (bán bậc vào) đỉnh v đồ thị có hướng số cung đồ thị khỏi (đi vào nó) ký + - hiệu là: deg (v) (deg (v)) [3] Định lý 1.2 Giả sử G= (V, A) đồ thị có hướng Khi  v V d eg  (v )   (d e g  ( v ))  A [3] v V 1.1.3 Đường đi, chu trình, đồ thị liên thông Định nghĩa 1.9 Đường độ dài n từ đỉnh u đến đỉnh v, n số nguyên dương, đồ thị vô hướng G = (V, E) dãy x0, x1, , xn-1, xn u = x0 , v = xn, (xi, xi+1)  E, i = 0, 1, 2,…, n-1 Đường nói biểu diễn dạng dãy cạnh: (x0, x1), (x1, x2), , (xn-1, xn) Đỉnh u gọi đỉnh đầu, đỉnh v gọi đỉnh cuối đường Đường có đỉnh đầu trùng với đỉnh cuối (tức u = v) gọi chu trình Đường hay chu trình gọi đơn cạnh bị lặp lại [3] Định nghĩa 1.10 Đường độ dài n từ đỉnh u đến đỉnh v, n số nguyên dương, đồ thị có hướng G = (V, A) dãy x0, x1, , xn-1, xn u = x0, v = xn , (xi , xi+1)  A, i = 0, 1, , , n-1 Đường nói biểu diễn dạng dãy cung: (x0, x1), (x1, x2), , (xn-1, xn) Đỉnh u gọi đỉnh đầu, đỉnh v gọi đỉnh cuối đường Đường có đỉnh đầu trùng với đỉnh cuối (tức u = v) gọi chu trình Đường hay chu trình gọi đơn cung bị lặp lại [3] Định nghĩa 1.11 Đồ thị vô hướng G = (V, E) gọi liên thông tìm đường hai đỉnh 55 if (u = nil) or (u^.sohieu = t) then Break; i := head[u^.sohieu]; while i begin if Relax(u^.sohieu, adj[i].v, adj[i].w) then FIB_HEAP_DECREASE_KEY(minH,d[adj[i].v], d[u^.sohieu]^.key +adj[i].w); i := adj[i].link; end; until (u = nil) or (nh = 0); end; Thủ tục Init: Thủ tục tạo Fibonacci heap gồm N nút, quản lý biến toàn cục minH Thủ tục PrintResult: Đưa output 3.1.6.Sơ đồ thuật toán Sơ đồ thuật toán giải toán tìm đường ngắn có dạng sau: // input: Đồ thị có hướng G, s, t // output: Khoảng cách đường từ s đến t BEGIN Enter; Init; dijkstra; PrintResult; END 56 3.1.7 Các kết thực nghiệm giải toán Thực nghiệm kiểm tra chương trình 11 test có tên Test00, Test01, , Test09, Test10 Các file input, output lưu thư mục có tên cột thứ Hình thức file output mô tả mục 3.1.3, nội dung file output test thứ - Test00: 341 25097 23364 18174 7928 10086 38541 4461 11683 34627 30000 Kết (thời gian chạy chương trình) thực nghiệm chạy chương trình giải toán thống kê bảng 3.1 (đơn vị thời gian tính giây, N số đỉnh, M số cạnh): Bảng 3.1 Thống kê kết thực nghiệm chương trình giải toán N Thời gian chạy chương trình dùng Dijkstra heap M Tên test Thời gian chạy chương trình dùng Dijkstra thường Test00 40000 1600000 1.900 11.807 Test01 100 1000 0.056 0.040 Test02 1000 20000 0.067 0.110 Test03 10000 60000 0.094 0.174 Test04 20000 200000 0.412 3.994 Test05 40000 600000 0.980 9.758 Test06 80000 1000000 1.398 6.196 Test07 100000 2000000 2.587 19.570 Test08 300000 3000000 2.923 70.682 Test09 1000000 5000000 7.573 > 3000 Test10 20000 400000 0.269 2.148 57 Tên test cột bảng thực chất tên thư mục chứa test đó, điều cần quan tâm thời gian chạy hai chương trình cột cột Số liệu bảng chứng minh tính ưu việt thuật toán Dijkstra Fibonacci heap so với thuật toán Dijkstra nguyên thủy Nhìn chung đồ thị thưa số đỉnh lớn thuật toán Dijkstra Fibonacci heap tỏ ưu việt so với thuật toán Dijkstra nguyên thủy Tuy nhiên số đỉnh có thuật toán Dijkstra nguyên thủy chạy lại nhanh (test01) Sở dĩ có tượng vì: Độ phức tạp thuật toán Dijkstra nguyên thủy O(N2) suy số phép tính toán thuật toán cỡ C1N2, độ phức tạp thuật toán Dijkstra Fibonacci heap O(Nlog N + M) suy số phép tính toán thực tế thuật toán cỡ C2(Nlog N + M) với C1, C2 số Do Dijkstra Fibonacci heap phải thao tác với Fibonacci heap tương đối phức tạp nên thực tế C2 > C1 N nhỏ xảy trường hợp C1N2 < C2(Nlog N + M), điều xảy thuật toán Dijkstra nguyên thủy chạy nhanh Các tệp input test tạo hoàn toàn ngẫu nhiên, thuật toán tạo file input sau: - N, M, s, t nhập từ bàn phím - Dùng mảng c lưu bán bậc đỉnh, ban đầu c[i]:= 0 i=1 N Thực M lần sinh số ngẫu nhiên nguyên dương thuộc [1, N] hàm random, sinh số i c[i] tăng đơn vị - Tạo cung xuất phát từ đỉnh i sau: Với đỉnh i: Dùng mảng daxet để quản lý đỉnh có cung nối từ đỉnh i tới, ban đầu daxet[j]:=false  ji, daxet[i] := true Thực c[i] lần sinh số nguyên ngẫu nhiên u thuộc [1, N] cho daxet[u] = false Với u sinh ta có cung (i,u), trọng số cung sinh ngẫu nhiên Sau ghi cung (i,u) tệp input ta gán cho daxet[u] true để không lặp lại cung 58 Thuật toán mô tả cho phép ta tạo file input lưu đồ thị dạng danh sách cung với số đỉnh lớn tới hàng triệu cung bị lặp 3.2 Ứng dụng Dijkstra Fibonacci heap, ACO giải toán TSP mở rộng 3.2.1 Phát biểu toán Cho mạng giao thông gồm N nút, nút đánh số từ đến N Từ nút i đến nút j có không đường chiều với độ dài c(i,j) Một người bán hàng, xuất phát từ nút giao thông s, phải đưa hàng đến k nút giao thông phân biệt cho trước quay trở s Hãy tìm hành trình cho người bán hàng cho độ dài hành trình ngắn 3.2.2 Mô hình hoá toán Ta coi mạng giao thông toán mô hình đồ thị có hướng, có trọng số sau: Mỗi nút giao thông đỉnh đồ thị, đoạn đường chiều nối trực tiếp hai nút giao thông cung đồ thị Việc tìm đường ngắn từ nút giao thông s, qua k nút giao thông cho trước trở s quy toán tìm đường ngắn từ đỉnh s, qua k đỉnh cho trước quay đỉnh s trên đồ thị có hướng G = (V ,E), với V tập đỉnh ứng với nút giao thông, E tập cung ứng với đoạn đường chiều nối trực tiếp hai nút nói 3.2.3 Mô tả input, output Đồ thị cho dạng danh sách cung mặt khác để thuận lợi nhập liệu cho input file text Cụ thể: 59 Input: Được cho file text có tên TSP.INP có dạng sau: Dòng đầu số nguyên dương N, M, s, k, N số đỉnh, M số cung đồ thị, s đỉnh xuất phát K số đỉnh cho trước phải qua M dòng tiếp theo, dòng ghi số nguyên dương u, v, l với ý nghĩa có cung từ u đến v có độ dài (trọng số) l Dòng cuối ghi k số nguyên dương phân biệt tên đỉnh cần phải qua Output: Kết ghi file text có tên TSP.OUT có dạng sau: Dòng đầu số nguyên T độ dài đường ngắn tìm Các dòng sau ghi số hiệu đỉnh đường ngắn xuất phát từ s thỏa mãn yêu cầu toán 3.2.4 Thuật toán tổng quát giải toán Thuật toán tổng quát giải toán gồm hai bước sau: Bước 1: Xây dựng đồ thị G1 = (V1, E1) sau: V1 gồm k +1 đỉnh đồ thị cho s k đỉnh cố định phải qua theo yêu cầu toán E1 xây dựng sau: Hai đỉnh i, j thuộc E1 trọng số cung (i, j) C(i,j) = D(i,j), D(i,j) khoảng cách từ i đến j đồ thị G cho Để chạy với N, M lớn ta dùng Dijkstra Fibonacci heap để tính D(i, j) Bước 2: Dùng thuật toán ACO (MMAS) tìm chu trình xuất phát từ s qua đỉnh lần đồ thị G1 (việc làm giải toán người chào hàng đồ thị G1) 3.2.5 Một số hàm thủ tục chương trình Chương trình sử dụng thuật toán Dijkstra Fibonacci heap nên thủ tục thực thao tác Fibonacci heap trình bày mục 60 3.1.5 sử dụng chương trình giải toán Ngoài chương trình sử dụng thêm số thủ tục sau: Thủ tục Make_graph: Xây dựng đồ thị G1 Thủ tục hoạt động sau: Từ đỉnh u đồ thị G1 ta dùng thủ tục Dijkstra Fibonacci heap tìm khoảng cách từ đỉnh đến tất đỉnh lại đồ thị G, từ ta tính khoảng cách từ u đến đỉnh G1 Đoạn mã chương trình mô tả thủ tục Make_graph: procedure make_graph; // input: Đồ thị G Output: đồ thị G1 var i:integer; begin for i:= to k1 + for j := to k1 + c[i,j] := vocung; for i := to k1+1 begin init(tendinh[i]); dijkstra(tendinh[i]); for j:= to k1 + if i = j then c[i,j] := vocung else c[i,j] := d[tendinh[j]]^.key; end; end; Thủ tục tkcb: Thủ tục dùng để tìm chu trình G1 thuật toán tham lam để làm sở cho việc khởi tạo Tmax, Tmin 61 Thủ tục lotteryweel(k : longint): Thủ tục Thủ tục chọn ngẫu nhiên trình bày chương 2, thủ tục cho phép xác định đỉnh kiến đỉnh k Thủ tục pheromoneupdat: Cập nhật lại vết mùi trình bày chương Thủ tục init1: Khởi tạo vết mùi giá trị ban đầu cho số đại lượng Thủ tục MMAS_cycle: Thủ tục dùng để tìm chu trình ngắn G1, xuất phát từ s thỏa mãn yêu cầu toán Đoạn mã nguồn mô tả thủ tục MMAS_cycle: procedure MMAS_cycle; var l: int64;d : longint; s:real; Begin init1; repeat inc(buoclap); for i:= to m begin libest := vocung; w[1] :=1; fillchar(daxet,sizeof(daxet),false); fillchar(p,sizeof(p),0); daxet[1] := true; l:= 0; for j:= to n begin lotteryWheel(j); 62 l := l + c[w[j-1],w[j]]; end; l := l + c[w[n],1]; if l< libest then begin libest := l; ibest := w; end; end; if libest < lgbest then begin lgbest := libest; gbest := ibest; tmax:= m/lgbest; tmin:= tmax/10; end; pheromoneupdat; until (buoclap >= N_C); End; 3.2.6 Sơ đồ tổng quát thuật toán giải toán Begin Enter; Make_graph; MMAS_cycle; PrintResult; End 63 3.2.7 Các kết thực nghiệm giải toán Thực nghiệm tiến hành test, test chương trình thực 06 lần Mỗi lần thực hiện, chương trình tự động khởi tạo lại cường độ vết mùi qua 10000 vòng lặp mà độ dài G-best không thay đổi Kết thống kê bảng 3.2 Trong bảng 3.2: N số đỉnh (nút giao thông), M số cung (số đường chiều nối trực tiếp hai nút giao thông), K số nút giao thông buộc phải qua, NC số vòng lặp vòng repeat, X, Y hiểu công thức (2.1), SK số kiến tham gia tìm lời giải Bảng 3.2 Thống kê kết thực nghiệm chương trình giải toán Tên test Test00 Test01 Test02 N M K NC X Y SK 1000 10994 21 200000 15 1000 10994 21 10000 16 15 1000 10994 21 200000 16 15 1000 10994 41 400000 20 1000 10994 41 400000 20 1000 10994 41 400000 12 20 1200 26181 51 1 25 1200 26181 51 100000 25 1200 26181 51 400000 25 ĐỘ DÀI ĐƯỜNG ĐI 116793, 118358, 117187, 116778, 116458, 116587 111766, 111968, 111415, 111944, 112052,112147 106916, 108236, 106410, 106270, 105933, 106936 208911, 208911, 208911, 208911, 208911, 208911 208911, 208911, 208911, 208911, 208911, 208911 208819, 204349, 208911, 202159, 208766, 207800 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 119549, 64 Dưới kết chụp lại hình lần chạy thử chương trình với test00: Thống kê kết bảng 3.2 cho ta số nhận xét sau: + Thuật toán có tính hội tụ (số vòng lặp nhiều lời giải thu có xu hướng tốt (test00, test01) + Khi độ dài G-best lớn làm cho Tmin, Tmax bé, mùi đa số cung nhanh chóng giảm Tmin, tỉ lệ Y X nhỏ khả tìm lời giải tốt G-best có khó, khả hội tụ chậm Ví dụ test00 y = 2, x = số vòng lặp lên đến 200000 kết không tốt cho y = 16, x = mà số vòng lặp 10000 Hay test01: Khi x = 1, y = y = 6, kết cho thấy G-best không thay đổi số vòng lặp lên tới 400000 (khi số vòng lặp = kết vậy), nhiên tăng y lên 12 thu G-best tốt thấy Tác giả đề xuất cách khắc phục tình trạng độ dài G-best lớn co độ dài G–best theo hệ số c với c tham số Tuy nhiên vấn đề cần nghiên cứu kỹ thêm + Khi số đỉnh G1 lớn, G1 đồ thị đầy đủ nên số cung lớn nên số cách lớn, dẫn đến khả tìm đường tốt Gbest có thấp thủ tục tkcb dùng thông tin heuristic mạnh tìm lời giải ban đầu tốt Kết test02 thể điều 65 Các tệp input test thử nghiệm chương trình 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 đồ thị G sau: Ban đầu c[i,j] :=  i, j = N Thực M lần tìm cặp số nguyên dương ngẫu nhiên u, v thỏa mãn ≤ u ≠ v ≤ N c[u,v] = (dùng vòng lặp repeat để tìm cặp u, v) Với cặp (u,v) ta gán cho c[u,v] trọng số dương hàm random - Để đảm bảo đồ thị liên thông mạnh, xuất phát từ đỉnh ta duyệt vòng qua tất đỉnh theo thứ tự tăng dần quay 1, c[i, i+1] = c[i, i +1] gán cho trọng số không âm (thường lớn để cung khả chọn) tăng M lên đơ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 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 luận văn áp dụng thuật toán Dijkstra Fibonacci heap thuật toán MMAS để giải hai toán có nhiều ứng dụng thực tế toán tìm đường ngắn hai điểm mạng giao thông toán TSP mở rộng Với toán tìm đường ngắn nhất, áp dụng Dijkstra Fibonacci heap hiệu nhiều so với áp dụng thuật toán Dijkstra nguyên thủy Trong trường hợp số đỉnh lớn đồ thị thưa chương trình áp dụng Dijkstra Fibonacci heap chạy nhanh hàng trăm lần Đối với toán TSP mở rộng tìm lời giải xác ta phải xét tất hoán vị k +1 nên độ phức tạp thuật toán (k +1)! Vì 66 chương trình thực với k nhỏ cỡ vài chục Khi áp dụng thuật toán MMAS, kết gần chương trình thực với k lên đến hàng nghìn Khi kết hợp MMAS Dijkstra Fibonacci heap phần xây dựng đồ thị G1 độ phức tạp O(k  (n log n +m)), dùng thuật toán khác thuật toán Floyd độ phức tạp O(k n3) dùng thuật toán Dijkstra bình thường độ phức tạp O(kn2) Vì đồ thị thưa việc dùng Dijkstra Fibonacci heap giúp nâng cao hiệu thuật toán nhiều 67 KẾT LUẬN Đề tài trình bày, ứng dụng hai thuật toán tìm đường tối ưu: - Thuật toán Dijkstra Fibonacci heap tương đối mạnh, ứng dụng để giải toán nghiên cứu lý thuyết thực tiễn Điểm mấu chốt Fibonacci heap trì hoãn số thao tác chưa cần thực có thể, mục đích việc nhằm chờ đến lúc buộc phải thực công việc trì hoãn thực lúc nhiều công việc, điều giúp giảm bớt phép tính toán Mặt khác, số lượng Fibonacci heap không lớn nhanh chóng xác định nút cực tiểu 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 toán tìm đường ngắn mạng giao thông, hiệu trình bày chương - Thuật toán ACO thuật toán tối ưu gần đúng, nhiên ứng dụng để giải toán thực tiễn cách hiệu Thuật ACO kết hợp thông tin heuristic thông tin cường độ vết mùi nhờ mô hoạt động đàn kiến có ưu điểm trội sau: Việc tìm kiếm ngẫu nhiên dựa thông tin heuristic cho phép tìm kiếm linh hoạt mềm dẻo miền rộng thuật toán heuristic sẵn có, cho ta lời giải tốt tìm lời giải tối ưu Việc sử dụng thông tin cường độ vết mùi cho phép ta bước thu hẹp không gian tìm kiếm mà không loại bỏ lời giải tốt, 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 ACO (MMAS) giải thành công toán TSP mở rộng - toán thường hay gặp thực tế Quá trình thực nghiệm chương trình giải toán cho chương trình chạy thử 03 test, kết nhận cho thấy thuật toán dùng chương trình hiệu 68 Hướng phát triển đề tài: Việc nghiên cứu cấu trúc liệu trừu tượng ứng dụng chúng để cải tiến thuật toán, việc tìm tòi nâng cấp thuật toán, ứng dụng thuật toán vào việc giải toán thực tiễn vấn đề nhiều người quan tâm Trong khuôn khổ luận văn nên đề tài nghiên cứu cấu trúc liệu trừu tượng Fibonacci heap ứng dụng để cải tiến thuật toán Dijkstra tìm đường tối ưu Về thuật toán tối ưu đàn kiến dừng lại nghiên cứu ứng dụng ban đầu Trong tương lai đề tài mở rộng nghiên cứu sâu rộng cấu trúc liệu trừu tượng ứng dụng chúng Thuật toán tối ưu đàn kiến thuật toán tương đối mới, quy tắc cập nhật mùi định lớn đến hiệu thuật toán, đề tài phát triển theo hướng nghiên cứu xây dựng quy tắc cập nhật mùi tốt ứng dụng thuật toán vào việc giải số toán lĩnh vực sinh học, tin học, điện điện tử 69 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 ứ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 liệu giải thuật, Nhà xuất khoa học kỹ thuật [3] Nguyễn Đức Nghĩa, Nguyễn Tô Thành (1997), Toán rời rạc, Nhà xuất 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 ... để cải tiến thuật toán Dijkstra - Nghiên cứu thuật toán tối ưu đàn kiến, ứng dụng thuật toán để giải toán tìm đường tối ưu đồ thị - Ứng dụng hai thuật toán giải số toán tìm đường tối ưu mạng giao... thị, thuật toán tìm đường tối ưu đồ thị, cấu trúc liệu Fibonacci heap, ứng dụng cấu trúc liệu vào việc cải tiến nâng cao hiệu thuật toán tìm đường tối ưu đồ thị 2 Ứng dụng thuật toán tìm đường tối. .. thuật toán ACO giải toán tìm đường tối ưu Thuật toán đàn kiến thuật toán tương đối khả ứng dụng thực tế cao Chương 3: Ứng dụng thuật toán Dijkstra cải tiến thuật toán đàn kiến vào việc giải số toán

Ngày đăng: 12/12/2016, 16:37

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w