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

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề GIẢI BÀI TOÁN NGƯỜI BÁN HÀNG BẰNG GIẢI THUẬT MÔ PHỎNG LUYỆN KIM

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 (322.14 KB, 24 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
o0o
BÀI THU HOẠCH MÔN HỌC
THUẬT TOÁN VÀ PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ
ĐỀ TÀI:
GIẢI BÀI TOÁN NGƯỜI BÁN HÀNG BẰNG GIẢI
THUẬT MÔ PHỎNG LUYỆN KIM
GIÁO VIÊN HƯỚNG DẪN:
PGS.TS. ĐỖ VĂN NHƠN
HỌC VIÊN: VƯƠNG ĐỨC HIỀN
MSHV: CH1301087
LỚP: CAO HỌC KHÓA 8
TP HỒ CHÍ MINH - THÁNG 10, NĂM 2014
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
MỤC LỤC:
Trang 2
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
LỜI MỞ ĐẦU
Bài toán tối ưu tổ hợp là một bài toán có nhiều ứng dụng trong thực tiễn và
lý thuyết, góp phần xây dựng nên các thuật toán hữu hiệu. Metaheuristic là một
cách gọi chung cho các giải thuật heuristic trong việc giải quyết các bài toán tổ hợp
khó. Bài thu hoạch này sẽ trình bày một số vấn đề về bài toán tối ưu tổ hợp trong
khoa học máy tính, cách giải các bài toán đó sử dụng các metaheuristic; giới thiệu
bài toán người bán hàng với các giải thuật để giải nó; tìm hiểu giải thuật mô phỏng
luyện kim Simulated Annealing và áp dụng vào giải bài toán người bán hàng.
Bên cạnh các tìm hiểu lý thuyết, bài thu hoạch còn xây dựng một chương
trình demo mô phỏng cách giải quyết bài toán người bán hàng theo thuật giải luyện
kim. Chương trình đã mô tả, biểu diễn được vấn đề bài toán và đưa ra được kết quả
là đường đi ngắn nhất qua các thành phố trong thời gian nhanh, sử dụng
metaheuristic trong suy luận


Trang 3
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
CHƯƠNG 1 :
KHÁI QUÁT VỀ BÀI TOÁN TỐI ƯU TỔ HỢP
1.1 Bài toán tối ưu tổ hợp với metaheuristic
Bài toán tối ưu tổ hợp là bài toán chỉ quan tâm đến một cấu hình “tốt nhất”
theo một nghĩa nào đấy. Đây là bài toán có nhiều ứng dụng trong thực tiễn và lý
thuyết tổ hợp đã đóng góp một phần đáng kể trong việc xây dựng những thuật toán
hữu hiệu. Mục đích của bài toán tối ưu tổ hợp là tìm lời giải tốt nhất trong các lời
giải có thể và không gian tìm kiếm lời giải của bài toán là rời rạc. Nhiều bài toán tối
ưu tổ hợp có độ phức tạp tính toán cao và được phân loại thuộc lớp NP khó. Việc
tìm ra lời giải tối ưu cho các bài toán này cho các hệ thống song song lớn nhất cũng
không thể hoàn thành được trong giới hạn thời gian cho phép vì vậy các kỹ thuật
heuristic cho việc giải các bài toán tổ hợp theo hướng xấp xỉ đã được phát triển để
tìm ra các lời giải gần tối ưu (hay xấp xỉ) trong giới hạn thời gian cho phép. Bài
toán người du lịch (TSP) là một bài toán cổ điển thuộc lớp NP được nghiên cứu sâu
trong lĩnh vực tối ưu tổ hợp.
Metaheuristic là một cách gọi chung cho các giải thuật heuristic trong việc
giải quyết các bài toán tổ hợp khó. Metaheuristic bao gồm những chiến lược khác
nhau trong việc khám phá không gian tìm kiếm bằng cách sử dụng những phương
thức khác nhau và phải đạt được sự cân bằng giữa tính đa dạng và chuyên sâu của
không gian tìm kiếm. Một cài đặt thành công của metaheuristic trong một bài toán
tổ hợp phải cân bằng giữa sự khai thác được kinh nghiệm thu thập được trong quá
trình tìm kiếm để xác định được những vùng với những lời giải có chất lượng cao
gần tối ưu. Những ví dụ của metaheuristic bao gồm giải thuật luyện kim (SA) , giải
thuật di truyền (GA) , giải thuật đàn kiến (ACO) ,…Giải thuật đàn kiến là
metaheuristic dùng chiến lược của kiến trong thế giới thực để giải bài toán tối ưu.
SA xuất phát từ phương thức xác suất và kỹ thuật luyện bao gồm việc nung và điều
khiển làm nguội các kim loại để đạt được trạng thái năng lượng nhỏ nhất. Trong khi
Trang 4

TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
đó giải thuật di truyền dựa trên ý tưởng từ cơ chế di truyền trong sinh học và tiến
trình tiến hóa trong cộng đồng các cá thể của một loài.
Với độ phức tạp tính toán cao của các bài toán tối ưu tổ hợp cũng như đòi
hỏi về mặt thời gian, việc giải các bài toán này yêu cầu cần phải có những cài đặt
song song hóa hiệu quả của các giải thuật để giải quyết chúng. Song song hóa các
giải thuật metaheuristic phải đạt được 2 yêu cầu : đa dạng hóa để khám phá được
nhiều vùng trong không gian tìm kiếm và tăng tốc độ tìm kiếm. Nhiều mô hình song
song hoá đã được đề xuất cho nhiều metaheuristic. ACO và GA đều là các cách tiếp
cận dựa trên tập cá thể và vì vậy khá tự nhiên cho việc xử lý song song. Tuy nhiên
SA thì vốn đã mang tính tuần tự và rất chậm cho các bài toán với không gian tìm
kiếm lớn nhưng vẫn có một vài kỹ thuật song song hóa có thể được áp dụng để tăng
tốc độ tìm kiếm.
1.2 Bài toán người bán hàng
1.2.1 Giới thiệu chung
a. Tổng quan:
Bài toán người bán hàng (Travellng Salesman Problem - TSP) là một bài
toán khá nổi tiếng trong lĩnh vực tối ưu tổ hợp được nghiên cứu trong lý thuyết
khoa học máy tính. Nội dung của nó khá đơn giản, 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, nhiệm vụ là phải tìm
đường đi ngắn nhất có thể mà chỉ thăm mỗi thành phố đúng 1 lần.
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 đó. Nó được sử dụng như một sự đánh giá cho nhiều phương thức tối ưu khác
nhau. Thậm chí bài toán là thuộc lớp NP khó , một lượng rất lớn các heuristic và
Trang 5
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
phương thức tìm kiếm cụ thể đã được biết đến vì vậy một vài trường hợp của bài
toán với khoảng chục nghìn thành phố đã được giải quyết.
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-complete . 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 tồi 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. Lịch sử bài toán:
Nguồn gốc của bài toán người du lịch đến nay vẫn chưa rõ ràng. Một cuốn
sách cho người du lịch từ năm 1832 đã đề cập tới vấn đề và bao gồm vài ví dụ về
các đường đi từĐức qua Thụy Sỹ nhưng không chứa đựng ý nghĩa toán học nào.
Vấn đề toán học liên quan tới bài toán người du lịch đã được nhắc đến trong
những năm 1800 bởi nhà toán học Ireland W. R. Hamilton và nhà toán học người
Anh Thomas Kirkman. Trò chơi Icosian Game của Hamilton là một trò đố vui dựa
trên cơ sở tìm chu trình Hamilton. Dạng tổng quát của bài toán TSP được nghiên
cứu bởi các nhà toán học suốt những năm 1930 ở đại học Harvard, đáng chú ý là
Trang 6
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Karl Menger người đã định nghĩa bài toán, xem xét giải thuật Brute-force và quan
sát thấy tính không tối ưu của heuristic dựa trên láng giềng gần nhất.
Hassler Whitney ở đại học Princeton đưa ra tên “Bài toán người bán hàng”
ngay sau đó.
Trong những năm 1950 và 1960 , bài toán trở nên ngày càng phổ biến trong

giới nghiên cứu khoa học ở châu Âu và Mỹ. Những đóng góp đáng chú ý được kể
đến như George Dantzig, Delbert Ray Fulkerson và Selmer M. Johnson tại RAND
CorporationởSanta Monica, những người đã trình bày bài toán như bài toán số
nguyên tuyến tính và phát triển phương thức cắt cho lời giải của nó. Với những
phương thức mới này họ đã giải được tối ưu một trường hợp có 49 thành phố bằng
cách xây dựng một chu trình và chứng minh rằng không còn chu trình nào ngắn
hơn. Trong những thập kỷ tiếp theo, bài toán được nghiên cứu bởi rất nhiều nhà
nghiên cứu từ toán học, khoa học máy tính, hóa học,vật lý và những ngành khác.
Richard M. Karp năm 1972 chứng minh rằng bài toán chu trình
Hamiltonthuộc lớp NP-đầy đủ, và qua đó chỉ ra tính NP khó (NP-hardness ) của bài
toán TSP. Điều này giải thích một cách khoa học cho độ phức tạp tính toán của việc
tìm lời giải tối ưu cho bài toán .
Nhiều thành tựu đã đạt được trong suốt những năm cuối thập kỷ 1970 và
1980, khi Grötschel, Padberg, Rinaldi và những người khác cố gắng giải một cách
chính xác một thể hiện của bài toán với 2392 thành phố, sử dụng phương pháp mặt
phẳng cắt và nhánh cận.
Trong những năm 1990 Applegate, Bixby, Chvátal, và Cook đã phát triển
chương trìnhConcorde mà đã được sử dụng nhiều trong việc giải các bài toán TSP
cho đến nay . Gerhard Reinelt đã công bố thư viện TSPLIB vào năm 1991, đó là
một tập các thể hiện của bài toán TSP với nhiều độ khó khác nhau, và đã được sử
Trang 7
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
dụng bởi nhiều nhóm nghiên cứu khác nhau để so sánh kết quả. Năm 2005, Cook và
những người khác đã tính được độ dài tối ưu cho chu trình với thể hiện của bài toán
TSP lên tới 33,810 thành phố , được lấy ra từ bài toán xây dựng layout cho
microchip, cho tới nay vẫn là thể hiện lớn nhất trong các thể hiện ở TSPLIB.Nhiều
thể hiện khác với hàng triệu thành phố , lời giải tìm được có thể chứng minh nằm
sai khác 1% so với lời giải tối ưu.
1.2.2 Mô tả bài toán
Hình 1.1 Mô tả bài toán

Phát biểu bài toán:
Có một người giao hàng cần đi giao hàng tại n thành phố. Anh ta xuất phát
từ một thành phố nào đó, đi qua các thành phố khác để giao hàng và trở về thành
phố ban đầu. 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 sao cho tổng độ dài
các cạnh là nhỏ nhất.
TSP có thể được mô hình như một đồ thị , các đỉnh của đồ thị tương ứng với
các thành phố và các cạnh thì tương ứng với đường nối giữa các thành phố, chiều
dài của một cạnh tương ứng với khoảng cách giữa 2 thành phố. Một đường đi trong
bài toán TSP là một chu trình Hamilton trên đồ thị và một lời giải tối ưu của bài
toán là chu trình Hamilton ngắn nhất.
Trang 8
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Thường thì đồ thị là đồ thị đầy đủ , vì vậy mọi cặp cạnh đều được nối bởi các
cạnh. Đây là bước đơn giản hóa bài toán vì việc tìm chu trình Hamilton trong một
đồ thị đầy đủ là dễ. Các bài toán mà không phải 2 thành phố nào cũng được nối với
nhau có thể được chuyển đổi thành đồ thị đầy đủ bằng cách thêm những cạnh có độ
dài lớn giữa cách thành phố này , những cạnh sẽ không xuất hiện trong chu trình tối
ưu.
1.2.3 Các giải thuật giải bài toán
a. Lời giải chính xác
Lời giải trực tiếp nhất có thể là thử tất cả các hoán vị và xem hoán vị nào là
tốt nhất (dùng brute-force). Thời gian chạy cho cách tiếp cận này là O(n!), vì vậy
cách tiếp cận này thậm chí không thể thực hiện với chỉ 20 thành phố. Một trong số
những ứng dụng mới đây nhất của quy hoạch động là giải thuật có độ phức tạp
O(n
2
2
n
) và yêu cầu không gian bộ nhớ là hàm mũ.

Cải thiện tốc độ cho cách giải thuật trên là hầu như không thể. Ví dụ, thậm
chí là rất khó tìm một giải thuật chính xác cho bài toán TSP chạy trong độ phức tạp
O(1.9999
n
)
.
Những cách tiếp cận khác bao gồm
• Rất nhiều giải thuật nhánh cận, có thể sử dụng để giải các bài toán TSP
với khoảng 40-60 thành phố.
• Các giải thuật cải thiện dần dần sử dụng kỹ thuật ghi nhớ lại của lập trình
tuyến tính. Có thể làm việc tốt cho khoảng 200 thành phố.
• Thực hiện nhánh cận và cắt cho các bài toán cụ thể , đây là phương thức
sử dụng để giải quyết các bài toán với số lượng lớn thành phố. Cách tiếp
Trang 9
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
cận này đang giữ kỷ lục hiện tại giải quyết được bài toán TSP với 85,900
thành phố.
Lời giải chính xác cho bài toán với 15,112 thành phố ở Đức từ TSPLIB đã
được tìm ra năm 2001 sử dụng phương thức lát cắt đề xuất bởi George Dantzig, Ray
Fulkerson, và Selmer Johnsonvào năm 1954, dựa trên lập trình tuyến tính. Quá trình
tính toán đã được thực hiện trong mạng máy tính gồm 110 bộ vi xử lý tại đại học
Rice University và Princeton University. Tổng thời gian tính toán tương đương với
22.6 năm trong một máy đơn vi xử lý tốc độ 500 MHz. Vào tháng 5-2004, bài toán
người du lịch thăm tất cả 24,978 thành phố ở Thụy Điển đã được giải quyết: đoạn
đường ngắn nhất vào khoảng 72,500 kilomet đã được tìm thấy và đã được chứng
minh rằng không có đường đi nào ngắn hơn.
Vào tháng 3- 2005, bài toán người du lịch với 33,810 điểm trong 1 mạch in
đã được giải quyết sử dung công cụ Concorde TSP Solver: Đoạn đường tối ưu dài
66,048,945 đơn vị đã được tìm thấy và đã được chứng minh không có đường đi nào
ngắn hơn tổng khối lượng tính toán mất khoảng 15.7 năm CPU (Cook et al, 2006).

Vào tháng 4 năm 2006 một bài toán với 85,900 điểm cũng đã được giải quyết bởi
Concorde TSP Solver, và mất khoảng 136 năm CPU.
b. Heuristic và các thuật giải xấp xỉ
Rất nhiều heuristics và giải thuật xấp xỉ có thể đưa ra nhanh chóng lời giải
tốt đã được đề xuất. Các phương thức hiện đại có thể tìm lời giải cho bài toán cực
lớn (hàng triệu thành phố) trong khoảng thời gian chấp nhận được với lời giải xấp
xỉ chỉ khác 2-3% so với lời giải tối ưu.
Một vài kiểu heuristic đã được tìm ra như:
Giải thuật láng giềng gần nhất nearest neighbour (NN) (hay còn gọi là giải
thuật tham lam (greedy algorithm)) để cho người du lịch chọn thành phố gần nhất
Trang 10
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
chưa thăm trong lần di chuyển tiếp theo. Giải thuật này nhanh chóng đưa ra một
đường đi ngắn và hiệu quả . Cho khoảng N thành phố phân bố ngẫu nhiêu trên mặt
phẳng trung bình giải thuật này đưa ra lời giải có chiều dài xấp xỉ 1.25 * lần chiều
dài của đường đi tối ưu.
Tuy nhiên, có nhiều cách sắp xếp đặc biệt các thành phố làm cho giải thuật
NN đưa ra đường đi tồi tệ nhất (Gutin, Yeo, and Zverovich, 2002). Điều này đúng
cho cả bài toán TSP đối xứng và bất đối xứng (Gutin and Yeo, 2007).
Gần đây một heuristic mới được đưa ra là Match Twice and Stitch (MTS)
(Kahng, Reda 2004). MTS đã cho thấy tính hiệu quả hơn hẳn so với những heuristic
xây dựng hiện tại. MTS thực hiện hai lần khớp tuần tự, mà lần khớp thứ 2 được
thực hiện sau khi xóa tất cả các cạnh của lần khớp thứ nhất, để đưa ra tập tất cả các
chu trình. Sau đó chu trình được đóng lại để đưa ra đường đi cuối cùng
• Chuyển cặp, hay heuristic Lin-Kernighan.
Kỹ thuật chuyển cặp hay '2-opt' bao gồm việc lặp lại việc xóa 2 cạnh và thay
chúng bằng hai cạnh khác nối đoạn tạo bởi cạnh bị xóa tạo thành đường di ngắn
hơn. Đây là trường hợp đặc biệt của phương thức k-opt.
• k-opt heuristic
Lấy một đường đi và xóa k cạnh đôi một không có điểm chung. Xây đựng lại

đường đi từ những mảnh còn lại để không có hai mảnh đường đi nào lối với nhau
(không nối hai điểm đầu cuối của 2 mảnh với nhau sẽ tạo thành đường đi khép
kín). Điều này làm đơn giản hóabài toán TSP thành bài toán đơn giản hơn rất
nhiều. Mỗi điểm đầu cuối có thể được nối tới 2k − 2 điểm khác có thể: trong số
2ktổng số điểm đầu cuối có thể, trừ rahai điểm đầu cuối của mảnh đang xem
xét .Bài toán đơn giản hóa 2k thành phố TSP có thể giải sử dụng brute force để
tìm tổ hợp tốt nhất của các mảnh ban đầu. Kỹ thuật k-opt là trường hợp riêng của
Trang 11
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
kỹ thuât V-opt hay variable-opt . Kỹ thuật phổ biến của k-opt là 3-opt, được giới
thiệu bởi Shen Lin của Bell Labs vào năm 1965. Có một trường hợp đặc biệt của
3-opt khi mà cách cạnh là có thể không nhất thiết không có điểm chung (hai
trong số các cạnh kề với nhau). Trong thực tế, có thể đạt được những phát triển
đáng kể của kỹ thuật 2-opt không nhất thiết phải sử dụng 3-opt bằgn cách giới
hạn 3-changes thành trườn hợp riêng với hai cạnh xóa đi nối với nhau. Kỹ thuật
này được gọi là 2.5-opt nằm giữa 2-opt và 3-opt, hiểu theo cả 2 nghĩa của chất
lượng lời giải đạt được và thời gian để tìm được lời giải.
• V'-opt heuristic
Kỹ thuật variable-opt method giống như , nhưng là sự tông quát hóa của k-opt kỹ
thuật. Trong khi kỹ thuật k-opt xóa đi một số lựong cố định (k) cạnh từ đường đi
ban đầu kỹ thuật variable-opt không xóa đi một số lượng cạnh cố định. Thay vì
vậy nó phát triển tập này khi quá trình tìm kiếm tiếp tục. Phương thức nổi tiếng
trong gia đình này là phương thức Lin-Kernighan . Shen Lin vàBrian
Kernighanlần đầu tiên đưa ra phương thức của họ năm 1972 và nó là heuris tic
đáng tin cậy nhát cho việc giải bài toán người du lịch trong suốt hai thập kỷ
.Những kỹ thuật tiên tiến hơn được phát triển tại Bell Labs cuối những năm 1980
bởi David Johnson và đội nghiên cứu của ông. Những phương thức này , đôi khi
được gọi là Lin-Kernighan-Johnson xây dựng trên phương thức Lin-Kernighan ,
thêm ý tưởng từ tabu search và evolutionary computing. Kỹ thuật cơ sở Lin-
Kernighan technique mang lại kết quả được đảm bảo ít nhất là bằn so với 3-opt.

Phương thức Lin-Kernighan-Johnson tính một đường đi Lin-Kernighan , và sau
đó xáo trộn đường đi bằng cách đột biến (xóa ít nhất 4 cạnh và nối lại đường đi
bằng cách khác , sau đó thực v-opttrên đường đi mới ). Quá trình đột biến thường
đủ để di chuyển đường đi ra khỏi cục bộ địa phương (local minimum). Kỹ thuật
V-opt được xem như một trong số những heuristic mạnh cho bài toán và có thể
Trang 12
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
giải quyết các trường hợp đặc biệt, như bài toán chu trình Hamilton và những bài
toán TSP không phải metricmà những heuristic khác không giải quyết được.
CHƯƠNG 2 :
GIẢI BÀI TOÁN NGƯỜI BÁN HÀNG BẰNG GIẢI THUẬT MÔ
PHỎNG LUYỆN KIM
2.1 Giải thuật mô phỏng luyện kim
2.1.1 Giới thiệu chung
Simulated Annealing (SA) là một thuật toán dựa trên các heuristic về xác
suất, dùng cho một lớp các vấn đề để tìm một số điều kiện tốt nhất trong một không
gian tìm kiếm lớn. Nó thường được dùng khi khi không gian tìm kiếm là hữu hạn
(chẳng hạn như tất cả đường đi thăm qua tất cả các thành phố cho trước). Đối với
một số vấn đề cố định, SA có thể cho hiệu quả tốt hơn cả thuật toán vét cạn, khi mà
đơn thuần chỉ cần một kết quả chấp nhận được. Thuật toán được nêu ra độc lập bởi
Scott Kirkpatrick, C. Daniel Gelatt, Mario P. Vecchivào năm 1983, và bởi Vlado
Černýnăm 1985.
a. Ý tưởng thuật toán
Tên gọi và ý tưởng của thuật toán bắt nguồn từ kỹ thuật luyện kim trong
ngành luyện kim, một kỹ thuật sử dụng một cách khéo léo việc nung nóng rồi làm
nguội vật liệu kim loại nhằm làm tăng kích thước và giảm những chỗ khuyết, lõm
của chúng. Nhiệt độ làm cho các nguyên tử trong vật liệu trở nên mất liên kết và rời
khỏi vị trí ban đầu của chúng và di chuyển ngẫu nhiên vào những nơi có năng lượng
cao hơn; còn việc làm nguội sẽ làm tăng khả năng nhận được một trạng thái có nội
năng thấp hơn so với ban đầu.

Trang 13
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Tương tự như quá trình vật lý của kỹ thuật trên, từng bước của thuật toán SA
cố gắng thay thế các giải pháp hiện tại bằng một giải pháp ngẫu nhiên (lựa chọn
theo một danh sách phân phối của các ứng cử viên, thường được xây dựng từ các
giải pháp gần với giải pháp hiện tại đang xét), các giải pháp mới sau đó có khả năng
được chấp nhận dựa trên một xác suất, quyết định bởi sự khác biệt của giá trị một
hàm tương ứng và một tham số toàn cục T (gọi là nhiệt độ - Temperature) giảm
dần trong suốt thuật toán thực hiện. Sự phụ thuộc này cũng như việc lựa chọn giữa
giải pháp trước đó và giải pháp hiện tại hầu như là ngẫu nhiên khi T lớn, tuy nhiên
sẽ cho kết quả chọn lựa tốt hơn khi T giảm dần về 0, cũng như trong việc luyện
kim, khi nhiệt độ cao, các nguyên tử chuyển động hỗn độn theo một tốc độ và tần
suất lớn, tuy nhiên nhiệt độ càng giảm thì các nguyên tử càng ít chuyển động dần đi.
2.1.2 Nội dung giải thuật
Trong thuật toán SA, mỗi điểm s của không gian tìm kiếm là tương tự với
một trạng thái của một số hệ thống vật lý, và hàm E(s) tượng trưng cho nội năng
của hệ thống trong trạng thái đó. Tại mỗi bước, quy tắc heuristic sẽ xem xét và đưa
ra một số trạng thái kề s’ của trạng thái hiện tại s, và xác suất quyết định giữa thay
đổi hệ thống sang trạng thái s’ hay là vẫn tiếp tục giữ trạng thái s. Những xác suất
này đưa hệ thống tới trạng thái có năng lượng thấp hơn. Bước này sẽ được lặp đi lặp
lai cho đến khi hệ thống đạt được một trạng thái đủ tốt, hoặc cho đến khi không thể
tiếp tục.
a. Trạng thái kề
Trạng thái kề của một trạng thái là những trạng thái mới của vấn đề được
sinh ra sau khi biến đổi một trạng thái đã biết theo một số cách cụ thể. Ví dụ, ở
trong bài toán TSP , mỗi trạng thái được định nghĩa là một cách đi để có thể đi qua
hết tất cả các thành phố, hay nói cách khác mỗi trạng thái là một hoán vị của các
thành phố thể hiện cho mỗi cách đi.Ví dụ:
Trang 14
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn

Ta xét bài toán TSP với 6 thành phố {1, 2, 3, 4, 5, 6}, thì một trạng thái được
hiểu là một hoán vị của 6 thành phố trên, mà mỗi hoán vị thể hiện cho một cách đi.
Chẳng hạn hoán vị {1, 2, 3, 4, 5, 6} thể hiện cho cách đi 1 -> 2 -> 3 -> 4 -> 5 -> 6
-> 1, tương tự hoán vị {1,3,2,6,4,5} thể hiện một cách đi từ 1 -> 3 - > 2 -> 6 -> 4 ->
5-> 1.
Những trạng thái kề của một hóan vị là những hoán vị được sinh ra chẳng
hạn như từ việc tráo đổi vị trí của một cặp thành phố kề nhau trong hoán vị đó.
Hành động thay đổi giải pháp để tìm ra giải pháp lân cận được gọi là di chuyển
(move) và các move khác nhau sẽ cho các giải pháp lân cận khác nhau.
Việc tìm kiếm những lân cận của một trạng thái là cơ bản cho việc tối ưu vì
lời giải cuối cùng có được sau một tour lần lượt các lân cận. Heuristic đơn giản di
chuyển bằng việc tìm lân cận tốt nhất và dừng lại khi tìm được một lời giải mà lời
giải đó không có lân cận nào tốt hơn nó. Vấn đề ở đây là các lân cận của một trạng
thái ta không biết chắc là chũng có chứa lời giải nào tốt hơn hay không, nghĩa là khi
ta xét một lời giải, mặc dù lời giải đó không là tốt nhất nhưng ta không chắc chắn là
trong số các lân cận của nó không chứa một giải pháp tốt hơn. Đó là lý do vì sao lời
giải tốt nhất tìm được bằng thuật toán được gọi là tối ưu cục bộ, trái ngược với lời
giải tốt nhất trên thực tế (tối ưu toàn cục). Các Metaheuristics sử dụng các lân cận
của một trạng thái như một cách để khám phá không gian lời giải và có thể chấp
nhận những lời giải không tốt trong việc tìm kiếm để đạt được của chúng để thực
hiện điều đó. Có nghĩa việc tìm kiếm sẽ không bị mắc kẹt và nếu thuật toán chạy
một khoảng thời gian đủ lớn, kết quả tối ưu toàn cục sẽ được tìm thấy.
b. Xác suất chấp nhận:
Xác suất của việc chuyển từ trạng thái hiện tại S sang một trạng thái kề S’
của nó được định nghĩa bởi một hàm xác suất chấp nhận:
P(e, e’, T)
Trang 15
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Hàm phụ thuộc vào các nguồn năng lượng e=E(s) và e’=E(s’) của 2 trạng
thái, và một tham số toàn cục T gọi là nhiệt độ. Những trạng thái có năng lượng

thấp hơn sẽ tốt hơn những trạng thái có năng lượng cao hơn. Hàm xác suất P phải
cho kết quả dương khi e’ > e.
e’ > e  P(e, e’, T) > 0
Khi xây dựng hàm P, ta cần chú ý rằng khi T dần tiến tới 0, P cũng phải dần
tới 0 nếu e’>e và luôn mang một giá trị dương. Có nghĩa khi T đạt giá trị càng nhỏ,
hệ thống sẽ càng ưu tiên việc di chuyển xuống nơi có năng lượng thấp, và tránh việc
di chuyển ngược lại, tương tự như việc giảm nhiệt độ trong luyện kim, các nguyên
tử bớt chuyển động hỗn độn hơn. Khi T=0 thuật toán đơn thuần trở về thuật toán
tham lam, với việc đơn thuần chỉ có sự di chuyển từ nơi có năng lượng cao đến nơi
có năng lượng thấp. Ngoài ra hàm P thường được xây dựng sao cho tỉ lệ thuận với
độ chênh lệch năng lượng giữa trạng thái tiếp theo và trạng thái hiện tại, nói cách
khác khi e’ – e càng giảm thì P càng giảm, vì vậy xác suất chuyển từ trạng thái hiện
tại tới trạng thái có độ chênh lệch năng lượng thấp thì khó thấp hơn so với độ trạng
thái có độ chênh lệch năng lượng cao.
Tham số T có vai trò quyết định với việc điều khiển quá trình tiến triển của
trạng thái s. Vì khi T càng nhỏ thì P càng nhỏ, cho nên tham số T quyết định độ
“hỗn độn” của trạng thái s, nghĩa là khi T càng nhỏ thì khả năng trạng thái s được di
chuyển càng thấp, tương tự như tham số nhiệt độ trong kỹ thuật luyện kim.
c. Quá trình thực hiện của thuật giải:
Thuật toán bắt đầu với việc khởi tạo tham số T một giá trị lớn (càng lớn càng
cho lời giải chính xác, hoặc có thể là vô tận), sau đó nó được giảm dần sau mỗi
vòng lặp, độ giảm của T có thể do ta tự định nghĩa, tuy nhiên thuật toán phải kết
thúc khi T=0. Trong suốt quá trình, lời giải sẽ lặp đi lặp lại việc di chuyển ngẫu
nhiên với một xác suất P nhất định và ngày càng mở rộng không gian tìm kiếm
Trang 16
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
chứa các lời giải tốt, và cứ như vậy lời giải trôi về vùng không gian lời giải có năng
lượng thấp, cuối cùng dừng lại khi T=0.
Hình 2.2 Quá trình thực hiện thuật giải
Trang 17

TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Đối với bất một vấn đề cụ thể nào, thuật toán cho xác suất để tìm thấy lời
giải tối ưu của vấn đề dần tiến tới 1 khi mà thời gian thực hiện thuật toán đủ lớn.
Tuy nhiên ta không nên quan tâm tới việc này vì thời gian cần thiết để có thể tìm
thấy lời giải tối ưu thường sẽ vượt quá thời gian thực hiện của phương pháp vét cạn
trong không gian lời giải.
Mã giả của thuật toán:
Trang 18
s ← s0; e ← E(s) // khởi tạo
sbest ← s; ebest ← e // khởi tạo lời giải tốt nhất
k ← 0 //khởi tạo biến đếm số bước
while k < kmax and e > ebest // trong khi còn thời
//gian và chưa tìm được lời giải tốt nhất
T ← temperature(k/kmax) // tính nhiệt độ
snew ← neighbour(s) // tìm trạng thái kề của s
enew ← E(snew) // tính năng lượng của
//trạng thái mới
if P(e, enew, T)> random() then // kiểm tra xem có nên
//di chuyển s sang trạng thái mới
s ← snew; e ← enew // nếu rơi vào xac suất, thay
//đổi trạng thái
if e < ebest then // nếu s tốt hơn sbest
sbest ← snew; ebest ← enew // gán lại trạng thái tốt
nhất
k ← k + 1 // tăng biến đếm
return sbest // trả về sbest tìm thấy.
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
2.1.3 Áp dụng vào bài toán TSP
Để áp dụng thuật toán SA vào bài toán TSP, trước tiên ta cần thống nhất các
tham số trong thuật toán vào bài toán, cụ thể như sau:

• Trạng thái: Một trạng thái trong bài toán này được định nghĩa là một hoán
vị các thành phố thể hiện cho một cách để đi qua tất cả thành phố. Ví dụ {1,
2, 3, 4, 5, 6} là một trạng thái
• Không gian trạng thái: Là tập hợp tất cả các trạng thái (hoán vị) có thể có
của các thành phố, nói cách khác là tập tất cả các cách đi có thể
• Hàm năng lượng E(): Ở đây ta sử dụng tổng chi phí của một cách đi làm
hàm năng lượng cho mỗi trạng thái
• Trạng thái kề: Ta tìm một trạng thái kề của một trạng thái bằng cách đơn
giản đổi vị trị của một cặp thành phố kề nhau được chọn ngẫu nhiên trong
trạng thái đó
• Hàm P: Ở đây hàm P được định nghĩa bằng công thức
P = Exp()
• Nhiệt độ T: nhiệt độ ban đầu ta đặt giá trị 1000 (tuy nhiên có thể đặt tùy ý,
T càng lớn thì độ chính xác của lời giải càng cao)
Thuật toán áp dụng vào bài toán:
Initialization(Current_solution,Temperature)
Calculation of the Current_Cost //Tính chi phí trạng thái hiện tại
LOOP
New_State //khởi tạo trạng thái kề
Calculation of the new_Cost //Tính chi phí trạng thái mới
//Nếu trạng thái mới có chi phí thấp hơn
IF ∆(Current_cost - New_Cost) >= 0 THEN
Current_State= New_State
//Ngược lại
ELSE
//Nếu rơi vào xác suất chấp nhận
IF Exp() > Random (0,1)
Trang 19
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
THEN

//Chấp nhận trạng thái mới
Current_State = New_State
ELSE
//Bỏ qua
//Giảm nhiệt độ
EXIT When STOP_CRITERION
END LOOP
Hiện thực hóa thuật toán:
public void Anneal()
{
int iteration = -1;
double temperature = 10000.0; //Nhiệt độ T
double deltaDistance = 0; //Chênh lệch chi phí
double coolingRate = 0.9999; //Tốc độ làm nguội
double absoluteTemperature = 0.00001; //Mốc nhiệt độ kết thúc thuật toán
double distance = GetTotalDistance(currentOrder); //Tính chi phí của trạng thái hiện tại
while (temperature > absoluteTemperature) //Trong khi T còn cao hơn mốc kết thúc
{
nextOrder = GetNextArrangement(currentOrder); //Khởi tạo trạng thái kề của trạng thái
hiện tại
deltaDistance = GetTotalDistance(nextOrder) - distance; //Tính chênh lệch chi phí
//Nếu trạng thái mới có chi phí thấp hơn
//hoặc có chi phí cao hơn nhưng rơi vào xác suất được chấp nhận
if ((deltaDistance < 0)|| (distance > 0 &&Math.Exp(-deltaDistance / temperature) >
random.NextDouble()))
{
for (int i = 0; i < nextOrder.Count; i++){
currentOrder[i] = nextOrder[i]; //Chấp nhận trạng thái mới
distance = deltaDistance + distance;
}

temperature *= coolingRate; //Giảm nhiệt độ
iteration++;
}
shortestDistance = distance;
}
Trang 20
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Hàm Annealing() sẽ thực hiện tuần tự các câu lệnh nên độ phức tạp của thuật
toán là O(n). Các thuật toán sử dụng heuristic tuy không cho kết quả hoàn toàn
chính xác nhưng đổi lại độ phức tạp không cao. Ta có thể thấy nhanh hơn rất nhiều
so với độ khó của bài toán cũng như các giải thuật thông thường khác.
2.2 Chương trình giải bài toán TSP sử dụng thuật giải luyện kim
Chương trình demo giải bài toán TSP có giao diện đơn giản như sau:
Hình 2.3 Giao diện chương trình demo
Sử dụng chương trình bằng cách click lên màn hình chính, mỗi điểm tượng
trưng cho một thành phố, khoảng cách giữa các điểm là khoảng cách giữa các thành
phố. Sau khi chọn xong các thành phố, click “Tìm đường đi” để chương trình bắt
đầu thực hiện.
Trang 21
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
Hình 2.4 Ví dụ demo
Vì sử dụng metaheuristic nên chương trình chỉ cho kết quả dừng lại ở mức
chấp nhận được, không thể chính xác tuyệt đối trong mọi trường hợp
Trang 22
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
KẾT LUẬN
Bài thu hoạch đã trình bày một số vấn đề về bài toán tối ưu tổ hợp trong
khoa học máy tính, cách giải các bài toán đó sử dụng metaheuristic; giới thiệu bài
toán người bán hàng với các giải thuật để giải nó; tìm hiểu giải thuật mô phỏng
luyện kim Simulated Annealing và áp dụng vào giải bài toán người bán hàng như

thế nào.
Bên cạnh các tìm hiểu lý thuyết, bài thu hoạch còn xây dựng được một
chương trình demo mô phỏng cách giải quyết bài toán người bán hàng theo thuật
giải luyện kim. Chương trình đã mô tả, biểu diễn được vấn đề bài toán và đưa ra
được kết quả là đường đi ngắn nhất qua các thành phố trong thời gian nhanh, sử
dụng metaheuristic trong suy luận.
Trang 23
TH: Vương Đức Hiền – CH1301087 GVHD: PGS.TS. Đỗ Văn Nhơn
TÀI LIỆU THAM KHẢO
[1] “So sánh hiệu quả của một vài giải thuật metaheuristic trong việc giải
bài toán người du lịch” – Phạm Thái Sơn – Đại học Bách Khoa Hà Nội
[2] Giáo trình “Kỹ thuật thiết kế giải thuật” – Nguyễn Văn Linh – Đại học
Cần Thơ
[3] Website: ipedia/wiki/Bài_toán_người_bán_hàng
[4] Website:
Trang 24

×