Giải thuật chi tiết

Một phần của tài liệu Định tuyến đa phát dựa trên bảo trì tối ưu cây khung trong các mạng tự hợp di động (Trang 77)

Giải thuật STM có các bƣớc thực hiện tƣơng tự nhƣ giải thuật OMST cải tiến, điểm khác biệt duy nhất nằm ở thủ tục cập nhật liên kết ngoài tốt nhất và thủ tục MERGE để thiết lập các liên kết mới mở rộng hoặc kết hợp đƣợc.

Để thực hiện thủ tục tìm kiếm liên kết ngoài tốt nhất, mỗi nút lƣu giá trị tốt nhất hiện thời bằng các thông số:

- Min_Weight: Trọng số nhỏ nhất của liên kết ngoài đơn

- Min_Nb: Định danh của nút ngoài có liên kết ngoài đơn có trọng số nhỏ

nhất.

- Min_ID: Định danh của nút trong có liên kết ngoài đơn có trọng số nhỏ

nhất.

- Rmin_Weight: Khoảng cách của liên kết đa phát nhỏ nhất từ nút ngoài

của liên kết ngoài đơn bất kì thuộc “nhánh ảo” của nút hiện tại đến một nút bất kì thuộc nhóm đa phát V’ thuộc “nhánh ảo” đó. Nếu Rmin_Weight bằng -1 có nghĩa là không có liên kết đa phát nào đƣợc tìm thấy trong “nhánh ảo” của nút hiện tại, hay nói cách khác, “nhánh ảo” của nút hiện tại không chứa bất kì nút nào thuộc nhóm đa phát V’.

- Rmin_ID: Định danh của nút trong tạo nên đƣờng dẫn nhỏ nhất

Rmin_Weight. Nếu Rmin_Weight bằng -1, Rmin_ID cũng thiết lập là -1.

5.3.1 Thủ tục LOCAL_FIND

Mỗi nút lựa chọn nút ngoài k của liên kết ngoài tối thiểu cục bộ thỏa mãn các tiêu chí sau:

- Nb_List[k].nb_linkType = Mesh_Link

- Node_map[k] = 0

Kết thúc thủ tục LOCAL_FIND, ở mỗi nút u sẽ lƣu các giá trị tốt nhất nhận đƣợc, gọi nút ngoài của liên kết ngoài tốt nhất là k, thì các thông số hiện tại là:

- Min_Weight: Trọng số từ nút hiện tại đến nút ngoài k.

- Min_Nb: bằng k

- Rmin_Weight: Nếu u thuộc nhóm đa phát V’ thì Rmin_Weight = Min_Weight, ngƣợc lại Rmin_Weight = ∞.

- Rmin_ID: Nếu u thuộc nhóm đa phát V’ thì Rmin_ID = u, ngƣợc lại

Rmin_ID = -1 (nghĩa là không tồn tại).

5.3.2 Thủ tục FOUND

Thủ tục FOUND cố gắng tìm ra liên kết tốt nhất để kết hợp trong số các liên kết đơn và liên kết đƣờng dẫn trong “nhánh ảo” của nút đang thực hiện thủ tục FOUND. Tính chất phân tán của thủ tục đƣợc thể hiện ở đặc điểm: Kết quả tìm đƣợc của mỗi “nhánh ảo” sẽ đƣợc sử dụng lại ở nút cha, không chỉ sử dụng lại các liên kết đơn nhƣ giải thuật OMST mà còn sử dụng đƣợc các liên kết đƣờng dẫn ở mỗi “nhánh ảo” con. Sau mỗi thực hiện FOUND, liên kết tốt nhất tìm đƣợc có thể tăng về độ dài (nếu là liên kết đƣờng dẫn), nhƣng vẫn đảm bảo đó là liên kết ngoài tốt nhất tìm đƣợc tại gốc của mỗi “nhánh ảo”. Quá trình FOUND đi ngƣợc về gốc của cây, đến một lúc nào đó sẽ đƣợc thực hiện tại một nút thuộc nhóm đa phát, lúc đó liên kết tốt nhất tìm đƣợc sẽ trở thành liên kết đa phát. Liên kết đa phát nhỏ nhất đƣợc ƣu tiên lựa chọn để kết hợp. Để thể hiện đƣợc tính chất phân tán cũng nhƣ đảm bảo tính đúng đắn của thủ tục, các thông số tìm kiếm tốt nhất đƣợc lƣu lại nhƣ trình bày ở phần trên là vô cùng cần thiết, nhƣ phần trình bày ngay dƣới đây.

