Tổng quan về giải thuật di truyền và các ứng dụng 53

Một phần của tài liệu Đánh giá hiệu quả của giải thuật di truyền giải bài toán cây khung truyền thông tối ưu với các kỹ thuật mã hóa cây (Trang 54)

M ục đích nghiên cứu, đố it ượ ng, phạm vi nghiên cứ u 12 

3.1.1Tổng quan về giải thuật di truyền và các ứng dụng 53

Hiện nay và trong tương lai, trí tuệ nhân tạo (Artificial Intelligent) đang được nghiên cứu, phát triển rất mạnh mẽ và được ứng dụng rộng rãi. Đây là một mảng chuyên môn rất lớn trong khoa học máy tính, bao gồm nhiều lĩnh vực khác nhau. Một trong những lĩnh vực đó là kỹ thuật tính toán thông minh (Computational Intelligent) trong đó có giải thuật di truyền (Geneic Algorithms – GA) đã đem lại những phương pháp mới để giải các bài toán mà nếu áp dụng phương pháp truyền thống sẽ gặp nhiều khó khăn.

3.1.2 Giải thuật di truyền

Giải thuật di truyền – chỉ cần nghe tên cũng có thể hiểu được rằng nó dựa trên việc quan sát quá trình tiến hóa trong tự nhiên. Các nguyên lý cơ bản của giải thuật di truyền được tác giả J.H.Holland công bố lần đầu tiên vào năm 1962. Sau đó, các nền tảng toán học của giải thuật lần đầu tiên được công bố vào năm 1975 trong cuốn sách

“Adaptation in Natural and Artificial System” cũng của tác giả J.H.Holland. Có thể

nói Holland là người đi tiên phong nghiên cứu trong lĩnh vực giải thuật di truyền cùng với những tác giả Goldbeg, Beglay…

54

Giải thuật di truyền là một giải thuật dựa trên cơ chế của chọn lọc tiến hoá trong tự nhiên: “Trong mọi thế hệ, một tập mới các sinh vật được tạo ra bằng cách lai ghép những nhân tố thích nghi nhất với môi trường của những sinh vật trong thế hệ cũ cùng với sự xuất hiện đột biến ngẫu nhiên của các cá thể trong thế hệ mới”. Vận dụng cơ chế đó, giải thuật di truyền được bắt đầu với một quần thể ngẫu nhiên gồm n chuỗi bit, mỗi chuỗi bit được xem như một nhiễm sắc thể, các bit 0 và 1 được xem như là các Alleles, gen là gồm một hoặc nhiều Alleles .

Hình 3.1- Mô tả nhiễm sắc thể ( chromosome), allele, gen .

Trong quá trình chuyển từ quần thể cũ sang quần thể mới, ta áp dụng một số toán tử di truyền (genetic-inspired operators – các toán tử mô phỏng từ quá trình di truyền),

đó là các toán tử mô phỏng cơ chế chọn lọc tự nhiên (selection), các phương pháp lai ghép (crossover, recombination), phương pháp đột biến (mutation), đảo đoạn (inversion).

ƒ Toán tử chọn lọc: Lựa chọn lấy một số nhiễm sắc thểđể đem đi lai ghép, phục vụ cho việc sinh cá thể mới trong thế hệ con cháu (quần thể mới). Việc lựa chọn là theo tiêu chí các cá thể đều có cơ hội được lựa chọn nhưng những cá thể tốt hơn (đánh giá theo một tiêu chí nào đó được đặt ra ban đầu) sẽ có cơ hội được lựa chọn cao hơn, khiến cho quần thể mới sẽ có nhiều con tốt hơn cha mẹ.

ƒ Toán tử lai ghép: Là trao đổi một vài đoạn gen được chọn ngẫu nhiên giữa 2 nhiễm sắc thể tham gia lai ghép, qua đó trao đổi tính chất giữa 2 nhiễm sắc thể.

ƒ Toán tử đột biến: Là thay đổi giá trị một số allele ở một vài vị trí ngẫu nhiên trên nhiễm sắc thể khiến tính chất của nhiễm sắc thể thay đổi hoặc tạo ra tính chất mới.

