Bài toán người du lịch (Travelling Salesman problem (TSP)) được phát biểu vào thế kỷ 17 bởi hai nhà toán học vương quốc Anh là Sir William Rowan Hamilton và Thomas Penyngton Kirkman, và được ghi trong cuốn giáo trình Lý thuyết đồ thị nổi tiếng của Oxford. Bài toán này nhanh chóng trở thành bài toán khó thách thức toàn thế giới bởi độ phức tạp thuật toán tăng theo hàm số mũ (trong chuyên ngành thuật toán người ta còn gọi chúng là những bài toán NP-hard). Bài toán được lần đầu tiên đưa ra như một vấn đề toán học vào năm 1930 và là một trong số những bài toán được nghiên cứu chuyên sâu trong lĩnh vực tổ hợp thời đó. Vào lúc đó, TSP cũng phổ biến do quy hoạch tuyến tính là một vấn đề mới và do có nhiều nghiên cứu tập trung giải các bài toán tổ hợp hơn. Các nhà nghiên cứu bắt đầu thử và công bố các kết quả giải bài toán này trên máy tính từ năm 1954 (49 đỉnh), cho đến năm 2004 bài toán giải được với số đỉnh lên tới 24.978, và dự báo sẽ còn tiếp tục tăng cao nữa.
Nội dung của bài toán là: Một người du lịch muốn đi tham quan n thành phố khác nhau. Xuất phát từ một thành phố nào đó, người du lịch sẽ đi đến các thành phố còn lại, mỗi thành phố đến đúng 1 lần, rồi quay trở lại thành phố xuất phát. Hãy tìm hành trình sao cho tổng chi phí là nhỏ nhất.
26 Bài toán người du lịch được mô hình hóa như sau:
Đầu vào:
- n thành phố tham gia vào hành trình
- Ma trận C với là chi phí đi từ thành phố i đến j.
Đầu ra:
- Chu trình hamilton có chi phí nhỏ nhất.
Hàm mục tiêu:
-
[ ] [ ] [ ] Trong đó: ( [ ] [ ]) ∑ [ ] [ ]
2.2. Ứng dụng của bài toán
Ứng dụng đầu tiên và phổ biến nhất của bài toán người du lịch chính là định tuyến giao thông và lập lịch. Ví dụ như vấn đề trong việc sắp xếp các tuyến xe buýt trường đón con trong khu trường học. Ứng dụng xe buýt này có ý nghĩa lịch sử quan trọng đối với TSP, vì nó cung cấp động lực cho Merrill Flood, một trong những người tiên phong nghiên cứu TSP trong những năm 1940. Ứng dụng TSP vào việc vận chuyển thiết bị nông nghiệp từ một địa điểm khác để kiểm tra đất, dẫn đến nghiên cứu toán học ở Bengal của P. C. Mahalanobis và ở Iowa của R. J. Jessen. Nhiều ứng dụng gần đây liên quan đến việc lập kế hoạch các cuộc gọi dịch vụ tại các công ty truyền hình cáp, việc cung cấp các bữa ăn đến tận nhà, lịch trình của cần cẩu trong kho, các định tuyến xe tải cho các xe chở bưu kiện, và một loạt các vấn đề khác.
Một ứng dụng thực tiễn khác của bài toán TSP là trong các dây chuyền lắp ráp. Có những chiếc máy có nhiệm vụ duy nhất là khoan những lỗ trên bề mặt vật liệu. Vật liệu này có thể là bảng mạch điện tử, vỏ khung của máy móc hoặc những tấm gỗ đóng giá sách. Đầu mũi khoan có thể di chuyển tự do trong phạm vi mà nó hoạt động và sẽ mất một khoảng thời gian để mũi khoan di chuyển từ vị trí khoan này đến vị trí khoan khác tùy thuộc vào khoảng cách di chuyển. Một lời giải của bài
27 toán TSP có thể sử dụng để tìm ra thứ tự tối ưu để di chuyển giữa các lỗ khoan. Trong các dây chuyền lắp ráp, tiết kiệm được một khoảng thời gian nhỏ cho mỗi sản phẩm đồng nghĩa với việc sẽ lắp ráp được thêm nhiều sản phẩm hơn. Để giải bài toán này dựa trên bài toán TSP, ta mô hình hóa bài toán bằng đồ thị trong đó các nút là các lỗ khoan và các cạnh là khoảng cách giữa chúng.
Lời giải của bài toán người du lịch có thể sử dụng trong việc thiết kế các chi tiết máy hoặc thiết bị điện tử. Ví dụ như việc lắp đặt bảng mạch điện tử, dòng điện đi ra từ cực dương và đi vào cực âm, việc sắp đặt các linh kiện cần phải được tính sao cho thuận tiện và tiết kiệm nhất cho việc nối dây. Hay trong các hệ thống dẫn nước, các vòi nước đóng vai trò các nút của đồ thị, đường ống là các cạnh, ta phải tìm chu trình Hamilton nhỏ nhất để tiết kiệm vật liệu và gia tăng sức nước.
2.3. Các nghiên cứu liên quan
Có rất nhiều nghiên cứu được đưa ra để giải bài toán người du lịch, bao gồm giải thuật chính xác và giải thuật xấp xỉ
2.3.1.Giải thuật chính xác
Các thuật toán chính xác được thiết kế để tìm ra lời giải tối ưu cho TSP, đó là các tour du lịch có độ dài tối thiểu. Giải pháp trực tiếp nhất là thử tất cả các hoán vị và xem đâu là lời giải tối ưu nhất (sử dụng thuật toán vét cạn). Thời gian chạy cho cách tiếp cận này là O (n!), trong đó n là số thành phố, vì vậy giải pháp này trở nên không thực tế ngay cả đối với chỉ 20 thành phố.
Năm 1962, Michael Held và Richard M. Karp đã đưa ra ba bài toán trình tự (sequencing problem) trong đó có bài toán TSP, mỗi bài toán có một cấu trúc các giải pháp cho phép bằng phương pháp quy hoạch động. Thuật toán Held-Karp đã giải quyết vấn đề trong thời gian O ( ) [5].
Năm 2006, các tác giả David L. Applegate, Robert E. Bixby, Vasek Chvátal và William J. Cook đã đưa ra một số các phương pháp tiếp cận khác như thuật toán nhánh cận, lập trình tuyến tính và phương pháp mặt cắt (cutting plane). Giải pháp
28 chính xác cho 15.112 thị trấn Đức từ TSPLIB đã được tìm thấy vào năm 2001, bằng cách sử dụng phương pháp mặt cắt (cutting – plane) được đề xuất bởi George Dantzig, Ray Fulkerson, và Selmer M. Johnson vào năm 1954, dựa trên lập trình tuyến tính. Các tính toán được thực hiện trên một mạng lưới 110 bộ xử lý đặt tại Đại học Rice và Đại học Princeton. Tổng thời gian tính toán tương đương với 22,6 năm trên một bộ xử lý đơn 500 MHz Alpha [1].
Các lời giải chính xác khác được mô tả trong [7] gồm có phương pháp mặt cắt (cutting plane method) của Dantzig, Fulkerson, and Johnson (1954); phương pháp cắt nhánh (branch-and-cut method) của Padberg and Rinaldi (1990); phương pháp nhánh cận (branch-and-bound method) của Land and Doig (1960) và phương pháp Concorde của Applegate, Bixby, Chatal và Cook (2000). Dù vậy, tất cả các thuật toán trên đều trở nên kém hiệu quả mỗi khi tăng số lượng thành phố phải ghé thăm trong chu trình.
2.3.2.Giải thuật xấp xỉ
Như đã trình bày ở phần trước, các thuật toán đưa ra lời giải chính xác đều có độ phức tạp tính toán rất cao, đòi hỏi nhiều tài nguyên để tính toán. Việc để một người dùng phổ thông tiếp cận đến lời giải của những bài toán như bài toán người du lịch là không thực tế. Trong khi đó, có rất nhiều vấn đề thực tế liên quan đến bài toán người du lịch. Vì vậy, những nhà nghiên cứu đã đi theo một hướng khác. Đó là phát triển những thuật toán xấp xỉ, hiệu quả và có nhiều ứng dụng thực tế hơn. Thay vì cố gắng tìm cho ra lời giải tốt nhất, một điều gần như không thể, các thuật toán này cố gắng tìm ra những lời giải chấp nhận được trong thời gian đa thức.
Thuật toán láng giềng gần nhất (NN – Nearest Neighbor) là một trong những thuật toán đầu tiên được dùng để tìm lời giải cho bài toán người bán hàng (bài toán người du lịch), và thường cho kết quả chênh lệch trong phạm vi 25% so với đường đi tối ưu [9]. Thuật toán này chạy nhanh hơn rất nhiều so với việc kiểm tra mọi tuyến đường và một số thuật toán khác. Tuy nhiên, vẫn còn tồn tại nhiều bản dữ liệu phân phối thành phố sắp xếp đặc biệt làm cho thuật toán láng giềng gần
29
đưa ra lời là các tuyến đường tồi tệ nhất (Gutin, Yeo và Zverovich, 2002) [4]. Điều này đúng cho cả TSPs bất đối xứng và đối xứng (Gutin và Yeo, 2007).
Các thuật toán heuristic dựa trên cấu trúc cây khung nhỏ nhất thường có kết quả không quá hai lần kết quả tốt nhất. Thuật toán nổi tiếng nhất là thuật toán của Christofides, được giới thiệu ở CSE4101, có tỉ lệ ước lượng 3/2 [12]. Thuật toán này tìm cách kết nối các đỉnh có bậc lẻ của cây khung nhỏ nhất. Một thuật toán khác sử dụng cây khung nhỏ nhất là thuật toán Double-MST [12]. Thuật toán này yêu cầu liệt kê cây khung nhỏ nhất theo thứ tự trước. Thuật toán này đã được chứng minh trong [21] là kết quả không lớn hơn quá 2 lần so với kết quả tốt nhất.
Thuật toán trao đổi cặp cạnh hay còn gọi là 2-opt thực hiện loại bỏ hai cạnh và thay bằng hai cạnh khác kết nối hai vùng tạo bởi hai cạnh vừa bị loại bỏ tạo thành một chu trình ngắn hơn. Thuật toán này được tổng quát hóa thành thuật toán k-opt, hay còn gọi là thuật toán Lin–Kernighan [21]. Thuật toán k-opt thực hiện xóa bỏ k cạnh rời rạc, nghĩa là các cạnh không có chung điểm đầu và điểm cuối, sau đó lắp ráp các phần của chu trình vào thành một chu trình mới. Thuật toán k-opt là một trường hợp đặc biệt của thuật toán v-opt. Trường hợp phổ biến nhất của thuật toán k-opt là thuật toán 3-opt, được giới thiệu bởi Shen Lin và Dell Labs năm 1965. Thuật toán v-opt, hay còn gọi là opt biến thiên, là trường hợp tổng quát của k-opt. Trong khi thuật toán k-opt loại bỏ một số lượng cạnh cố định (k), thì thuật toán v- opt không cố định số cạnh sẽ bị loại bỏ. Thay vào đó, thuật toán sẽ tăng dần số cạnh bị loại bỏ trong quá trình tìm kiếm.
Nhà nghiên cứu trí tuệ nhân tạo Marco Dorigo đã mô tả một phương pháp heuristic vào năm 1993 tạo ra "giải pháp tốt" cho TSP sử dụng mô phỏng của một đàn kiến hay còn gọi là ACS (Ant Colony System) [11]. Thuật toán mô phỏng hành vi của đàn kiến được quan sát trong thực tế để tìm con đường ngắn giữa nguồn thức ăn và làm tổ của chúng. Năm 2007, thuật toán dựa trên học thuyết tối ưu hóa bầy đàn (PSO) cho bài toán TSP được trình bày và so sánh với các thuật toán hiện có để giải quyết bài toán. Tác giả đã chứng minh rằng kích thước lớn hơn của bài toán
30 được giải quyết khi sử dụng thuật toán được đề xuất [22]. Năm 2011, Ivan Brezina J.r thảo luận về tối ưu hóa đàn kiến (ACO), thuộc nhóm các kỹ thuật tiến hóa và trình bày các phương pháp được sử dụng trong ứng dụng của ACO cho TSP [8].
Năm 1997, Rong Yang giới thiệu một số toán tử di truyền đã đưa giải thuật di truyền hướng tới chất lượng các lời giải tốt hơn và không mắc phải cực trị địa phương sớm. Giải thuật áp dụng một phép lai tham lam và hai toán tử đột biến tiên tiến dựa trên 2-opt và 3-opt heuristics [20]. Năm 2005, Lawrence V.Snyder trình bày một heuristic để giải quyết bài toán người du lịch tổng quát. Phương thức này kết hợp một thuật toán di truyền (GA) với heuristic cải tiến các tour địa phương. Giải pháp được mã hóa sử dụng khóa ngẫu nhiên, phá vỡ các vấn đề gặp phải khi sử dụng bảng mã hóa GA truyền thống. Thuật toán thực hiện khá tốt khi thử nghiệm trên tập 41 bộ dữ liệu cơ bản với giá trị mục tiêu tối ưu đã được biết trước [10].
31
CHƯƠNG 3 - GIẢI THUẬT DI TRUYỀN GIẢI BÀI TOÁN NGƯỜI DU LỊCH
3.1. Mã hóa lời giải
Trong thuật toán di truyền, mỗi lời giải sẽ được mã hóa thành một cá thể, qua đó thực hiện các phép toán di truyền nhằm tìm ra lời giải tốt hơn từ tập lời giải ban đầu. Với bài toán người du lịch, mỗi lời giải là một hoán vị biểu diễn thứ tự đến thăm các thành phố trong chu trình.
Hình 12: Một lời giải của bài toán người du lịch
Lời giải được thể hiện ở hình 12 sẽ được mã hóa như sau:
1 3 6 8 4 2 5 7
3.2. Khởi tạo quần thể
Quần thể ban đầu cần đảm bảo tính đa dạng, đặc biệt nếu quần thể ban đầu có các cá thể tốt, thì quá trình tiến hóa sẽ diễn ra nhanh hơn, và khả năng chúng ta tiến tới lời giải tốt sẽ sớm hơn.
Các cá thể trong quần thể khởi tạo và các quần thể sau này phải thỏa mãn ràng buộc là tất cả các thành phố phải xuất hiện đúng một lần trong mỗi cá thể. Luận văn đề xuất hai phương pháp khởi tạo quần thể:
32
- Khởi tạo liệt kê: Liệt kê n hoán vị các thành phố đầu tiên làm quần thể ban
đầu.
- Khởi tạo ngẫu nhiên: Khởi tạo lần lượt các thành phố trong một cá thể bằng
cách random và so sánh với các thành phố trước đó để không bị thành phố nào lặp lại hai lần.
Trong quá trình thực ngiệm, để tăng thêm tính đa dạng của quần thể, luận văn chỉ sử dụng phương pháp khởi tạo ngẫu nhiên.
3.3. Chọn lọc
Có rất nhiều phương thức chọn lọc đã được giới thiệu ở phần cơ sở lý thuyết. Luận văn đề xuất hai phương thức chọn lọc được sử dụng nhiều nhất để đưa vào cài đặt trong chương trình thực nghiệm. Đó là:
3.3.1.Lựa chọn tranh đấu
Đây là cơ chế lụa chọn đơn giản nhất. Cơ chế lựa chọn :
Lấy một số NST trong quần thể, NST nào có độ thích nghi cao nhất được chọn.
Lặp lại thao tác trên N lần. 3.3.2.Lựa chọn tỷ lệ (bánh xe Roulette)
Trước khi lựa chọn thì tính các giá trị sau :
Tính tổng độ thích nghi của cả quần thể:
Tính xác suất chọn pi cho mỗi nhiễm sắc thể vi: pi = f(vi)/F
Tính vị trí xác suất qi của mỗi nhiễm sắc thể :
Cơ chế lựa chọn theo bánh xe Roulet được thực hiện bằng cách quay bánh xe Roulet N lần. Mỗi lần chọn một nhiễm sắc thể từ quần thể hiện hành vào quần thể mới bằng cách sau :
Phát sinh ngẫu nhiên một số r trong khoảng [0,1].
pop size i i v f F _ 1 ) ( i j j i P q 1
33
Nếu r < q1 (tức là r<1)thì chọn nhiễm sắc thể v1; ngược lại thì chọn nhiễm sắc thể thứ i sao cho qi-1 r qi
Với cơ chế lựa chọn như thế này thì có một số nhiếm sắc thể sẽ được chọn nhiều lần. Điều này phù hợp với lý thuyết lược đồ: Các nhiễm sắc thể tốt nhất thì có
nhiều bản sao, nhiễm sắc thể trung bình thì không đổi , nhiễm sắc thể kém thì chết đi.
3.4. Lai ghép
3.4.1.Phép lai ánh xạ từng phần (PMX - Partial Mappel Crossover)
Phép lai PMX do Golberg và Lingle đề nghị, con lai mới được tạo ra bằng cách chọn một chuỗi con từ hành trình của cha mẹ đồng thời bảo toàn thứ tự và vị trí của tối đa các thành phố từ cha mẹ kia. Một chuỗi con của hành trình được chọn bằng cách chọn hai điểm cắt ngẫu nhiên, được dùng làm giới hạn cho các thao tác hoán vị.
Ví dụ: ta có hai cha mẹ ( với hai điểm cắt được đánh dấu bởi “|”)
| | | | Con lai sẽ được tạo ra theo cách sau:
Bước 1: Hoán vị các đoạn giữa các điểm cắt | | | |
Hoán vị này cũng định nghĩa một loạt các ánh xạ: 14, 85, 76, 67
Bước 2: Thêm vào các thành phố từ cha mẹ gốc mà không có xung đột | |
34
Bước 3: Hoàn thiện phần còn thiếu dựa trên loạt ánh xạ có ở bước 1 | |
| | 3.4.2.Phép lai thứ tự (OX - Order Crossover)
Phép lai OX do Davis đề nghị, tạo ra các con bằng cách chọn chuỗi con của hành trình từ một cha mẹ và bảo tồn thứ tự tương đối của các thành phố cha mẹ kia. Ví dụ:
| | | | Con lai sẽ đc tạo ra theo cách sau:
Bước 1: Sao chép các đoạn giữa 2 điểm cắt vào các con | | | |
Bước 2: Bắt đầu từ điểm cắt thứ hai của một cha mẹ, các thành phố từ cha mẹ kia được sao chép theo cùng thứ tự, bỏ đi các dấu hiệu đã có. Đến cuối chuỗi, ta tiếp tục từ vị trí đầu tiên của chuỗi.