Thủ tục FOUND đƣợc khởi phát từ nút lá, sau khi nút lá nhận đƣợc thông điệp FIND từ nút cha và thực hiện thủ tục LOCAL_FIND. Thông điệp FOUND gửi từ nút con k cho nút cha mang theo 4 thông số tốt nhất, kết quả của thủ tục LOCAL_FIND:

FOUND(Min_Weightk, Min_IDk, Rmin_Weightk, Rmin_IDk).

Mỗi khi nút cha u nhận đƣợc thông báo FOUND từ nút con k sẽ lƣu lại các

giá trị này, gọi tập hợp các giá trị Min_Weightk nhận đƣợc trong thông báo

FOUND là {Min_Weightk}, định nghĩa tƣơng tự cho tập hợp các giá trị

Rmin_Weightk nhận đƣợc trong thông báo FOUND là {Rmin_Weightk}. Sau

khi nhận đƣợc tất cả các thông báo FOUND từ tất cả các nút con thuộc “nhánh ảo” của u, nút u tiến hành xử lí lựa chọn liên kết ngoài tối thiếu:

+ Chọn Rmin_BestWeight = min {Rmin_Weightk}: chọn giá trị nhỏ nhất (adsbygoogle = window.adsbygoogle || []).push({});

trong số các giá trị Rmin_Weight nhận đƣợc từ các thông điệp FOUND.

Với mỗi phần tử k trong tập hợp {Min_Weightk}:

+ Nếu thông báo FOUND từ k có Min_IDk khác Rmin_IDk: Chứng tỏ trong

“nhánh ảo” của k không có liên kết đa phát, lúc này cộng thêm trọng số từ nút

hiện tại u đến nút k vào giá trị Min_Weightk nhận đƣợc để tạo thành các liên kết

đƣờng dẫn mới có một đầu liên kết là u:

Min_Weightk = Nb_List[k]->nb_Weight + Min_Weightk

+ Nếu thông báo FOUND từ k có Min_IDk = Rmin_IDk: Chứng tỏ trong

“nhánh ảo” của k có liên kết đa phát, là liên kết đó là liên kết tốt nhất, u không bổ sung mình vào liên kết này.

Mục đích của việc xử lí tập hợp {Min_Weightk} là bổ sung nút hiện tại vào

đầu các liên kết đƣờng dẫn tốt nhất (mà không phải là kết đa phát) tìm đƣợc tại các “nhánh ảo” con, từ đó lựa chọn ra liên kết đƣờng dẫn tốt nhất tại “nhánh ảo” hiện tại. Thao tác này là quan trọng để trong quá trình gửi ngƣợc kết quả FOUND về nút gốc, các nút thuộc nhóm đa phát V’ sẽ tìm đƣợc liên kết đa phát tốt nhất, đúng theo tiêu chí tìm kiếm của thủ tục FOUND.

Sau khi xử lí mọi phần tử trong tập hợp {Min_Weightk}:

+ Chọn Min_BestWeight = min {Min_Weightk}

+ Chọn Min_BestID = {k sao cho Min_BestWeight = Min_Weightk}

Sau đó nút u tiến hành thủ tục LOCAL_FIND để tìm ra liên kết ngoài cục bộ tốt nhất của mình. Để lựa chọn liên kết ngoài tốt nhất gửi lên cho nút cha, u tiến hành so sánh các giá trị Rmin_BestWeight, Min_BestWeight và giá trị Min_Weight kết quả từ thủ tục LOCAL_FIND, trong đó:

+ Rmin_BestWeight là trọng số của liên kết đa phát tốt nhất tìm đƣợc trên toàn “nhánh ảo”

+ Min_BestWeight là trọng số của liên kết đƣờng dẫn tốt nhất tìm đƣợc trên toàn “nhánh ảo”

+ Min_Weight là trọng số của liên kết đơn tìm đƣợc tại nút u.

Các giá trị này đƣợc so sánh theo thứ tự ƣu tiên (trong trƣờng hợp các giá trị này bằng nhau) sao cho liên kết có giá trị tốt nhất là liên kết đa phát, hoặc nếu liên kết tốt nhất không phải là liên kết đa phát thì liên kết đấy có độ dài đƣờng dẫn (tổng số liên kết) là nhỏ nhất. Kết quả giá trị nhỏ nhất đƣợc xử lí nhƣ sau:

- Nếu giá trị nhỏ nhất là Min_Weight: Chứng tỏ tại nút k có một liên kết ngoài đơn có giá trị tốt hơn tất cả các liên kết ngoài đƣờng dẫn cũng nhƣ liên kết đa phát.

o Nếu u thuộc nhóm đa phát V’: Lúc này liên kết tốt nhất là liên kết

đa phát, nút u gửi thông điệp FOUND cho nút cha có dạng

FOUND(Min_Weight, Min_ID, Min_Weight, Min_ID)

o Nếu u không thuộc nhóm đa phát V’: Liên kết tốt nhất tìm đƣợc

không phải là liên kết đa phát, do đó u lƣu lại liên kết đa phát tốt nhất tìm đƣợc gửi kèm vào thông điệp FOUND gửi cho nút cha có dạng

FOUND(Min_Weight, Min_ID, Rmin_BestWeight, Rmin_BestID)

- Nếu giá trị nhỏ nhất là Min_BestWeight: Trong “nhánh ảo” của u có tồn

tại một liên kết đƣờng dẫn tốt hơn mọi liên kết ngoài đơn của nút u cũng nhƣ các liên kết đa phát (nếu có) trong “nhánh ảo” của u. Nút u lƣu lại kết quả của liên kết đa phát tốt nhất tìm đƣợc, gửi kèm vào thông điệp FOUND cho nút cha có định dạng

FOUND(Min_BestWeight, Min_BestID, Rmin_BestWeight, Rmin_BestID)

- Nếu giá trị nhỏ nhất là Rmin_BestWeight: Chứng tỏ trong “nhánh ảo” của (adsbygoogle = window.adsbygoogle || []).push({});

u có tồn tại một liên kết đa phát tốt hơn mọi liên kết ngoài đơn của nút u cũng nhƣ các liên kết đƣờng dẫn từ u. Lúc đó, nút u lựa chọn kết quả tốt nhất là liên kết đa phát trong “nhánh ảo” của u, gửi thông điệp FOUND cho nút cha có dạng

FOUND(Rmin_BestWeight,Rmin_BestID,Rmin_BestWeight, Rmin_BestID) Tại nút gốc, sau khi nhận đƣợc đủ các thông điệp FOUND từ các nút con, đồng thời thực thi LOCAL_FIND và so sánh các kết quả để tìm đƣợc giá trị nhỏ nhất trong số các thông số Min_BestWeight, Min_Weight và Rmin_BestWeight, nút gốc chọn giá trị ID trong số các giá trị Min_BestID, Min_ID, Rmin_BestID tƣơng ứng từng cặp với giá trị nhỏ nhất trong các thông số đƣợc so sánh ở trên. Giá trị ID này là giá trị đƣợc chọn để tiến hành thủ tục chuyển gốc. Thủ tục chuyển gốc đƣợc cài đặt giống nhƣ thủ tục chuyển gốc của giải thuật OMST gốc. Nút gốc mới sẽ thực hiện quá trình hợp mảnh qua nút Min_Nb của liên kết ngoài đơn nhỏ nhất tìm đƣợc sau thủ tục LOCAL_FIND.

5.3.3 Thủ tục MERGE

Thủ tục MERGE đƣợc gửi đi bởi một nút thuộc một mảnh STM A nào đó. Nhớ lại rằng, các nút không thuộc nhóm đa phát sẽ không chủ động thực hiện mở rộng mảnh mà chờ thông điệp MERGE từ một mảnh STM khác.

Khi nút k nhận đƣợc thông điệp MERGE từ nút v:

- Nếu nút k không thuộc mảnh STM nào, chỉ có khả năng duy nhất k là nút

tự do, không có liên kết Tree_Link hoặc Data_Link với bất kì hàng xóm nào. Khi nhận đƣợc thông điệp MERGE từ nút v, nút k gửi ACCEPT và gia nhập vào cây STM này. Sau khi ACCEPT, liên kết giữa v và k là liên kết Tree_Link đƣợc thiết lập ở cả 2 đầu liên kết.

- Nếu nút k đã thuộc một mảnh STM B khác với A: do liên kết tốt nhất tìm

