CHƯƠNG 1: CƠ SỞ LÝ LUẬN 1. Bài toán người du lịch (Traveling Salesman Problem – TSP) 1. Lịch sử: Vấn đề toán học liên quan đến bài toán người du lịch đã được nghiên cứu từ những năm 1800 bởi nhà toán học Ai-Len William Rowan Hamilton và nhà toán học người Anh Thomas Penyngton Kirkman. Hamilton đã tạo ra một trò chơi gọi là Icosian vào năm 1857, trò chơi này yêu cầu người chơi phải hoàn thành một chu trình mà chỉ sử dụng những đường kết nối cho trước qua 20 đỉnh [12].
Bài toán người du lịch được nghiên cứu đầu tiên vào năm 1930 bởi nhà toán học và kinh tế học Karl Menger tại đại học Vienna và Harvard. Sau đó nó được nghiên cứu bởi Hassler Whitney và Merrill Flood tại đại học Princeton. Vào những năm 1940 bài toán người du lịch được nghiên cứu bởi những nhà thống kê học là Mahalanobis, Jessen, Gosh, và Marks liên quan đến các ứng dụng nông nghiệp, và nhà toán học Merill Flood phổ biến nó với các đồng nghiệp tại công ty RAND. Phương pháp giải của bài toán bắt đầu xuất hiện trong các tài liệu vào giữa những năm 1950, các tài liệu sử dụng một số thay đổi nhỏ về thuật ngữ "Bài toán người du lịch".
Trong những thế kỷ sau đó, bài toán được nghiên cứu bởi rất nhiều nhà toán học, khoa học máy tính, hóa học, vật lý và những ngành khoa học khác. Mặc dù bài toán người du lịch khá dễ hiểu, tuy nhiên nó rất khó giải quyết. Karp đã chứng minh vào năm 1972 rằng bài toán tìm chu trình Hamilton là bài toán NP-đầy đủ (NP-Complete). NP-khó (NP-hard), là một lớp các bài toán khó nhất trong NP, nói cách khác nó không có thuật toán nào có thể giải bài toán người du lịch trong thời gian đa thức.
Điều này cung cấp một sự giải thích khoa học cho sự khó khăn trong việc tìm ra chu trình tối ưu. Những phương pháp giải quyết bài toán người du lịch đã trở nên phức tạp và các phương pháp khả thi xuất hiện ngày càng nhiều. Dưới đây là một bảng tổng hợp mốc lịch sử của bài toán người du lịch : SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 4 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương Bảng 1.1: Các cột mốc lịch sử của bài toán người du lịch Năm Người nghiên cứu Số thành phố giải được G.
Fulkerson, và 1954 49 thành phố S. Karp 64 thành phố P. Fratta, và 1975 67 thành phố F. Grötschel 120 thành phố H.
1980 318 thành phố Padberg 1987 M. Rinaldi 532 thành phố 1987 M. Grötschel và O. Holland 666 thành phố 1987 M.397 thành phố Chvátal, và W.509 thành phố Chvátal, và W.112 thành phố Chvátal, và W.978 thành phố Helsgaun 1.
Phát biểu bài toán: Có rất nhiều cách để phát biểu bài toán người du lịch, tuy nhiên tư tưởng của bài toán là giống nhau: Bài toán người du lịch liên quan đến một người du lịch muốn thực hiện một chuyến đi qua một số thành phố sử dụng đường đi ngắn nhất có thể và thăm mỗi thành phố chỉ một lần sau đó trở về thành phố bắt đầu [18]. Nếu một người du lịch muốn thăm đúng một lần mỗi thành phố của một danh sách m thành phố (chi phí đi từ thành phố i tới thành phố j là cij) và sau đó trở về thành phố bắt đầu. Lộ trình ít tốn kém nhất mà người du lịch có thể đi là bao nhiêu [10] ? Cho một danh sách các thành phố và đường đi giữa chúng, hãy tìm chu trình ngắn nhất có thể (chu trình Hamilton) đi qua mỗi thành phố đúng một lần [12]. Ta có thể phát biểu lại bài toán như sau: Có n thành phố mà một người du lịch muốn đi tham quan.
Giữa các thành phố đó có khoảng cách dài ngắn khác nhau. Xuất phát từ một thành phố bất kì, người đó SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 5 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương muốn đi qua tất cả các thành phố còn lại, mỗi thành phố đi qua đúng một lần rồi quay trở về thành phố ban đầu. Yêu cầu: Hãy tìm hành trình với quãng đường đi là ngắn nhất.
- Ví dụ: Cho 4 thành phố với khoảng cách giữa các thành phố như hình sau: Hình 1.1: Ví dụ về bài toán người du lịch Xuất phát từ thành phố 1, chu trình ngắn nhất mà ta có thể tìm được chính là qua thành phố 2 , thành phố 4, thành phố 3 rồi trở về thành phố 1 với tổng độ dài là 80. 1 20 10 15 4 25 30 2 35 3 Tổng độ dài: 80 Hình 1.2: Chu trình với độ dài ngắn nhất SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 6 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương Nếu phát biểu theo lý thuyết đồ thị, ta có thể dễ dàng liên tưởng các thành phố như các đỉnh của đồ thị, các đường đi chính là các cạnh và khoảng cách chính là trọng số của cạnh đó. Có thể phát biểu ngắn gọn bài toán theo lý thuyết đồ thị như sau: “Cho đồ thị đầy đủ (giữa 2 cạnh bất kì đều có đường đi).
Hãy tìm chu trình Hamilton với tổng các trọng số các cạnh trong chu trình là nhỏ nhất.” Chú thích: Chu trình Hamilton là chu trình xuất phát từ một đỉnh của đồ thị, đi qua tất cả các đỉnh khác, mỗi đỉnh đúng một lần rồi quay lại đỉnh ban đầu. Trong phạm vi khóa luận này, chúng ta sẽ giải quyết bài toán người du lịch trong hệ trục tọa độ với mỗi đỉnh xác định bằng tung độ x và hoành độ y, và khoảng cách giữa chúng được tính bằng công thức: , (1) Mặc dù bài toán người du lịch rất dễ hiểu, nhưng giải quyết nó thì không hề đơn giản. Phần tiếp theo sẽ trình bày về lý thuyết độ phức tạp tính toán và phân tích độ phức tạp của bài toán người du lịch.Lý thuyết độ phức tạp tính toán: Khái niệm Để phân loại các vấn đề đó theo độ khó của chúng, người ta đưa ra khái niệm lý thuyết độ phức tạp tính toán. Khái niệm: “Độ phức tạp tính toán là sự biểu thị toán học về độ khó của một vấn đề, chỉ sự hao tốn những tài nguyên được đòi hỏi bởi máy tính để giải vấn đề đó.
Quá trình nghiên cứu về những sự biểu thị đó được gọi là lý thuyết độ phức tạp tính toán và nó rất quan trọng trong nhiều nhánh của khoa học máy tính, đặc biệt là ngành mã hóa” [4]. Các lớp độ phức tạp Một lớp độ phức tạp là một tập hợp các vấn đề có độ phức tạp tương tự nhau. Trong Lý thuyết độ phức tạp thuật toán, có các lớp độ phức tạp đáng chú ý như sau: SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 7 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương Bảng 1.2: Các lớp độ phức tạp thuật toán Lớp độ phức tạp Định nghĩa P là viết tắt của “polynomial”, tức là đa thức, là một trong những lớp cơ bản nhất trong các lớp độ phức tạp tính toán.
Một vấn đề được xếp vào lớp P, nếu như có P thuật toán có thể giải quyết bài toán trong thời gian đa thức. Ví dụ: với mỗi “đầu vào” N cho ra kết quả sau P(N) phép toán (cộng, trừ, nhân chia,…), trong đó P là một đa thức nào đó. NP là viết tắt của "nondeterministic polynomial time" (thuật toán bất định trong thời gian đa thức). Một vấn đề thuộc lớp NP khi có một thuật toán kiểm tra lời giải sao cho mỗi khi có 1 lời giải cho 1 input có NP độ dài N thì thuật toán kiểm tra lời giải sẽ cho biết là lời giải có đúng hay không sau không quá P(N) phép toán đơn giản, trong đó P là một đa thức (không phụ thuộc vào input).
Đây là lớp các bài toán khó nhất trong NP. mọi bài toán khác thuộc lớp NP NP-Complete đều có thể đưa được về một bài toán NP- complete cho trước bằng một phép biến đổi sử dụng một lượng thời gian là đa thức. Là lớp các bài toán ít nhất là khó NP-Hard bằng NP-Complete. Chú ý rằng NP-Hard không cần phải ở trong NP.
SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 8 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương Vấn đề liệu P có bằng NP hay không vẫn là một vấn đề gây ra tranh cãi trong lý thuyết độ phức tạp tính toán. Trong khuôn khổ của khóa luận này, chúng ta sẽ không bàn đến vấn đề này. Để dễ hình dung, ta có thể thấy phạm vi của các lớp độ phức tạp tính toán qua hình vẽ sau: Hình 1.3: Mô tả các lớp độ phức tạp thuật toán [5] Độ phức tạp của bài toán người du lịch Để giải bài toán người du lịch, ta cần phải tìm ra chu trình Hamilton với tổng trọng số các cạnh là nhỏ nhất.
Trong trường hợp đồ thị có ít đỉnh, ta có thể sử dụng phương án vét cạn tất cả các chu trình rồi tìm ra chu trình nhỏ nhất. Tuy nhiên, với số đỉnh của đồ thị tăng lên, thì phương án vét cạn là bất khả thi vì không có máy tính nào đủ nhanh để có thể duyệt qua các phương án đó trong thời gian ngắn. Bảng dưới đây thống kê số lượng các chu trình khi số đỉnh của đồ thị tăng lên: SV: Thái Công Danh-K47 Tin Học Kinh Tế Trang 9 Khóa luận tốt nghiệp GVHD: TS. Nguyễn Đình Hoa Cương Bảng 1.3: Số lượng các chu trình khi số đỉnh của đồ thị tăng lên: Số đỉnh Số cạnh Số lượng chu trình 6 15 120 7 21 720 8 28 5,040 9 36 40,320 10 45 362,880 11 55 3,628,800 12 66 3.216451x1017 Với số đỉnh là n thì số chu trình sẽ là (n-1)! chu trình.
Với số đỉnh càng lớn thì số chu trình càng lớn. Ví dụ như với 20 đỉnh, số chu trình cần phải duyệt qua đến hơn 121 triệu tỷ chu trình. Với khả năng của các máy tính hiện tại thì việc giải chính xác bài toán này với những trường hợp như vậy dường như là bất khả thi. Các nghiên cứu đã chứng minh rằng bài toán người du lịch thuộc lớp các bài toán có độ phức tạp NP-Complete [15], điều này chứng tỏ vẫn chưa có lời giải cho bài toán này trong thời gian đa thức.
Đây hiện vẫn là một trong những bài toán thu hút rất đông các nhà nghiên cứu tìm tòi cách giải. Vì các bài toán thuộc lớp NP-Complete ít nhiều có sự tương đồng, chỉ cần tìm ra cách giải một bài toán có thể tìm ra cách giải tất cả các bài toán còn lại. Hiện nay có khá nhiều cách giải cho bài toán này nhưng hầu hết chỉ là các cách giải gần đúng.