1.5.2.Đồ thị đầy đủ ngẫu nhiên

Một phần của tài liệu Các thuật toán gần đúng giải bài toán cây khung với chi phí định tuyến nhỏ nhất (Trang 30)

Chương 1. TỔNG QUAN

1.5.2.Đồ thị đầy đủ ngẫu nhiên

( )

O n     .

Để sử dụng PTAS, trước hết ta cần biến đổi đồ thị ban đầu về đồ thị metric (nội dung của phép biến đổi này là dùng thuật toán Floyd tìm ma trận đường đi ngắn nhất giữa mọi cặp đỉnh), sau khi tìm được lời giải bằng PTAS, ta sẽ biến đổi đồ thị trở lại đồ thị ban đầu. Dễ thấy là để đạt lời giải với chất lượng cao, PTAS sẽ đòi hỏi thời gian rất lớn. Chẳng hạn, với =0.1, n = 10,

PTAS sẽ đòi hỏi thời gian

2 2 2 0.1 (10 ) O    

  = O(1038). Do đó sơ đồ PTAS chưa đáp ứng được yêu cầu ứng dụng thực tế [8,10].

1.3.3.Thuật toán heuristic

Heuristic chỉ những kinh nghiệm riêng biệt để tìm kiếm lời giải cho một bài toán cụ thể nào đó. Heuristic thường tìm được lời giải có chất lượng tốt trong thời gian cho phép nhưng không chắc đó là lời giải tốt nhất.

Trong mục này chúng tôi sẽ trình bày hai thuật toán heuristic giải MRCST gần đây là thuật toán

ADD và thuật toán CAMPOS. Thuật toán ADD chỉ dựa vào thông tin về bậc các đỉnh đồ thị,

còn thuật toán CAMPOS thì khai thác thông tin về bậc của các đỉnh và thông tin về trọng số trên các cạnh của đồ thị.

1.3.3.1.Thuật toán ADD

Thuật toán ADD được đề xuất bởi tác giả Vic Grout vào năm 2005 [41], thuật toán ADD có độ phức tạp O(n log n). Thuật toán ADD bỏ qua yếu tố trọng số trên các cạnh mà chỉ lấy thông tin về bậc các đỉnh làm điều kiện tiên quyết để xây dựng cây khung cần tìm. Ý tưởng này dựa trên giả định rằng cây khung càng có nhiều nút lá thì sẽ có chi phí định tuyến càng nhỏ.

Thuật toán ADD bắt đầu gán cây T bằng một đỉnh u có bậc lớn nhất, sau đó đưa dần các cạnh (u,v) với v chưa thuộc cây T vào cây T. Thuật toán lặp lại các bước sau: Tìm đỉnh u sao cho (d[u] - δ[u]) là lớn nhất với d[u], δ[u] lần lượt là bậc của đỉnh u trong đồ thị G và bậc của đỉnh

u trong cây T. Đưa dần các đỉnh kề với u vào T. Thuật toán dừng khi T có n-1 cạnh.

Để cải thiện chất lượng lời giải của thuật toán ADD, thay vì ở mỗi bước lặp luôn chọn ra đỉnh có bậc lớn nhất, trong luận án chúng tôi đã chọn đỉnh ngẫu nhiên có bậc nằm trong một khoảng lớn nhất µ nào đó và cho thực hiện thuật toán ADD n lần để chọn ra cây khung có chi phí định tuyến nhỏ nhất (nghĩa là thay vì tìm đỉnh u có bậc lớn nhất là max tại thời điểm đó, ta tìm ngẫu nhiên một đỉnh v sao cho |max-d[v]| < µ với µ là một số nguyên dương nhỏ nào đó, d[v] là bậc của đỉnh v). Độ phức tạp của thuật toán ADD khi đó sẽ là O(n2 log n).

Với đồ thị đầy đủ Euclid, thuật toán ADD có độ phức tạp O(n), khi đó các cạnh của cây khung tìm được có chung một đỉnh.

