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

Ứng dụng giải thuật di truyền tìm đường đi tối ưu trong giao thông đường thủy tại tỉnh vĩnh long

111 5 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 111
Dung lượng 3,87 MB

Nội dung

Giải thuật di truyền và bài toán đường đi ngắn nhất là một trong số các vấn đề mang tính thực tiễn cao trong toán học và tin học Trong đó giải thuật di truyền là phương pháp tìm kiếm mô phỏng quá trình sinh tồn tiến hóa của tự nhiên Đó là sự chọn lọc các cá thể có độ thích nghi cao loại bỏ các cá thể có độ thích nghi thấp tiến tới sàng lọc ra các cá thể tốt nhất Bài toán đường đi ngắn nhất là vấn đề tìm đường đi giữa hai đỉnh trong một đồ thị hay giữa hai địa điểm trong mạng giao thông với điều kiện chi phí là tối thiểu Trên thực tế vấn đề này đã được giải quyết bằng một số thuật toán cổ điển Tuy nhiên việc tìm đường đi giữa hai địa điểm với ràng buộc phải qua một số địa điểm khác các giải thuật cổ điển này chưa giải quyết được Do đó trong khuôn khổ luận văn này tôi sẽ đề xuất giải thuật di truyền để giải quyết bài toán vừa nêu và ứng dụng vào thực tiễn tìm đường đi tối ưu trong mạng giao thông đường thủy tỉnh Vĩnh Long

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA LÊ HOÀNG AN ỨNG DỤNG GIẢI THUẬT DI TRUYỀN TÌM ĐƯỜNG ĐI TỐI ƯU TRONG GIAO THÔNG ĐƯỜNG THỦY TẠI TỈNH VĨNH LONG LUẬN VĂN THẠC SĨ KỸ THUẬT Đà Nẵng, Năm 2017 ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA LÊ HOÀNG AN ỨNG DỤNG GIẢI THUẬT DI TRUYỀN TÌM ĐƯỜNG ĐI TỐI ƯU TRONG GIAO THÔNG ĐƯỜNG THỦY TẠI TỈNH VĨNH LONG Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 LUẬN VĂN THẠC SĨ KỸ THUẬT Người hướng dẫn khoa học: TS PHẠM MINH TUẤN Đà Nẵng - Năm 2017 i LỜI CAM ĐOAN Tôi xin cam đoan: - Những nội dung luận văn thực hướng dẫn trực tiếp TS Phạm Minh Tuấn - Mọi tham khảo dùng luận văn trích dẫn rõ ràng trung thực tên tác giả, tên cơng trình, thời gian địa điểm công bố Tác giả luận văn Lê Hoàng An ii MỤC LỤC LỜI CAM ĐOAN i MỤC LỤC ii TÓM TẮT LUẬN VĂN v DANH MỤC CÁC TỪ VIẾT TẮT .vi DANH MỤC CÁC BẢNG vii DANH MỤC CÁC HÌNH viii MỞ ĐẦU 1 Lý chọn đề tài .1 Mục tiêu nhiệm vụ đề tài Đối tượng phạm vi nghiên cứu Phương pháp nghiên cứu Mục đích ý nghĩa đề tài Cấu trúc luận văn .3 CHƯƠNG CƠ SỞ LÝ THUYẾT .4 1.1 LÝ THUYẾT ĐỒ THỊ 1.1.1 Các khái niệm đồ thị .4 1.1.1.1 Định nghĩa đồ thị .4 1.1.1.2 Các thuật ngữ .5 1.1.1.3 Biểu diễn đồ thị máy tính 1.1.2 Bài toán đường ngắn 1.1.2.1 Đặt vấn đề 1.1.2.2 Phát biểu toán 1.1.3 Các thuật tốn tìm đường ngắn 10 1.1.3.1 Thuật toán Dijsktra 10 1.1.3.2 Thuật toán Bellman-Ford 11 1.2 GIẢI THUẬT DI TRUYỀN .13 1.2.1 Giới thiệu 13 1.2.2 Nguyên tắc thiết kế giải thuật di truyền .13 1.2.2.1 Các toán tử di truyền .14 1.2.2.2 Các thành phần giải thuật di truyền 14 1.2.2.3 Các bước giải thuật di truyền 15 1.2.3 Một số ứng dụng giải thuật di truyền 16 1.2.3.1 Bài toán Người bán hàng du hành (TSP) 16 iii 1.2.3.2 Bài toán lập lịch .18 1.2.3.3 Lập thời khóa biểu cho trường học .18 1.2.3.4 Phân hoạch đối tượng đồ thị .19 1.3 ĐẶC ĐIỂM GIAO THÔNG ĐƯỜNG THỦY TỈNH VĨNH LONG 19 1.3.1 Các nhân tố ảnh hưởng đến giao thông đường thủy tỉnh Vĩnh Long 19 1.3.1.1 Vị trí địa lý 19 1.3.1.2 Địa hình 20 1.3.1.3 Khí hậu 20 1.3.1.4 Thủy văn 20 1.3.2 Thực trạng giao thông đường thủy tỉnh Vĩnh Long .21 1.3.2.1 Quá trình phát triển giao thông đường thủy 21 1.3.2.2 Mạng lưới giao thông đường thủy tỉnh Vĩnh Long .21 CHƯƠNG ỨNG DỤNG GIẢI THUẬT DI TRUYỀN TÌM ĐƯỜNG ĐI TỐI ƯU TRONG GIAO THÔNG ĐƯỜNG THỦY TẠI TỈNH VĨNH LONG .26 2.1 PHÁT BIỂU BÀI TOÁN 26 2.2 XÂY DỰNG ỨNG DỤNG .26 2.2.1 Khảo sát, phân tích liệu 26 2.2.1.1 Về hệ thống sông 26 2.2.1.2 Về cảng, bến hàng hóa 27 2.2.2 Tổ chức liệu 27 2.2.2.1 Danh bạ nút giao, bến cảng, bến hàng hóa .27 2.2.2.2 Khoảng cách nút giao, bến cảng, bến hàng hóa 28 2.2.3 Triển khai, xây dựng ứng dụng 29 2.2.3.1 Khởi tạo quần thể 30 2.2.3.2 Hàm đánh giá cá thể 31 2.2.3.3 Lựa chọn cá thể .32 2.2.3.4 Lai ghép 32 2.2.3.5 Đột biến 33 CHƯƠNG THỬ NGHIỆM VÀ ĐÁNH GIÁ .34 3.1 GIAO DIỆN CHƯƠNG TRÌNH 34 3.2 THỬ NGHIỆM, ĐÁNH GIÁ .37 3.2.1 Tìm đường qua nút giao sông .37 3.2.1.1 Thử nghiệm lần 39 3.2.1.2 Thử nghiệm lần 40 3.2.1.3 Thử nghiệm lần 42 iv 3.2.1.4 Thử nghiệm lần 44 3.2.1.5 Thử nghiệm lần 46 3.2.1.6 Thử nghiệm lần 47 3.2.1.7 Thử nghiệm lần 48 3.2.1.8 Thử nghiệm lần 50 3.2.1.9 Một số thử nghiệm khác 51 3.2.2 Tìm đường qua nút giao, cảng sông, bến hàng hóa .57 3.2.2.1 Thử nghiệm lần 58 3.2.2.2 Thử nghiệm lần 59 3.2.2.3 Thử nghiệm lần 59 3.2.2.4 Thử nghiệm lần 60 3.2.2.5 Thử nghiệm lần 60 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 62 TÀI LIỆU THAM KHẢO 63 PHỤ LỤC QUYẾT ĐỊNH GIAO ĐỀ TÀI (bản sao) BẢN SAO KẾT LUẬN CỦA HỘI ĐỒNG, BẢN SAO NHẬN XÉT CỦA CÁC PHẢN BIỆN v TÓM TẮT LUẬN VĂN ỨNG DỤNG GIẢI THUẬT DI TRUYỀN TÌM ĐƯỜNG ĐI TỐI ƯU TRONG GIAO THÔNG ĐƯỜNG THỦY TẠI TỈNH VĨNH LONG Tóm tắt - Giải thuật di truyền toán đường ngắn số vấn đề mang tính thực tiễn cao tốn học tin học Trong đó, giải thuật di truyền phương pháp tìm kiếm mơ q trình sinh tồn, tiến hóa tự nhiên Đó chọn lọc cá thể có độ thích nghi cao, loại bỏ cá thể có độ thích nghi thấp tiến tới sàng lọc cá thể tốt Bài toán đường ngắn vấn đề tìm đường hai đỉnh đồ thị hay hai địa điểm mạng giao thông với điều kiện chi phí tối thiểu Trên thực tế, vấn đề giải số thuật tốn cổ điển Tuy nhiên, việc tìm đường hai địa điểm với ràng buộc phải qua số địa điểm khác giải thuật cổ điển chưa giải Do đó, khn khổ luận văn này, đề xuất giải thuật di truyền để giải toán vừa nêu ứng dụng vào thực tiễn tìm đường tối ưu mạng giao thơng đường thủy tỉnh Vĩnh Long Từ khóa – giải thuật di truyền, GAs, toán đường ngắn nhất, giao thông đường thủy APPLYING GENETIC ALGORITHMS TO FIND THE OPTIMAL ROUTE IN THE WATERWAY NETWORK OF VINH LONG PROVINCE Abstract - Genetic algorithms and shortest path problems are among the most practical issues in mathematics and computing Of which, genetic algorithm is the search method to simulate the process of survival, evolution of nature It is the selection of highly adaptive individuals, eliminating the low adaptability of individuals to the best individual screening The shortest path problem is the problem of finding a path between two vertices in a graph or between two locations in a transport network, provided that the cost is minimal In fact, this problem has been solved by some classical algorithms However, finding paths between two places with mandatory must through some different places, these classical algorithms are not solved Therefore, within this thesis, I will propose genetic algorithms to solve the above mentioned problems and apply them to the practice of navigating the waterway network of Vinh Long province Key words – genetic algorithms, GAs, shortest path problem, waterway traffic vi DANH MỤC CÁC TỪ VIẾT TẮT GAs GTVT ĐBSCL UBND giải thuật di truyền giao thông vận tải đồng sông Cửu Long Ủy ban Nhân dân vii DANH MỤC CÁC BẢNG Số hiệu bảng Tên bảng Trang 1.1 Kết giải thuật Dijsktra 11 1.2 Kết giải thuật Ford – Bellman 12 1.3 Bảng thống kê tuyến sông cấp kỹ thuật 24 viii DANH MỤC CÁC HÌNH Số hiệu hình 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.1 1.1 1.1 1.1 2.1 2.2 2.3 2.4 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 Tên hình Ví dụ đơn đồ thị vơ hướng Ví dụ đa đồ thị vô hướng (e1 e2 cạnh song song) Ví dụ đơn đồ thị có hướng Ví dụ đa đồ thị có hướng (e1 e2 cung song song) Ví dụ thuật ngữ đồ thị vơ hướng Ví dụ thuật ngữ đồ thị có hướng Ví dụ đồ thị có hướng liên thơng Đồ thị vơ hướng G đồ thị có hướng G1 Đồ thị có hướng G Đồ thị có hướng G giải thuật Dijsktra Đồ thị có hướng G giải thuật Ford - Bellman Lưu đồ giải thuật di truyền Bản đồ đường sông tỉnh Vĩnh Long (Nguồn sở GTVT Vĩnh Long) Đồ thị có trọng số G tốn đường ngắn Tập tin danh bạ nút giao Tập tin danh bạ cảng, bến hàng hóa Biểu diễn khoảng cách nút Giao diện chương trình Giao diện chọn tập tin liệu vào Cửa sổ Open Giao diện chọn điểm bắt đầu kết thúc hành trình Cách chọn điểm bắt đầu kết thúc hành trình Giao diện chọn nút phải qua Cách chọn nút phải qua Kết đường tối ưu Sơ đồ đường sông tỉnh Vĩnh Long Biểu diễn nút giao sông đồ thị Kết thử nghiệm lần 1, hệ Kết thử nghiệm lần 1, hệ Kết thử nghiệm lần 2, hệ Kết thử nghiệm lần 2, hệ Kết thử nghiệm lần 3, hệ Kết thử nghiệm lần 3, hệ Kết thử nghiệm lần 4, hệ Trang 4 5 6 7 11 12 16 22 26 27 28 29 34 34 35 35 35 36 36 37 38 38 39 40 41 42 43 44 45 STT ID Nút giao cắt Nút giao cắt, Bến liền kề Khoảng cách (m) Thời gian di chuyển (phút) N010 8,000 70 N012 13,000 100 12 N012 N011 13,000 90 13 N013 N035 2,300 N014 6,500 N033 4,500 N010 3,500 30 N013 6,500 60 N033 5,000 60 N015 11,000 120 N014 11,000 110 N031 8,500 90 N016 10,000 100 N010 18,500 180 N015 10,000 90 N017 1,000 N009 8,000 N016 1,000 N018 2,000 20 N008 15,000 150 N017 2,000 N019 10,000 90 N018 10,000 90 N027 10,500 90 N020 4,000 50 N019 4,000 50 N021 10,000 100 N025 14,000 120 N007 9,000 N020 10,000 90 N022 3,000 30 N006 10,000 N021 3,000 30 N023 10,000 100 14 N014 15 N015 16 N016 17 N017 18 N018 19 N019 20 N020 21 N021 22 N022 90 Ghi STT ID Nút giao cắt 23 N023 24 N024 25 N025 26 N026 27 N027 28 29 30 31 32 33 34 N028 N029 N030 N031 N032 N033 N034 Nút giao cắt, Bến liền kề Khoảng cách (m) Thời gian di chuyển (phút) N022 10,000 100 N024 13,000 120 N023 13,000 120 N025 10,000 70 N024 10,000 60 N020 14,000 120 N026 9,000 60 N025 900 N027 10,700 90 N041 15,000 110 N019 10,500 90 N028 8,000 90 N026 10,700 90 N027 8,000 90 N029 3,000 30 N041 2,500 30 N028 3,000 30 N040 3,000 30 N030 4,500 45 N029 4,500 45 N031 3,000 30 N038 8,400 90 N015 8,000 90 N030 3,000 30 N032 5,000 60 N031 5,000 60 N033 5,500 N036 11,200 120 N034 3,500 40 N014 5,000 60 N013 4,500 N032 5,500 N032 3,500 40 N037 4,500 40 Ghi STT ID Nút giao cắt Nút giao cắt, Bến liền kề Khoảng cách (m) Thời gian di chuyển (phút) 35 N035 N013 2,300 36 N036 N032 11,200 N037 2,000 15 N034 4,500 40 N036 2,000 15 N038 700 N030 8,400 N037 700 N039 1,500 10 N038 1,500 10 N040 7,500 50 N042 6,000 50 N029 3,000 30 N041 1,500 10 N039 7,500 60 N026 15,000 100 N028 2,500 N040 1,500 10 N039 6,000 50 37 38 39 40 41 42 N037 N038 N039 N040 N041 N042 80 Ghi PHỤ LỤC CODE MỘT SỐ HÀM CƠ BẢN Hàm khởi tạo quần thể: private void KhoiTao() { //Cho ngau nhien duong di di qua het cac diem can qua for (int i = 0; i < N; i++) { cathe[i] = getRandomGen(); } } Hàm tạo cá thể: private int[] getRandomGen() { List genList = new ArrayList(); genList.add(start); double[] pro = new double[M];//M la so dinh cua thi int[] fpass = new int[pass.length]; for (int i = 0; i < pro.length; i++) pro[i] = 1.0; int index = start; // Dua cac nut thuoc fPass vao duong di while (true) { boolean fillall = true; for (int i = 0; i < fpass.length; i++) if (fpass[i] != 1) { if (pass[i] == index) { fpass[i] = 1; } else fillall = false; } if (fillall) break; double max = Double.MIN_VALUE; int maxi = 0; for (int i = 1; i max) { max = p; maxi = i; } } pro[maxi - 1] /= 2; genList.add(maxi); index = maxi; } // Dua dinh cuoi vao duong di while (true) { if (index == end) break; double max = Double.MIN_VALUE; int maxi = 0; for (int i = 1; i max) { max = p; maxi = i; } } pro[maxi - 1] /= 2; genList.add(maxi); index = maxi; } int[] gen = new int[genList.size() + 1]; gen[0] = genList.size(); for (int i = 1; i nguong) cathe[i] = cathe[rand.nextInt(N)].clone(); } } Hàm lai ghép: private void LaiGhep() { for (int i = 0; i < tlLG * N / 100; i++) { //Lay ngau nhien hai ca the tu quan the int cha = rand.nextInt(N); int me = rand.nextInt(N); int[] genccha = cathe[cha].clone(); int[] gencme = cathe[me].clone(); //Chon diem can di qua ngau nhien int ppass = pass[rand.nextInt(pass.length)]; //Xac dinh diem cat tren ca the cha double MaxC = Double.MIN_VALUE; int maxCj = 0; for (int j = 1; j < genccha.length; j++) { double p = rand.nextDouble(); if (genccha[j] == ppass & MaxC < p) { MaxC = p; maxCj = j; } } //Xac dinh diem cat tren ca the me double MaxM = Double.MIN_VALUE; int maxMj = 0; for (int j = 1; j < gencme.length; j++) { double p = rand.nextDouble(); if (gencme[j] == ppass & MaxM < p) { MaxM = p; maxMj = j; } } //Tao thu nhat List Con1 = new ArrayList(); for (int j = 0; j < maxCj; j++) Con1.add(genccha[j]); for (int j = maxMj; j < gencme.length; j++) Con1.add(gencme[j]); //Tao thu hai List con2 = new ArrayList(); for (int j = 0; j < maxMj; j++) Con2.add(gencme[j]); for (int j = maxCj; j < genccha.length; j++) Con2.add(genccha[j]); //Dua thu nhat vao thay the ca the cha cathe[cha] = new int[Con1.size()]; for (int j = 1; j < cathe[cha].length; j++) cathe[cha][j] = Con1.get(j); cathe[cha][0] = Con1.size(); //Dua thu hai vao thay the ca the me cathe[me] = new int[Con2.size()]; for (int j = 1; j < cathe[me].length; j++) cathe[me][j] = Con2.get(j); cathe[me][0] = Con2.size(); } } Hàm đột biến: private void DotBien() { for (int i = 0; i < 2; i++) { List ngen = new ArrayList(); //Chon ca the cha me bat ky int index = rand.nextInt(N); //Chon vi tri vt1 va vt2 ngau nhien int vt1 = rand.nextInt(cathe[index].length - 1) + 1; int vt2 = rand.nextInt(cathe[index].length - 1) + 1; //Dam bao vt1 vt2) { int temp = vt1; vt1 = vt2; vt2 = temp; } //Sao chep lai duong di tu start den vt1 for (int j = 0; j

Ngày đăng: 21/04/2021, 15:29

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

TÀI LIỆU LIÊN QUAN