Tải bản đầy đủ (.doc) (46 trang)

lý thuyết đồ thị các thuật toán với 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 (907.87 KB, 46 trang )

So sánh các giải thuật song song
Metaheuristic trong việc giải bài toán TSP
Tổng quan
Bài viết này 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. Các mô hình song song hóa dựa trên MPI được sử dụng để đánh
giá cho các giải thuật GA (gentetic algorithm) ,SA (simulated annealing), ACO ( Ant
Colony Optimization). Các kết quả đánh giá dựa trên hiệu quả song song hóa của các mô
hình song song cho cùng 1 giải thuật và giữa các giải thuật khác nhau.
Keyword : parallel metaheuristic , gentetic algorithm , simulated annealing, ant colony
optimization , MPI , TSP , speedup.

Giới thiệu chung
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 lọai 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 thép (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 đó 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 1 lòai.
1|Page


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ái đã đượ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.
Bài viết này so sánh hiệu quả song song hóa của các mô hình song song cho một vài giải
thuật metaheuristic cho việc tìm kiếm lời giản gần tối ưu của bài tóan TSP. Các mô hình
song song được đề xuất cho giải thuật đàn kiến, luyện thép và giải thuật di truyền. Mô
hình thực nghiệm dùng MPI và một vài bài toán trong thư viện TSPLIB.

2|Page


Contents
Tổng quan....................................................................................................................................................1
Giới thiệu chung..........................................................................................................................................1
1.Các kiến thức cơ bản.................................................................................................................................7
1.1 Các khái niệm cơ bản về đồ thị..........................................................................................................7
Định nghĩa đồ thị................................................................................................................................7
1.1.1. Các thuật ngữ cơ bản.................................................................................................................9
1.1.2. Đường đi, chu trình và đồ thị liên thông..................................................................................10

1.1.3. Chu trình Euler.........................................................................................................................11
1.1.4. Chu trình Hamilton...................................................................................................................12
1.1.5. Đồ thị có trọng số.....................................................................................................................13
1.1.6. Các cấu trúc dữ liệu biểu diễn đồ thị........................................................................................13
1.2 Khái niệm về lớp các bài toán P và NP..............................................................................................14
1.1.1 Khái niệm các loại thời gian tính...............................................................................................14
1.1.2 Bằng chứng ngắn gọn dễ kiểm tra.............................................................................................15
1.1.3 Khái niệm quy dẫn....................................................................................................................16
1.1.4 Lớp bài toán P............................................................................................................................16
1.1.5 Lớp bài toán NP.........................................................................................................................16
1.1.6 Lớp bài toán Co-NP....................................................................................................................17
1.1.7 Lớp bài toán NP-đầy đủ (NP-Complete)....................................................................................17
1.1.8 Lớp bài toán NP- khó (NP-Hard)................................................................................................17
1.3 Các thuật toán xấp xỉ........................................................................................................................18
1.4 Bài toán tối ưu hóa tổ hợp (Combinatorial optimization)................................................................20
Bài toán tối ưu hóa tổ hợp tĩnh (Static Combinatorial optimization):...............................................20
3|Page


Bài toán tối ưu hóa tổ hợp động (Dynamic Combinatorial optimization):........................................20
2.Bài toán người du lịch.............................................................................................................................21
1.5 Giới thiệu bài toán...........................................................................................................................21
1.6 Lịch sử bài toán TSP.........................................................................................................................22
1.7 Mô tả bài toán TSP...........................................................................................................................23
1.8 Phân loại bài toán............................................................................................................................23
Đối xứng và bất đối xứng..................................................................................................................23
Với khoảng cách là metric.................................................................................................................24
Với khoảng cách không là metric......................................................................................................24
1.9 Các giải thuật giải bài toán TSP........................................................................................................25
Các giải thuật để tìm lời giải chính xác..............................................................................................25

Heuristic và các giải thuật xấp xỉ.......................................................................................................26
3.Giải thuật di truyền và di truyền song song............................................................................................28
1.10 Giới thiệu về giải thuật di truyền...................................................................................................28
3.1.1 Lịch sử phát triển:.....................................................................................................................28
1.11 Các khái niệm cơ bản.....................................................................................................................29
3.1.2 Cá thể, nhiễm sắc thể................................................................................................................29
3.1.3 Quần thể...................................................................................................................................29
3.1.4 Các toán tử di truyền................................................................................................................30
1.12 Mô hình giải thuật di truyền..........................................................................................................30
1.13 Các tham số của GA.......................................................................................................................32
Xác suất lai ghép...............................................................................................................................32
Xác suất đột biến..............................................................................................................................32
Kích thước quần thể..........................................................................................................................32
1.14 Các cách mã hoá NST.....................................................................................................................32
4|Page


Mã hoá nhị phân...............................................................................................................................33
Mã hoá hoán vị.................................................................................................................................33
Mã hoá theo giá trị...........................................................................................................................33
1.15 Khởi tạo quần thể ban đầu............................................................................................................34
Hàm tính độ thích nghi.....................................................................................................................34
Cơ chế lựa chọn................................................................................................................................34
Lựa chọn tỷ lệ....................................................................................................................................35
Lựa chọn xếp hạng............................................................................................................................35
Lựa chọn theo cơ chế lấy mẫu ngẫu nhiên........................................................................................35
Lựa chọn tranh đấu...........................................................................................................................36
1.16 Các toán tử di truyền.....................................................................................................................36
Mã hoá nhị phân...............................................................................................................................36
Mã hoá hoán vị.................................................................................................................................38

Mã hoá theo giá trị...........................................................................................................................38
1.17 Chiến lược nạp lại quần thể...........................................................................................................39
Nạp lại hoàn toàn..............................................................................................................................39
Nạp lại ngẫu nhiên............................................................................................................................39
Nạp lại theo mô hình cá thể ưu tú....................................................................................................39
4.Thuật toán bầy kiến................................................................................................................................40
1.18 Sơ đồ chung của thuật toán bầy kiến.............................................................................................40
Giới thiệu chung về thuật toán bầy kiến...........................................................................................40
Sơ đồ chung của thuật toán bầy kiến................................................................................................44

5|Page


Hình 1..........................................................................................................................................................7
Hình 2..........................................................................................................................................................8
Hình 3..........................................................................................................................................................8
Hình 4........................................................................................................................................................18
Hình 5........................................................................................................................................................23
Hình 6: Sơ đồ mô tả giải thuật di truyền....................................................................................................31

6|Page


1. Các kiến thức cơ bản
1.1

Các khái niệm cơ bản về đồ thị

Định nghĩa đồ thị
Trong toán học và tin học, đồ thị là đối tượng nghiên cứu cơ bản của lý thuyết đồ thị.

Một cách không chính thức, đồ thị là một tập các đối tượng gọi là đỉnh nối với nhau bởi
các cạnh. Thông thường, đồ thị được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với
nhau bởi các đoạn thẳng (cạnh). Tùy theo ứng dụng mà một số cạnh có thể có
hướng.Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nối hai
đỉnh nào đó của đồ thị.
Định nghĩa 1.1. Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là tập
các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh.

Hình 1

Định nghĩa 1.2. Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là họ
các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh. Hai cạnh e 1
và e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh.
Định nghĩa 1.3. Đơn đồ thị có hướng G=(V,E) bao gồm V là tập các đỉnh, và E là tập
các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung.

7|Page


Định nghĩa 1.4. Đa đồ thị có hướng G=(V,E) bao gồm V là tập các đỉnh, và E là họ
các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung. Hai cung e 1 và e2
được gọi là cung lặp nếu chúng cùng tương ứng với một cặp đỉnh.

Hình 2

Hai loại đồ thị cơ bản:
a) Đồ thị vô hướng(6 đỉnh, 9 cạnh). b) Đồ thị có hướng(5 đỉnh, 7 cung).
Định nghĩa 1.5. Đồ thị hỗn hợp G=(V, E, A ) bao gồm V là tập các đỉnh, E là tập các
cạnh (E≠Ø) và A là tập các cung (A ≠Ø) của đồ thị.


