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

Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c

76 3 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

Tiêu đề Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng Winform C
Tác giả Hồ Minh Toàn
Người hướng dẫn TS. Hồ Quốc Dũng
Trường học Trường Đại Học Kinh Tế, Đại Học Huế
Chuyên ngành Kỹ Thuật Máy Tính
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2018
Thành phố Huế
Định dạng
Số trang 76
Dung lượng 0,91 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • PHẦN I ĐẶT VẤN ĐỀ (10)
    • 1. Lý do chọn đề tài (10)
    • 2. Mục tiêu nghiên cứu (11)
      • 2.1 Mục tiêu tổng quát (11)
      • 2.2 Mục tiêu cụ thể (11)
    • 3. Đối tượng và phạm vi nghiên cứu (11)
      • 3.1 Đối tượng nghiên cứu (11)
      • 3.2 Phạm vi nghiên cứu (11)
    • 4. Phương pháp nghiên cứu (11)
    • 5. Ý nghĩa khoa học và thực tiễn (12)
      • 5.1. Ý nghĩa khoa học (12)
      • 5.2. Ý nghĩa thực tiễn (12)
    • 6. Nội dung khóa luận (12)
  • PHẦN II: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU (14)
    • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT (14)
      • 1.1 Bài toán người du lịch (14)
        • 1.1.1 Lịch sử bài toán (14)
        • 1.1.2. Phát biểu bài toán (16)
      • 1.2 Độ phức tạp của bài toán người du lịch (18)
        • 1.2.1 Độ phức tạp tính toán (18)
        • 1.2.2 Độ phức tạp tính toán của bài toán người du lịch (21)
      • 1.3 Thuật toán di truyền (21)
        • 1.3.1. Lịch sử của thuật toán di truyền (21)
        • 1.3.2. Đặc điểm của thuật toán di truyền (22)
        • 1.3.3. Áp dụng thuật toán di truyền cho bài toán người du lịch (27)
      • 1.4. Ứng dụng của thuật toán di truyền (28)
      • 1.5. Các công trình liên quan (30)
    • CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN (41)
      • 2.1. Giải thuật đề xuất (41)
      • 2.2. Mã hóa đường đi (41)
      • 2.3. Sơ đồ lớp (43)
      • 2.4. Xây dựng chương trình (43)
        • 2.4.1 Lớp DuongDi (44)
        • 2.4.2. Lớp QuanThe (48)
        • 2.4.3 Lớp ThuatToanDiTruyen (50)
        • 2.4.4. Winform Form1 (53)
        • 2.4.5 Winform Form 2 (58)
        • 2.4.6 Hàm Main (61)
      • 2.5. Giới thiệu về chương trình (61)
    • CHƯƠNG 3: THÍ NGHIỆM VÀ ĐÁNH GIÁ (64)
      • 3.1. Mô tả bài toán vào thực tế (64)
      • 3.2. Kết quả chạy chương trình đối với các mẫu thí nghiệm (67)
      • 3.3. Thí nghiệm chương trình với số thành phố tăng dần (69)
      • 3.4. Kết luận (70)
      • 3.5. So sánh Thuật toán di truyền với kỹ thuật tối ưu khác (71)
  • PHẦN III: KẾT LUẬN VÀ KIẾN NGHỊ (72)
    • 1. Kết quả đạt được (72)
    • 2. Đóng góp và thực tiễn (72)
    • 3. Hạn chế và hướng phát triển (73)

Nội dung

NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU

CƠ SỞ LÝ THUYẾT

Bài toán người du lịch (Travelling Salesman Problem - TSP) [1], [2] là một bài toán NP-Khó ( NP-hard - là bài toán chưa tìm ra lời giải tối ưu cho dạng tổng quát), thuộc thể loại tối ưu rời rạc hay tổ hợp được nghiên cứu trong vận trù học hoặc lý thuyết khoa học máy tính.

Bài toán được phát biểu như sau: Cho một danh sách các thành phố và khoảng cách giữa chúng, tìm chu trình ngắn nhất đi qua mỗi địa điểm đúng một lần.

Bài toán người du lịch thường được dùng làm thước đo cho nhiều phương pháp tối ưu hóa Đã được các nhà toán học và khoa học máy tính chú ý bởi nó rất dễmô tả và rất khó giải quyết.

Mặc dù bài toán rất khó giải trong trường hợp tổng quát, có nhiều phương pháp giải chính xác và gần đúng đã được biết đến, do đó đã tìm ra để giải quyết một sốvấn trường hợp có tới hành chục nghìn thành phố.

