NP-đầy đủ và NP-khó

Một phần của tài liệu Thuật toán di truyền giải bài toán cây khung truyền thông tối ưu (Trang 32)

Định nghĩa 1.20.Một bài toán quyết định A được gọi là NP - đầy đủ nếu như A là bài toán trong NP và mọi bài toán trong NP đều có thể quy dẫn về A.

Định nghĩa 1.21.Một bài toán A được gọi là NP - khó 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.

Nói cách khác, nếu có thể giải một bài toán NP-khó nào đó một cách nhanh chóng, thì cũng có thể nhanh chóng giải quyết bất kỳ một bài toán nào khác. Bài toán NP-khó ít nhất là khó bằng bất cứ một bài toán nào trong NP. NP-đầy đủ là những bài toán khó nhất trong NP. Hình 1.7. biểu diễn cách phân lớp tạm thời các bài toán.

Hình 1.7. Phân lớp tạm thời các bài toán P

co-NP

NP

NP-khó

24

1.4. Bài toán cây khung truyền thông tối ƣu

1.4.1 Phát biểu bài toán cây khung truyền thông tối ƣu

Bài toán cây khung truyền thông tối ƣu (Optimal Communication Spanning Tree Problem - OCST) được phát biểu như sau:

Cho G(V,E,w) là đồ thị vô hướng với hàm trọng số w. Bên cạnh đó là hàm yêu cầu (u,v) cho mỗi cặp đỉnh. Với mỗi cây khung T của G, giá truyền thông giữa 2 đỉnh được tính bằng hàm yêu cầu nhân với độ dài đường đi giữa 2 đỉnh đó trên cây T, và giá của cây khung T là tổng giá truyền thông của tất cả các cặp đỉnh. Mục đích của chúng ta là xây dựng cây khung với giá truyền thông là nhỏ nhất. Tức là chúng ta tìm cây khung T sao cho:

, ( , ) T( , ) u v V u v d u v    là nhỏ nhất.

Hàm yêu cầu trong bài toán OCST có thể là hàm không âm bất kì. Bằng cách giới hạn hàm yêu cầu thì chúng ta có nhiều trường hợp của bài toán này. Chúng ta định nghĩa thêm hàm r:VZ0 là hàm trọng số đỉnh cho trước và SV là tập bao gồm k đỉnh nguồn cho trước:

i. (u,v)1 với mọi u,vV: Đây là bài toán cây khung giá định tuyến cực tiểu (Minimum Routing- Cost Spanning Tree - MRCT).

ii. (u,v)r(u)r(v)với mọi u,vV : Đây là bài toán cây khung truyền thông với hàm yêu cầu tích tối ưu (Optimal Product - Requirement Communication Spanning Tree - PROCT ).

iii. (u,v)r(u)r(v)với mọi u,vV : Đây là bài toán cây khung truyền thông với hàm yêu cầu tổng tối ưu ( Optimal Sum - Requirement Communication Spanning Tree - SROCT).

iv. (u,v)0nếu uS: Đây là bài toán OCT p-source ( p - source OCT), hay nói cách khác là ta đi tìm cây khung có 

 S ) , ( ) , ( u vV T u v d v u  cực tiểu.

25

v. (u,v)1 nếu uS và (u,v)0 nếu ngược lại. Đây là bài toán p-source MRCT ( p-source MRCT). Nói cách khác mục đích của chúng ta là tìm cây khung cực tiểu .  S  ) , ( u v V T u v d

Hình 1.8. Mối quan hệ giữa các bài toán OCT

Tuy nhiên, vì hàm yêu cầu (u,v) thường được cho dưới dạng ma trận )