Hình 3

Đồ thị hỗn hợp(6 đỉnh 5 cạnh, 4 cung)
Số đỉnh của đồ thị G là số phần tử trong V.
Chúng ta có thể coi các đồ thị vô hướng và có hướng là các trường hợp riêng của đồ
thị hỗn hợp G=(V, E, A) khi mà A =Ø hoặc E=Ø.
8|Page


1.1.1. Các thuật ngữ cơ bản
Định nghĩa 1.6. Hai đỉnh u và v của đồ thị vô hướng G được gọi là kề nhau nếu (u,v)
là cạnh của đồ thị G. Nếu e=(u,v) là cạnh của đồ thị thì chúng ta nói cạnh này là liên
thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e là nối đỉnh u và đỉnh v, đồng thời các
đỉnh u và v sẽ được gọi là các đỉnh đầu cuả cạnh (u,v).
Để có thể biết được bao nhiêu cạnh liên thuộc với một đỉnh, chúng ta đưa vào định
nghĩa sau
Định nghĩa 1.7. Chúng ta gọi bậc của đỉnh v trong đồ thị vô hướng là số cạnh liên
thuộc với nó và sẽ kí hiệu là deg(v).
Định lý 1.1. Giả sử G=(V,E) là đồ thị vô hướng với m cạnh. Khi đó

2m = ∑ deg(v)
v∈V

Hệ quả 1.1. Trong đồ thị vô hướng, số đỉnh bậc lẻ(nghĩa là có bậc là số lẻ) là một số
chẵn
Định nghĩa 1.8. Nếu e=(u,v) là cung của đồ thị có hướng G thì chúng ta nói hai đỉnh
u và v là kề nhau, và nói cung (u,v) nối đỉnh u và đỉnh v hoặc cũng nói cung này là đi ra
khỏi đỉnh u và đi vào đỉnh v. Đỉnh u (v) sẽ được gọi là đỉnh đầu (cuối) của cung (u,v)
Định nghĩa 1.9. Chúng ta gọi bán bậc ra (bán bậc vào) của đỉnh v trong đồ thị có
hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu là deg + (v)(deg − (v))

Định lý 1.2. Giả sử G=(V,E) là đồ thị có hướng. Khi đó

∑ deg
v∈V

+

(v) = ∑ (deg − (v)) = A
v∈V

Tương tự như trên , chúng ta xét các thuật ngữ cơ bản cho đồ thị hỗn hợp
Quy ước. Kí hiệu với S là một tập hợp thì #(S) hay |S| là số phần tử của tập S.
Cho đồ thị hỗn hợp G =(V,E,A). Nếu e=(u,v) thuộc E, thì chúng ta nói cạnh e kề với
đỉnh u, và v. Nếu e=(u,v) thuộc A, thì chúng ta nói cung e kề với đỉnh u, và v.
Định nghĩa 1.10. Cho đồ thị hỗn hợp G=(V, E, A). Kí hiệu deg(v) là bậc của đỉnh v
trong đồ thị. Giá trị của deg(v) được tính theo công thức sau:
9|Page