đƣợc ở mỗi mảnh có thể không phải là liên kết đơn mà là liên kết đƣờng dẫn, do đó 2 mảnh có thể chọn liên kết ngoài khác nhau để kết hợp.

Trong trƣờng hợp này 2 mảnh A và B chọn 2 liên kết ngoài khác nhau, A chọn liên kết a-i (a thuộc A còn i thuộc B), B chọn liên kết b-j (b thuộc B còn j thuộc A):

- Nút a gửi MERGE cho nút i. Nút b gửi MERGE cho nút j

- Nút i nhận đƣợc MERGE sẽ gửi MERGE_ALERT cho nút b, lúc này

đang là gốc mới của mảnh B sau qua trình chuyển gốc. Tƣơng tự nút j cũng gửi MERGE_ALERT cho nút a, lúc này đang là gốc mới của mảnh A sau quá trình chuyển gốc.

- Ở 2 nút a và b đều thực hiện phép so sánh định danh a và b, định danh nào

nhỏ hơn sẽ đƣợc phép thực hiện phép kết hợp.

- Giả sử a < b, lúc này b gửi CANCEL sang cho j, gửi thông báo

MERGE_ACK lại cho nút i. Nút i nhận đƣợc MERGE_ACK từ gốc b, sẽ gửi ACCEPT cho nút A. Hai mảnh đƣợc kết hợp thông qua liên kết a-i, liên kết a-i đƣợc thiết lập là Data_Link. Từ liên kết này, 2 đầu nút sẽ cố gắng xây dựng đƣờng dẫn nối 2 nút thuộc nhóm đa phát lại với nhau (2 nút này có thể không phải là a và i mà là các nút nằm bên trong của mỗi mảnh STM đƣợc kết hợp) bằng cách thiết lập liên kết dọc theo đƣờng dẫn này là liên kết Data_Link. Nhiệm vụ này đƣợc thực hiện bởi thủ tục SET_DATALINK, đƣợc trình bày ở phần sau của chƣơng này.

Nhận xét: Thủ tục MERGE nhƣ trên không đảm bảo hoàn toàn là 2 mảnh A và B đƣợc nối với nhau bằng liên kết đƣờng dẫn nhỏ nhất. Tuy nhiên, thực tế giải thuật OMST gốc cũng không duy trì đƣợc cây khung nhỏ nhất (minimum spanning tree), mà chỉ duy trì cây khung tốt nhất có thể đƣợc tại thời điểm hiện tại, với chi phí thông điệp là thấp nhất. Thủ tục MERGE của giải thuật STM cũng thực hiện điều tƣơng tự, cố gắng xây dựng liên kết đƣờng dẫn tốt nhất cục bộ có thể đƣợc chứ không thể xây dựng liên kết đa phát nhỏ nhất hoàn toàn. Tất nhiên, chi phí thông điệp là nhỏ nhất.

5.3.4 Thủ tục SET_DATALINK

Sau khi thủ tục SET_DATALINK kết thúc, liên kết từ một nút thuộc nhóm đa phát của mảnh A và 1 nút thuộc nhóm đa phát của mảnh B sẽ đƣợc kết nối với nhau thông qua liên kết Data_Link. Gói tin dữ liệu có thể đƣợc chuyển tiếp qua các liên kết này để chuyển từ nút thuộc nhóm đa phát này sang nút khác cũng thuộc nhóm đa phát đó.

Hình 28 dƣới đây mô tả quá trình trƣớc và sau khi thiết lập liên kết Data_Link để minh họa cơ chế tạo đƣờng dẫn nối giữa 2 nút thuộc nhóm đa phát lại với nhau: Nút 1 gửi thông điệp SET_DATALINK dọc theo nút 7 đến nút 1, nút 0, nút 0 thuộc nhóm đa phát sẽ gửi ngƣợc lại cho 7 và 1, thiết lập đƣờng nối này gồm toàn các liên kết Data_Link.

- Sau khi thiết lập liên kết a-i là Data_Link, hai đầu liên kết a và i sẽ

gửi đi thông điệp SET_DATALINK dọc theo các liên kết Tree_Link của mảnh STM tƣơng ứng là A và B.

- Nút k nhận đƣợc thông điệp này từ nút v sẽ thiết lập liên kết từ k đến

v là Data_Link (nếu liên kết này trƣớc đó là Tree_Link)

o Nếu k là nút thuộc nhóm đa phát, nó sẽ chuyển ngƣợc lại

