Như ta đó biết, cỏc bài toỏn NP-khú (trong đú cú NP-đầy đủ) hiện vẫn chưa cú thuật toỏn hiệu quả để giải. Thay vào đú người ta hướng tới cỏc phương phỏp giải gần đỳng. Do phạm vi tỡm hiểu của luận văn nờn trong phần này chỉ trỡnh bày sơ lược đụi nột về một số phương phỏp như vậy. Cỏc phương phỏp được đề cập gồm cú:
Phương phỏp xấp x (ỉ Approximation) Phương phỏp xỏc xuất (Probabilistic) Phương phỏp Heuristic
Phương phỏp tớnh toỏn tiến húa (Evolutionary Computation)
Cir-Sat Independent Set Dec - TSP Bin Packing Hamilton Circle Set Cover Subset Sum Vertex Cover Clique Max Clique
Hỡnh 1. 5 Danh sỏch một số bài toỏn NP-khú và sơ đồ quy dẫn giữa chỳng 1.3.1. Phương phỏp xấp xỉ
Phương phỏp xấp x ỉ là phương phỏp cho đảm b o r ng s tỡm ra m t l i gi i gả ằ ẽ ộ ờ ả ần đỳng sai khỏc với lời giải đỳng khụng quỏ một sai số tuyệ ối cho trướt đ c (hoặc một sai số ỉ ệ t l cho trước) trong thời gian đa thức. Trong phương phỏp xấp x ỉ người ta thường s dử ụng đến phương phỏp quy hoạch tuy n tớnh cú n i b m t s ràng bu c (relaxed linear ế ớ ỏ ộ ố ộ
Chỉ số đặc trưng cho phương phỏp xấp xỉ chớnh là sai số tuyệt đối hoặc tỷ số chờnh lệch tương đối cho phộp giữa lời giải gần đỳng và lời giải đỳng.
< ≤ ≤ > ≤ ≤ 1 , . 1 , . p khi s a s khi s a s ρ ρ ρ hoặc ( -sε) ≤ ≤ a ( s + ε).
Trong đú ρ gọi là đảm bảo v t s chờnh lề ỷ ố ệch tương đối (relative performance guarantee) và ε gọi là đảm bảo v ề sai số tuyệt đối (absolute performance guarantee).
Tuy nhiờn phương phỏp xấp x khụng phỉ ải lỳc nào cũng đảm b o ả được tớnh ch t này v i ấ ớ mọi bài toỏn NP-khú, nghĩa là cú những bài toỏn (vớ d ụ như bài toỏn đúng thựng – bin packing – thỡ người ta đó xõy dựng được những phương ỏn xấp x ỉ trong thời gian đa thức (polynomial time approximation schemes PTAS) cho phộp đạt tới kế – t qu ả sai khỏc với k t qu ế ả đỳng khụng quỏ một sai số cho trước bất kỡ. Tuy nhiờn với một số bài toỏn, vớ d ụ như bài toỏn tỡm bố lớn nh t cấ ủa đồ ị vụ hướ th ng (Maximum Clique), thỡ khụng th làm ể được điều này, th m chớ khụng th x p x k t qu t i m t giỏ tr sai khỏc v i l i giậ ể ấ ỉ ế ả ớ ộ ị ớ ờ ải đỳng một sai số hoặc một tỉ ố đa thức. s
Một hạn ch khỏc cế ủa phương phỏp xấp x ỉ là chỳng chỉ cú th ể được ỏp dụng để ải nhữ gi ng bài toỏn tối ưu húa mà khụng ỏp dụng để ả gi i nh ng bài toỏn d ng quy t đ nh thuữ ạ ế ị ần tỳy được (tuy nhiờn người ta cú th chuyể ển đổi qua l i gi a d ng tạ ữ ạ ối ưu húa và dạng quyết định c a nhủ ững bài toỏn như vậy)
1.3.2. Phương phỏp xỏc xuất
Phương phỏp xỏc xuất (probabilistic methods) hay cũn gọi là phương phỏp ngẫu nhiờn (randomized) sử ụ d ng cỏc b sinh giỏ tr ngộ ị ẫu nhiờn để ạo ra cỏc bit ngẫ t u nhiờn. Cỏc bit này s ẽ được sử ụng như là đầ d u vào ph giỳp thuụ ật toỏn định hướng x lớ và hy v ng thuử ọ ật toỏn s ẽ cú hiệu qu hoả ạ ột đ ng cao trong tỡnh hu ng trung bỡnh. Núi chung kh ố ả năng thuật toỏn hoạt động tồi cũng cú thể ảy ra nhưng xỏc suất là rất nhỏ x .
Để ể hi u thờm v ề phương phỏp xỏc suất này ta xột m t bài toỏn vớ d sau: Hóy tỡm m t kớ t ộ ụ ộ ự ‘ ’ trong m ng ga ả ồm n thành phần trong đú một nửa là kớ tự a ‘ ’, một nửa cũn lại là kớ tự b ‘ ’. Một cỏch tiếp c n t ậ ự nhiờn là ta đi xột từng ph n t cầ ử ủa mảng, nhưng rừ ràng cỏch làm này khỏ t n thố ời gian (cầ nn /2 phộp toỏn) n u mế ảng được xếp bởi cỏc kớ tự b’ trước rồi đến cỏc ‘ kớ t ‘ ’ sau. Cũn nự a ếu ta duyệt cỏc phầ ử ủa mản t c ng theo chi u t ề ừ cuối trở ề v hoặc theo chiều xuụi nhưng với bước nh y là 2 ph n t ả ầ ử thỡ ta vẫn cú th g p vể ặ ấn đề tương tự ới một v b d ộ ữ liệu nào đú. Túm lại là với bất kỡ một thuật toỏn cú tớnh xỏc định (deterministic) nào, ta khụng th ể đảm bả ằo r ng thuật toỏn đú sẽ hoạ ột đ ng tốt với mọi bộ ữ liệu. Nhưng nế d u ta
s dử ụng phương phỏp xỏc suất để duyệt cỏc phần tử ủa mả c ng trờn một cỏch ngẫu nhiờn, ta cú th hy v ng vể ọ ới xỏc suất cao là thuật toỏn đú sẽ hoạt động quả, nhanh chúng tỡm ra một kớ t ‘ự a’ trong mảng, và khụng c n biầ ết đầu vào là thế nào.
Ta cú thể ể k tờn m t sốộ thu t toỏn nậ ằm trong phương phỏp xỏc suất này như thuật toỏn Monte Carlo, thuật toỏn Las Vegas …
Phương phỏp xỏc suất đư c ng d ng nhiợ ứ ụ ều trong lĩnh vực b o mả ật. Tuy nhiờn đụi khi người ta cũng ỏp dụng phương phỏp này (như là một th t c h tr ) cho củ ụ ỗ ợ ỏc phương phỏp khỏc để ả gi i cỏc bài toỏn NP-khú. Điều đú là bởi vỡ hi n nay cỏc thuệ ật toỏn đơn định v n ẫ chưa thể ả gi i cỏc bài toỏn NP-khú một cỏch hi u qu , vỡ vệ ả ậy người ta mu n s d ng y u t ố ử ụ ế ố ngẫu nhiờn với hy vọng cú thể tỡm ra lời giải đỳng với một xỏc suất may mắn nào đú.
1.3.3. Phương phỏp heuristic
Ta hóy xột bài toỏn tỡm đường đi ngắn nh t làm vớ dụấ . Trong quỏ trỡnh tỡm ki m đưế ờng đi ng n nhắ ất, người ta thường s d ng mử ụ ột hàm h n), là một hàm số định nghĩa trờn cỏc nỳt ( trờn cõy tỡm kiếm, để ước đoỏn chi phớ nhỏ nh t tấ ừ nỳt là đối số ủa hàm đú tới nỳt đớch. c Thụng tin heuristic này s ẽ được cỏc thuật toỏn tỡm kiếm đó biết khỏc như thuật toỏn tỡm kiếm tham lam Best First Search hay thuật toỏn A- * s dử ụng để ựa chọn nỳt tiế l p theo trờn đường đi. Thuật toỏn tham lam Best-First Search thỡ lựa chọn nỳt cú chi phớ th p nh t theo ấ ấ hàm heuristic h(n), trong khi đú * chọA n nỳt cú chi phớ thấp nhất theo hàm (g n) + h n) ( trong đú g n( ) là chi phớ chớnh xỏc của đườ g đi từ ạng thỏi đầ ới nỳt đang xột. Nến tr u t u (h n) là một hàm dự đoỏn tốt thỡ hi n nhiờn Aể * cũng cú nhiều kh ả năng tỡm ra lời gi i tốt, trong ả đú cú thể cú l i gi i tờ ả ối ưu. Vấn đề ự ự ờ đõy nằ ở th c s gi m ch l a ch n hàm (ỗ ự ọ h n) như thế nào để ỗ ợ h tr tỡm ki m hi u qu . Cú nhiế ệ ả ều cỏch để xõy d ng heuristic cho bài toỏn ự
S dử ụng hàm chi phớ của cỏc bài toỏn con làm heuristic, vỡ chi phớ của bài toỏn tổng đượ ổ ợ ừc t h p t chi phớ c a bài toỏn con, t t nhiờn cú th hàm t hủ ấ ể ổ ợp đú rất ph c t p, ứ ạ nhưng những thụng tin v chi phớ cỏc bài toỏn con là r t h u ớch cho vi c ưề ấ ữ ệ ớc đoỏn chi phớ của bài toỏn tổng, đặc biệt nếu ta cú nhi u kinh nghiề ệm tiếp xỳc với dạng bài toỏn này. Để ế ti t ki m thệ ời gian tớnh toỏn thỡ người ta thư ng hay s d ng m t ờ ử ụ ộ cơ sở ữ ệ d li u m u (pattern database) ẫ lưu trữ ạ ờ l i l i giải đỳng của mọi bài toỏn con S dử ụng lời giải của chớnh bài toỏn đú nhưng đó được loại bỏ ột số điều kiện ràng m
buộc (việc loại bỏ này cho phộp ta cú thể tỡm được lời giải đỳng cho bài toỏn với th i gian tớnh chờ ấp nhận được)
Phương phỏp heuristic cú nột giống với phương phỏp xỏc suất ở ch ỗ nú đụi lỳc cho ra nh ng l i giữ ờ ải tồi hoặc cú thời gian thực hiện là rất lõu. Tuy nhiờn xỏc suất để ảy ra điề x u đú lại là r t thấ ấp. Hơn thế ữ n a, nh s d ng nh ng tri th c và kinh nghi m b tr ờ ử ụ ữ ứ ệ ổ ợ
lượng l i gi i lẫờ ả n th i gian tớnh toỏn trong quỏ trỡnh ng d ng th c tờ ứ ụ ự ế, nhưng nú khụng đảm bảo đượ ằng điều đú lỳc nào cũng xảc r y ra.
Cỏc phương phỏp heuristic cú một ưu điểm là giỳp c i thiả ện đỏng kể ệ hi u qu tớnh toỏn. ả Giả ử ta đang đứ s ng m t nỳt trờn cõy tỡm ki m, kho ng cỏch t nỳt này tở ộ ế ả ừ ới nỳt đớch là d, và trờn cõy tỡm ki m trung bỡnh m t nỳt r thành nhỏnh. N u s d ng thuế ộ ẽ b ế ử ụ ật toỏn tỡm kiếm vột cạn thỡ thời gian tớnh sẽ là Ο b ( d). Ta tỡm đượ ờc l i gi i tả ối ưu nhưng trả giỏ b ng chi phớ ằ thời gian quỏ đắt và nhi u lỳc s ởề ẽtr thành khụng ch p nhấ ận được. Nhưng nếu s d ng ử ụ heuristic thỡ ta cú th rỳt hể ệ ố ẽ s r nhỏnh (branching factor) từ xub ống một giỏ trị thấp hơn b’ nào đú, và h ểi n nhiờn chi phớ th i gian s ờ ẽ được rỳt xu ng r t nhi u. ố ấ ề
Kĩ thuật heuristic đượ ức ng d ng nhi u trong trớ tu nhõn t o (Artificial Intelligence - AI) ụ ề ệ ạ nhưng ta cũng thấy v i cơ ch ớ ế như trờn nú cũng giỳp nõng cao hi u qu cỏc thu t toỏn gi i ệ ả ậ ả cỏc bài toỏn tối ưu húa thuộc lớp NP-khú.
1.4. Bài toỏn đúng thựng
N i dung phộ ần này được trỡnh bày dựa vào tài liệu tham kh o [11], [4]. ả
1.4.1. Phỏt biểu bài toỏn
Bài toỏn đúng thựng (bin packing problem)
Cho một dóy cỏc đồ ậ v t L a = 1, a2, …., an và cỏc thựng gi ng nhau cú cựng số ức chứa B. Kớch thước của đồ ậ v t ai slà i lớn hơn 0 và khụng vượt quỏ sức chứa của thựng (0 ≤ si ≤ B ∀ = 1, 2, …, i n).
Yờu cầu c a bài toỏn: hóy x p t t cảủ ế ấ cỏc đ v t trờn vào cỏc thựng ch a sao cho số ồ ậ ứ thựng s d ng là ớt nh ử ụ ất.
Một cỏch đầy đủ thỡ bài toỏn vừa phỏt biểu ở trờn được gọi là bài toỏn đúng thựng dạng cơ bản (classical bin packing problem), để phõn biệt với một số dạng tổng quỏt hơn của bài toỏn đúng thựng. Bài toỏn đúng thựng dạng cơ bản đó được chứng minh là một bài toỏn NP-khú.
Mụ hỡnh quy ho ch nguyờn c a bài toỏn ạ ủ
D ễ thấy s thựng c n s dố ầ ử ụng khụng vượt quỏ n. Ta đưa vào cỏc biến số xij với ý nghĩa như sau:
i j
1 nếu đồ ật v được xếp vào thựng xij =
0 nếu ngược lại i,j = 1,2,..., n
Khi đú bài toỏn đúng thựng cú thể đư c phỏt biợ ểu dướ ại d ng bài toỏn quy ho ch nguyờn ạ tuyến tớnh như sau:
Tỡm cực tiểu 1 1 n n ij j i m sign x = = =∑ ∑ với điều kiện
1 1, 1, , n ij j x i n = = = ∑ (1) 1 , 1, , n ij i x B j n = ≤ = ∑ (2) {0,1}, 1, , 1, . ij x ∈ i= n j= n (3)
Điều kiện (1) nghĩa là mỗi đồ ậ v t phải được xếp vào đỳng một và ch m t thựng. ỉ ộ
Điều kiện (2) nghĩa là tổng kớch thước cỏc đ v t đư c x p vào mồ ậ ợ ế ột thựng khụng vượt quỏ sức chứa của thựng đú.
Đỏnh giỏ hiệu qu thu t toỏn x p x giả ậ ấ ỉ ải bài toỏn đúng thựng
Bài toỏn đúng thựng là bài toỏn NP – khú nờn phần nhi u cỏc thu t toỏn gi i là thu t toỏn ề ậ ả ậ x p xấ ỉ. Để đỏnh giỏ hiệu quả ủ c a một thuật toỏn xấp x ỉ A cho bài toỏn đúng thựng người ta thường s d ng cỏc ch s hiử ụ ỉ ố ệu năng tiệm c n t i nh t ậ ồ ấ ∞
A
R (asymptotic worst-case performance ratio) và chỉ ố ệu năng tuyệt đố ồ s hi i t i nh t ấ RA (absolute worst-case performance ratio) được định nghĩa như sau:
Cho dóy đồ ậ v t L. G i A(L) là s thựng thu t toỏn A s dọ ố ậ ử ụng để ếp dóy đồ ậ x v t L và OPT(L) là số thựng tối ưu cho dóy đồ ật L. Đặ v t RA(L) = ( )
( ) A L OPT L
Định nghĩa 1.21. Chỉ ố ệu năng tiệ s hi m c n t i nh t ầ ồ ấ ∞ A
R là t s ỉ ố tiệm cận gi a k t qu c a ữ ế ả ủ thuật toỏn A đối với kết quả ối ưu củ t a bài toỏn trong tỡnh hu ng t i nh t ố ồ ấ
∞ A
R = inf{r ≥ 1: ∃ N0 ∈Z+ để RA(L) ≤ r ∀L thỏa món điều ki n ệ OPT L) ≥ N( 0}
Định nghĩa 1.22. Chỉ ố ệu năng tuyệt đố ồ s hi i t i nh t là t s tuyấ ỉ ố ệt đối gi a k t qu ho t ữ ế ả ạ động c a thu t toỏn A v i k t qu tủ ậ ớ ế ả ối ưu của bài toỏn trong tỡnh hu ng t i nh t ố ồ ấ
RA = inf{ 1sao cho r ≥ RA(L) ≤ r ới mọi L v }
Trong một số tớnh hu ng ta cú th biố ể ết thờm một thụng tin là cỏc đồ ật đều cú kớch thướ v c khụng vượt quỏ m t giỏ tr xỏc đ nh ộ ị ị nào đú. Gọi α là c n trờn cậ ủa kớch thước c a cỏc đ ủ ồ v t, tậ ức là s a( i) ≤ α i = 1, 2, ... ∀ n. Khi đú ta cú:
RA(α) = inf{r 1sao cho ≥ RA(L) ≤ r ới mọi L v và (s ai) ≤ α ∀ai } ∈L
∞ A
∞ A
R và RAlà tiờu chuẩn quan trọng để đỏnh giỏ hiệu quả ủa cỏc thuật toỏn xấ c p x s ỉ ẽ trỡnh bày sau này.
1.4.2. Cỏc biến thể của bài toỏn đúng thựng
Ngoài dạng cơ bản, bài toỏn đúng thựng cũn cú một số ến thể bi khỏc. V ề cơ bản cỏc dạng bài toỏn bi n th này gi ng vế ể ố ới bài toỏn cơ bản nhưng cú thay đổi (hoặc thờm vào) một số điều kiện. Dưới đõy là mộ ố ạt s d ng bi n th quan tr ng cế ể ọ ủa bài toỏn đúng thựng.
1) Hóy xếp cỏc đồ vật sao cho kớch thước cỏc đồ vật hoặc tổng số lượng cỏc đồ vật trong thựng là l n nhớ ất khi số ợ lư ng thựng sử ụng và dung lượ d ng cỏc thựng khụng đổi.
2) Tỡm kớch thước chung tối thiểu của m thựng chứa đ cú thể ếp được tất cả cỏc đồể x v ật.
3) Cỏc đồ ật lần lượt xuất hiện theo thứ ự cho trướ v t c và đồ vật trư c phải được xếp ớ vào thựng xong thỡ đồ ậ v t sau m i xu t hiớ ấ ện (bài toỏn đúng thựng trực tuy n – ế online bin packing).
4) Cho trước một hằng số thực r ∈ [0, 1]. Cần xếp cỏc đồ vật sao cho số thựng sử dụng là ớt nhất và mỗi thựng nếu được sử ụng thỡ tổng dung lượng cỏc đồ ật phải d v đạt ớt nh t là r ì ấ dung lượng thựng.
5) Cho trước một hằng số nguyờn k > 0. Cần xếp cỏc đồ vật sao cho số thựng sử ụ d ng là ớt nhất và s lượng đồ ật đượố v c xếp vào một thựng khụng được quỏ k.
6) Mỗ ồi đ vật cú một khoảng thời gian tồn tại ấ ịnh đỏnh dấnh t đ u bởi một thời điểm bắ ầt đ u và một thời điểm kết thỳc. Trước khoảng thời gian tồn tại của mỡnh, mỗ ồi đ vật chưa c n phải xếp vào thựng nào cả. Trong khoảng thời gian tồn tại của mỡnh ầ thỡ đồ ậ v t phải được x p vào mế ột thựng nào đú. Sau khoảng th i gian t n t i của ờ ồ ạ mỡnh thỡ đồ ậ v t khụng c n ph i đư c x p vào thựng n a nờn cú thể đượầ ả ợ ế ữ c lấy ra để nhường kho ng trả ống cho đồ ậ v t khỏc. Bài toỏn này gọi là bài toỏn đúng thựng động (dynamic bin packing).
7) Sắp xếp cỏc đồ vật sao cho số thựng sử ụng là ớt nhất và một số đồ ật nhấ d v t đ nh ị khụng được x p chung v i nhau vào m t thựng. ế ớ ộ
8) Dạng đối ngẫu của bài toỏn đúng thựng là bài toỏn phủ thựng (bin covering problem) được phỏt biểu như sau:
Cho cỏc đồ ậ v t L = (a1, a2, …., an), với kớch thước của mỗi đồ ật a v i là si, = 1, 2, i …, . Hóy x p tn ế ất cả cỏc đồ ậ v t trờn vào cỏc thựng ch a sao cho: ứ
i. si 1 ≤ ∀i
ii. Dung lượng c a cỏc thựng là tựy ý ủ
iii. S ố lượng thựng cú tổng dung lượng cỏc đ v t lớn hơn hoặc bằng 1 là ồ ậ nhi u nh ề ất.
9) Bài toỏn đúng thựng với dung lượng thựng chứa thay đ i variable-sized bin ổ ( packing):
Cho dóy cỏc đồ ậ v t L = (a1, a2, …., an), kớch thước đồ ậ v t ai là si [0,1]; ∈