deg(v)= #(các cạnh kề với đỉnh v)+ # (các cung kề với đỉnh v)
Định nghĩa 1.11. Chúng ta gọi bán bậc ra( bán bậc vào) của đỉnh v trong đồ thị hỗn
hợp G là số cung của đồ thị đi ra khỏi nó (đi vào nó) và kí hiệu là indegree(v)
(outdegree(v)).
1.1.2. Đường đi, chu trình và đồ thị liên thông
Định nghĩa 1.12. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị vô hướng G=(V,E) là dãy
x0,x1,..…,xn-1,xn
trong đó u=x0 , v= xn , (xi,xi+1) ∈ E,
i = 0,1,2,…,n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh:

(x0, x1), (x1, x2), …, (xn-1, xn).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh
đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình. Đường đi hay chu trình được
gọi là đơn nếu như không có cạnh nào bị lặp lại
Định nghĩa 1.13. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị có hướng G=(V, A) là dãy
x0,x1,..…,xn-1,xn
trong đó u=x0 , v= xn , (xi,xi+1) ∈ A,
i = 0,1,2,…,n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:
(x0, x1), (x1, x2), …, (xn-1, xn).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh
đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình. Đường đi hay chu trình được
gọi là đơn nếu như không có cung nào bị lặp lại
Định nghĩa 1.14. Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị hỗn hợp G=(V, E, A) là dãy
x0,x1,..…,xn-1,xn
trong đó u=x0 , v= xn , (xi,xi+1) ∈ E, hoặc (xi,xi+1) ∈ A,

i = 0,1,2,…,n-1.

Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh, cung:
(x0, x1), (x1, x2), …, (xn-1, xn).

10 | P a g e


Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi. Đường đi có đỉnh
đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình. Đường đi hay chu trình được
gọi là đơn nếu như không có cạnh hay cung nào bị lặp lại.

Định nghĩa 1.15. Đồ thị vô hướng G=(V, E) được gọi là liên thông nếu luôn tìm được
đường đi giữa hai đỉnh bất kì của nó.
Định nghĩa 1.16. Chúng ta gọi đồ thị con của đồ thị G=(V, E) là đồ thị H=(W, F),
trong đó W ⊆ V và F ⊆ E.
Trong trường hợp đồ thị là không liên thông, nó sẽ rẽ ra thành một số đồ thị con liên
thông đôi một không có đỉnh chung. Những đồ thị con liên thông như vậy chúng ta sẽ gọi
là các thành phần liên thông của đồ thị .
Định nghĩa 1.17. Đồ thị có hướng G=(V, A) được gọi là liên thông mạnh nếu luôn tìm
được đường đi giữa hai đỉnh bất kỳ của nó.
Định nghĩa 1.18. Đồ thị có hướng G=(V, A) được gọi là liên thông yếu nếu đồ thị vô
hướng tương ứng với nó là đồ thị vô hướng liên thông.
Rõ ràng nếu đồ thị là liên thông mạnh thì cũng là liên thông yếu nhưng điều ngược lại
là không luôn đúng.
1.1.3. Chu trình Euler
Định nghĩa 1.19. Chu trình đơn trong G đi qua mỗi cạnh của nó một lần được gọi là
chu trình Euler. Đường đi đơn trong G đi qua mỗi cạnh của nó một lần được gọi là
đường đi Euler. Đồ thị được gọi là đồ thị Euler nếu nó có chu trình Euler, và gọi là đồ
thị nửa Euler nếu nó có đường đi Euler.
Rõ ràng mọi đồ thị Euler luôn là nửa Euler, nhưng điểu ngược lại không luôn
đúng.
Định lý 1.4. Đồ thị vô hướng liên thông G là đồ thị Euler khi và chỉ khi mọi đỉnh
của G đều có bậc chẵn.
Hệ quả 1.2. Đồ thị liên thông G là nửa Euler khi và chỉ khi nó có không quá 2
đỉnh bậc lẻ.
Định lý 1.5. Đồ thị có hướng liên thông mạnh là đồ thị Euler khi và chỉ khi
deg + (v) = deg − (v), ∀v ∈ V
11 | P a g e


Trên đây chúng ta đã mô tả điều kiện cần và đủ để đồ thị vô hướng và có hướng là

đồ thị Euler. Điều kiện cần và đủ để đồ thị hỗn hợp là đồ thị Euler là khá phức tạp và sẽ
được trình bày trong phần bài toán người đưa thư Trung Hoa trên đồ thị hỗn hợp.
1.1.4. Chu trình Hamilton
Trong toán học, ngành lý thuyết đồ thị, một đường đi Hamilton là một đường đi trong
đồ thị vô hướng đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần. Một Chu trình
Hamilton là một đường đi Hamilton sau đi qua tất cả các đỉnh của đồ thị thì trở về đỉnh
xuất phát.
Một đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton, đồ thị có đường đi
Hamilton được gọi là đồ thị nửa Hamilton.
Bài toán tìm đường đi và chu trình như vậy được gọi là bài toán Hamilton. Bài toán
Hamilton là NP đầy đủ.
Tên gọi đường đi và chu trình Hamilton là gọi theo tên của William Rowan Hamilton .