55

ƒ Toán tử đảo đoạn: Sẽđảo ngược một đoạn nào đó trên nhiễm sắc thể, qua đó thay đổi trật tự của các gene, và cũng làm tính chất của nhiễm sắc thể thay đổi.

Sơđồ chung của giải thuật di truyền

Trong thuật toán di truyền thì mỗi cá thể có thể là một lời giải hoàn chỉnh của bài toán, tuy nhiên vẫn chưa tối ưu, hoặc cũng có thể chỉ là một bộ phận của lời giải hoàn chỉnh. Thông qua quá trình lặp (mỗi lần lặp của quần thể được coi như là 1 thế

hệ) các cá thể này sẽ biến đổi dần dần để tạo ra các lời giải tốt hơn.

Hình 3.2 - Mô tả sơđồ chung của thuật toán di truyền.

Bắt Đầu Khởi tạo quần thể Đánh giá độ thích nghi Chọn lọc Lai ghép Đột biến Kết thúc Không thỏa Thỏa Kết quả Điều kiện dừng

56

+ Khởi tạo quần thể: Các cá thể (lời giải của bài toán) trong quần thể ban đầu có thể được sinh ra theo nhiều cách, chẳng hạn sinh ngẫu nhiên. Việc sinh ngẫu nhiên làm cho quần thể ban đầu rất đa dạng (sự sai khác của các thể là rất lớn), điều này rất tốt cho thuật toán vì ta có thể bao quát không gian tìm kiếm rất rộng. Tuy nhiên nhược

điểm là số lần lặp (số thế hệ) phải thực hiện trước khi dừng là lớn. Hơn nữa trong một số bài toán có thể dự đoán được lời giải tối ưu chỉ tập trung vào một vùng nào đó. Do

đo có thể chọn cách khởi tạo là kết hợp với các kỹ thuật heuristic (thường là dùng các thuật toán tìm lời giải gần đúng đã có) để sinh các cá thể ban đầu. Khi áp dụng theo cách này ta vẫn cần đảm bảo được mức độđa dạng cho quần thể ban đầu.

+ Đánh giá độ thích nghi. Sử dụng hàm đánh giá độ thích nghi đối với các cá thể đã được xây dựng từ trước để đánh giá độ thích nghi của từng cá thể trong quần thể.

+ Điều kiện dừng: Có rất nhiều cách để dừng thuật toán, có thể là sau một số

thế hệ cho trước hoặc có thể là sau một thời gian mà không tìm được lời giải tốt hơn. Trong đó lời giải chính là cá thể tốt nhất tìm được.

3.2 Một số phương pháp mã hóa cây

3.2.1 Mã hóa Prufer

Caley (1889) đã chỉ ra rằng đồ thị đầy đủ n nút có nn-2cây khung phân biệt. Với giả thiết này Prufer (1918) đã giới thiệu một ánh xạ 1- 1 tương ứng giữa một cây khung và một chuỗi số có độ dài n-2 số, với n là sốđỉnh của cây khung. Chuỗi số này

được gọi là chuỗi số Prufer, và mỗi một cây được biểu diễn tương ứng với một chuỗi sốPrufer. Do đó phương pháp này được xem như một cách mã hóa cây. (adsbygoogle = window.adsbygoogle || []).push({});

Để thực hiện mã hóa và giải mã chuỗi Prufer ta gán nhãn các đỉnh trên cây khung từ 1 tới n.

57

+ Thuật toán mã hóa một cây khung thành một chuỗi Prufer:

Bước 1: Lấy nút i là nút lá có nhãn nhỏ nhất trong số các nút có bậc là 1.

Bước 2: Lấy j là một nút kết nối với i (có chính xác một nút j), cho nút j vào bên phải chuỗi sốPrufer.

Bước 3: Xóa nút i và liên kết (i,j) từ cây và lúc này cây còn n-1 nút.

Bước 4: Quay lại bước 1 cho đến khi cây còn hai nút (có nghĩa là chỉ còn một liên kết).

Sau khi kết thúc thuật toán chúng ta có chuỗi số Prufer với n-2 số mà nó biểu diễn một cây.

Ví dụ:

P: Là chuỗi sốprufer

Hình 3.3- Cây khung được mã hóa thành chuỗi Prufer 2565

1 2 3 4 5 6 1 2 3 4 5 6 P=2 1 2 3 4 5 6 P=25 1 2 3 4 5 6 P=256 1 2 3 4 5 6 P=2565

58

Với cây khung trong hình 3.3, các nút có bậc là 1 bao gồm: 1, 3, 4. Trong đó 1 là nhãn nhỏ nhất, kề với nút 1 là nút 2. Theo thuật toán: Đầu tiên chuỗi số Prufer bắt

đầu bằng nút 2. Sau đó, loại bỏ nút 1 và cạnh (1,2) ra khỏi cây, tiếp tục quá trình. Các nút bậc 1 bây giờ là 2, 3, 4. Trong đó 2 là nhãn nhỏ nhất, liên kết với nút 2 là nút 5. Ta thêm 5 bên phải vào chuỗi sốPrufer. Cứ tiếp tục như vậy, ta có kết quả chuỗi Prufer là 2565.

+ Thuật toán xây dựng một cây từ một sốPrufer

Bước 1: Lấy P là một chuỗi sốPrufer với n- 2 số (với mỗi số là tương ứng với mỗi đỉnh của cây). P1 là tập nhãn của các đỉnh mà không có trong Pđược sử dụng cho việc xây dựng cây.

Bước 2: Lấy nhãn i trong P1 có giá nhỏ nhất và j là số bên trái nhất của P. Bước 3: Chọn liên kết (i,j) làm cạnh cho cây. Xóa i từP1j từ P. Nếu nhãn j

không còn xuất hiện ở bất kỳ vị trí nào trong P thì đặt j vào P1.

Bước 4: Lặp lại Bước 1 đến Bước 3 cho đến khi không còn số nào trong P. Bước 5: Nếu không còn số nào trong P, lúc này có chính xác 2 nút rs trong

P1. Thêm liên kết (r,s) trong cây. Ta được cây n-1 liên kết.

Ban đầu ta có chuỗi Prufer : P= 2565, và P1={1,3,4}. Vòng lặp đầu tiên, => thêm cạnh vào cây, đánh dấu 1 không còn là "nhãn thích hợp", xoá 2 khỏi , lúc này P=565. Vì 2 không xuất hiện trong lần nào nữa nên cho 2 vào tập P1, lúc này P1={2,3,4} . Vòng lặp thứ 2, => thêm cạnh , xoá 5 ra khỏi , lúc này P=65. Tiếp tục ta thu được kết quả là cây nhưHình 3.3.

+ Một sốđặc điểm mã hóa Prufer

Mã hóa với số Prufer trình bày được tất cả các cây tương ứng đồ thị. Ngoài ra nó còn mang thông tin về bậc các đỉnh, với một đỉnh có bậc là d thì sẽ xuất hiện chính xác

59

trong số Prufer d-1 lần, có nghĩa là khi một nút xuất hiện d lần trong chuỗi số Prufer

thì có d+1 kết nối đến các nút khác.

Số Prufer thích hợp cho việc mã hóa cây khung, đặc biệt là trong lĩnh vực nghiên cứu, như bài toán vận chuyển, bài toán cây khung. Với mã hóa độ dài n-2 và kích thước không gian tìm kiếm là nn-2, mối quan hệ giữa cây khung và số Prufer là ánh xạ 1-1. Vì vậy nó dễ dàng kiểm soát những nút là được mã hóa hoặc không mã hóa trong biểu diễn di truyền bằng sử dụng mã hóa sốPrufer.

Tuy nhiên nhược điểm lớn nhất của mã hoá Prufer là tính cục bộ thấp. Tức là một thay đổi nhỏ trong sốPrufer cũng có thể gây ra nhưng biến đổi lớn trong cây được biểu diễn. Điều này có nghĩa ánh xạ kiểu gen- kiểu hình là bất định. Do đó thao tác đột biến không làm việc trên một khu vực láng giềng cục bộ xung quanh một cá thể và con cháu thì không thể kế thừa những đặc tính của cha mẹ chúng. Tính chất này ảnh hưởng xấu tới chất lượng lời giải của giải thuật khi sử dụng chuỗi Prufer [26].