Trong lý thuyết của độ phức tạp tính toán [3], phiên bản quyết định của bài toán TSP thuộc lớp NP-đầy đủ(- lớp NP-đầy đủlà một lớp các bài toán quyết định).

Vì vậy không có giải thuật hiệu quả nào cho việc giải bài toán TSP Hay nói cách khác, giống như thời gian chạy xấu nhất cho bất kỳ giải thuật nào cho bài toán TSP tăng theo hàm mũ và số lượng thành phố, vì vậy thậm chí nhiều trường hợp vài trăm thành phố cũng đã mất vài trăm CPU để giải một cách chính xác (bài toán chỉ tương đối đúng).

Một cuốn sổ tay dành cho người du lịch xuất bản 1832 có đề cập đến bài toán này và có ví dụ cho chu trình trong nước Đức và Thụy Sĩ, nhưng không chứa bất kỳnội dung toán học nào.

Bài toán người du lịch được định nghĩa trong thế kỷ 19 bởi nhà toán học

Ireland William Rowan Hamilton và nhà toán học Anh Thomas Kirkman Trò chơi

Icosa [4] của Hamilton là một trò chơi giải trí dựa trên việc tìm kiếm chu trình

Hamilton Trường hợp tổng quát của TSP có thể được nghiên cứu lần đầu tiên bởi

Trường Đại học Kinh tế Huế các nhà toán học ở Vienna và Harvard trong nhũng năm 1930, đặc biệt Karl

Menger, người đã định nghĩa bài toán, xem xét thuật toán hiển nhiên nhất cho bài toán và phát hiện ra thuật toán láng giềng gần nhất là không tối ưu.

Hassler Whitneyở đại học Princeton đưa ra tên bài toán người du lịch ngay sau đó.

Trong những năm 1950 và 1960, bài toán trởnên phổ biến trong giới nghiên cứu khoa họcở Châu Âu và Mỹ George Dantzig, Delbert Ray Fulkerson và Selmer

M.Johnsonở công ty RAND tại Santa Moncia [5]đã có đóng góp quan trọng cho bài toán này, biểu diễn bài toán này dưới dạng quy hoạch nguyênvà đưa ra phương pháp mặt phẳng cắt để tìm ra lời giải Bằng phương pháp này họ đã giải được tối ưu một trường hợp 49 thành phố bằng cách xây dựng một chu trình và chứng minh không có chu trình nào ngắn hơn.

Trong những thập niên tiếp theo, bài toán được nghiên cứu bởi nhiều nhà nghiên cứu trong các lĩnh vực toán học, khoa học máy tính, hóa học, vật lý và các ngành khác.

Năm 1972, Richard M.Karp [6] chứng minh rằng bài toán chu trình

Hamilton là NP-đầy đủ, kéo theo bài toán TSP cũng là NP-đầy đủ Đây cũng là một lý giải toán học cho sự khó khăn trong việc tìm kiếm chu trình ngắn nhất.

Cuối thập niên 1970 và 1980 khi Grotschel [7], Padberg, Rinaldi và cộng sự [8] đã giải được những trường hợp lên đến 2393 thành phố, sử dụng phương pháp mặt phẳng cắt và nhánh cận.

Trong thập niên 1990 Applegate, Bixby, Chavátal và Cook [9] phát triển một chương trình mang tên Concorde giải được nhiều trường hợp có độkỷlục lớn hiện nay.

Năm 1991 Gerhard Reinnelt xuất bản một bộdữliệu các trường hợp có độkhó khác nhau mang tên TSPLIB [10] và nó đãđược sử dụng bởi nhiều nhóm nghiên cứu đểso sánh kết quả

Năm 2005 Cook và cộng sự đã giải được một trường hợp có 33810 thành phố, xuất phát từmột bài toán thiết kếvi mạch.

Trường Đại học Kinh tế Huế

Bài toánngười du lịchđược phát biểu như sau:

Có một người du lịch muốn viếng thăm tại n thành phố Xuất phát từ một thành phố nào đó, đi qua các thành phố khác để du lịch và trở về thành phố ban đầu, biết chi phí đi lại và khoảng cách giữa các thảnh phố Mỗi thành phố chỉ đến một lần và khoảng cách từ một thành phố đến các thành phố khác đã được biết trước.

Hãy tìm một chu trình (một đường đi khép kín thõa mãn cácđiều kiện trên) sao cho tổngđộdài các cạnh là nhỏ nhất.