• Định lý Bondy-Chvátal
Cho đồ thị G có n đỉnh, bao đóng cl(G) được tạo ra từ G bằng cách bổ sung cho mỗi cặp
đỉnh không kề nhau u và v với degree(v) + degree(u) ≥ n một cạnh mới uv.

• Định lý Bondy-Chvátal (1972)
Một đồ thị là Hamilton nếu và chỉ nếu bao đóng của nó là Hamilton.
Vì đồ thi đầy đủ là Hamilton, nên tất cả các đồ thị mà bao đóng là đầy đủ là Hamilton.

• Định lý Dirac (1952)
Một đơn đò thị n đỉnh (n > 2) là Hamilton nếu mọi đỉnh của nó có bậc không nhỏ hơn
n/2.

• Định lý Ore (1960)
Một đồ thị có n đỉnh (n > 2) là Hamilton nếu tổng các bậc của hai đỉnh không kề nhau
đều bằng n hoặc lớn hơn.

12 | P a g e



1.1.5. Đồ thị có trọng số
Đồ thị được sử dụng để giải các bài toán trong nhiều lĩnh vực khác nhau. Chẳng
hạn, đồ thị được sử dụng để xác định các mạch vòng trong vấn đề giải tích mạch điện.
Chúng ta có thể xác định xem hai máy tính trong mạng có thể trao đổi thông tin với nhau
được hay không. Khi đó, đồ thị được sử dụng để biễu diễn mạng truyền thông với các
đỉnh là các nút mạng, các cạnh, các cung là các đường truyền dữ liệu giữa các nút mạng.
Đồ thị có thể dùng để biễu diễn các đường đi trong một vùng: các đỉnh tương ứng với các
ngã 3, ngã 4, còn các cạnh, các cung tương ứng là các đường đi 2 chiều và đường đi 1
chiều. Để cấu trúc đồ thị có thể biễu diễn được các bài toán thực tế người ta đưa vào khái
niệm đồ thị có trọng số, trên mỗi cạnh hay mỗi cung được gán một trọng số thể hiện chi
phí cho việc thực hiện một mục đích nào đó trên cạnh hay trên cung.
Định nghĩa 1.20. Chúng ta kí hiệu đồ thị có trọng số là bộ 4 G=(V, E, A, w),
trong đó, w là hàm trọng số
w: E ∪ A → R ,
R: tập số thực,
ngoài ra còn có thể kí hiệu w bằng c hoặc weight, cost.
Cho S là một tập con của E ∪ A, khi đó chúng ta kí hiệu w(S)=∑w(s)| s∈ S là giá
trị trọng số của tập S.
1.1.6. Các cấu trúc dữ liệu biểu diễn đồ thị
Có nhiều cách khác nhau để lưu trữ các đồ thị trong máy tính. Sử dụng cấu trúc dữ
liệu nào thì tùy theo cấu trúc của đồ thị và thuật toán dùng để thao tác trên đồ thị đó. Trên
lý thuyết, người ta có thể phân biệt giữa các cấu trúc danh sách và các cấu trúc ma trận.
Tuy nhiên, trong các ứng dụng cụ thể, cấu trúc tốt nhất thường là kết hợp của cả hai.
Người ta hay dùng các cấu trúc danh sách cho các đồ thị thưa (sparse graph), do chúng
đòi hỏi ít bộ nhớ. Trong khi đó, các cấu trúc ma trận cho phép truy nhập dữ liệu nhanh
hơn, nhưng lại cần lượng bộ nhớ lớn nếu đồ thị có kích thước lớn.
• Các cấu trúc danh sách



13 | P a g e

Danh sách liên thuộc (Incidence list) - Mỗi đỉnh có một danh sách các cạnh
nối với đỉnh đó. Các cạnh của đồ thị được có thể được lưu trong một danh sách
riêng (có thể cài đặt bằng mảng (array) hoặc danh sách liên kết động (linked
list)), trong đó mỗi phần tử ghi thông tin về một cạnh, bao gồm: cặp đỉnh mà


cạnh đó nối (cặp này sẽ có thứ tự nếu đồ thị có hướng), trọng số và các dữ liệu
khác. Danh sách liên thuộc của mỗi đỉnh sẽ chiếu tới vị trí của các cạnh tương
ứng tại danh sách cạnh này.




Danh sách kề (Adjacency list) - Mỗi đỉnh của đồ thị có một danh sách các đỉnh
kề nó (nghĩa là có một cạnh nối từ đỉnh này đến mỗi đỉnh đó). Trong đồ thị vô
hướng, cấu trúc này có thể gây trùng lặp. Chẳng hạn nếu đỉnh 3 nằm trong
danh sách của đỉnh 2 thì đỉnh 2 cũng phải có trong danh sách của đỉnh 3. Lập
trình viên có thể chọn cách sử dụng phần không gian thừa, hoặc có thể liệt kê
các quan hệ kề cạnh chỉ một lần. Biểu diễn dữ liệu này thuận lợi cho việc từ
một đỉnh duy nhất tìm mọi đỉnh được nối với nó, do các đỉnh này đã được liệt
kê tường minh.

Các cấu trúc ma trận


Ma trận liên thuộc (Incidence matrix) - Đồ thị được biểu diễn bằng một ma
trận [bij] kích thước p × q, trong đó p là số đỉnh và q là số cạnh, bij = 1 chứa dữ

liệu về quan hệ giữa đỉnh vi và cạnh xj. Đơn giản nhất: bij = 1 nếu đỉnh vi là một
trong 2 đầu của cạnh xj, bằng 0 trong các trường hợp khác.



