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 cũng như heuristic đã được tìm ra để giải quyết một số trường hợp có tới hàng chục nghìn thàn
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH
- -BÀI THU HOẠCH MÔN THUẬT TOÁN VÀ PHƯƠNG PHÁP GIẢI QUYẾT
VẤN ĐỀ
Đề tài: BÀI TOÁN NGƯỜI DU LỊCH
GVHD: Đỗ Văn Nhơn
Học viên thực hiện:
Lê Chí Cảnh – CH1301081
TP Hồ Chí Minh, tháng 10 năm 2014
Trang 2Phần mở đầu 3
Bố cục bài thu hoạch 4
CHƯƠNG 1: TỔNG QUAN BÀI TOÁN NGƯỜI DU LỊCH 5
CHƯƠNG 2: PHÁT BIỂU BÀI TOÁN NGƯỜI DU LỊCH VÀ CÁC THUẬT GIẢI LIÊN QUAN 6
2.1 Phát biểu bài toán 6
2.2 Thuật giải tìm kiếm địa phương Local Search 6
2.3 Phương pháp tham lam (Greedy, một thuật giải Heuristic) 7
2.4 Thuật giải Iterated Local Search 8
CHƯƠNG 3: THUẬT GIẢI ĐỂ GIẢI QUYẾT BÀI TOÁN NGƯỜI DU LỊCH 11
CHƯƠNG 4: ĐÁNH GIÁ THUẬT GIẢI VÀ KẾT QUẢ DỰ KIẾN 13
Tài liệu tham khảo 14
Trang 3Phần mở đầu
Lý do thực hiện và mục tiêu của đề tài
Trong cuộc sống của chúng ta việc tìm ra một hành trình di chuyển qua các địa điểm ít ốn chi phí nhất là một bài toán kinh điển trong lĩnh vực khoa học Lời giải tìm có giá trị lớn trong hoạt động thực tiễn của con người, giúp chúng ta di chuyển nhanh hơn,
và tiết kiệm chi phí hơn Tuy nhiên tính đến thời điểm hiện tại thì vẫn chưa có giải thuật hiệu quả nào cho việc giải bài toán này Trong phạm vi bài thu hoạch này, em sẽ đưa ra một giải pháp để giải quyết một bài toán tìm đường đi với chi phí ngắn nhất cho người du
lịch (tiếng Anh: travelling salesman problem – TSP ).
Trang 4Bố cục bài thu hoạch
Bài thu hoạch gồm có 4 chương như sau:
Chương 1: Tổng quan về bài toán người du lịch Chương 2: Phát biểu bài toán người du lịch và các thuật giải liên quan Chương 3: Thuật giải đề nghị: trình bày chi tiết thuật giải để giải quyết bài toán người du lịch
Chương 4: Đánh giá thuật giải và kết quả dự kiến
Trang 5CHƯƠNG 1: TỔNG QUAN BÀI TOÁN NGƯỜI DU LỊCH
Lịch sử bài toán
Bài toán người du lịch [1] (tiếng Anh: travelling salesman problem - TSP) là một bài
toán NP-khó 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 trước 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 thăm mỗi thành phố đúng một lần
Bài toán được nêu ra lần đầu tiên năm 1930 và là một trong những bài toán được nghiên cứu sâu nhất trong tối ưu hóa Nó thường được dùng làm thước đo cho nhiều phương pháp tối ưu hóa 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 cũng như heuristic đã được tìm ra để giải quyết một số trường hợp có tới hàng chục nghìn thành phố
Ngay trong hình thức phát biểu đơn giản nhất, bài toán TSP đã có nhiều ứng dụng trong lập kế hoạch, hậu cần, cũng như thiết kế vi mạch
Trong lý thuyết độ phức tạp tính toán, phiên bản quyết định của TSP (cho trước độ dài L, xác định xem có tồn tại hay không một chu trình đi qua mỗi đỉnh đúng một lần và
có độ dài nhỏ hơn L) thuộc lớp NP-đầy đủ Do đó, có nhiều khả năng là thời gian xấu nhất của bất kì thuật toán nào cho TSP đều tăng theo cấp số nhân với số thành phố
TSP có một vài ứng dụng thậm chí trong dạng thức nguyên thuỷ của nó như lập kế hoạch, logistic, và sản xuất các microchip Thay đổi đi chút ít nó xuất hiện như một bài toán con trong rất nhiều lĩnh vực như việc phân tích gen trong sinh học Trong những ứng dụng này, khái niệm thành phố có thể thay đổi thành khách hàng, các điểm hàn trên bảng mạch, các mảnh DNA trong gen, và khái niệm khoảng cách có thể biểu diễn bởi thời gian
du lịch hay giá thành, hay giống như sự so sánh giữa các mảnh DNA với nhau Trong nhiều ứng dụng, các hạn chế truyền thống như giới hạn tài nguyên hay giới hạn thời gian thậm chí còn làm cho bài toán trở nên khó hơn
Trong lý thuyết của độ phức tạp tính toán, phiên bản quyết định của bài toán TSP thuộc lớp NP-đầy đủ 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ới số lượng thành phố, vì vậy thậm chí nhiều trường hợp với vài trăm thành phố cũng đã mất vài năm CPU để giải một cách chính xác
Trang 6CHƯƠNG 2: PHÁT BIỂU BÀI TOÁN NGƯỜI DU LỊCH VÀ
CÁC THUẬT GIẢI LIÊN QUAN
2.1 Phát biểu bài toán
Cho trước một tập của các thành phố và các chi phí đi lại giữa mỗi cặp thành phố, bài toán người du lịch , hoặc viết tắt trong tiếng
anh là TSP, là để tìm ra chi phí thấp nhấp để đến
thăm tất cả các thành phố trong tập ban đầu và trở
về điểm bắt đầu của bạn Trong điều kiện tiêu
chuẩn, thì chúng ta quy định chi phí đi lại là đối
xứng theo nghĩa là đi du lịch từ thành phố X đến
thành phố Y chi phí cũng giống như đi du lịch từ Y
đến X
Bài toán người du lịch có thể được mô hình
hoá như một đồ thị vô hướng có trọng số, trong đó
mỗi thành phố là một đỉnh của đồ thị còn đường đi
giữa các thành phố là mỗi cách Khoảng cách giữa
hai thành phố là độ dài cạnh Đây là vấn đề cực
đ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
2.2 Thuật giải tìm kiếm địa phương Local Search
Kĩ thuật tìm kiếm địa phương [2](local search) thường được áp dụng để giải các bài toán tìm lời giải tối ưu Phương pháp như sau:
• Xuất phát từ một phương án nào đó
Trang 7• Áp dụng một phép biến đổi lên phương án hiện hành để được một phương án mới tốt hơn phương án đã có
• Lặp lại việc áp dụng phép biến đổi lên phương án hiện hành cho đến khi không còn có thể cải thiện được phương án nữa
Thông thường một phép biến đổi chỉ thay đổi một bộ phận nào đó của phương án hiện hành để được một phương án mới nên phép biến đổi được gọi là phép biến đổi địa phương và do đó ta có tên kĩ thuật tìm kiếm địa phương
Ta có thể vận dụng kĩ thuật tìm kiếm địa phương để giải bài toán tìm đường đi ngắn nhất của người giao hàng (TSP)
• Xuất phát từ một chu trình nào đó
• Bỏ đi hai cạnh có độ dài lớn nhất không kề nhau, nối các đỉnh lại với nhau sao cho vẫn tạo ra một chu trình đủ
Tiếp tục quá trình biến đổi trên cho đến khi nào không còn cải thiện được phương
án nữa và kết luận
2.3 Phương pháp tham lam (Greedy, một thuật giải Heuristic)
Tìm nghiệm của bài toán tối ưu thường đòi hỏi chi phí lớn về thời gian tính toán và không gian bộ nhớ (ví dụ như bài toán TSP) Tuy nhiên trong nhiều trường hợp ta chỉ tìm được một nghiệm đủ tốt, khá gần với nghiệm tối ưu là đạt yêu cầu, nhất là khi có hạn chế
về mặt thời gian và bộ nhớ Phương pháp tham lam xây dựng các thuật toán giải các bài toán tối ưu dựa trên tư tưởng tối ưu cục bộ theo một chiến lược tư duy kiểu con người, nhằm nhanh chóng đạt đến một lời giải "tốt" Có một số thuật toán dựa trên tư tưởng của phương pháp tham lam thực sự tìm được phương án tối ưu (chẳng hạn thuật toán Kruscal tìm cây khung cực tiểu), còn lại đa số các thuật toán dựa trên phương pháp tham lam thường là thuật toán gần đúng, chỉ cho một lời giải xấp xỉ lời giải tối ưu
Trang 8Một số chiến lược tham lam
Phương pháp tham lam tìm nghiệm tối ưu dựa trên các chiến lược tối ưu cục bộ của con người Trước khi trình bày những thuật giải tham lam cho những bài toán cụ thể, chúng tôi đề cập đến hai chiến lược tối ưu cục bộ cơ bản:
- Chọn cái tốt nhất trước (còn gọi là "chọn miếng ngon trước" Đây là lí do vì sao phương pháp này được gọi là "tham lam" hay "tham ăn")
- Cải tiến cái đang có thành cái tốt hơn
1 Chiến lược thứ nhất thường được áp dụng khi xây dựng dần từng thành phần của nghiệm tối ưu Thuật giải sẽ đánh giá các lựa chọn theo một tiêu chuẩn nào đó và sắp xếp
từ nhỏ đến lớn rồi tiến hành chọn theo trình tự đó
2 Chiến lược thứ hai thường bắt đầu bằng một hay một vài phương án Sau đó, bằng một số cách thức nào đó, các phương án được điều chỉnh để có giá trị tốt hơn Quá trình điều chỉnh sẽ dừng lại khi không điều chỉnh được thêm hoặc sự cải thiện rất nhỏ hoặc hết thời gian cho phép… Phần lớn các thuật toán hiện nay áp dụng cho bộ dữ liệu lớn được thiết kế theo chiến lược này: chẳng hạn tìm kiếm leo đồi, giải thuật di truyền…
2.4 Thuật giải Iterated Local Search
Ý tưởng đơn giản của thuật giải này được đề xuất lần đầu tiên bởi Baxter vào năm
1981[3], nhưng cho đến năm 1998, Stützle mới chính thức phổ biến thuật giải và đặt tên là Lặp tìm kiếm cục bộ Iterated Local Search (gọi tắt là ILS) ILS là một phương pháp Metaheuristic, hay chính xác hơn là một trong những Metaheuristic dựa trên Local Search, vì nó yêu cầu cần có sẵn một thuật giải Local Search Ý tưởng là khi các thuật giải Local Search bị dừng lại tại một lời giải tối ưu cục bộ s*, thì một phương thức lặp cho phép sử dụng lại Local Search này cho lời giải s’ được tạo bởi bước làm nhiễu perturbation trên s*, điều này giúp thuật giải thoát ra khỏi tối ưu cục bộ Việc làm nhiễu perturbation được kiểm soát thông qua history nhằm tạo ra những lời giải đầu vào tốt hơn cho Local Search, làm tăng khả năng tìm được lời giải cải thiện chất lượng hơn lời giải tối ưu cục bộ Tại mỗi lần lặp, những history trước đó, có thể là những thông tin về lời giải tối ưu cục bộ trước đó, sẽ không được sử dụng lại Từ lời giải tối thiểu cục bộ s*, ta áp dụng perturbation tạo thành lời giải s’ khác Sau đó áp dụng thuật giải Local Search, ta tìm ra lời giải s*’ có thể tốt hơn s*
Trang 9Gọi s0 là lời giải khởi tạo của bài toán, và s* là lời giải tối ưu cục bộ sau khi áp dụng thuật giải Local Search Ta sẽ lặp lại các bước sau cho đến khi đạt điều kiện dừng Điều kiện dừng của thuật giải ILS có thể là số lần lặp tối đa hoặc thời gian lặp tối đa cho phép Các bước như sau:
- Bước 1: Perturbation (tạm dịch là bước nhiễu loạn): làm thay đổi lời giải s* dựa trên thông tin history tạo ra lời giải mới s’
- Bước 2: Local Search (bước tìm kiếm cục bộ): áp dụng thuật giải tìm kiếm cục bộ cho lời giải đầu vào s’, tìm ra s*’ là lời giải tối ưu cục bộ tiếp theo
- Bước 3: AcceptanceCriterion (bước chọn lời giải): nếu s*’ thoả tiêu chuẩn chọn thì s*’ sẽ trở thành lời giải đầu vào cho vòng lặp tiếp theo, nếu không lời giải đầu vào vẫn sẽ là s* Có nhiều tiêu chí để chọn lời giải làm lời giải đầu vào s*cho vòng lặp tiếp theo, cụ thể như sau:
+ Chỉ chuyển qua lời giải tối ưu nhất, nghĩa là nếu lời giải tối ưu cục bộ s*’ ở bước 2 tốt hơn lời giải tối ưu cục bộ trước đó thì s*=s*’ ngược lại dùng tiếp tục lời giải
s* cũ Đây là tiêu chí chọn có tính chuyên sâu cao, còn được gọi là better acceptance
criterion.
+ Luôn chuyển qua lời giải tối ưu vừa tìm được và không chú trọng đến chất lượng lời giải, nghĩa là luôn luôn s*=s*’ Đây là tiêu chí chọn có tính đa dạng hoá với tên gọi
random walk acceptance criterion.
Iterated Local Search:
s* = localSearch(s0);
while(termination condition met) {
s’ = perturbation(s*, history);
Trang 10Cần lưu ý rằng trong khi Local Search tập trung tìm kiếm trong không gian lời giải rộng lớn S, thì ILS chỉ cần tập trung tìm kiếm trong không gian lời giải nhỏ hơn gồm các lời giải tối ưu cục bộ Hơn nữa, thuật giải ILS đơn giản, dễ áp dụng và dễ thực hiện, có thể nói tính đơn giản là một ưu điểm lớn của thuật giải này ILS được đánh giá cao về hiệu quả trong việc tạo ra lời giải gần với lời giải tối ưu Thuật giải ILS vừa giữ được tính đơn giản của Heuristic và vừa giữ được tính tổng quát chung của
Metaheuristic Ngoài ra, thuật giải này rất linh động, cho phép người dùng chọn thuật giải Local Search theo ý muốn Gần đây, thuật giải này được sử dụng khá nhiều như các bài báo của Ilina Stoilkovska, M Stolevik và các cộng sự, F Bellanti và các cộng sự, E.K Burke và các cộng sự
CHƯƠNG 3: THUẬT GIẢI ĐỂ GIẢI QUYẾT BÀI TOÁN
NGƯỜI DU LỊCH
Trong phạm vi bài thu hoạch này, em đề xuất sử dụng thuật giải Iterated Local Search để giải quyết bài toán người du lịch Như đã trình bày thuật giải này có mã giã như sau:
Bài thu ho ch môn Thu t toán và các ph ạch môn Thuật toán và các phương pháp giải quyết vấn đề ật toán và các phương pháp giải quyết vấn đề ương pháp giải quyết vấn đề ng pháp gi i quy t v n đ ải quyết vấn đề ết vấn đề ấn đề ề Trang 10
Iterated Local Search:
s* = localSearch(s0);
while(termination condition met) {
s’ = perturbation(s*, history);
s*’= localSearch(s’);
Trang 11Sau đây là trình bày chi tiết các bước thực hiện trong thuật giải để giải quyết bài toán người du lịch:
3.1 Bước 1 – Khởi tạo lời giải ban đầu
Lời giải ban đầu được khởi tạo dựa trên ý tưởng của thuật giải tham lam Greedy với chiến lược chọn cái tốt nhất trước để khởi tạo lời giải ban đầu trong mỗi bước giải để tìm lời giải Nghĩa là tại một điểm địa điểm hiện tại hàm sẽ liệt
kê danh sách tất cả các đường có thể đi tiếp các địa điểm tiếp theo và chi phí chuyển trên các đường đó, sau đó chọn đi đến địa điểm có chi phí di chuyển là thấp nhất Kết quả bước này được lưu vào biến s0
3.2 Bước 2 – Tìm một lời giải tốt hơn lời giải ban đầu
Từ một lời giải ban đầu ta sử dụng thuật giải tìm kiếm địa phương local search để tìm ra một lời giải tốt hơn Chi tiết là từ lời giải ban đầu, ta sẽ bỏ đi hai đường có độ dài lớn nhất không kề nhau, sau đó nối các địa điểm lại với nhau sao cho vẫn tạo ra một chu trình đủ Tiếp tục quá trình biến đổi trên cho đến khi nào không còn giảm được chi phí di chuyển cho lời giải đang xét thì dừng và lưu kết quả vào biến s*.
Lưu ý là từ bước 3 đến bước 5 sẽ được thực thi trong vòng lặp while, vòng lặp này bị dừng lại khi đạt đến thời gian lặp tối đa cho phép
3.3 Bước 3 - Làm nhiễu lời giải vừa tìm được
Từ một lời giải s*, ta tiến hành làm nhiểu để nhằm tìm ra một lời giải mới khác với lời giải hiện tại Để làm nhiểu chúng ta sẽ tiến hàn bỏ đi bốn đường (thay gì bỏ đi 2 đường trong hàm tìm kiếm địa phương ở bước 2) có chi phí lớn nhất không kề nhau, sau đó nối các địa điểm lại với nhau sao cho vẫn tạo ra một chu trình đủ sau đó lưu kết quả vào biến s’
3.4 Bước 4 - Tìm lời giải tốt hơn lời giải vừa tìm được bằng với phương pháp làm nhiễu
Ở bước này ta sử dụng lại thuật giải tìm kiếm địa phương ở bước 2 để tìm
ra lời giải tối ưu hơn lời giải ở bước 3 và lưu kết quả vào biến s*’
Trang 12Chúng ta tiến hàn đánh giá 2 lời giải s* và s*’ và chọn ra lời giải có chi phí
ít hơn cho lần lặp tiếp theo của vòng lặp while Ở đây chúng ta đã sử dụng
phương án chọn có tính chuyên sâu cao, còn được gọi là better acceptance
Tiếp tục vòng lặp từ bước 3 đến bước 5 nếu thời gian lặp còn nhỏ hơn so với thời gian lặp cho phép Khi điều kiện dừng lặp thỏa thì kế thúc và thì lời giải
s* là lời giải cuối cho bài toán người du lịch
CHƯƠNG 4: ĐÁNH GIÁ THUẬT GIẢI VÀ KẾT QUẢ DỰ
KIẾN
Bởi vì bản chất của Iterated Local Search là cố gắng thay đổi lời giải tìm được từ thuật giải Local Search nhằm tìm ra những lời giải mới, và chỉ giữ lại một lời giải tối ưu nhất cho nên giải pháp ứng dụng Iterated Local Search vào bài toán người du lịch sẽ tìm được một lời giải tối ưu hơn lời giải của thuật giải tìm kiếm địa phương Local Search Nhưng có một điểm lưu ý là thời gian tìm kiếm lời giải của Iterated Local Search sẽ lâu hơn Local Search do chúng ta thực hiện việc mở rộng không gian tìm kiếm