Đóng góp chính của thuật toán ADD là đưa ra một lời giải gần đúng có thời gian tính tốt nhất trên loại đồ thị đồng nhất có số đỉnh không lớn (đồ thị có kích thước càng lớn thì thuật toán

ADD cho kết quả càng tồi hơn). Thuật toán ADD cho chất lượng lời giải tốt hơn các thuật toán Prim, Kruskal khi giải bài toán MRCST [33]. So với các thuật toán khác được khảo sát trong

luận án, thuật toán ADD cho chất lượng lời giải tồi nhất hầu như trên toàn bộ dữ liệu thực nghiệm chuẩn.

1.3.3.2.Thuật toán CAMPOS

Thuật toán CAMPOS được đề xuất bởi nhóm tác giả Rui Campos và Manuel Ricardo vào năm 2008 [33], thuật toán CAMPOS có độ phức tạp O(m + n log n). Thuật toán CAMPOS chọn dần

từng cạnh của đồ thị để xây dựng cây khung cần tìm bằng cách kết hợp ý tưởng của các thuật toán ADD, Dijkstra và Prim - trong đó lấy thuật toán Prim làm cơ sở [33].

Thuật toán CAMPOS cho chất lượng lời giải tốt hơn so với thuật toán WONG ở loại đồ thị đầy đủ Euclid – đây là đóng góp quan trọng nhất của thuật toán CAMPOS trong lịch sử giải quyết bài toán MRCST. Chi phí định tuyến tìm được từ thuật toán CAMPOS chỉ bằng khoảng 79% so với chi phí định tuyến của thuật toán định tuyến chuẩn IEEE 802.1D [33]. Việc thuật toán

CAMPOS tốt hơn thuật toán WONG ở loại đồ thị đầy đủ Euclid có ý nghĩa quan trọng, đặc biệt

là trong các mạng viễn thông di động, nơi mà cấu trúc của các mạng thường xuyên thay đổi và cần phải có một cơ chế hiệu quả để tìm MRCST mới trong thời gian nhanh nhất mặc dù có thể chấp nhận một mức chi phí nhiều hơn.

Các thuật toán tìm cây khung nhỏ nhất như Prim, Kruskal cho chất lượng lời giải tồi hơn so với các thuật toán CAMPOS và ADD trong việc giải bài toán MRCST [33]; do đó luận án không đề cập đến các thuật toán Prim, Kruskal trong việc giải bài toán MRCST.

Các thuật toán WONG, ADD, CAMPOS với độ phức tạp lần lượt là O(nm + n2 log n), O(n log

n), O(m + n log n); đây được xem là các thuật toán nhanh nhất trong tất các thuật toán hiện biết

giải bài toán MRCST.

1.3.4.Thuật toán metaheuristic

Thuật toán metaheuristic chỉ những sơ đồ chung; những chiến lược tìm kiếm có kết hợp các kỹ thuật phụ trợ nhằm khai phá hiệu quả không gian tìm kiếm [43,44].

Các thuật toán metaheuristic có thể được phân làm hai nhóm: Các thuật toán metaheuristic dạng cá thể, chẳng hạn như các thuật toán Hill Climber Search Algorithm, Simulated Annealing Algorithm, Tabu Search Algorithm,… và các thuật toán metaheuristic dạng quần thể, chẳng hạn

như Genetic Algorithm, Bee Algorithm, Particle Swarm Optimization Algorithm, Ant Algorithm,…..

Các thuật toán metaheuristic có hai thành phần quan trọng đó là tính tăng cường hóa (intensification) và tính đa dạng hóa (diversification).

Tăng cường hóa nhằm mục đích khai thác sát sâu hơn các vùng không gian lời giải tiềm năng để hy vọng tìm được lời giải có chất lượng tốt hơn; tăng cường hóa thể hiện qua việc sử dụng chiến lược tìm kiếm địa phương. Nếu tính tăng cường quá cao, nó có thể nảy sinh vấn đề hội tụ sớm; các lời giải tối ưu cục bộ tìm được có độ lệch cao hoặc vô nghĩa. Ngược lại, nếu tính tăng cường quá thấp, quá trình hội tụ sẽ chậm.