Ma trận kề (Adjaceny matrix) - một ma trận N × N, trong đó N là số đỉnh của
đồ thị. Nếu có một cạnh nào đó nối đỉnh vivới đỉnh vj thì phần tử Mi,j bằng 1,
nếu không, nó có giá trị 0. Cấu trúc này tạo thuận lợi cho việc tìm các đồ thị
con và để đảo các đồ thị.



Ma trận dẫn nạp (Admittance matrix) hoặc ma trận Kirchhoff (Kirchhoff
matrix) hay ma trận Laplace (Laplacian matrix) - được định nghĩa là kết quả
thu được khi lấy ma trận bậc (degree matrix) trừ đi ma trận kề. Do đó, ma trận
này chứa thông tin cả về quan hệ kề (có cạnh nối hay không) giữa các đỉnh lẫn

1.2
1.1.1

Khái niệm về lớp các bài toán P và NP
Khái niệm các loại thời gian tính

Thời gian tính tốt nhất: là thời gian tính tối thiểu cần thiết để thực hiện thuật toán
với mọi bộ dữ liệu đầu vào kích thước n.
14 | P a g e


Thời gian tính tồi nhất: là thời gian tính tối đa cần thiết để thực hiện thuật toán với
mọi bộ dữ liệu đầu vào có kích thước n

Thời gian tính trung bình: là thời gian tính cần thiết để thực hiện thuật toán trên
một tập hữu hạn các bộ dữ liệu đầu vào có kích thước n. Thời gian tính trung bình được
tính theo công thức sau:
Thời gian tính trung bình=(Tổng thời gian tính tất cả các bộ dữ liệu có thể)/ Số bộ
dữ liệu.
Định nghĩa .Bài toán quyết định là bài toán mà đầu ra chỉ có thể là ‘yes’ hoặc
‘no’(đúng/sai, 0/1).
Đối với một bài toán quyết định, có những bộ dữ liệu vào cho ra câu trả lời(đầu ra)
là ‘yes’, chúng ta gọi đây là bộ dữ liệu ‘yes’, nhưng cũng có những bộ dữ liệu vào cho ra
câu trả lời là ‘no’, chúng ta gọi những bộ dữ liệu này là bộ dữ liệu ‘no’.
1.1.2

Bằng chứng ngắn gọn dễ kiểm tra

