TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH
250
Kỷ yếu Hội nghị KHCN lần 7, tháng 5/2022
Gii bài toán ngƣời du lch qua phép dn
v bài toán chu trình Hamilton
Nguyn Th Thúy Chinh*, Nguyn Huy Hoàng
Trường Đại hc Công nghip Qung Ninh
*E-mail: nguyenthuychinh86qui@gmail.com
Tóm tt: Bài toán người du lch được nhiu người biết đến vi độ khó phc tp,
đặc bit vi trường hp d liu đầu vào ln. Gii thut láng ging gn nht mt trong
các gii thut heuristic đưc áp dng để gii bài toán người du lch trong trường hp vi d
liu đầu vào ln. Vic tìm ra mt thut toán heuristic hiu qu hơn vn mt trong nhng
hướng nghiên cu được nhiu nhà khoa hc quan tâm. Bài báo gii thiu mt thut toán hiu
qu để gii quyết bài toán trên theo cách dn v bài toán chu trình Hamilton vi thut
toán tìm chu trình Hamilton được đề xut.
T khoá: Bài toán người du lch; Bài toán Hamilton; Chu trình Hamilton; Thut toán
tham lam
1. ĐẶT VẤN ĐỀ
Bài toán người du lịch (Travelling Salesman Problem - TSP) bài toán phát biểu
đơn giản nhưng lại được đánh giá một trong những bài toán kinh điển khó trong trường
hợp tổng quát với không gian dữ liệu đầu vào lớn.được đánh giá là khó bởi các thuật toán
hiệu quả nhất lại thời gian xlý tăng dần theo cấp số nhân của n, hay độ phức tạp thuật
toán tăng theo hàm số [3]. rất nhiều cách giải quyết bài toán này như thuật toán vét
cạn, thuật toán người láng giềng gần nhất, kỹ thuật nhánh cận, nhưng mới chỉ hiệu quả với các
bộ dữ liệu nhỏ. Trong khuôn khổ bài báo này, tôi xin giới thiệu một phương pháp giải bài toán
người du lịch bằng cách dẫn về bài toán chu trình Hamilton, với thuật toán tìm chu trình
Hamilton được đề xuất có thể cải thiện hiệu quả giải quyết bài toán với bộ dữ liệu lớn hơn.
2. GIỚI THIỆU I TN NGƯỜI DU LỊCH I TOÁN CHU TRÌNH HAMILTON
2.1. Bài toán ngƣời du lịch
2.1.1. Phát biểu bài toán người du lịch
Bài toán người du lch (Travelling Salesman Problem - TSP) [4] mt bài toán trong
lĩnh vực tối ưu tổ hợp được nhiều người biết đến. Ni dung của nó khá đơn giản, nó được phát
biểu như sau: Một người du lch xut phát t thành ph ca anh ta, anh ta mun tìm mt
đường đi đi qua tt c các thành ph, mi thành ph đi đúng một ln và sau đó trở v thành
ph ban đầu sao cho chi phí là ít nht.
Tên gọi bài toán người du lch mang tính chất ợng trưng, dùng để gi chung cho
các bài toán hình toán học như trên mặc phát biu ni dung khác, chng hn bài
toán tìm chu trình sn xut cho mt nhà máy hóa cht sao cho chi phí xúc ra các thiết b (như
b cha, ng dn, ...), mi khi chuyn t loi hóa cht y sang loi hóa cht khác ca chu
trình là ít nht. Trong mt s ng dng khác, khái nim thành ph có th thay đổi thành khách
hàng, các mảnh DNA trong gen, c điểm hàn trên bng mch khái nim chi phí th
biu din bi thi gian du lch hay khong cách, hay giống như sự so sánh gia các mnh
DNA vi nhau [8].
Trong lý thuyết ca đ phc tp tính toán, bài toán TSP bài toán khó, thuc lp NP-
Complete. Nên không gii thut hiu qu nào th áp dng cho mọi trường hợp, đc
bit với các trường hp có s ng thành ph ln.
TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH
Kỷ yếu Hội ngh KHCN lần 7, tháng 5/2022
251
Bài toán TSPth phát biu dưới ngôn ng đồ thị: Cho đồ th G = (V, E), trong đó V
tập các đỉnh, E tp các cnh, mi cạnh được gán trng s. Tìm chu trình Hamilton
tng trng s nh nht. Trong đó, các đnh của đồ th tương ng vi các thành ph các
cạnh thì tương ng với đường ni gia các thành ph, trng s gán cho mi cnh chi phí di
chuyn gia hai thành ph. Một đường đi trong bài toán TSP một chu trình Hamilton trên
đồ th và mt li gii tối ưu của bài toán là chu trình Hamilton ngn nht.
Vic tìm chu trình Hamilton trong một đồ th đầy đủ d, nên các bài toán không
phi hai thành ph nào cũng được ni vi nhau có th được chuyển đổi thành đ th đầy đủ,
bng cách thêm nhng cạnh độ dài ln gia các thành ph y, nhng cnh y s không
xut hin trong chu trình tối ưu.
2.1.2. Giải bài toán TSP với thuật toán người láng giềng gần nhất
Khi dữ liệu đầu vào bài toán TSP kích thước nhỏ, thì ưu tiên sử dụng các thuật toán
giải chính xác cho kết quả nhanh duy nhất như thuật toán vét cạn. Nhưng khi dữ liệu đầu
vào lớn, thì thuật toán giải chính xác không còn hiệu quả do thời gian xử quá lâu. Lúc y,
người ta quan tâm ưu tiên tới hiệu suất nh toán khi đó thuật toán heuristic được sử
dụng. Tuy không thể đưa ra kết quả tối ưu nhất nhưng sai số so với giải pháp tối ưu nhất
không nhiều, thể chấp nhận được. Thuật toán láng giềng gần nhất là một trong những thuật
toán heuristic như vậy.
Gii thuật người láng ging gn nht (Nearest Neighbour - NN) (hay còn gi gii
thut tham lam Greedy Algorithm) [6] gii thuật cho người du lch chn thành ph gn
nhất chưa thăm trong ln di chuyn tiếp theo. Thuật toán này bắt đầu từ một thành phố y ý,
duyệt lần lượt tất cả các cạnh kề với rồi lựa chọn đỉnh cạnh nối với đỉnh hiện tại đang
xét có chi phí là thấp nhất để đưa vào hành trình. Lại tiếp tục xét các đỉnh kề với đỉnh mới đưa
vào hành trình, như vậy cho đến khi không còn đỉnh nào để xét nữa thì thuật toán dừng. c
đỉnh đưa vào hành trình cần thỏa mãn 2 yêu cầu:
- Không tạo thành một chu trình thiếu (không đi qua đủ n đỉnh).
- Không tạo thành một đỉnh có nhiều hơn hai cạnh xuất phát từ một đỉnh, do yêu cầu
của bài toán là mỗi thành phố chỉ được đến một lần: một lần đến và một lần đi.
Độ phức tạp của thuật toán O(n2) Tuy nhiên, khi áp dụng thuật toán này sẽ lúc
phải đưa vào hành trình đang xét một cạnh chi phí rất cao, do các cạnh chi phí thấp nối
với đỉnh hiện tại đang xét đã được thăm. Với trường hợp này, giải pháp tìm được không tối ưu.
2.2. Bài toán chu trình Hamilton
Bài toán chu trình Hamilton bài toán xác đnh xem vi một đồ th G=(V, E) cho
trước có cha mt chu trình Hamilton hay không?
Cho đồ th G, chu trình bắt đầu từ một đỉnh v nào đó, qua tất cả các đỉnh còn lại mỗi
đỉnh đúng một lần rồi quay trở về v được gọi là chu trình Hamilton.
Bài toán HC trên đã được chng minh bài toán NPC [7]. Thuật toán tối ưu cho bài
toán y sẽ thuật toán m đường đi ngắn nhất cho chu trình Haminton. Hiện nay, các nhà
khoa học chưa đưa ra được các quy tắc cần đủ để kiểm tra xem một đồ thịHamilton
hay không.
Để giải quyết bài toán này, thể sử dụng thuật toán vét cạn: Giả sử G = (V, E) đồ
thị hướng gồm n đỉnh với tập đỉnh V = {v1, v2, ..., vn}, nếu G đồ thị Hamilton thì sẽ
chu trình Hamilton dạng: v1
vi1
vi2
vi3... vi n-1
v1, với {i1, i2, ..., in-1} một hoán
vị của tập hợp {2, 3, ..., n}. Từ đó, ta một thuật toán hiển nhiên là: Đặt Z = {vi1, vi2, vi3,
…} là dãy đỉnh tương ứng trong hoán vị của tập {2, 3, …, n} ta kiểm tra xem Z có tạo nên chu
trình hay không, tức phải kiểm tra (n-1)! tập Z khác nhau. Ta ddàng nhận thấy với thuật
toán vét cạn thì độ phức tạp của nó không khả thi khi n chỉ từ 20, 30 đỉnh trở lên.
TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH
252
Kỷ yếu Hội ngh KHCN lần 7, tháng 5/2022
Việc nghiên cứu tìm ra thuật toán hiệu quả, để xác định xem một đồ thị chứa chu
trình Hamilton hay không vẫn đang một thách thức lớn đối với các nhà khoa học. Một số
nhà nghiên cứu đã đề xuất c thuật toán Heuristic (nhờ vào việc vận dụng các thuật toán
thông minh nhân tạo, mạng neural, thuật toán gen, ...), để giải quyết gần đúng các bài toán
Hamilton.
3. GIẢI BÀI TOÁN NGƯỜI DU LỊCH BẰNG PHÉP DẪN VỀ BÀI TOÁN CHU
TRÌNH HAMILTON
Dễ thấy bài toán người du lịch chính bài toán chu trình Hamilton nhưng với điều
kiện tổng các cạnh của chu trình Hamilton này nhỏ nhất có thể. Theo định lý Dirac:
Định 4 (Dirac - 1952): Nếu G một đơn đồ thị n đỉnh mọi đỉnh của G đều
có bậc không nhỏ hơn
thì G là một đồ thị Hamilton.
3.1. Thuật toán dẫn bài toán ngƣời du lịch về bài toán chu trình Hamilton
Đầu tiên, ta loại bỏ các cạnh dài nhất của đồ thị so với đồ thị gốc ban đầu sao cho đồ
thị thu được phải bảo đảm vẫn còn chu trình Hamilton. Áp dụng định lý Dirac, quá trình bỏ
cạnh phải bảo đảm đồ thị thu được bậc mỗi đỉnh không ít hơn
. Theo định lý Dirac thì
đồ thị thu được vẫn có chu trình Hamilton. Sau đó, ta tìm chu trình Hamilton trong đồ thị mới
và kết quả thu được sẽ là chu trình tương đối tối ưu.
Ý tƣởng:
Giả sử đồ thị G với n đỉnh v0, v1, …, vn-1; thỏa mãn deg(v)
2
n
. Thuật toán sau đây
sẽ xác định một chu trình Hamilton C của G trong thời gian đa thức.
Ý tưởng của thuật toán là: Xuất phát từ một hoán vị C = (v0, v1,…, vn-1, vn = v0) y ý,
ta gọi (vi, vi+1) một lỗ hổng của C nếu 2 đỉnh vi vi+1 không kề nhau (hình 1). Nếu vivj
vi+1vj+1 là cạnh thì chúng được gọi là bắt chéo nhau (hình 1). Ta sẽ biến đổi C liên tục sao cho
trong mỗi bước điều chỉnh số các lỗ hổng thu được giảm đi ít nhất 1 đỉnh. Như vậy, sau hữu
hạn bước ta sẽ thu được một hoán vị không lỗ hổng nào. Hoán vị này là một chu trình
Hamilton.
Hình 1. Lỗ hổng và cung bắt chéo
Thuật toán dựa trên chu trình Hamilton thể áp dụng cho bài toán TSP dưới dạng
biểu diễn đồ thị G = (M, K) đồ thị đầy đủ có trọng số, trong đó M tập hợp của n = |M|
nút (thành phố), K = {(i, j)| (i, j)
M
M} là tập hợp tất cả các cung của đồ thị. Mỗi cung (i, j)
được gán một trọng số dij để biểu diễn khoảng cách giữa hai thành phố i j. Tập giải pháp
của vấn đề chính tập các hành trình khả dụng bắt đầu từ thành phố xuất phát đến thành phố
đích. Điều này hoàn toàn thể, bởi bất cứ đường nào đi qua tất cả các đỉnh, mỗi đỉnh
đúng một lần không lặp lại thì được xem như một hành trình khả thi. Bài toán TSP trở thành
bài toán tìm chu trình Hamilton độ dài ngắn nhất trên đồ thị G. Khi n lớn ta không thể tìm
được lời giải tối ưu bằng các thuật toán vét cạn, hướng đi giải quyết bài toán là tìm các lời giải
xấp xỉ tối ưu bằng các thuật toán heuristic, hoặc các thuật toán tiến hóa.
TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH
Kỷ yếu Hội ngh KHCN lần 7, tháng 5/2022
253
Thuật toán đề xuất mới (thuật toán dựa trên chu trình Hamilton) được y dựng bằng
cách áp dụng các thủ tục xây dựng đơn giản sau đây:
(1) Lựa chọn một thành phố xuất phát.
(2) Áp dụng điều kiện của định lý Dirac và hoán vị các lỗ hổng để sau hữu hạn bước ta
sẽ thu được một hoán vị không có lỗ hổng nào. Hoán vị này là một chu trình Hamilton.
(3) Quay trở lại thành phố ban đầu.
Sau khi thuật toán này đã hoàn thành hành trình thì sẽ để lại đường đi trên hành trình
đã thực hiện.
Phát biểu bài toán:
Input: Đồ thị G = (V, E) với n đỉnh thỏa mãn deg(v) ≥ .
Output: Tìm đường đi tối ưu nhất.
Mã giả của thuật toán:
Begin
Khởi tạo một hoán vị C các đỉnh một cách ngẫu nhiên;
While vivi+1
E(G) do
Begin
Đánh số các đỉnh của C lần lượt C = (v0, v1,…, vn-1, vn = v0);
Tìm số i nhỏ nhất sao cho vi không kề với vi+1;
Nếu C không có lỗ hổng nào thì dừng;
Tìm j nhỏ nhất sao cho cạnh vivj bắt chéo cạnh vi+1vj+1;
C:= (vivjvj-1 …vi+1vj+1 vj+2 …vi-1vi);
End;
End.
Cách xác định thành phố kế tiếp để đi
Giả sử V={v1, v2, …, vm} tập c láng giềng của u p1, p2, …, pm xác suất lựa
chọn đỉnh tiếp theo từ u của tương ứng v1, v2, …, vm. Ta có:
m
i
i
psum
1
1
Nghĩa chắc chắn chọn một trong các đỉnh trên để đi tiếp. Để đảm bảo ưu thế của
những đỉnh xác suất lớn, nhưng vẫn đảm bảo hội của các đỉnh xác suất thấp hơn
người ta sinh ra một số ngẫu nhiên k thuộc khoảng (0, sum] rồi chọn i nhỏ nhất sao cho:
i
j
jkp
1
Sau khi khởi tạo các tham số hoán vị C, thuật toán đa thức lặp thông qua một ng
lặp chính: đầu tiên là xác định tất cả các lỗ hổng có thể có của hành trình, sau đó là cải thiện kết
quả bằng cách điều chỉnh số các lỗ hổng thu được giảm đi ít nhất 1 đỉnh, cuối cùng cập
nhật lại đường đi của hành trình đã đi qua để phản ánh kinh nghiệm tìm kiếm của giải thuật.
3.2. Tính đúng đắn và độ phc tp ca thut toán
Tính đúng đắn của thuật toán
Ta chứng minh rằng với một lỗ hổng vivi+1 thì sẽ luôn tồn tại vj để vivj bắt chéo vi+1vj+1.
Thật vậy:
Đặt S = {vk : vk kề vi}T = {vk: vk+1 kề vi+1}. Khi đó: deg(vi) = |S|deg(vi+1) = |T|.
vi không kề vi+1 nên theo giả thiết ban đầu có deg(vi) + deg(vi+1) ≥ n, do đó |S| + |T| ≥ n.
vi không thuộc tập T
S nên |T
S| ≤ n - 1.
Từ |T
S| = |T| + |S| - |T
S| ≥ n – (n - 1) = 1 suy ra (T
S)
.
Chọn vj
(T
S), ta có vi kề vjvi+1 kề vj+1.
(1)
(2)
TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH
254
Kỷ yếu Hội ngh KHCN lần 7, tháng 5/2022
Sau bước điều chỉnh lại hoán vị C bước 2 thì số lỗ hổng của C sẽ giảm đi ít nhất 1
đỉnh, sau không quá n bước lặp thì C sẽ không còn lỗ hổng nào, hay khi đó C chu trình
Hamilton, thuật toán sẽ dừng lại.
Độ phức tạp của thuật toán
Do số lỗ hổng của một hoán vị không quá n cho nên số vòng lặp của bước 2 không
quá n. Việc m chỉ số i j (xác định cung chéo nhau) bước 2 đều không quá n phép toán.
Điều chỉnh hoán vị C mục bước 2 việc đồng nhất chỉ số cũng không cần quá O(n) phép
toán. Do đó, thuật toán sẽ kết thúc sau không quá O(n2) phép toán.
4. CÀI ĐẶT CHƯƠNG TRÌNH THỬ NGHIỆM
Xây dựng chương trình thử nghiệm giải bài toán người du lịch với 2 thuật toán: thuật
toán tham lam thuật toán dựa trên chu trình Hamilton. Ứng dụng được phát triển trên môi
trường Visual Studio 2012 với ngôn ngữ sử dụng C#. Chương trình sử dụng dữ liệu
Eil51.tsp, Eil101.tsp trong thư viện TSPLib để đánh giá kết quả so sánh kết quả với thuật
toán tham lam. Chương trình được thử nghiệm trên máy tính cấu hình Intel(R) Core(TM)
i5-6200U CPU @ 2.30GHz, 4GB RAM, cài đặt hệ điều hành Windows 10 Pro 64-bit.
Thử nghiệm 10 lần cho mỗi thuật toán dựa trên chu trình Hamilon thuật toán tham
lam trên 2 bộ dữ liệu thử nghiệm Eil51 và Eil101, sau đó so sánh các giá trị tối ưu nhất
mỗi thuật toán tìm được trên cùng bộ dữ liệu 51 đỉnh 101 đỉnh. Kết quả thực nghiệm được
thể hiện trong bảng 1 và bảng 2 dưới đây.
Bng 1. Bng kết qu giá tr tối ưu
ca hành trình trong mi ln thc hin
thut toán da trên chu trình Hamilton
Dữ liệu
Eil51
Eil101
Lần
thực
hiện
1
473.82
719.36
2
471.77
724.01
3
472.46
720.71
4
471.29
728.96
5
470.3
739.75
6
468.63
714.9
7
469.13
727.53
8
466.55
724.07
9
464.94
739.59
10
468.39
717.97
Trung bình
469.73
725.69
Bng 2. Bng kết qu giá tr tối ưu của
hành trình trong mi ln thc hin thut
toán tham lam
Dữ liệu
Eil51
Eil101
Lần
thực
hiện
1
478
736.33
2
471.21
713.84
3
476.94
720.71
4
483.92
734.96
5
479.48
717.77
6
474.74
739.57
7
468.12
709.84
8
467.29
751.51
9
478
729.74
10
481.35
722.9
Trung bình
475.91
727.72
Cả hai thuật toán dựa trên chu trình Hamilon thuật toán tham lam áp dụng cho bài
toán người du lịch đều cho kết quả tốt. So sánh giá trị tối ưu trung bình của hai giải thuật trên
cho cả hai bộ dữ liệu Eil51, Eil101 cho thấy thuật toán dựa trên chu trình Hamilon cho kết quả
tối ưu hơn một chút, nhưng chênh lệch giữa hai kết quả không nhiều. Tuy nhiên, cũng như
thuật toán tham lam, hiệu quả của thuật toán dựa trên chu trình Hamilon cũng phản ứng rất
nhạy với các thiết lập tham số đầu vào là số lượng ít các đỉnh.
Ưu điểm của thuật toán dựa trên chu trình Hamilon so với thuật toán tham lam là thuật
toán dựa trên chu trình Hamilton có thể giải quyết bài toán với số lượng đỉnh lớn hơn cho hiệu