2. BÀI TOÁN CÂY STEINER
2.6. Các thuật toán giải đúng
Như trình bày trong các mục ở trên, bài toán cây Steiner trên đồ thị thuộc lớp NP-khó. Các thuật toán giải chính xác hiện biết đều chưa thể đạt tới thời gian đa
thức. Mục này trình bày hai thuật toán giải đúng bài toán cây Steiner. Đầu tiên là thuật toán quy hoạch động của Dreyfus và Wagner [4].
2.6.1. Thuật toán Dreyfus-Wagner
Cho đồ thị vô hướng liên thông G = (V, E), T là tập đỉnh kết thúc của đồ thị. (G, c, T) là một thể hiện của bài toán, với mọi tập U ⊆ T và x ∈ V(G)\U, ta định nghĩa:
với S1 là cây Steiner phủ tập U trong G,
với S2 là cây Steiner phủ tập U∪ {x} trong G có lá là các phần tử của U.
Khi đó với mọi U ⊆ V(G), |U| ≥ 2 và x ∈ V(G) \ U ta có:
distG(x, y) là chiều dài đường đi ngắn nhất giữa cặp đỉnh x, y trong G.
Chứng minh:
(a) Mọi cây Steiner S phủ tập U ∪ {x} có các nút lá là phần tử của U đều có thể tách thành hai cây con, mỗi cây con đều chứa x và chứa ít nhất một phần tử của U. Như vậy (a) được chứng minh.
(b) Xét cây Steiner nhỏ nhất S phủ tập U ∪ {x}. Ký hiệu degs(x) là bậc trong S
của nút x. Nếu degs(x) ≥ 2 thì S có thể tách theo x thành hai cây Steiner nhỏ nhất Nếu degs(x)=1, gọi y là nút thuộc U gần x nhất trong S hoặc nút có degs(y) ≥ 3. Với trường hợp y∈U
nếu degs(y) ≥ 3
Như vậy, giá trị nhỏ nhất của ba trường hợp trên sẽ được tính trong (b). Từ công thức đệ quy trên, chúng ta thu được thuật toán quy hoạch động sau: in Đồ thị vô hướng liên thông G, trọng số c và tập đỉnh kết thúc T. out Trọng số p(T) của cây Steiner nhỏ nhất phủ tập T của đồ thị G.
1 BEGIN
2 Nếu |T| ≤ 1 thì p(T) = 0, kết thúc thuật toán;
3 Tính distG(x,y) và đặt p(x,y) = distG(x,y) cho mọi x, y; 4 for k=2 to |T|-1
5 for (U ⊆ T, |U|=k) và (x∈V(G)\U)
7 endfor;
8 for (U ⊆ T, |U|=k) và (x∈V(G)\U) 9 Tính p(U∪{x}) theo công thức (b);
10 endfor;
11 endfor; 12 Trả về p(T);
13 END
Thuật toán Dreyfus-Wagner tính cây Steiner nhỏ nhất có độ phức tạp là O(3tn +
2tn2 + n3) với t = | T | và n = |V(G)|.
Chứng minh:
Bước 2 của thuật toán tính trong thời gian O(n3) bằng cách áp dụng thuật toán đường đi ngắn nhất giữa các cặp đỉnh. Công thức đệ quy ở bước 4 tính mất O(3t) vì có 3t khả năng chia T thành U’, U \ U’ và T \ U. Công thức 5 cần thời gian là
O(n22t). Các công thức 4 và 5 lặp O(n) lần, ta rút ra được đpcm. ■
2.6.2. Mô hình quy hoạch nguyên cho SPG
Bản thân bài toán cây Steiner trên đồ thị là bài toán tối ưu tổ hợp, do vậy nó có thể xây dựng mô hình quy hoạch tuyến tính nguyên cho bài toán và áp dụng các phương pháp giải quy hoạch tuyến tính nguyên để tìm phương án tối ưu.
Cây Steiner có thể được biểu diễn bởi một biến vector nhị phân x = (xe)|E|. Vector x có | E | thành phần, mỗi thành phần tương ứng với một cạnh của G, giá trị của thành phần xe là 1 hoặc 0 phụ thuộc cạnh e có mặt trong cây Steiner hay không. Trọng số của cạnh e ký hiệu là ce.
Bài toán cây Steiner trên đồ thị có mô hình toán học như sau:
(ILP)
Trong đó δ(M) là lát cắt đồ thị bởi tập M ⊂V, tức δ(M) là tập các cạnh có một đầu mút thuộc M, đầu mút còn lại thuộc tập N \ M:
.
Dễ thấy có sự tương ứng một-một giữa cây Steiner trong G với vector nhị phân thỏa mãn (i). Nên việc giải bài toán cây Steiner có thể quy về giải bài toán quy hoạch (ILP).
2.6.3. Một số hướng tiếp cận khác
Phần cuối của chương đề cập đến một hướng khác để tìm lời giải gần tối ưu cho bài toán cây Steiner. Đó là các kỹ thuật tìm kiếm metaheuristic có hướng dẫn trong không gian lời giải, có thể gọi là kỹ thuật tìm kiếm heuristic nâng cao. Trong thực tế, các kỹ thuật metaheuristic thường được sử dụng để giải các bài toán tối ưu tổ hợp. Chúng không được đảm bảo về mặt lý thuyết là có thể đưa ra lời giải tối ưu, nhưng qua những thử nghiệm thực tế, kết quả mà các phép tìm kiếm metaheuristic mang lại rất khả quan. Một số kỹ thuật tìm kiếm metaheuristic :
• Thuật toán di truyền [7, 8, 9, 12]
• Tìm kiếm Tabu [27]
• GRASP (Greedy Random Adaptive Search Procedures) [16, 17]
Hiện nay cả ba kỹ thuật này đều đã được áp dụng để giải bài toán cây Steiner. Đây là các kỹ thuật tìm kiếm tối ưu cục bộ nhưng thực hiện lặp nhiều lần trong toàn bộ không gian. Trong phần tiếp theo của đồ án sẽ trình bày thuật toán di truyền áp dụng vào giải bài toán cây Steiner trên đồ thị.
CHƯƠNG 2
GIẢI THUẬT DI TRUYỀN
Giải thuật di truyền (Genentic Algorithm-GA) là một phần của tính toán tiến hóa (Evolutionary Computing), một lĩnh vực đang phát triển rất nhanh của Trí tuệ nhân tạo.
Như đã biết, GA được lấy cảm hứng từ học thuyết của Darwin về sự tiến hóa. Nói một cách đơn giản thì bài toán được giải quyết bằng quá trình tiến hóa đưa ra kết quả tốt nhất hay cá thể khỏe nhất. Hiểu theo cách khác, lời giải được tiến hóa.
GA mô phỏng quá trình tiến hóa tự nhiên: Kế thừa và đấu tranh sinh tồn để cải tiến các thế hệ và khảo sát không gian lời giải. GA thường được dùng trong các bài toán tối ưu, hay lớp các bài toán NP_khó, đó là lớp bài toán rất hay nhưng thường rất khó tìm ra lời giải tối ưu với các giải thuật cổ điển vét cạn trong không gian tìm kiếm.