Bài toán người du lịch [1], [2] có thể được mô hình hóa như một đồ thị vô hướng có trọng số, trong đó mỗi thành phố là một đỉnh của đồ thị Khoảng cách giữa hai thành phố là độ dài cạnh Đây là vấn đềcực tiểu hóa với điểm đầu và điểm cuối là cùng một đỉnh sau khi thăm hết các đỉnh còn lại đúng một lần Mô hình này thường là một đồ thị đầy đủ (giữa mỗi cặp đỉnh đều có cạnh) Nếu không có đường giữa hai thành phố thì có thể thêm một cạnh với độ dài đủ lớn vào đồ thị mà không ảnh hưởng đến kết quảtối ưu sau cùng. Được biểu diễn bằng toán học có đồ thị vô hướng G=(V,E) với

V={v 1 ,v 2 , ,v n } là tập các đỉnh hoặc nút và E{(v i ,v j ) : v i ,v j ∈V } là tập hợp các cạnh.

Mỗi đỉnh v i đại diện cho một thành phố v i ∈V và mỗi cạnh (v i ,v j ) ∈V là khoảng cách giữa hai thành phối,j.

Trường Đại học Kinh tế Huế

PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN

2.1 Giải thuật đềxuất Đề xuất giải thuật di truyền đơn giản cho bài toán người du lịch Giải thuật được cài đặt bằng ngôn ngữC#.

Dữ liệu được lấy từ file text txt, được lựa chọn 50 địa điểm trên Google

Map địa bàn tỉnh Thừa Thiên Huếvà thiết lập ma trận khoảng cách.

2.2 Mãhóa đường đi Đối với bài toán người du lịch giải theo thuật toán di truyền sẽcó các lớp sau:

Bước 1:Đưa( tải) file dữ liệu txt ma trận khoảng cách giữa các địa điểm đã chuẩn bị sẵn vào chương trình (chứa n = 50 địa điểm).

Bước 2: Khởi tạo một mảng một chiều được gọi là duong để chứa danh sách các thành phố (được đánh sốtừ 0 đến n-1 ).

Bước 3: Gán giá trị cho mảng đường đi duong có giá trị từ 1 đến n, sau đó xáo trộn giá trị các vị trí trong mảng duong một cách ngẫu nhiên Tìm thành phố bắt đầu gán vào vị trí đầu mảng, tức là thành phố đầu tiên phải đi trong mảng duong.

Bước 4: Trong class DuongDi có các method tính khoảng cách giữa các thành phố và tính độ thích nghi Khoảng cách giữa các thành phố được tính theo ma trận khoảng cách, khoảng cách từ thành phố i đến j bằng a[i,j] Độ thích nghi sẽ được tính theo công thức bằng một chia cho khoảng cách của chu trình.

Trường Đại học Kinh tế Huế

Bước 1: Khai báo một mảng quần thể kiểu DuongDi Khởi tạo quần thể có kích thước l cho trước, chứa l đường đi.

- Tạo method lấy đường đi tại một vịtrí cụthểtrong mảng quanthe.

- Tạo method lưu đường đi tại một vị trí cụthể

- Tạo method tìmđường đi ngắn nhất trong lớp quần thể, được đánh giá lựa chọn dựa trên độthích nghi.

Bước 1: Tạo method ChonLoc, nhóm 5 đường đi ngẫu nhiên trong quần thể và đưa ra đường đi ngắn nhất trong 5 đường nhóm đó.

Bước 2: Tạo method GhepLai, lấy chu tình Cha Mẹ được chọn ra bằng ghép chọn lọc để tạo chu trình con Chu trình con được tạo ra bằng cách lấy một điểm ngẫu nhiên vitri, gán các giá trị trong đường đi cha trong khoảng vitri 0 đến vitri, và gán các giá trị của đường đi cha mẹ chưa có trong duongdi con trong khoảng còn lại.

Bước 3: Tạo method DotBien, trong khoảng từ i = 1 đến n-1 của đường đi, lấy một số ngẫu nhiên kiểu double trong khoảng từ 0 đến 1 nếu số đó lớn hơn tỉ lệ đột biến, thì lấy một điểm ngẫu nhiên j trong khoảng từ 1 đến n-1, tiến hành đổi giá trị tại 2 vị trí i,j cho nhau.

Bước 4: Tạo method TienHoaQuanThe để tiến hóa đưa ra quần thể mới, trong quanthemoi với kích thước cho trước, có phần tử đầu tiên là đường đi ngắn nhất của quần thể hiện tại, và các phần tử tiếp theo được tạo ra bằng cách chọn lọc và lai các đường đi để đưa ra đường đi mới Tiếp theo là đột biến từng đường đi trong quần thể và đưa raquanthemoi.