Đa dạng hóa nhằm khai phá những vùng không gian tìm kiếm mới để tránh việc tìm kiếm rơi vào ngỏ cụt; đa dạng hóa thể hiện qua việc sử dụng tính ngẫu nhiên và có thể kết hợp với một số heuristic đặc thù cho từng bài toán. Nếu tính đa dạng quá cao thì sẽ có nhiều vùng trong không gian lời giải được khai phá ngẫu nhiên, theo đó sẽ làm chậm quá trình hội tụ của thuật toán. Nếu tính đa dạng quá thấp thì không gian lời giải được khai phá bị giới hạn, các lời giải tìm được có khuynh hướng hội tụ cục bộ hoặc vô nghĩa. Thời điểm để sử dụng chiến lược đa dạng hóa cũng là yếu tố quan trọng: thứ nhất, được sử dụng khi khởi tạo quần thể ban đầu – cho dù đó là thuật toán dạng duy trì một cá thể hay dạng duy trì một quần thể (được khởi tạo ngẫu nhiên); thứ hai, được sử dụng khi chiến lược tăng cường hóa đã không còn tác dụng nữa (nghĩa là sau một số lần lặp, chiến lược tăng cường hóa không cải thiện được lời giải); thứ ba, được sử dụng trong quá trình tìm kiếm lời giải thông qua việc sử dụng tính ngẫu nhiên (khác với hai trường hợp trên).

Hiệu quả của các thuật toán metaheuristic phụ thuộc vào cách thức sử dụng hai chiến lược tăng cường hóa và đa dạng hóa trong từng thuật toán cụ thể; hai chiến lược này thường được sử dụng đan xen nhau. Việc tận dụng tốt tổ hợp giữa chúng chính là chìa khóa thành công cho mọi thuật toán metaheuristic (nếu một thuật toán metaheuristic là đơn giản thì metaheuristic đó cũng có thể được xem là một heuristic).

1.3.4.1.Một số nghiên cứu liên quan đến bài toán MRCST

Mục này trình bày vấn đề mã hóa cây khung, cách thức tạo lời giải ban đầu, điều kiện dừng của các thuật toán metaheuristic, sơ đồ thuật toán tìm kiếm địa phương.

Mã hóa cây khung

Cách thức mã hóa cây khung có ảnh hưởng lớn đến chất lượng của thuật toán tương ứng giải bài toán MRCST. Một phương pháp mã hóa cây khung được xem là hiệu quả nếu nó thỏa mãn được các tiêu chí: tận dụng được những tính chất đặc trưng của cây khung, quá trình mã hóa và giải mã cây khung có thể thực hiện hiệu quả, thời gian để xử lý các phép toán liên quan trên cây khung cũng như không gian để lưu trữ các cây khung là hợp lý [22,26,35].

Hiện có ba phương pháp mã hoá cây khung thường được sử dụng: mã hóa dạng chuỗi số Prüfer (Prüfer encoding), mã hóa dạng đỉnh (node-based encoding) và mã hóa dạng cạnh (edge-based encoding).

Mã hóa Prüfer

Prüfer xây dựng cách biểu diễn một cây khung có n đỉnh bằng một dãy Prüfer là một chỉnh hợp lặp chập n2 từ các số 1, 2,..., n. Mã hóa và giải mã Prüfer là hai phép toán đảo ngược nhau, nghĩa là có một tương ứng một - một giữa một cây có nhãn gồm n đỉnh với một dãy Prüfer độ dài n–2 [10].

Mã hóa dạng đỉnh

Cho cây khung T với các đỉnh được đánh số bởi 1, 2, …, n. Ta mã hóa cây khung bởi dãy (p2,

p3, …, pn) gồm n 1 số nguyên trong phạm vi từ 1 đến n, trong đó pk là chỉ số của đỉnh được nối với đỉnh k, k =2, 3, …, n.

Mã hóa dạng cạnh

Các cạnh của đồ thị được đánh số từ 1 đến m. Mỗi cây khung được mã hóa thành một chuỗi gồm n 1 số nguyên, trong đó mỗi số nguyên là chỉ số của một cạnh của đồ thị tham gia vào

cây khung.

Tạo lời giải ban đầu

Mục này trình bày các cách thức tạo lời giải ban đầu.

Tạo lời giải ban đầu bằng thuật toán tìm cây đường đi ngắn nhất (SPT)