thông điệp SET_DATALINK theo hƣớng vừa nhận đƣợc.

o Nếu k không thuộc nhóm đa phát, nó sẽ tiếp tục chuyển tiếp

thông điệp SET_DATALINK cho các hàng xóm qua các đƣờng liên kết Tree_Link.

7 1 1 1 1 0 2 7 1 1 1 1 0 2 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 26: Trƣớc và sau khi thực hiện thủ tục SET_DATALINK

5.3.5 Thủ tục CANCEL_DATALINK

Thủ tục CANCEL_DATALINK đƣợc gọi khi liên kết bị đứt gãy là liên kết DATA_LINK và đƣợc khởi phát bởi 2 đầu của liên kết bị gãy.

- Nút v nhận đƣợc thông điệp này từ nút u

oNếu nút v thuộc nhóm đa phát, v sẽ gửi DENY_CANCEL dọc

theo liên kết vừa gửi thông điệp.

oNếu nút v không thuộc nhóm đa phát:

 Nếu v vần còn các hàng xóm (khác u) có liên kết

DATA_LINK, v sẽ chuyển tiếp thông điệp này cho các nút đó.

 Ngƣợc lại, v gửi ACCEPT_CANCEL cho nút u

- Nút u nhận đƣợc DENY_CANCEL từ nút v:

o Giữ nguyên liên kết Data_Link từ u đến nút hàng xóm v

- Nút u nhận đƣợc ACCEPT_CANCEL từ nút v:

o Nút u thiết lập liên kết từ u đến v là Tree_Link

- Sau khi nhận đủ các thông điệp ACCEPT hoặc DENY từ các hàng

xóm, nếu u không còn ít nhất 2 liên kết Data_Link đến nút hàng xóm, thì u chuyển tiếp ACCEPT_CANCEL ngƣợc lên nút cha, cứ tiếp tục nhƣ vậy cho đến đầu liên kết đã phát động thủ tục CANCEL_DATALINK

Mục đích của thủ tục CANCEL_DATALINK là sẽ hủy các liên kết Data_Link từ 2 đầu nút bị đứt gãy, nếu nhƣ từ nút đấy đi dọc theo các nhánh của cây khung không tìm thấy tối thiểu 2 nút thuộc nhóm đa phát nào. Với ít nhất 2 nút thuộc nhóm đa phát tìm đƣợc trên đƣờng gửi thông điệp thì đƣờng dẫn nối chúng vẫn đƣợc duy trì là với kết nối Data_Link dọc theo các nút của đƣờng dẫn. Ngƣợc lại, nếu tại một nút bất kì u mà đi dọc theo các liên kết Data_Link mà không gặp hoặc chỉ gặp đƣợc 1 nút thuộc nhóm đa phát, thì liên kết Data_Link đã bị đứt gãy thực sự. Do đó nút u sẽ cố gắng loại bỏ các liên kết này và gửi ngƣợc về nút phát động CANCEL_DATALINK để tiếp tục loại bỏ nếu cần thiết.

Hình 29 minh họa quá trình đứt gãy và xóa bỏ liên kết

6 7 1 1 1 1 2 2.5 0 9 2 6 7 1 1 1 1 2.5 0 9 2

Hình 29: Xóa bỏ các liên kết Data_Link không cần thiết

Khi liên kết 6-9 đứt gãy, nút 6 gửi yêu cầu hủy liên kết Data_Link (nét liền đậm) cho các nút 7, 0, 1, 2. Nút 0 và 2 gửi DENY cho nút 1 và 7, ở các nút này đều ghi nhận có 2 hàng xóm có liên kết Data_Link đến 2 nút thuộc nhóm đa phát. Nút 6 không có đủ tối thiểu 2 liên kết Data_Link nên hủy liên kết Data_Link với nút 7, chuyển thành Tree_Link (nét liền nhạt).

5.4 Ví dụ minh họa 4 4 5 6 3 7 1 2 2 2 2 1 1 1 3 4 2.5 7 3 10 3.5 8 20 0 2 9 2

Hình 30: Hình trạng mạng cần xây dựng cây khung đa phát

Hình 30 mô tả một đồ thị vô hƣớng, trong đó các nút vòng tròn kép là các

Một phần của tài liệu Định tuyến đa phát dựa trên bảo trì tối ưu cây khung trong các mạng tự hợp di động (Trang 77)