3.2.2. Mã hóa NetKeys (Network Random Keys Encoding) (adsbygoogle = window.adsbygoogle || []).push({});

Mã hóa NetKeys được lần đầu tiên được Bean(1992) [25] giới thiệu, và được Rothlauf [19] lần đầu sử dụng cho bài toán OCST.

Để mô tả chức năng của mã hóa NetKey, chúng ta có thể tách ra cách trình bày gồm hai phần. Đầu tiên kiểu gen là một chuỗi số ngẫu nhiên, nó lưu trữ sự quan trọng của những liên kết có chiều dài l=n(n-1)/2 (n sốđỉnh của đồ thị). Thứ hai là xây dựng một thuật toán ánh xạ kiểu gen sang kiểu hình có nghĩa là xây dựng một cây (kiểu hình-phenotype) từ một chuỗi số ngẫu nhiên (kiểu gen – genotype) trong phạm vi [0,1].

+ Thuật toán tạo ra cây khung từ một chuỗi NetKeysđược mô tả như sau:

Bước 1: Mỗi số trong chuỗi NetKeys sẽđược gán nhãn chính bằng số thứ tự của nó trong chuỗi. Các nhãn này cũng chính là nhãn của mỗi cạnh trong đồ thị.

60

Bước 2: Sắp xếp lại chuỗi theo thứ tự giảm dần của các số trong chuỗi, ta thu

được một chuỗi số mới là s theo thứ tự giảm dần của các giá trị số trong chuỗi. Bước 3: Cho i=1, T là một cây rỗng.

Bước 4: Lấy j là cạnh tại vị trí i.

Bước 5: Nếu việc thêm cạnh j vào cây T mà không tạo ra chu trình thì ta thêm cạnh đó vào cây.

Bước 6 : Tăng i lên 1 và lặp lại bước 3 cho tới khi cây có cạnh. Ví dụ:

Vị trí 1 2 3 4 5 6 7 8 9 10

Chuỗi 0.55 0.73 0.09 0.23 0.40 0.82 0.65 0.85 0.75 0.90

Cạnh A-B A-C A-D A-E B-C B-D B-E C-D C-E D-E

Bảng 3.1 - Chuỗi NetKeys cùng nhãn của các cạnh trong đồ thị ban đầu

Sắp xếp lại Chuỗi NetKeys theo thự tự giảm của giá trị ta có:

Chuỗi 0.90 0.85 0.82 0.75 0.73 0.65 0.55 0.40 0.23 0.09

Cạnh D-E C-D B-D C-E A-C B-E A-B B-C A-E A-D

Nhãn 10 8 6 9 2 7 1 5 4 3

Bảng 3.2 - Chuỗi NetKeys sau khi được sắp xếp

Các bước lặp ban đầu của thuật toán, cạnh 10, 8, 6 sẽ được đưa vào cây. Tiếp

đến cạnh 9 sẽ tạo ra chu trình do đó không đưa cạnh này vào cây và tiếp tục như vậy cho tới khi tạo được cây khung hoàn chỉnh gồm 4 cạnh như sau:

61

A B

C D E

Hình 3.4 - Cây thu được theo mã hóa NetKeys

Một trong những nhược điểm của mã hóa NetKeys là đòi hỏi thời gian tính toán lớn. Điều này một phần do yêu cầu của việc tìm chu trình của cây trong mỗi bước lặp tính toán. Ngoài ra tính chất mã hóa của chuỗi NetKeys không thể hiện tính duy nhất khi mã hóa một cây khung. Cho nên với một cây khung ta không thể sinh ra được một chuỗi mã hóa duy nhất.

3.2.3 Mã hóa NB (Node Biased Encoding)

Mã hóa NB được Palmer đưa ra vào năm 1996. Ý tưởng phương pháp này là mã hóa trọng số của mỗi nút. Để mã hóa cây ta sử dụng trọng số của nút và thêm vào một tham một tham sốPđểđiều khiển sự quan trọng của các nút.