Mỗi cá thể cây khung là một cây đường đi ngắn nhất có gốc xuất phát tại một đỉnh nào đó của đồ thị (Algorithm 1.2). Thuật toán này cho phép tạo ra các cá thể cây khung với chi phí tương đối tốt ở mọi loại đồ thị, tuy nhiên khi đó số lượng cây khung được tạo không vượt quá số đỉnh của đồ thị. Với các thuật toán metaheuristic giải bài toán MRCST mà chỉ cần một lần chạy hoặc một số ít lần chạy thì lời giải ban đầu nên được khởi tạo bằng thuật toán SPT.

Tạo lời giải ban đầu bằng thuật toán tựa Prim

Mỗi cá thể cây khung được tạo theo dựa thuật toán Prim [2,32] như sau: Bắt đầu từ cây chỉ gồm một đỉnh nào đó của đồ thị, tiếp theo, thuật toán sẽ thực hiện n-1 bước lặp. Ở mỗi bước lặp, trong số các đỉnh chưa được chọn để tham gia vào cây, ta chọn một đỉnh kề với ít nhất một đỉnh nằm trong cây đang được xây dựng mà không quan tâm đến trọng số của cạnh. Đỉnh được chọn và cạnh nối nó với đỉnh của cây đang được xây dựng sẽ được bổ sung vào cây. Thuật toán này được đặt tên là LikePrim.

Thuật toán 1.4 dưới đây cho phép tạo một cá thể cây khung bằng thuật toán LikePrim.

Algorithm 1.4. Thuật toán tạo một cây khung ngẫu nhiên

LikePrim (V,E)

Đầu vào: Đồ thị G=(V(G),E(G))

Đầu ra: Trả lại cây khung ngẫu nhiên T=(V(T),E(T)) 1. Chọn ngẫu nhiên đỉnh u  V(G);

2. V(T) = {u};

3. E(T) = ;

4. while (|V(T)| < n) {

5. Chọn ngẫu nhiên đỉnh v  V(G) – V(T) sao cho v có kề với một đỉnh z  V(T); 6. V(T)= V(T)  {v};

7. E(T)= E(T)  {(v, z)}; 8. }

9. return cây khung T;

Thuật toán LikePrim được sử dụng đối với bước khởi tạo cá thể/quần thể ban đầu cho các thuật toán heuristic, metaheuristic giải bài toán MRCST. Ưu điểm của thuật toán LikePrim so với thuật toán SPT trong việc tạo lời giải ban đầu là sự đa dạng của các cạnh trong các cây khung được hình thành. Chất lượng quần thể ban đầu được tạo bởi thuật toán LikePrim dù không tốt bằng của thuật toán SPT, tuy nhiên sau quá trình tiến hóa, quần thể ban đầu được khởi tạo bằng thuật toán LikePrim thường sẽ cho chất lượng lời giải tốt hơn.

Điều kiện dừng của các thuật toán metaheuristic

Các thuật toán metaheuristic thường sử dụng các điều kiện dừng sau:

 Lời giải tốt nhất tìm được (kỷ lục) của bài toán không được cải thiện qua một số lần lặp định trước (thường là một hàm theo kích cỡ của dữ liệu đầu vào).

 Số lần lặp của thuật toán đạt đến một giá trị định trước (thường được xác định từ thực nghiệm). Đây là điều kiện dừng mà chúng tôi sử dụng cho các thuật toán đề xuất trong các chương 3,4,5 của luận án.

 Lời giải tốt nhất tìm được đã đạt ngưỡng chấp nhận định trước.

Tiếp theo luận án sẽ trình bày các thuật toán metaheuristic gần đây giải bài toán MRCST theo thứ tự: các thuật toán di truyền, các thuật toán tìm kiếm địa phương, các thuật toán bầy ong.

1.3.4.2.Thuật toán di truyền ESCGA

Thuật toán di truyền mã hóa cây khung bằng danh sách cạnh ESCGA của tác giả Bryant A. Julstrom được đề xuất vào năm 2005 [11]. ESCGA khởi tạo quần thể ban đầu bằng các cây khung ngẫu nhiên.

