2.1Thuật toán HLNS
Thuật toán HLNS là sự kết hợp giữa thuật toán LNS và GRASP để giải quyết bài toán MWDS. Thuật toán LNS khắc phục nhược điểm của các thuật toán tìm kiếm địa phương với việc bị lặp bởi các chu trình hoặc mắc kẹt tại các nghiệm cục bộ như các thuật toán tìm kiếm địa phương với sự thay đổi nhỏ từ điểm duyệt trước đến điểm duyệt sau. Bên cạnh đó, thuật toán có khả năng nhanh tìm kiếm lời giải tốt hơn các thuật toán tìm kiếm địa phương khác. Do vậy ngay cả trong trường hợp các thuật toán tìm kiếm địa phương kia có sử dụng các kỹ thuật thoát khỏi nghiệm cục bộ. Thuật toán 3 được áp dụng cho bài toán MWDS.
Procedure Thuật toán HLNS
Input Đồ thị G= (V, E) với trọng số W
Begin
1. Khởi tạo lời giải S; // dựa vào thuật toán 2
2. S*← S;
3. while (chưa hết thời gian tìm kiếm) do 4. for i in (1, k) do
5. Si← DEL(S); //xóa ngẫu nhiên phân bố đều dùng thuật toán 3
6. Si ← REPAIR(Si);// tạo ra lời giải hợp lệ
7. end-for
8. S** là lời giải tốt nhất từ S1, …, Sk 9. if (S** tối ưu hơn S*) then
10. S*← S**; 11. end-if 12. S ← S**; 13.end-while;
End;
Thuật Toán 3: Thuật toán HLNS
Thuật toán HLNS sử dụng thuật toán 4 để khởi tạo. Việc khởi tạo không yêu cầu chất lượng lời giải phải quá tốt, chỉ yêu cầu khởi tạo nhanh. Thuật toán sử dụng phép toán DEL_REDUANT nên chất lượng lời giải không quá tệ.
Thuật toán HLNS duyệt trong không gian duyệt theo phương pháp đi đến điểm tốt nhất trong các lời giải được tạo thành sau các phép xóa và sửa. Trong đó, thuật toán phép DEL và REPAIR để tạo ra k lời giải hai lời giải S1, S2, …, Sk tại mỗi bước tìm kiếm của thuật toán. Trong đó, phép DEL xóa các đỉnh một cách ngẫu nhiên với phân bố đều trong tập đỉnh đang xét. Thuật toán REPAIR áp dụng thuật toán GRASP với đầu vào là tập đỉnh chưa phải là tập đỉnh thống trị và thêm vào các đỉnh cho đến khi hợp lệ.
Thuật toán lựa chọn điểm duyệt tiếp theo là lời giải tốt nhất trong số các lời giải S1, S2, …, Sk làm điểm duyệt tiếp theo. Ngoài ra, thuật toán còn có thể mở rộng bằng việc thêm các phép xóa, sửa và kết hợp lại với nhau để có thể tạo nhiều kiểu thành viên hơn, làm cải thiện chất lượng lời giải. Tuy nhiên, trong luận văn này chỉ sử dụng hai phép toán tử xóa DEL, và sửa REPAIR.
2.2Thuật toán khởi tạo cho tập đỉnh thống trị
Thuật toán khởi tạo sử dụng việc thêm đỉnh ngẫu nhiên theo phân bố đều với xác suất𝛾. Giá trị của 𝛾 ∈(0, 1), giá trị càng cao càng nhiều đỉnh được lựa chọn,
giá trị càng thấp càng ít đỉnh được lựa chọn. Sau đó, toán tử REPAIR được sử dụng để thêm vào các đỉnh để tạo ra lời giải hợp lệ.
Procedure Thuật toán khởi tạo
Begin 1. S ←{}; 2. For u in (1, n) do 3. If rand() < 𝛾 then 4. S ←S ∪ {u}; 5. End-if 6. End-for 7. S ← REPAIR(S);
8. Đưa ra lời giải S;
End;
Thuật Toán 4: Thuật toán khởi tạo tập đỉnh
2.3 Các thuật toán xóa các đỉnh trong tập đỉnh thống trị
Thuật toán DEL dùng để xóa các đỉnh trong lời giải S để tạo ra lời giải không chấp nhận được S−. Các phần tử thuộc danh sách S có khả năng bị loại bỏ như nhau với cùng một xác suất delta β. Số lượng ứng viên bị xóa trung bình phụ thuộc vào số lượng phần tử ban đầu trong S và β theo công thức xác định kỳ vọng. Thuật toán có ưu điểm là tạo cơ hội ngang nhau cho tất cả các nhánh có thể được tạo ra từ S. Thuật toán DEL được trình bày trong thuật toán 5.
Procedure Thuât toán xóa đỉnh ngẫu nhiên DEL
Input một tập đỉnh thống trị S Begin 1. S- ← S 2. for (đỉnh u in S) do 3. if rand() < β then 4. S- ← S- / {u}; 5. end-if; 6. end-for; 7. Đưa ra S-; End;
Thuật Toán 5: Thuật toán xóa đỉnh DEL
2.4 Các thuật toán sửa tập đỉnh
Phép toán REPAIR sử dụng lời giải S− làm đầu vào, đây là các lời giải tạo thành do các đỉnh bị xóa từ lời giải chấp nhận được (xem thuật toán 6). Tiếp theo, phép toán sẽ thêm vào các đỉnh để tạo ra lời giải S. Quá trình kết thúc khi S là một tập đỉnh thống trị. Tại mỗi bước thêm đỉnh, thuật toán sẽ chọn đỉnh v một đỉnh tự do để tạo danh sách là các đỉnh kề với đỉnh v là Rv. Hàm G2 sẽ được sử dụng để đánh giá chất lượng của đỉnh trong danh sách Rv. Đỉnh có chất lượng ước lượng lớn nhất trong danh sách Rv được lựa chọn với xác xuất µ, nếu
không danh sách giới hạn RCL gồm (α * kích thước của Rv) đỉnh có chất lượng tốt nhất được được tạo thành, đỉnh được chọn là đỉnh ngẫu nhiên trong RCL.
Procedure Thuật toán thêm đỉnh REPAIR
Input Một tập đỉnh S-
Begin
1. S ← S-
2. while (S chưa phải là một tập đỉnh thống trị) do 3. v ← chọn một đỉnh chưa bị trị
4. Rv ← là các đỉnh kề với v 5. P ← {G2(Rvi) | Rvi ∉ S} 6. if rand() < µ then
7. u ← đỉnh Rvi với P(Rvi) đạt giá trị lớn nhất 8. else
9. RCL ← (α * kích thước của Rv) đỉnh có chất lượng tốt nhất
10. u ← phần tử ngẫu nhiên trong RCL 11. end-if
12. S← S∪ u 13.end-while
14.S ←DEL-REDUNDANT(S); 15.Đưa ra lời giải S;
End;
Thuật Toán 6: Thuật toán thêm đỉnh REPAIR
2.5Các thuật toán xóa bỏ đỉnh dư thừa trong tập đỉnh thống trị
Cuối cùng, thuật toán DEL-REDUNDANT xóa bỏ thành phần dư thừa để cải thiện lời giải (xem thuật toán 7). Thuật toán duyệt lần lượt các đỉnh thống trị trong S, nếu đỉnh đó và các đỉnh kề với nó bị thống trị bởi các đỉnh khác thì đỉnh đó là đỉnh dư thừa, thuật toán sẽ loại bỏ đỉnh đó. Việc loại bỏ các đỉnh dư thừa sẽ cải thiện chất lượng lời giải. Tuy nhiên, chiến thuật toán bỏ khác nhau có thể cải thiện chất lượng tập đỉnh khác nhau, chẳng hạn như việc xóa đỉnh lần lượt
một cách ngẫu nhiên hoặc theo một hàm ước lượng đánh giá nào đó. Bên cạnh đó, các thuật toán xóa bỏ các đỉnh dư thừa có thể được sử dụng phối hợp lẫn nhau để cải thiện chất lượng lời giải, không nhất thiết phải có định một chiến thuật loại bỏ đỉnh dư thừa.
Cụ thể, thuật toán tạo ra một danh sách R các đỉnh có khả năng là đỉnh dư thừa trong tập đỉnh thống trị. Thuật toán sẽ lựa chọn ngẫu nhiên đỉnh trong danh sách R và xóa đỉnh đó trong tập đỉnh thống trị nếu đỉnh đó là đỉnh dư thừa. Thuật toán kết thúc khi danh sách R là danh sách trống rỗng (xem thuật toán 7).
Procedure Thuật toán DEL-REDUNDANT
Input Một tập đỉnh thống trị S
Begin
1.Sopt← S;
2.R ← danh sách các đỉnh có khả năng loại bỏ khỏi S 3.While R không rỗng do
4. u ← đỉnh được chọn ngẫu nhiên trong R 5. if u là đỉnh dư thừa then
6. Sopt← Sopt / {u}; 7. end-if;
8. R ← R / {u} 9.end-for;
10.Đưa ra lời giải Sopt
End;