Trường Đại học Kinh tế Huế

Hình 2 1 : Sơ đồ các l ớ p cho thu ậ t toán di truy ề n

Ngôn ngữ xây dựng chương trình bằng C# cụ thể là Winform C# dùng dể đưa ra kết quả chu trình ngắn nhất mà người giao hàng (shipper) sẽ thực hiện, bao gồm các bước xây dựng như sau:

- Xây dựng lớp biểu diễn đường đi.

- Xây dựng lớp biểu diễn quần thể.

- Cài đặt Thuật toán di truyền.

- Cài đặt Winform C# gồm Form1 là tìm kiếm đường đi và Form 2 là hiển thị danh sách địa điểm đượcđánh số.

Trường Đại học Kinh tế Huế

2.4.1 Lớp DuongDi public class DuongDi

{ public static int[,] matranKC; public int[] duong; double khoangcach; double dothichnghi; public static Random rd = new Random();

// Tạo một ma trận khoảng cách giữa các thành phố public static void taoMatranKC(string urlFile) {

StreamReader file = new StreamReader(urlFile); string dls = file.ReadToEnd(); file.Close(); string[] tach = dls.Split('\n'); int[,] duLieu = new int[tach.Length, tach.Length]; for (int i = 0; i < tach.Length; i++) { string[] tach2 = tach[i].Split(' '); if (tach2.Length != tach.Length) { return;

} else { for (int j = 0; j < tach2.Length; j++) { try { duLieu[i, j] = Convert.ToInt32(tach2[j]);

Trường Đại học Kinh tế Huế

} // Khởi tạo đường đi public DuongDi(int stp) { duong = new int[stp]; khoangcach = 0; dothichnghi = 0;

} // Tính độ dài đường đi public int DoDaiDuongDi() { return duong.Count();

} //Gán giá trị tại một ví trí nhất định trong đường đi public void SetDiaDiem(int vitri, int giatri)

{ duong.SetValue(giatri, vitri); dothichnghi = 0; khoangcach = 0;

} //Đưa ra thành phố tại vị trí public int GetDiaDiem(int vitri) { return duong[vitri]; // dùng để đưa ra giá trị sd trong lai ghép

} //Kiểm tra một thành phố đã tồn tại trong đường đi hay chưa public bool ChuaDiaDiem(int giatri)

Trường Đại học Kinh tế Huế

Boolean kq = duong.Contains(giatri); return kq;

// Đưa ra vị trí của thành phố bắt đầu trong mảng đường đi

//bằng giá trị của người dùng nhập trừ cho 1 public static int DiemBatDau(int dd)

} //Mảng đường đi sẽ chứa các thành phố từ 1 đến n public void TaoDuongDi(int diemdau)

