Mô tả giải thuật di truyền theo mã hóa tập cạnh

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 95)

- LNB )

3.6.4Mô tả giải thuật di truyền theo mã hóa tập cạnh

Sử dụng giá trị thích nghi của cá thể chính là giá cây khung; phương pháp chọn lọc cá thể theo trận đấu (k = 2) và các tham số xác suất pc, pm, giải thuật di truyền theo phương pháp mã hóa mã hóa tập cạnh có thể được mô tả như sau:

Bƣớc 1: Khởi tạo quần thể gồm N cá thể hợp lệ theo mã hóa tập cạnh.

Bƣớc 2: Tính độ thích nghi cho mỗi cá thể trong quần thể.

Bƣớc 3: Tạo quần thể mới bằng cách lặp lại các bước sau cho đến khi quần thể mới hoàn thành:

 Chọn lọn 02 cá thể theo lựa chọn vòng đấu (k = 2).

 Áp dụng toán tử lai ghép theo mục 3.6.2 với xác suất pc

 Áp dụng toán tử đột biến theo mục 3.6.3 với xác suất pm

 Đưa cá thể mới vào quần thể mới.

Bƣớc 4: Kiểm tra điều kiện dừng. Nếu điều kiện dừng thỏa mãn thì thuật toán kết thúc và trả về lời giải tốt nhất trong quần thể hiện tại; nếu không thực hiện bước tiếp theo.

Bƣớc 5: Quay lại bước 2 với quần thể hiện tại chính là quần thể mới sinh ra trong bước 3.

3.7 So sánh các phƣơng pháp mã hóa cá thể

Một trong những yếu tố cơ bản ảnh hưởng đến hiệu quả của GA trên các cách mã hoá: tính cục bộ và tính dư thừa.

Tính dƣ thừa và thiên kiến

Một trong đặc điểm của phương pháp mã hóa ảnh hưởng đến hiệu quả của giải thuật di truyền đó chính là tính dư thừa. Tính dư thừa được đo bằng độ lệch của kích thước không gian kiểu gen và kiểu hình. Nếu kích thước không gian kiểu gen lớn hơn kích thước không gian kiểu hình thì cách mã hoá đó sẽ gây ra sự dư thừa, tức là một kiểu hình có thể được biểu diễn bởi một số kiểu gen. Nếu các kiểu gen

87

cùng biểu diễn một kiểu hình tương tự nhau thì đó chính là dư thừa đồng nhất; ngược lại chính là dư thừa không đồng nhất.

Cách mã

hoá Biểu diễn Số lƣợng kiểu gen Độ lệch (=SL kiểu hình/SL kiểu gen) Tính chất mã hóa Mã hoá Prufer

Mỗi cây được biểu diễn bởi một chuỗi chiều dài n- 2, mỗi vị trí là một nhãn đỉnh. nn-2 2 1 2    nn n n Không dư thừa, không thiên kiến và tính cục bộ thấp. Mã hoá CV

