Tải bản đầy đủ (.docx) (14 trang)

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề BÀI TOÁN NGƯỜI DU LỊCH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (443.62 KB, 14 trang )

Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
ĐẠI HỌC QUỐC GIA TPHCM
TRƯỜ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
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
Mục lục
Contents
Phầ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
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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 ).
Bố 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
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
Chương 4: Đánh giá thuật giải và kết quả dự kiến
CHƯƠ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
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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
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 tiểu hoá 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.
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 đó.
• Á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ó.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
• 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.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
Mộ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
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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*.
Gọ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.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
Cầ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ự.

Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Iterated Local Search:
s
0
= initializeSolution();
s* = localSearch(s0);
while(termination condition met) {
s’ = perturba tion(s*, history);
s*’= localSearch(s’);
s* = acceptaceCriterion(s*,s*’, history)
}
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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:
Sau đâ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 s
0
.
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 đủ.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Iterated Local Search:
s
0
= initializeSolution();
s* = localSearch(s0);
while(termination condition met) {
s’ = perturba tion(s*, history);
s*’= localSearch(s’);
s* = acceptaceCriterion(s*,s*’, history)
}
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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*’.
3.5. Bước 5 – Chọn lời giải cho lần lặp tiếp theo
Chú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 criterion Chúng ta sẽ lưu kết quả vào biến s
*
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.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
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.
Tài liệu tham khảo
[1] . Wikipedia, Bài toán người bán hàng.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề
Trường Đại học Công Nghệ Thông Tin – ĐHQG TPHCM
[2]. Thư viện học viện mở Việt Nam, Kỹ thuật tìm kiếm đia
phương.
[3]. Vũ Ngọc Sen, Nghiên cứu bài toán xếp lịch trực cho y tá.
Bài thu hoạch môn Thuật toán và các phương pháp giải quyết vấn đề

×