{ for (int i = 1; i tiledotbien) { int i2 = (int)(r.NextDouble() * duongdi.DoDaiDuongDi() - 1); if (i2 != 0) { var tp1 = duongdi.GetDiaDiem(i1); var tp2 = duongdi.GetDiaDiem(i2); duongdi.SetDiaDiem(i1, tp2); duongdi.SetDiaDiem(i2, tp1);

} } } } public static QuanThe TienHoaQuanThe(QuanThe quanthe) {

QuanThe quanthemoi = new QuanThe(5, false, diemcuoi, diemdau); quanthemoi.LuuDuongDi(0, quanthe.LayDuongDiNganNhat()); tp = 0; while (tp < quanthemoi.KichThuocQuanthe()) {

Trường Đại học Kinh tế Huế

DuongDi con = GhepLai(cha, me); quanthemoi.LuuDuongDi(tp, con); tp++;

} // Set thành phố bắt đầu mà người dùng nhập vào public static void SetDiemBatDau(int tp)

//Set số thành phố cần đi mà người dùng nhập vào public static void SetDiemCuoi(int sotp)

2.4.4 Winform Form1 public partial class Form1 : Form

Trường Đại học Kinh tế Huế

{ if (DuongDi.matranKC != null) { lvDanhSachDiem.Clear(); for (int i = 0; i

Ngày đăng: 28/08/2023, 20:49

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. (2017). Bài toán người bán hàng. Wikipedia tiếng Việt, 2. Travelling salesman problem - Wikipedia Sách, tạp chí
Tiêu đề: Travelling salesman problem - Wikipedia
Nhà XB: Wikipedia tiếng Việt
Năm: 2017
8. Padberg M. và Rinaldi G. (1991). A Branch-and-Cut Algorithm for the Resolution of Large-Scale Symmetric Traveling Salesman Problems. SIAM Rev, 33(1), 60–100 Sách, tạp chí
Tiêu đề: SIAM Rev
Tác giả: Padberg M., Rinaldi G
Nhà XB: SIAM
Năm: 1991
9. Applegate D.L., Bixby R.E., Chvátal V. và cộng sự. (2006), The Traveling Salesman Problem: A Computational Study, Princeton University Press Sách, tạp chí
Tiêu đề: The Traveling Salesman Problem: A Computational Study
Tác giả: Applegate D.L., Bixby R.E., Chvátal V
Nhà XB: Princeton University Press
Năm: 2006
12. Holland J.H. (1992), Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control, and Artificial Intelligence, MIT Press Sách, tạp chí
Tiêu đề: Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control, and Artificial Intelligence
Tác giả: Holland J.H
Nhà XB: MIT Press
Năm: 1992
14. Tài liệu Bài tập lớn trí tuệ nhân tạo tìm hiểu về giải thuật di truyền 15. GIẢI THUẬT DI TRUYỀN | Hong Phan - Academia.edu Sách, tạp chí
Tiêu đề: GIẢI THUẬT DI TRUYỀN
Tác giả: Hong Phan
Nhà XB: Academia.edu
16. tutorialspoint.com Các lĩnh vực ứng dụng thuật toán di truyền.www.tutorialspoint.com,Trường Đại học Kinh tế Huế Sách, tạp chí
Tiêu đề: Các lĩnh vực ứng dụng thuật toán di truyền
Nhà XB: tutorialspoint.com
10. Reinelt G. (1991). TSPLIB—A Traveling Salesman Problem Library. ORSA J Comput, 3(4), 376–384 Link
5. Dantzig G., Fulkerson R., và Johnson S. (1954). Solution of a Large-Scale Traveling-Salesman Problem. J Oper Res Soc Am, 2(4), 393–410 Khác
6. Held M. và Karp R.M. (1971). The traveling-salesman problem and minimum spanning trees: Part II. Math Program, 1(1), 6–25 Khác
7. Grửtschel M. và Holland O. (1991). Solution of large-scale symmetric travelling salesman problems. Math Program, 51(1–3), 141–202 Khác
11. Fraser A.S. (1962). Simulation of genetic systems. J Theor Biol, 2(3), 329–346 Khác

HÌNH ẢNH LIÊN QUAN

Hình 1. 1: L ị ch s ử bài toán - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 1. 1: L ị ch s ử bài toán (Trang 16)
Hình 1.2 và khoảng cách giữa các thành phố được cho như Bảng 1.1. - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 1.2 và khoảng cách giữa các thành phố được cho như Bảng 1.1 (Trang 17)
Hình 1. 3: Máy Turing - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 1. 3: Máy Turing (Trang 19)
Bảng 1. 2: Các lớp độ phức tạp - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Bảng 1. 2: Các lớp độ phức tạp (Trang 20)
Hình 1. 4: Quan h ệ gi ữ a các l ớp độ ph ứ c t ạ p quan tr ọ ng - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 1. 4: Quan h ệ gi ữ a các l ớp độ ph ứ c t ạ p quan tr ọ ng (Trang 21)
Sơ đồ Thuật toán Di truyền: - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
hu ật toán Di truyền: (Trang 24)
2.3. Sơ đồ lớp - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
2.3. Sơ đồ lớp (Trang 43)
Hình 2. 2: Giao di ệ n Form 1 - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 2. 2: Giao di ệ n Form 1 (Trang 62)
Hình 2. 3: Giao di ệ n Form 2 - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 2. 3: Giao di ệ n Form 2 (Trang 63)
Hình 3. 1: Hình 5 đị a điểm đượ c ch ọ n t ừ Google Map - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 3. 1: Hình 5 đị a điểm đượ c ch ọ n t ừ Google Map (Trang 65)
Bảng 2. 2: Mẫu thí nghiệm 10 địa điểm - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Bảng 2. 2: Mẫu thí nghiệm 10 địa điểm (Trang 65)
Bảng 3. 1: Thời gian chạy thuật toán qua các địa điểm - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Bảng 3. 1: Thời gian chạy thuật toán qua các địa điểm (Trang 69)
Hình 3. 2: Bi ểu đồ th ờ i gian ch ạ y thu ậ t toán di truy ề n khi s ố địa điể m - Ứng dụng giải thuật di truyền cho bài toán người du lịch bằng winform c
Hình 3. 2: Bi ểu đồ th ờ i gian ch ạ y thu ậ t toán di truy ề n khi s ố địa điể m (Trang 70)

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w