Trong thuật toán ESCGA, phép lai được thực hiện dựa theo ý tưởng của thuật toán Kruskal: Đầu tiên đưa các cạnh (gen) có xuất hiện ở cả hai cây khung (nhiễm sắc thể) cha mẹ để tạo thành một cá thể con, khi đó cá thể con gồm một hoặc nhiều thành phần liên thông. Tiếp theo đưa dần từng cạnh từ các cá thể cha mẹ vào cá thể con này sao cho cạnh mới đưa vào không tạo thành chu trình với các cạnh đã được chọn trước đó cho đến khi cá thể con đang xây dựng có đủ n-1 cạnh. Để thực hiện hiệu quả phép lai, ESCGA tìm kiếm cạnh chung của cha mẹ bằng cách sắp xếp tập cạnh trong các cá thể cha mẹ và kiểm tra việc tạo chu trình trong cá thể con bằng việc sử dụng kỹ thuật union-find. Phép lai hai cá thể của ESCGA có độ phức tạp O(n log

n). Phép đột biến được thực hiện bằng cách thay thế một số gen của cá thể cha mẹ bằng một số

gen khác. Phép đột biến một gen của ESCGA có độ phức tạp O(n). Phép chọn được thực hiện theo kiểu chọn tournament với k=2 (chọn ngẫu nhiên từng cặp cá thể và chọn cá thể có độ thích nghi cao hơn).

Thuật toán ESCGA ấn định các tham số: Kích thước quần thể N là 40 n, Số thế hệ là 250 n- 1 (tương ứng có khoảng 10000n cá thể sẽ được đánh giá ở tất cả các thế hệ), xác suất lai pc= 0.80, xác suất đột biến pm=2/n. Vậy ESCGA đòi hỏi thời gian tính cỡ 10000n × n log n = 10000n2

log n đối với mỗi bộ dữ liệu.

1.3.4.3.Thuật toán di truyền BCGA

Thuật toán di truyền mã hóa cây khung bằng dãy số Prüfer BCGA của tác giả Bryant A. Julstrom

được đề xuất vào năm 2005 [11]. BCGA cũng khởi tạo quần thể ban đầu bằng các cây khung ngẫu nhiên.

BCGA sử dụng phép lai hai điểm, sử dụng phép đột biến tráo đổi giá trị của hai biến ngẫu nhiên

trong dãy số Prüfer. Phép lai có độ phức tạp O(n), phép đột biến có độ phức tạp O(1), phép giải mã dãy Prüfer thành cây khung tương ứng có độ phức tạp là O(n2). BCGA cũng thực hiện phép

chọn và ấn định các giá trị tham số thực nghiệm như thuật toán ESCGA; riêng xác suất lai, thuật

toán BCGA chọn là pc= 0.60. Vậy BCGA đòi hỏi thời gian tính cỡ 10000n × n = 10000n2 đối với mỗi bộ dữ liệu.

1.3.4.4.Thuật toán Stochastic Hill Climber (SHC)

Trước khi trình bày về các thuật toán SHC, PBLS giải bài toán MRCST; luận án trình bày về sơ đồ của thuật toán tìm kiếm địa phương; đây là thủ tục quan trọng trong sơ đồ của các thuật toán metaheuristic giải bài toán MRCST. Thuật toán tìm kiếm địa phương lặp thực hiện việc di

chuyển từ một lời giải S đến một lời giải mới S’ trong một cấu trúc lân cận xác định trước. Sơ đồ tổng quát của thủ tục tìm kiếm lân cận được mô tả như sau [3,42]:

Bước 1: Khởi tạo. Chọn lời giải xuất phát S, tính giá trị hàm mục tiêu F(S).

Bước 2. Sinh lân cận. Chọn tập lân cận N(S) và tìm lời giải S’ trong tập lân cận này với giá trị

hàm mục tiêu F(S’).

Bước 3.Test chấp nhận. Kiểm tra xem có chấp nhận di chuyển từ S sang S’. Nếu chấp nhận thì

Một phần của tài liệu Các thuật toán gần đúng giải bài toán cây khung với chi phí định tuyến nhỏ nhất (Trang 30)

Tải bản đầy đủ (PDF)

(143 trang)