Rất nhiều các bài toán quyết định có một đặc điểm chung, đó là để xác nhận câu
trả lời ‘yes’ đối với bộ dữ liệu vào ‘yes’ của chúng, chúng ta có thể đưa ra bằng chứng
ngắn gọn dễ kiểm tra xác nhận câu trả lời ‘yes’ cho bộ dữ liệu vào ‘yes’ đó. Tính ngắn
gọn dễ kiểm tra ám chỉ việc thời gian kiểm tra để đưa ra kết quả chỉ mất thời gian đa
thức. Ví dụ về những bài toán quyết định kiểu này rất nhiều, sau đây là một số ví dụ:
• Bài toán kiểm tra tính hợp số: “Có phải số n là hợp số?”, để xác nhận câu trả lời
‘yes’ cho đầu vào n, chúng ta có thể đưa ra một ước số b (1tra xem b có phải là ước số của n chúng ta có thể thực hiện phép chia n cho b sau
thời gian đa thức. Trong ví dụ này , b là bằng chứng ngắn gọn (vì btra (có thuật toán đa thức để kiểm tra b đúng là ước số của n không).
• Đối với bài toán Hamilton, để xác nhận câu trả lời là ‘yes’ cho đồ thị đã cho G,
chúng ta có thể đưa ra một chu trình Hamilton của đồ thị:
v1, v2, v3......vn, v1
Việc kiểm tra dãy đỉnh nói trên có là chu trình Hamilton của đồ thị đã cho hay
không có thể thực hiện sau thời gian đa thức. Khi đó chúng ta nói dãy đỉnh nói
15 | P a g e



trên là bằng chứng ngắn gọn dễ kiểm tra để xác nhận câu trả lời ‘yes’ của bài toán
Hamilton.
• Đối với bài toán về tính chấp nhận được của biểu thức Bun, để xác nhận câu trả
lời ‘yes’ đối với một biểu thức đã cho, chúng ta chỉ cần đưa ra một bộ giá trị các
biến số mà tại đó biểu thức nhận giá trị true. Việc tính giá trị của biểu thức tại một
bộ giá trị có thể thực hiện sau thời gian đa thức.
Một cách tương tự, có thể đưa ra khái niệm bằng chứng ngắn gọn dễ kiểm tra để
xác nhận câu trả lời ‘no’. Đối với một số bài toán, việc đưa ra bằng chứng ngắn gọn dễ
kiểm tra để xác nhận câu trả lời ‘no’ là dễ hơn so với việc đưa ra bằng chứng ngắn gọn
xác định câu trả lời là ‘yes’.
1.1.3

Khái niệm quy dẫn

Định nghĩa . Giả sử chúng ta có hai bài toán quyết định A và B. Chúng ta nói A
có thể quy dẫn về B nếu như sau một thời gian tính đa thức nếu tồn tại một thuật toán
thời gian đa thức R cho phép biến đổi bộ dữ liệu x của A thành bộ dữ liệu vào R(x) của B
sao cho x là bộ dữ liệu yes của A khi và chỉ khi R(x) là dữ liệu vào yes của B.
Nếu A quy dẫn về được B sau thời gian đa thức và B có thể giải được sau thời gian
đa thức thì A cũng có thể giải được sau thời gian đa thức.

1.1.4

Lớp bài toán P.

Định nghĩa. Ta Chúng ta gọi P là lớp các bài toán có thể giải được trong thời
gian đa thức, NP là lớp các bài toán quyết định mà để xác định câu trả lời “yes” của nó
chúng ta có thể đưa ra các bằng chứng ngắn gọn dễ kiểm tra, co-NP là lớp các bài toán

quyết định mà để xác định câu trả lời “no” của nó chúng ta có thể đưa ra bằng chứng
ngắn gọn dễ kiểm tra.
Ví dụ: Bài toán cây khung nhỏ nhất giải được nhờ thuật toán Prim với thời gian 0(n 2)
thuộc lớp bài toán P.
1.1.5

Lớp bài toán NP.

Định nghĩa. Ta gọi NP là lớp các bài toán quyết định mà để xác nhận câu trả lời
‘yes’ của nó ta có thể đưa ra bằng chứng ngắn gọn dễ kiểm tra.
16 | P a g e


Ví dụ: Bài toán kiểm tra tính hợp số: “Có phải n là hợp số không?”, để xác nhận câu
trả lời ‘yes’ cho đầu vào n ta có thể đưa ra một ước số b (1< b < n) của n. Để kiểm tra
xem b có phải là ước số của n hay không ta có thể thực hiện phép chia n cho b sau
thời gian đa thức. Trong ví dụ này dễ thấy b là bằng chứng ngắn gọn (btra (có thuật toán thời gian tính đa thức để kiểm tra xem b có là ước số của n).
1.1.6

Lớp bài toán Co-NP.

Định nghĩa. Ta gọi Co-NP là lớp các bài toán quyết định mà để xác nhận câu trả lời
‘no’ của nó ta có thể đưa ra bằng chứng ngắn gọn dễ kiểm tra.
Ví dụ: Bài toán kiểm tra tính nguyên tố: “Có phải n là số nguyên tố không?”, để đưa
ra bằng chứng ngắn gọn dễ kiểm tra xác nhận câu trả lời ‘no’ cho đầu vào n ta có thể
đưa ra một ước số b của n.
1.1.7

Lớp bài toán NP-đầy đủ (NP-Complete).


Định nghĩa. Một bài toán quyết định A được gọi là NP-đầy đủ (NP-Complete) nếu
như:


A là một bài toán trong NP.



Mọi bài toán trong NP đều có thể quy dẫn về A.

Bổ đề. Giả sử bài toán A là NP-đầy đủ, bài toán B thuộc NP, và bài toán A qui dẫn
được về bài toán B. Khi đó bài toán B cũng là NP-đầy đủ
1.1.8

Lớp bài toán NP- khó (NP-Hard).

Một cách ngắn gọn có thể hiểu bài toán NP-khó là bài toán mà không có thuật toán
thời gian tính đa thức để giải nó trừ khi P = NP, mà chỉ có các thuật toán giải trong
thời gian hàm mũ. Sau đây là định nghĩa chính thức của bài toán NP-khó.
Định nghĩa. Một bài toán A được gọi là NP- khó (NP-hard) nếu như sự tồn tại thuật
toán đa thức để giải nó kéo theo sự tồn tại thuật toán đa thức để giải mọi bài toán
trong NP.
Một số bài toán NP-khó tiêu biểu như:
1.

Bài toán bè cực đại (MaxClique): Cho một đồ thị vô hướng G = (V, E).
V là tập các đỉnh, E là tập các cạnh tương ứng các đỉnh trong V. Cần tìm bè lớn
nhất của G. Bè là tập các đỉnh trong đồ thị mà đôi một có cạnh nốivới nhau (là
một đồ thị con đầy đủ trong đồ thị G).


2.

Bài toán tập độc lập (Independent set): Cho đồ thị vô hướng G = (V, E)
và số nguyên K, hỏi có thể tìm được tập độc lập S với |S| ≥ K. Tập độc lập là
tập các đỉnh trong đồ thị mà chúng đôi một không có cạnh nối với nhau.

3.

Bài toán phủ đỉnh (Vertex cover): Ta gọi một phủ đỉnh của đồ thị vô
hướng G = (V, E) là một tập con các đỉnh của đồ thị S ⊆ V sao cho mỗi cạnh

17 | P a g e


của đồ thị có ít nhất một đầu mút trong S. Bài toán đặt ra là: Cho đồ thị vô
hướng G = (V, E) và số nguyên k. Hỏi G có phủ đỉnh với kích thước k hay
không?
Một cách không hình thức, có thể nói rằng nếu ta có thể giải được một cách hiệu quả
một bài toán NP-khó cụ thể, thì ta cũng có thể giải hiệu quả bất kỳ bài toán trong NP
bằng cách sử dụng thuật toán giải bài toán NP-khó như một chương trình con.
Từ định nghĩa bài toán NP-khó có thể suy ra rằng mỗi bài toán NP-đầy đủ đều là
NP-khó. Tuy nhiên một bài toán NP-khó không nhất thiết phải là NP-đầy đủ.
Cũng từ bổ đề nêu trên, ta có thể suy ra rằng để chứng minh một bài toán A nào đó là
NP-khó, ta chỉ cần chỉ ra phép qui dẫn một bài toán đã biết là NP-khó về nó.
Từ phần trình bày trên, ta thấy có rất nhiều bài toán ứng dụng quan trọng thuộc vào
lớp NP-khó, và vì thế khó hy vọng xây dựng được thuật toán đúng hiệu quả để giải
chúng. Do đó, một trong những hướng phát triển thuật toán giải các bài toán như vậy
là xây dựng các thuật toán gần đúng.
Sau đây là bức tranh phân lớp các bài toán đã nêu trên.


Hình 4

Mô hình phân lớp các bài toán

1.3

Các thuật toán xấp xỉ

Bài toán tối ưu
18 | P a g e


S là một tập hợp gồm các phần tử thoả mãn một tính chất nào đó với một hàm
mục tiêu trên S: f: S → R. Chúng ta nói bài toán tối ưu trên S dựa theo hàm f đó là tìm
một phần tử trong S thoả mãn một tiêu chi nào đó, thông thường là tìm cực trị (cực đại
hoặc cực tiểu) của hàm f. S được gọi là tập xác định hoặc không gian tìm kiếm của bài
toán tối ưu.
Thông thường chúng ta có các bài toán mà phải tìm giá trị tối ưu của một hàm nào
đó trên không gian tìm kiếm là các bộ dữ liệu vào có thể có. Tuy nhiên có nhiều bài toán
mà việc tìm ra giá trị tối ưu, phần tử tối ưu tương ứng với giá trị tối ưu đó là một việc cực
kì khó khăn và hiện tại chưa tồn tại thời gian tính đa thức để giải bài toán đó. Tất nhiên
có thể giải được bài toán nếu như chúng ta thực hiện chiến lược vét cạn đó là xác định
được tất cả các giá trị hàm f trên các phần tử của tập S. Tuy nhiên chiến lược này không
tốt về mặt thời gian nếu như không gian S có số phần tử là hàm mũ hoặc giai thừa. Ví dụ
nếu tập S là tập các hoán vị của 1,…n thì số phần tử của tập S đó là n!. Con số này thực
sự là lớn khủng khiếp và việc thực thi nó là bất khả thi. Khi mà việc tìm các lời giải tối
ưu là bất khả thi thì người ta quan tâm đến các lời giải gần tối ưu mà chúng ta gọi đó là
thuật toán xấp xỉ.
Giả sử chúng ta đang làm việc trên một bài toán tối ưu, ở đó mỗi giải pháp tiềm

năng mang một chi phí dương, và chúng ta muốn giải pháp gần tối ưu.
Giả sử rằng một bài toán cần tìm ra lời giải với chi phí là f* là giá trị tối ưu có
kích thước đầu vào n, chúng ta nói rằng một lời giải của bài toán là f là một lời giải xấp xỉ
có cận tỉ số là p(n)>1 nếu như chúng ta có:
max (f/f*, f*/f) ≤ p(n)
Thông thường các thuật toán xấp xỉ được áp dụng để tìm ra các lời giải có cận xấp xỉ
p(n) thường có giá trị p(n) = p là hằng số. Tuy nhiên vẫn có nhiều bài toán khó đến mức
p(n) phụ thuộc vào n. Giả sử chúng ta đang đối mặt với các yêu cầu tối ưu là cực tiểu hoá
hoặc cực đại hoá hàm chi phí f. Công việc của các nhà toán học là tìm ra những thuật toán
thời gian tính đa thức nhằm giảm giá trị của p hay p(n) đến gần giá trị 1 càng tốt- nghĩa là
giá trị chúng ta thu được rất gần giá trị tối ưu. Tất nhiên khi giá trị f* quá lớn thì f cũng
cách khá xa so với f* nhưng xét về mặt tỉ lệ thì vẫn nằm trong cận chúng ta đang xét.

19 | P a g e


Chúng ta nói một thuật toán đối với bài toán có tỉ số là P nếu như với mọi đầu vào
sau một thời gian tính đa thức chúng ta thu được một lời giải f mà so với lời giải tối ưu f*
chúng ta có max (f/f*, f*/f) ≤ p.
Đối với bài toán cực tiểu hóa ta chỉ cần f/f* ≤ p.
Đối với bài toán cực đại hoá thì chỉ cần f*/f ≤ p.

1.4

Bài toán tối ưu hóa tổ hợp (Combinatorial optimization)

Bài toán tối ưu hóa tổ hợp liên quan tới việc tìm giá trị cho các biến số rời rạc như lời
giải tối ưu mà có lưu ý tới hàm đánh giá (objective function) cho trước. Bài toán có
thể là bài toán tìm cực đại hoặc tìm cực tiểu. Một cách thông thường, bài toán tối ưu
hoá tổ hợp được cho dưới dạng bộ 3 (S, f, Ω). Trong đó S là tập các lời giải ứng cử

viên, f là hàm đánh giá (hàm này gán giá trị f(s) cho mỗi lời giải ứng cử viên s ∈ S), và
Ω là tập các ràng buộc của bài toán. Các lời giải thuộc tập S * ⊆ S thỏa mãn tập các
ràng buộc Ω gọi là lời giải khả thi. Mục tiêu bài toán là tìm ra một lời giải khả thi tối
ưu toàn cục s*. Với các bài toán tối ưu hóa cực tiểu là tìm lời giải s * với giá nhỏ nhất,
nghĩa là f(s*) ≤ f(s) với mọi lời giải s ⊆ S. Ngược lại bài toán tối ưu hóa cực đại là tìm
lời giải s* với giá lớn nhất, nghĩa là f(s*) ≥ f(s) với mọi lời giải s ⊆ S. Bài toán tối ưu
hóa tổ hợp có thể chia 2 loại: Bài toán tĩnh và bài toán động.
 Bài toán tối ưu hóa tổ hợp tĩnh (Static Combinatorial optimization):
Là bài toán tối ưu hóa tổ hợp trong đó cấu trúc (topology) và giá (cost) không
thay đổi khi bài toán đang được giải quyết. Ví dụ là bài toán người du lịch. Khi
thực hiện thuật toán để giải bài toán vị trí các thành phố, khoảng cách giữa các
thành phố là không thay đổi.
 Bài toán tối ưu hóa tổ hợp động (Dynamic Combinatorial optimization):
Là bài toán tối ưu hóa tổ hợp trong đó cấu trúc (topology) và giá (cost) có thể thay
đổi khi bài toán đang được giải quyết. Ví dụ là bài toán định hướng trong mạng
viễn thông, trong đó mô hình mạng và dung lượng yêu cầu luôn thay đổi.

20 | P a g e


2. Bài toán người du lịch
1.5

Giới thiệu bài toán

Bài toán người du lịch (Travelling 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à 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ó gỉai 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.

21 | P a g e


1.6

Lịch sử bài toán TSP

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ứ bởi các nhà
toán học suốt những năm 1930 ở đại học Harvard, đáng chú ý là 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 University là ngừời đầu tiên đặt tên người du lịch
cho bài toán không lâu sau đó.
Trong những năm 1950 và 1960 , bài toán trở nên ngày càng phổ biến trong 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 một thí dụ của
bài toán với 49 thành phố để xây dựng một cách tối ưu và chứng minh rằng không còn
đường đi nào ngắn hơn nữa. 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ứ từ toán học , khoa học máy tính , hóa học ,vật lý và những khoa
học khác.
Richard M. Karp năm 1972 chỉ ra rằng bài toán chu trình Hamiltonian thuộc lớp NPcomplete, 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 thức cắt và branch-and-bound.
Trong những năm 1990 Applegate, Bixby, Chvátal, và Cook đã phát triển chương trình
Concorde mà đã được sử dụng nhiều trong việc giải các bài toán TSP cho đến nay .
22 | P a g e


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ử 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.7

Mô tả bài toán TSP

Hình 5

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 khoang 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.
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.8

Phân loại bài toán

 Đối xứng và bất đối xứng
Trong bài toán đối xứng khoảng cách giữa các thành phố là như nhau the 2 hướng, vì vậy

đồ thị biểu dieenx là đồ thị vô hướng. Sự đối xứng này làm giảm 1 nửa số lời giải có thể.
23 | P a g e


Trong bài toán bất đối xứng , khoảng cách từ thành phố này đến thành phố khác không
nhất thiết phải bằng khoảng cách theo hướng ngược lại, thậm chí co thể không có kết nối
theo chiều ngược lại. Vì vậy graph biểu diễn bài toán bất đối xứng là đồ thị có hướng.
Lấy ví dụ mô hình đường một chiều trong giao thông chẳng hạn.
 Với khoảng cách là metric
Trong bài toán metric TSP khoảng cách giữa các thành phố phải thỏa mãn điều kiện của
bất đẳng thức tam giác .Điều này có thể phát biểu rằng đường nối trực tiếp từ A đến B
không bao giờ dài hơn đường đi từ A tới B mà qua C trung gian

Những chiều dài cạnh này định nghĩa một metric trong tập các đỉnh . Khi các thành phố
được xem như những điểm trên tấm hình, nhiều hàm khoảng cách tự nhiên là các metric
ví dụ như :


Trong bài toán Euclidian TSP khoảng cách giữa 2 thành phố là khoảng cách
Euclide giữa hai điểm tương ứng.



Trong bài toán Rectilinear TSP khoảng cách giữa 2 thành phố là tổng hai tọa độ x
và y của chúng. Metric này thường được gọi là khoảng cách Manhattan hay cityblock metric.



Trong maximum metric, khoảng cách giữa 2 thành phố là max của độ chênh lêch
tọa độ x và y của chúng.


Hai metric cuối xuất hiện trong việc định hướng một máy mà đào tập các hố trong mạch
in. Manhattan metric tương ứng tới máy căn chỉnh tọa độ thứ nhất rồi tới tọa độ kia, vì
vậy thời gian di chuyển tới một điểm mới là tống cả 2 hướng di chuyển. Maximum metric
tương ứng với mày mà chỉnh cả 2 tọa độ cùng 1 lúc vì vậy thời gian để di chuyển tới một
điểm mới quyết định bởi di chuyển dài hơn.
 Với khoảng cách không là metric
Khoảng cách không thỏa mãn bất đắng thức tam giác phát sinh trong nhiều bài toán định
tuyến. Ví dụ trong một kiểu vận tải , như du lịch bằng máy bay có thể nhanh hơn mặc dù
khoảng cách di chuyển là xa hơn.

24 | P a g e


1.9

Các giải thuật giải bài toán TSP

 Các giải thuật để tìm 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(n22n) 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.9999n).
Những cách tiếp cận khác bao gồm


Rất nhiều giải thuật branch-and-bound, 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 linear
programming. Có thể làm việc tốt cho khoảng 200 thành phố.



Thực hiện branch-and-bound và cut 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 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 Johnson vào năm 1954, dựa trên linear programming. 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 .
25 | P a g e



×