Mỗi cây được biểu diễn bởi một chuỗi bit có chiều dài n(n-1)/2. 2n(n-1)/2 n n n n n n n n n / ) ln( 3 ) ( log ) ln( 2 2 2 2 / ) 1 ( 2      Dư thừa không đồng nhất, thiên kiến Mã hóa NB

Mỗi cây được biểu diễn bằng một chuỗi thực chiều dài n.  KXĐ Dư thừa đồng nhất, thiên kiến. Mã hóa LB

Mỗi cây được biểu diễn bằng một chuỗi thực chiều dài n(n-1).  KXĐ Tính dư thừa phụ thuộc vào tham số 1 P, thiên kiến. 1 P=0: Dư thừa đồng nhất, không thiên kiến. 1 P  : Dư thừa đồng nhất, thiên kiến Mã hoá LNB

Mỗi cây được

biểu diễn bằng  KXĐ Dư thừa

88 một chuỗi thực chiều dài n(n+1)/2. không thiên kiến nếu P1, P2 chọn hợp lí. P1=1 => cây MST. P2=1 => cây hình sao. Mã hoá NetKey

Mỗi cây được biểu diễn bởi một chuỗi thực có chiều dài n(n- 1)/2.  KXĐ Dư thừa đổng nhất, không thiên kiến Mã hoá EdgeSet

Cây được biểu diễn trực tiếp bằng tập cạnh. 2  n n 1 Không dư thừa, không thiên kiến

Bảng 3.1. Bảng đánh giá về tính dư thừa trong các cách mã hoá

Dựa vào bảng đáng giá tính dư thừa trong từng cách mã hóa thì:

Mã hóa CV có tính dư thừa không đồng nhất, thiên kiến nên GA sử dụng mã hóa CV chỉ có thể đạt được kết quả tốt đối với các bộ dữ liệu nhỏ; không thể đạt được kết quả tốt đối với các bộ dữ liệu lớn. Tuy nhiên, ngay cả đối với các bộ dữ liệu nhỏ thì số thệ hệ để đạt được kết quả tốt nhất là khá lớn.

Mã hóa LB là mã hóa dư thừa đồng nhất và thiên kiến (P1 1). Các cá thể trong GA sử dụng mã hóa LB thiên kiến trở thành MST. Tuy nhiên nếu giá trị khoảng cách đều bằng nhau thì cá thể trong GA sử dụng mã hóa LB thiên kiến trở thành cây hình sao. Điều này đã được chứng minh thông qua bộ dữ liệu Berry35u, mã hóa LB cho kết quả tốt hơn hẳn so với các phương pháp mã hóa khác. (adsbygoogle = window.adsbygoogle || []).push({});

Mã hóa NB là mã hóa dư thừa đồng nhất và thiên kiến. Do đó GA sử dụng mã hóa NB phụ thuộc vào cấu trúc của cây khung tối ưu. Mặt khác Palmer (1994) chỉ ra rằng mã hóa NB không thể biểu diễn tất cả các cây khung mà chỉ biểu diễn một phần nhỏ của không gian lời giải và có thiên kiến trở thành cây hình sao hoặc

89

MST. Điều này được chính minh qua bộ dữ liệu Palmer24. Bộ dữ liệu Palmer có giá trị khoảng cách giữa giá trị tối ưu và cây khung MST, cây hình sao: dm t opts , 12 và

,

min(dstar opt) 17 khá lớn nên kết quả của mã hóa NB không tốt bằng các phương pháp mã hóa còn lại.

Mã hóa LNB là mã hóa dư thừa đồng nhất, không thiên kiến nếu các giá trị P1, P2 chọn hợp lí. Tuy nhiên với P1 1 và P2 1, thì các cá thể trong GA sử dụng mã hóa LNB thiên kiến thành cây khung hình sao. Bình thường, giá trị tốt nhất của

GA sử dụng mã hóa LNB sẽ thuộc khoảng của giá trị tốt nhất của GA sử dụng mã hóa NB và giá trị tốt nhất của GA sử dụng mã hóa LB. Tuy nhiên đối với bộ dữ liệu Berry35, giá trị min(dstar opt, )30 khá lớn nên giá trị tốt nhất của mã hóa LNB lớn hơn hẳn so với mã hóa NB và mã hóa LB.

Mã hóa NetKey là mã hóa dư thừa đồng nhất, không thiên kiến nên các cá thể của GA sử dụng mã hóa NetKey không phụ thuộc vào cấu trúc của cây khung tối ưu. Do đó, phương pháp mã hóa NetKey cho kết quả khá tốt trong tất cả các bộ dữ liệu so với các phương pháp mã hóa khác.

Tính cục bộ

Tính cục bộ chính là tính chất phân phối lân cận kiểu hình tương ứng với lân cận kiều gen. Tính cục bộ thể hiện tính hiệu quả của GA.

Tính cục bộ sẽ ảnh hưởng cả mức độ dư thừa và sự thiên kiến của phương pháp mã hoá. Sự thiên kiến heuristic cũng ảnh hưởng tới tính cục bộ.

Mã hoá Prufer sẽ có tính cục bộ thấp nên quá trình tìm kiếm tương tự như quá trình tìm kiếm ngẫu nhiên. Do đó GA sử dụng mã hóa Prufer cho kết quả không tốt ngay đối với bộ dữ liệu nhỏ (thực nghiệm đã chứng minh).

Mã hóa EgdeSet không heuristic có tính cục bộ cao nên các thao tác di truyền có xu hướng tạo ra các cá thể giống nhau hoặc gần giống nhau. Và cuối cùng là khi số thế hệ tăng dần lên thì việc quần thể bị lấp đầy bởi những cá thể giống nhau cũng tăng lên. Như vậy không gian tìm kiếm cũng bị thu hẹp lai. Điều này thể hiện giá trị tốt nhất phụ thuộc rất lớn vào quần thể khởi tạo. Do quá trình khởi tạo

90

GA sử dụng mã hóa EdgeSet không thiên kiến heuristic nên giá trị tốt nhất là khá lớn so với các phương pháp khác; nhưng độ lệch chuẩn nhỏ hơn so với các phương pháp khác.

91

CHƢƠNG 4. KẾT QUẢ THỰC NGHIỆM

4.1 Môi trƣờng thực nghiệm 4.1.1 Dữ liệu thực nghiệm

Hiện nay, có khá nhiều bộ dữ liệu thực nghiệm cho bài toán cây khung truyền thông tối ưu. Một trong số các bộ dữ liệu đầu tiên được Palmer đề xuất với kích thước đỉnh lần lượt 6, 12, 24, 47 và 98 (Palmer 1994). Trong các bộ dữ liệu này, giá trị của hàm yêu cầu tỷ lệ nghịch với giá trị khoảng cách. Do bộ dữ liệu 47 và 98 đỉnh không được sử dụng trong thời gian gần đây nên luận văn chỉ sử dụng bộ dữ liệu với Palmer6, Palmer12 và Palmer24.

Bên cạnh bộ dữ liệu của Palmer, Raidl (2001) cũng đề xuất các bộ dữ liệu cho bài toán OCST với số đỉnh từ 10 đến 100. Giá trị của hàm yêu cầu và khoảng cách các đỉnh được sinh ngẫu nhiên. Luận văn sử dụng bộ dữ liệu Raidl10 và Raidl20 với số đỉnh tương ứng 10 và 20 đỉnh.

Ngoài ra, Berry (1995) cũng đưa ra 03 bộ dữ liệu cho bài toán OCST- một bộ dữ liệu với 06 đỉnh và 02 bộ dữ liệu với 35 đỉnh. Cả 2 bộ dữ liệu 35 đỉnh đều sử dụng chung hàm yêu cầu, chỉ khác nhau về ma trận khoảng cách. Luận văn sử dụng 3 bộ dữ liệu Berry6, Berry35 và Berry35u.

Xuất phát từ bài toán giao thông thực tế của Đức, Rothfaul xây dựng các 04 bộ dữ liệu cho bài toán OCST. Trong đó, bộ dữ liệu Rothfaul1 gồm 16 đỉnh và bộ dữ liệu Rothfaul2 gồm 15 đỉnh. Các đỉnh được cung cấp dưới dạng tọa độ và ma trận khoảng cách sẽ được tính theo khoảng cách Euclide. Đối với bộ dữ liệu Rothfaul1, ma trận nhu cầu chỉ bao gồm các cạnh có đỉnh 1. Đối với bộ dữ liệu Rothfaul2, một số cạnh được bổ sung so với ma trận nhu cầu của bộ dữ liệu Rothfaul1.

92

Bộ

dữ liệu n

Đặc điểm của các phƣơng án tối ƣu

d(mst,opt) min(d(star,opt)) Giá trị tối ƣu

Palmer6 6 1 2 693180 Palmer12 12 5 7 3428509 Palmer24 24 12 17 1086656 Berry6 6 0 2 534 Berry35u 35 - - 16273 Berry35 35 0 30 16915 Raidl10 10 3 4 53674 Raidl20 20 4 14 157570 Rothfaul1 16 7 9 60883 Rothfaul2 15 4 8 58619

Bảng 4.1. Đặc điểm của các phương án tối ưu

Trong luận văn này, bộ dữ liệu sử dụng lấy trong "Representation for Genetic and Evolutionary Algorithms, Studies on Fuzziness and Soft Computing" của F. Rothlauf (Springer, Berlin, 2002) (adsbygoogle = window.adsbygoogle || []).push({});

Các bộ dữ liệu Palmer, Berry vaf Raidl được lưu trong file có cấu trúc như sau:

 Dòng đầu: số đỉnh của đồ thị (n),  Ma trận trọng số,

 Dòng trắng,

 Ma trận yêu cầu truyền thông.

Bộ dữ liệu Rothfaul được lưu trong file có cấu trúc như sau:  Dòng đầu: số đỉnh của đồ thị (n),

n dòng tiếp theo: mỗi dòng là tọa độ của một đỉnh,  Ma trận yêu cầu truyền thông.

4.1.2 Thông số thực nghiệm

Chương trình được cài đặt bằng ngôn ngữ lập trình Visual Studio C++ 2006. Cấu hình máy tính sử dụng :

93

 CPU: Intel Dual Core Processor 2,40 GHz,  RAM: 2GB,

 Operating System: Window XP Professional i386.

4.1.3 Lựa chọn thông số của các thuật toán

Các phương pháp mã hóa cá thể:  Phương pháp mã hóa vectơ đặc trưng,  Phương pháp mã hóa số Prufer,

 Phương pháp mã hóa thiên kiến cạnh (P11),  Phương pháp mã hóa thiên kiến nút (P2 1),  Phương pháp thiên kiến cạnh và nút (P11;P2 1),  Phương pháp mã hóa NetKey,

 Phương pháp mã hóa tập cạnh không heuristic.  Kích thước quần thể như sau:

Bộ dữ liệu n N Số thế hệ tối đa

Palmer6 6 16 200 Palmer12 12 300 200 Palmer24 24 800 200 Berry6 6 16 200 Berry35u 35 2000 200 Berry35 35 300 200 Raidl10 10 70 200 Raidl20 20 800 200 Rothfaul1 16 300 200 Rothfaul2 15 300 200

Bảng 4.2. Kích thước quần thể sử dụng đối với các bộ dữ liệu

94 o n: số đỉnh.

o N: kích thước quần thể.  Tỷ lệ lai ghép: 80%.

 Tỷ lệ đột biến: 6%.

 Điều kiện dừng: khi độ lệch chuẩn của quần thể hiện tại bằng 0 (các cá thể trong quần thể giống nhau) hoặc số thế hệ hiện tại đạt chỉ số thế hệ tối đa.

4.1.4 Chƣơng trình thực nghiệm

Các chức năng chính của chƣơng trình:

Chương trình được viết bằng ngôn ngữ lập trình Visual Studio C++ 2006. Chương trình thực nghiệm bao gồm các chức năng cơ bản:

Chương trình cho phép đọc dữ liệu từ file và thiết lập tham số số lần thực hiện giải thuật di truyền đối với từng phương pháp mã hóa cá thể.

Bên cạnh đó, chương trình cho phép người sử dụng lựa chọn phương pháp mã hóa cá thể, điều chỉnh kích thước của quần thể và số thế hệ tối đa.

Chương trình cho phép người sử dụng điều chỉnh các thông số di truyền như: phần trăm lai ghép, phần trăm đột biến và giá trị k trong phương pháp chọn lọc cá thể theo trận đấu.

Chương trình hiển thị kết quả tốt nhất và thời gian tương ứng sau mỗi lần thực hiện. Ngoài ra, các giá trị thông số và kết quả tương ứng trong mỗi lần thực hiện sẽ được ghi vào file ở thư mục Result để phục vụ thống kê kết quả.

Chương trình hỗ trợ chức năng tự thoát khỏi hệ điều hành khi chương trình kết thúc. (adsbygoogle = window.adsbygoogle || []).push({});

Các lớp của chƣơng trình:

Chương trình thực nghiệm được phát triển trên ngôn ngữ lập trình hướng đối tượng C++ bao gồm một số lớp cơ bản:

95

Lớp Cpoints

Lớp CPoints bao gồm các thuộc tính và phương thức trên tập đỉnh của đồ thị. Mỗi một tập đỉnh của đồ thị sẽ được xử lý bằng lớp này. Lớp gồm 2 thuộc tính là:

+ int m_iNumVertice: số đỉnh của đồ thị.

+ Point m_pptSetVertices[]: tập các đỉnh của đồ thị, là một mảng gồm Num_Vert đỉnh, mỗi đỉnh có kiếu dữ liệu là point.

Các phương thức trên lớp gồm:

+ void CPoints::GetEuclideData(CString File_name, int iSet): dữ liệu vào được đọc từ các file trong bộ test, tên file tùy chọn File_name và bộ test thứ mấy trong file _Set. Phương thức lấy số đỉnh từ file lưu vào m_iNumVertice, lưu các đỉnh vào mảng m_pptSetVertices với các phần tử có kiểu là point. Phương thức này áp dụng đối với bộ dữ liệu Rothfaul1 và Rothfaul2.

+ void CPoints::GetNonEuclideData(CString File_name, int iSet): tương tự với phương thức GetEuclideData, các giá trị của ma trận khoảng cách và ma trận nhu cầu được đọc trực tiếp từ file.

+ double CPoints::Distance(int i, int j): phương thức tính khoảng các Euclide giữa hai đỉnh bất kỳ của đồ thị. Hàm trả về một số thực chính là khoảng cách đó.

Lớp CBDSpanning Trees

Lớp CBDSpanningTree bao gồm các thuộc tính và phương thức trên cây khung của một đồ thị G. Như đã nói, đồ thị G ở đây ta chỉ xét đến đồ thị Euclide đầy đủ, đặc trưng bởi tập đỉnh có kiểu là CPoints. Các thuộc tính của lớp CBDSpanningTree:

+ CPoints ptsSetVertice: tập đỉnh của cây, là đối tượng của lớp CPoints. + int *parent: tập các cạnh của cây khung mã hóa theo danh sách cạnh. + double dbTreeWeight: trọng số của cây.

96

+ int fitness: giá trị thích nghi của cây trong quần thể.

Các phương thức của lớp để khởi tạo quần thể theo các phương pháp mã hóa cá thể gồm:

void GenerateNetKeys(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa NetKey.

void GenerateNodeBias(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa thiên kiến nút.

void GenerateLinkBias(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa thiên kiến cạnh.

void GenerateNodeLinkBias(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa thiên kiến cạnh và nút.

void GenerateEdgeSet(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa tập cạnh.

void GenerateCharacVetor(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice) : tạo một cá thể theo phương pháp mã hóa vectơ đặc trưng.

void GeneratePruferNumber(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tạo một cá thể theo phương pháp mã hóa số Prufer.

Các phương thức tái tạo và tính giá trị cây khung từ biểu diễn mã hóa tương ứng:

double ConstructingTreeNetKey(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tái tạo và tính giá trị cây khung từ cá thể được mã hóa theo phương pháp NetKey.

97

double ConsAndEvalTreeNodeBias(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tái tạo và tính giá trị cây khung từ cá thể được mã hóa theo phương pháp thiên kiến nút.

double ConsAndEvalTreeLinkBias(double **ppdbDistance, double **g_ppdbDemand, int iNum): tái tạo và tính giá trị cây khung từ cá thể được mã hóa theo phương pháp thiên kiến cạnh.

double ConsAndEvalTreeNodeLinkBias(double **ppdbDistance, double **g_ppdbDemand, int iNum): tái tạo và tính giá trị cây khung từ cá thể được mã hóa theo phương pháp thiên kiến cạnh và nút. (adsbygoogle = window.adsbygoogle || []).push({});

double ConsAndEvalTreeEdgeSet(double **ppdbDistance, double **g_ppdbDemand, int iNumVertice): tái tạo và tính giá trị cây khung từ cá thể được

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 95)