Khi sử dụng mã hóa NB, ta có một kiểu hình b chứa các giá trị chỉ ra ngưỡng tương

ứng cho mỗi nút. Giá trị này là một số thực nằm trong khoảng [0, 1]. (adsbygoogle = window.adsbygoogle || []).push({});

Để xây dựng một cây khung từ chuỗi mã hóa NB ta thực hiện các bước sau:

ƒ Cho một thông số đầu vào là . Thông số này ảnh hưởng trực tiếp đến chất lượng lời giải khi sử dụng mã hóa NB.

ƒ Xây dựng lại ma trận khoảng cách mới từ ma trận theo công thức sau:

(1). trong đó :

62

là giá trị ngưỡng tương ứng cho nút , . b là vectơ mã hóa NB.

ƒ Áp dụng thuật toán Prim [6] với ma trận khoảng cách để xây dựng cây khung. Ví dụ: Cho vectơ b={0.7, 0.5, 0.2, 0.8, 0.1}, =1 Ma trận D là: 2 1 3 4 2 5 6 3 1 5 4 3 3 6 4 10 4 3 3 10 D − ⎧ ⎫ ⎪ − ⎪ ⎪ ⎪ ⎪ ⎪ =⎨ − ⎬ ⎪ − ⎪ ⎪ ⎪ − ⎪ ⎪ ⎩ ⎭ Ta có =10 Tính theo công thức (1) ta có =2+(0.7+0.5)×10=14.

Tương tự ta tính được , , …, như vậy ta có ma trận D’dưới đây:

' 14 10 18 12 14 12 19 9 10 12 14 6 18 19 14 19 12 9 6 19 D − ⎧ ⎫ ⎪ − ⎪ ⎪ ⎪ ⎪ ⎪ =⎨ − ⎬ ⎪ − ⎪ ⎪ ⎪ − ⎪ ⎪ ⎩ ⎭

Áp dụng thuật toán Prim đối với ma trận D’ ta có cây khung tương ứng là:

1 3 5

2

63

Hình 3.5 - Mô tả một cây được mã hóa NB.

Mã hóa NB không có khả năng biểu diễn tất cả các cây khung có thể của đồ thị

mà chỉ có thể biểu diễn các cây khung gần với cây khung nhỏ nhất của đồ thị - cây

MST.

3.2.4 Mã hóa LB (Link Biased Encoding)

Mã hóa LB do Palmer 1994; Rothlauf & Goldberg, 2003 đề xuất, đây là phương pháp mã hóa trọng số cạnh. Phương pháp này biểu diễn cây mã hóa bởi một ma trận với kích thước bằng với ma trận khoảng cách. Mỗi giá trị trong ma trận mã hóa là một số thực nằm trong khoảng [0, 1].

Để xây dựng một cây khung từ chuỗi mã hóa LB ta thực hiện các bước sau:

ƒ Cho thông số điều khiển đầu vào là PL. Thông số này ảnh hưởng trực tiếp đến chất lượng lời giải khi sử dụng mã hóa LB.

ƒ Xây dựng lại ma trận khoảng cách mới từ ma trận theo công thức sau:

(2).

trong đó:

là giá trị lớn nhất trong ma trận khoảng cách . là giá trị ngưỡng cho cạnh .

ƒ Áp dụng thuật toán Prim [6] với ma trận khoảng cách để xây dựng cây khung.

3.2.5 Mã hóa LNB (Link and Node Biased Encoding)

Mã hóa LNB được đề xuất bởi Palmer và KersheNBaum [30] nhằm giải quyết bài toán OCST. Ý tưởng của phương pháp này là mã hóa các nút và các cạnh trên đồ

64

thị. Mã hóa LNB có thể coi là kết hợp của hai mã hóa NBLB. Như vậy để mã hóa một cây khung bằng phương pháp này, ta cần một vectơ có độ dài bằng sốđỉnh của cây và chỉ ra ngưỡng cho mỗi nút tương ứng. Một ma trận có kích thước bằng kích thước (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Đánh giá hiệu quả của giải thuật di truyền giải bài toán cây khung truyền thông tối ưu với các kỹ thuật mã hóa cây (Trang 54)