tài liệu gồm lý thuyết về đồ thị trong tin học. cùng các thuật toán và khái niệm ví dụ rõ ràng từ cơ bản đến nâng cao. trong đó sẽ quay quanh giải quyết bài toán người du lịch. tài liệu sẽ giúp các bạn ôn tập tốt hơn để thi hsg tin học vòng trường, tỉnh, quốc gia.
Trang 1So 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 chocá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ộtcà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ự khaithá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
Trang 2Vớ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ờigian , 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
Trang 3Tổ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.2.1 Khái niệm các loại thời gian tính 14
1.2.2 Bằng chứng ngắn gọn dễ kiểm tra 15
1.2.3 Khái niệm quy dẫn 16
1.2.4 Lớp bài toán P 16
1.2.5 Lớp bài toán NP 16
1.2.6 Lớp bài toán Co-NP 17
1.2.7 Lớp bài toán NP-đầy đủ (NP-Complete) 17
1.2.8 Lớp bài toán NP- khó (NP-Hard) 17
1.3 Các thuật toán xấp xỉ 19
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
Trang 4 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
2.1 Giới thiệu bài toán 21
2.2 Lịch sử bài toán TSP 22
2.3 Mô tả bài toán TSP 23
2.4 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
2.5 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
3.1 Giới thiệu về giải thuật di truyền 28
3.1.1 Lịch sử phát triển: 28
3.2 Các khái niệm cơ bản 29
3.2.1 Cá thể, nhiễm sắc thể 29
3.2.2 Quần thể 30
3.2.3 Các toán tử di truyền 30
3.3 Mô hình giải thuật di truyền 30
3.4 Các tham số của GA 32
Kích thước quần thể 32
Xác suất lai ghép 32
Xác suất đột biến 32
3.5 Mã hoá NST 32
Trang 5Mã hoá nhị phân 33
Mã hoá hoán vị 33
Mã hoá theo giá trị 33
3.6 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
3.7 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
3.8 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
4.1 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
Trang 6Hình 1 6
Hình 2 7
Hình 3 14
Hình 4 17
Trang 71 Các kiến thức cơ bản
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à e 2 đượ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
Trang 8Đị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à e 2
đượ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).
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=Ø.
Trang 91.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 địnhnghĩ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 đó
Đị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 ( )(deg ( )) v v
Định lý 1.2 Giả sử G=(V,E) là đồ thị có hướng Khi đó
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:
Trang 10deg(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)).
Đị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
x 0 ,x 1, …,x n-1, x n
trong đó u=x 0 , v= x n , (x i, x i+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:
(x 0 , x 1 ), (x 1 , x 2 ), …, (x n-1 , x n ).
Đỉ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
x 0 ,x 1, …,x n-1, x n
trong đó u=x 0 , v= x n , (xi,xi+1) E, hoặc (x i, x i+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:
(x 0 , x 1 ), (x 1 , x 2 ), …, (x n-1 , x n ).
Trang 11Đỉ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.
Đị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
( ) deg ( ),deg
Trang 12Trê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
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
Trang 131.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ẳnghạ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ácngã 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 1chiề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áiniệ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 chiphí 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: EA 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 EA, khi đó chúng ta kí hiệu w(S)=∑w(s)| sS là giá trị trọng số của tập S.
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 nhanhhơn, nhưng lại cần lượng bộ nhớ lớn nếu đồ thị có kích thước lớn
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áchriê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à
Trang 14cạ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ệukhá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 trongdanh sách của đỉnh 2 thì đỉnh 2 cũng phải có trong danh sách của đỉnh 3 Lậptrì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
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, b ij = 1 chứa dữ
liệu về quan hệ giữa đỉnh v i và cạnh x j Đơn giản nhất: b ij = 1 nếu đỉnh v i là một
trong 2 đầu của cạnh x j, 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 v i với đỉnh v j thì phần tử M i,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ậnnà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
2 Khái niệm về lớp các bài toán P và NP
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
Trang 15Thờ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’.
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 đathứ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 (1<b<n) của n Để kiểm tra 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ì b<n) và dễ kiểm tra (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 v n , v1
Việc kiểm tra dãy đỉnh nói trên có là chu trình Hamilton của đồ thị đã cho haykhô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
Trang 16trê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’
Đị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.
Đị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(n2)thuộc lớp bài toán P
Đị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.
Trang 17Ví 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 traxem 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 sauthời gian đa thức Trong ví dụ này dễ thấy b là bằng chứng ngắn gọn (b<n) và dễ kiểmtra (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)
Đị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
Đị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 đủ
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
Trang 18củ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
Trang 19S 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à
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.
Trang 20Chú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.
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ờigiả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ử) 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àΩ) Trong đó S là tập các lời giải ứng cử 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ácràng buộc Ω) Trong đó S là tập các lời giải ứng 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ìmlờ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 ưuhóa tổ hợp có thể chia 2 loại: Bài toán tĩnh và bài toán động
Là bài toán tối ưu hóa tổ hợp trong đó cấu trúc (topology) và giá (cost) khôngthay đổi khi bài toán đang được giải quyết Ví dụ là bài toán người du lịch Khithự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ácthành phố là không thay đổi
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ạngviễn thông, trong đó mô hình mạng và dung lượng yêu cầu luôn thay đổi
Trang 212 Bài toán người du lịch
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ànhphố 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 ứngdụ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ợpvới vài trăm thành phố cũng đã mất vài năm CPU để giải một cách chính xác
Trang 226 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ởirấ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 complete, 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
NP-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
Trang 23Gerhard 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
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ànhphố này , những cạnh sẽ không xuất hiện trong chu trình tối ưu
8 Phân loại bài toán
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ể