(rij

R kích thước nn nên cách tính giá của cây khung có thể thu gọn về dạng tổng quát: c(T) =     j i V j i T j i ij d p r , , , ) (

trong đó d(piT,j) là tổng trọng số của các cạnh trên đường đi duy nhất từ i đến j và là dạng tổng quát của tất cả những bài toán OCT đã liệt kê ở trên.

Ví dụ:

PROCT SROCT p source-OCT, p cố định

P source MRCT, p bất kì

MRCT P source-MRCT, p cố định

Optimal communication Spanning Trees Problem (adsbygoogle = window.adsbygoogle || []).push({});

Tính tổng quát

26

Với đồ thị có 6 nút và ma trận trọng số và ma trận yêu cầu được cho như sau: (ma trận trọng số và ma trận yêu cầu thường có dạng ma trận tam giác trên)

0 3 6 5 9 7 0 0 3 2 4 8 0 0 0 3 7 2 0 0 0 0 9 2 0 0 0 0 0 1 0 0 0 0 0 0 D                      0 5 13 12 8 9 0 0 7 4 2 6 0 0 0 3 10 15 0 0 0 0 11 7 0 0 0 0 0 12 0 0 0 0 0 0 R                     

và một cây khung của đồ thị này có dạng:

Hình 1.9. Cây khung minh họa cho việc tính giá.

Giá của cây khung này sẽ là:

c(T) = r12d12 +r13 (d12 + d24 + d46 + d63) + r14 (d12 + d24) +... + r46d46 + r56 d56

= 5(3) + 13 (3 + 2 + 2 + 2) + 12 (3 + 2) +... + 7 (2) + 12(1) = 534.

Bài toán OCST sẽ tìm kiếm cây khung có giá nhỏ nhất trong tất cả các cây khung.

Bài toán OCST trở thành bài toán cây khung nhỏ nhất (MST) khi không có đòi hỏi truyền thông rij giữa các nút. Do đó, T là cây khung nhỏ nhất nếu

c(T)  c(T') với mọi cây khung T' và c(T) =  E j i ij d ) , (

27

Như đã nói ở trên, bài toán cây khung truyền thông tối ưu được Garey và Johnson chỉ ra là thuộc lớp bài toán NP-khó (1979) sau đó được chứng minh là thuộc lớp MAXSNP-khó.

Khi áp dụng giải thuật di truyền thì không gian kiểu hình chính là không gian cây khung và khoảng cách kiểu hình là khoảng cách giữa hai cây khung đó. Khoảng cách Hamming dh giữa hai cây chỉ ra chính xác số các cạnh khác nhau trên hai cây đó.

Như vậy, khoảng cách nhỏ nhất giữa hai cây là dh =2.

Để đơn giản, chúng ta định nghĩa khoảng cách di,j = {0,1,...n-1} giữa 2 cây

Gi, Gj là một nửa số lượng các đường liên kết khác nhau (di,j= ½dhi,j), tức là:

dpGi,Gjdhi,j=          1 1 1 0 , | | | | n u u v j uv i uv V v u j uv i uv l l l l trong đó : 1, ( , ) 0, ( , ) j j uv j u v G l u v G      

1.4.2 Ứng dụng của bài toán

Bài toán được ứng dụng trong một số bài toán thiết kế mạng đơn giản và một số bài toán vận tải cụ thể.

Bài toán thiết kế mạng đơn giản được phát biểu như sau:

Đầu vào:

 Số nút mạng n,

 Vị trí của các nút,

 Yêu cầu truyền thông giữa n nút này,  Khả năng (lưu lượng) của liên kết.

Giá của liên kết phụ thuộc vào khả năng và độ dài của đường liên kết đó.

Yêu cầu xác định:

o Topology (cấu trúc) mạng,

28 (adsbygoogle = window.adsbygoogle || []).push({});

Như vậy, chúng ta định nghĩa một mạng như là một đồ thị với n nút và có tối đa n(n-1) liên kết giữa các nút này. Nếu mạng là kết nối đầy đủ thì nó có ít nhất (n- 1) liên kết. Chúng ta giả sử rằng các liên kết này đều là vô hướng (tuy nhiên ta cũng có thể áp dụng trong trường hợp có hướng) và mạng luôn là liên thông. Như vậy, số lượng tối đa các liên kết có thể có là n(n-1)/2. Khoảng cách giữa hai nút được tính toán theo khoảng cách Euclid:

2 2 ) ( ) ( a b a b ab x x y y d    

trong đó x, y là các toạ độ trong hệ trục toạ độ Carter

Mục đích của mạng là để vận chuyển các đối tượng, như hàng hoá hay thông tin, từ nút này đến nút khác trong mạng. Do đó, cần thiết phải có các luật để định tuyến giao thông qua mạng. Các luật này phải dựa trên các thuật toán định tuyến. Nếu số lượng các liên kết trong mạng liên thông đầy đủ lớn hơn n-1, việc định tuyến giao thông qua mạng có thể thay đổi tự động phụ thuộc vào tình trạng tải, độ trễ, lỗi của các nút mạng hay một cài điều kiện khác. Ngược lại, nếu chỉ có n-1 đường liên kết thì theo định lí DaisyChain, sẽ chỉ có một đường đi duy nhất từ nút này đến mỗi nút kia trong mạng và do đó việc định tuyến là không cần thiết.

Dễ dàng thấy được lợi ích của việc sử dụng cây là:

 Thể hiện cấu trúc mạng với số liên kết ít nhất mà vẫn đạt được đồ thị liên thông.

 Không cần định tuyến tự động vì chỉ có đường đi duy nhất giữa hai nút mạng  Kích thước không gian tìm kiếm  n2

tree n

 nhỏ hơn rất nhiều so với đồ thị thông thường  n(n1)/2

graph n

Tuy nhiên, cũng cần thấy việc sử dụng cây khung cũng có những nhược điểm nhất định, đó là cây rất không an toàn với lỗi nút và đường liên kết. Nếu một liên kết hoặc một nút mạng bị lỗi, cây sẽ bị chia thành hai cây con không có khả năng "giao tiếp" được với nhau.

29

Các bài toán thiết kế mạng/vận tải trên thực tế: Bài toán 1:

Giả sử rằng mỗi đỉnh v biểu diễn một thành phố và r(v) là số dân của thành phố đó. Đó là lí do vì sao mà ta giả sử rằng yêu cầu truyền thông/vận tải giữa các cặp đỉnh tỉ lệ thuận với tích (tổng) của trọng số của hai đỉnh đó. PROCT, SROCT là cấu trúc cây với giá truyền thông cực tiểu.

Bài toán 2:

Đối với mỗi nút trong mạng đều có một thông điệp riêng truyền đến các nút khác và tổng thông điệp nhận được sẽ tỉ lệ thuận với trọng lượng (khả năng nhận) của nút nhận. Với giả sử này thì giá liên thông của cây sẽ là:

v u T u v d v r , ) , ( ) ( = ( ) 2 1 T

Cs (giá của SROCT).

Bài toán 3:

Trong một mạng máy tính, hầu hết sự truyền thông là giữa máy chủ và máy khách. Nói chung, chỉ có một số ít máy chủ phục vụ cho nhiều máy khách. Hướng của bài toán p-source MRCT cung cấp giải pháp cho những dạng ứng dụng như vậy.

30

CHƢƠNG 2. GIẢI THUẬT DI TRUYỀN

2.1 Giải thuật tiến hóa 2.1.1 Lịch sử phát triển 2.1.1 Lịch sử phát triển

Tính toán tiến hóa (Evolutionary Computation) là các kỹ thuật tìm kiếm theo xác suất có ý tưởng xuất phát từ nguyên lý “chọn lọc tự nhiên” trong học thuyết về sự tiến hóa của Darwin, và các kỹ thuật về gen. Các kỹ thuật này được áp dụng cho một quần thể bao gồm các cá thể nhân tạo, chúng chiến đấu trong cuộc đấu tranh sinh tồn trong đó các cá thể thích nghi nhất sẽ sống sót và cho phép sản sinh ra các cá thể mới.

Tính toán tiến hóa được giới thiệu vào đầu những năm 1960 trong “Các chiến lược tiến hóa” của I. Rechenberg. Vào giữa những năm 1970, Holland cùng các sinh viên và đồng sự đã đưa ra giải thuật di truyền (Genetic algorithms – GA) và giới thiệu nó trong cuốn sách “Sự thích nghi trong tự nhiên và trong các hệ thống nhân tạo”. Năm 1992, John Koza đã sử dụng giải thuật di truyền để giải quyết một số bài toán và gọi phương pháp này là “Lập trình di truyền – Genetic Programming”.

Tính toán tiến hóa là ngẫu nhiên, nhưng không phải là ngẫu nhiên một cách đơn thuần. Nó duyệt qua không gian tìm kiếm, sử dụng các thông tin đã có để đoán xem chỗ nào có thể sẽ có kết quả tốt hơn. Các giải thuật tiến hóa rất thích hợp cho các bài toán chưa có lời giải tối ưu. Đặc biệt, đối với các bài toán NP-khó, giải thuật di truyền là phương pháp giải quyết tốt nhất hiện tại được biết đến. Theo thời gian, giải thuật di truyền đã được sử dụng để giải rất nhiều bài toán như là bài toán người du lịch, sắp xếp thời khóa biểu,… Hình 2.1 cho ta thấy mối liên hệ giữa các kỹ thuật tìm kiếm

31

Hình 2.1. Mối liên hệ giữa các kỹ thuật tìm kiếm

Chiến lƣợc tiến hoá (Evolutionary Algorithm – EA) do T. Baeck, F.H.Hofmeister và H.P.Schwefel đề xuất. Thuật toán này dựa trên một số chiến lược ban đầu, tiến hoá để tạo ra những chiến lược mới phù hợp với môi trường thực tế một cách tốt nhất. (adsbygoogle = window.adsbygoogle || []).push({});

Giải thuật di truyền (Genetic Algorithm – GA) do John Holland đưa ra và được ông phát triển cùng với các đồng nghiệp và sinh viên vào những năm 1970. Cuốn sách "Sự thích nghi trong các hệ tự nhiên và nhân tạo” (Adaption in Natural and Artificial Systems) xuất bản năm 1975 đã tổng hợp các kết quả của quá trình nghiên cứu và phát triển đó.

Năm 1992, John Koza đã dùng GA để xây dựng các chương trình giải quyết một số bài toán và gọi phương pháp này là "Lập trình di truyền" (Genetic Programming).

2.1.2 Các phƣơng pháp khác

Có 3 dạng cơ bản của bài toán tìm kiếm, đó là:

i. Tìm kiếm trong dữ liệu đã được lưu trữ. Ở đây, chúng ta cần thực hiện việc tìm kiếm sao cho có hiệu quả để lấy được thông tin từ một cơ sở dữ liệu lớn, được lưu trữ trong bộ nhớ máy tính chẳng hạn.

Các kỹ thuật tìm kiếm

Dựa trên tính toán Ngẫu nhiên Đếm

Trực tiếp Gián tiếp

Fibonacci New ton Tham lam

Quy hoạch động Giải thuật tiến hóa

Giải thuật luyện thép

Chiến lược tiến hóa Lập trình tiến hóa Giải thuật di truyền (GA)

GA tuần tự GA song song

Song song tự động

(nhờ trình dịch)

Song song hạt thô Song song hạt tinh Song song toàn cục

32

ii. Tìm kiếm đường đi tới đích. Trong dạng này, chúng ta cần tìm kiếm một tập các bước đi hay tập các trạng thái để đi từ trạng thái khởi tạo ban đầu đến trạng thái đích đã được chỉ ra từ trước. Đây là hướng tiếp cận cơ bản trong ngành trí tuệ nhân tạo.

iii. Tìm kiếm phương án. Đây là dạng tổng quát nhất, ta cần có phương pháp tìm kiếm hiệu quả để tìm ra phương án cho một bài toán với không gian giả thuyết rộng.

Thuật toán tiến hoá nói chung và thuật giải di truyền nói riêng thường được áp dụng cho các bài toán ở dạng thứ 3 này, tức là những bài toán có dạng:

Không gian tìm kiếm rộng:

Nếu không gian giả thuyết cần tìm kiếm là rộng và phải xét nhiều khía cạnh thì EA sẽ được ưa thích vì EA có khả năng khắc phục những khía cạnh rộng lớn đó và dễ dàng kết hợp với tính toán song song nên hiệu quả đạt được là khá tốt.

Hàm đối tƣợng (hàm thích nghi) phức tạp:

Nếu bài toán có hàm đối tượng phức tạp ví dụ như không tuyến tính, không chuyển hoá được hay không liên tục thì nên sử dụng EAEA có thể làm việc với những trường hợp không có công thức gần đúng với hàm đối tượng và chất lượng của các phương án giả thuyết có thể tính toán bằng mô phỏng.

Các mẹo tìm kiếm không thực sự có hiệu quả:

EA thích hợp với những bài toán khó hiểu, đó là do việc tiến hoá mà không cần đến những kiến thức chuyên môn, định hướng đơn thuần chỉ bởi hàm thích nghi của không gian giả thuyết, và việc tính toán hàm thích nghi lại khá đơn giản. Tuy nhiên, nếu có mẹo tìm kiếm có hiệu quả nào đó thì ta cũng có thể sử dụng kết hợp với giải thuật tiến hoá.

Phƣơng án tốt nhất không nhất thiết phải quá chính xác:

EA luôn tìm ra một tập các phương án tốt nhưng nó không đảm bảo đó là phương án tốt nhất. Nó cũng không cung cấp thêm về mối liên hệ giữa phương án tìm được với giá trị tối ưu toàn cục.

33

Thời gian chạy không cố định: (adsbygoogle = window.adsbygoogle || []).push({});

Tuỳ thuộc số thế hệ mà ta xét và kích thước quần thể mà thời gian chạy EA

có thể thay đổi.

Ràng buộc phức tạp:

EA áp dụng tốt với những bài toán tối ưu thông dụng nhưng cũng có khả năng giải quyết những vấn đề khó với những ràng buộc phức tạp và có nhiều đối tượng

Những phƣơng án mạnh thực sự cần thiết:

Trong môi trường có nhiễu (có nhiều tối ưu cục bộ chẳng hạn) thì những phương án mạnh là thực sự cần thiết. EA luôn giữ lại những phương án như vậy và luôn tỏ ra thích nghi trong môi trường thay đổi.

Có một số phương pháp cũng có thể áp dụng để giải quyết những vấn đề như trên. Đó là một số phương pháp tìm kiếm mà nên lưu ý:

Mô phỏng tôi luyện

Sự khác biệt chính của phương pháp này so với phương pháp tìm kiếm cục bộ là các láng giềng được xem xét một cách ngẫu nhiên và thỉnh thoảng những láng giềng "xấu" lại được chấp nhận. Bằng cách chấp nhận những phương án "xấu" thì những giá trị tối ưu cục bộ được bỏ qua để đạt đến những giá trị tối ưu toàn cục. Qua thời gian, xác suất lựa chọn những phương án "xấu" có thể giảm xuống bằng 0.

Một phần của tài liệu Thuật toán di truyền giải bài toán cây khung truyền thông tối ưu (Trang 32)