Thuật toán cập nhật đường

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu kỹ thuật định tuyến đa đường hiệu quả, tin cậy và tiết kiệm năng lượng trên cơ sở cải tiến giao thức AOMDV​ (Trang 30 - 32)

Xét một nút đích d và một nút i. Bất cứ khi nào nút i cập nhật số thứ tự đích cho d, số chặng được quảng bá tương ứng sẽ được khởi tạo. Cho trước một số thứ tự đích, đặt ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑 là số chặng của con đường thứ k trong entry bảng định tuyến cho đích d tại nút i. Như vậy là (𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑, ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑) ∈ 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑. Khi nút i chuẩn bị gửi quảng bá đường đầu tiên cho đích d, nó sẽ cập nhật số chặng được quảng bá như sau:

𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘 = {max⁡{ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑘𝑑}, 𝑖 ≠ 𝑑

0, i = d

Bất cứ khi nào một nút nhận được một quảng bá đường, nó sẽ áp dụng các quy tắc cập nhật đường của giao thức AOMDV được liệt kê trong Thuật toán 1. Trong thuật toán này, nút i gọi áp dụng các quy tắc này mỗi khi nó nhận được một quảng bá đường cho nút đích d từ một nút láng giềng j. Các biến 𝑠𝑒q_num𝑖𝑑,

𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑, và 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑 tương ứng là chặng kế tiếp, số chặng được quảng bá và danh sách đường cho đích d tại nút i (i # d). Các biến 𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑

và 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑 biểu diễn giá trị tương ứng của chặng kế tiếp và chặng cuối cùng của con đường thứ k trong entry bảng định tuyến cho đích d tại nút i. Các dòng (1) và (10) trong Thuật toán 1 đảm bảo tính không lặp vòng, trong khi các dòng (12) và (15) kiểm tra tính tách biệt theo liên kết.

Input: Thông tin quảng⁡bá⁡đường Output: Quy tắc cập nhật⁡đường

1: if (𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑 < 𝑠𝑒𝑞_𝑛𝑢𝑚𝑗𝑑) then /* áp dụng quy tắc số thứ tự */ 2: 𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑 ∶= 𝑠𝑒𝑞_𝑛𝑢𝑚𝑖𝑑; 3: 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑 ∶=; 4: 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑 ∶= 𝑁𝑈𝐿𝐿; 5: if (𝑗 = 𝑑) then /*nút láng giềng⁡là⁡đích*/ 6: insert (𝑗, 𝑖, 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 7: else 8: insert (𝑗, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑, 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑+ 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 9: end if

10: else if (𝑠𝑒q_num𝑖𝑑 = 𝑠𝑒𝑞_𝑛𝑢𝑚𝑗𝑑) and (𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑖𝑑 > 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑)⁡ then /* áp dụng quy tắc số thứ tự */ 11: if (𝑗 = 𝑑) then /*nút láng giềng⁡là⁡đích*/

12: if ((∄𝑘1 ∶ (𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑1 = 𝑗))⁡and (∄𝑘2 ∶ (𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑2 = 𝑖))) then /*⁡đảm bảo tính duy nhất của chặng kế tiếp và chặng cuối cùng */

13 insert (𝑗, 𝑖, 1) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 14: end if

15: else if ((∄𝑘3 ∶ (𝑛𝑒𝑥𝑡_ℎ𝑜𝑝𝑖𝑘𝑑3 = 𝑗))⁡and (∄𝑘4 ∶ (𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑖𝑘𝑑4 = 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑 ))) then /*⁡đảm bảo tính duy nhất của chặng kế tiếp và chặng cuối cùng */

16: insert (𝑗, 𝑙𝑎𝑠𝑡_ℎ𝑜𝑝𝑗𝑘𝑑, 𝑎𝑑𝑣𝑒𝑟𝑡𝑖𝑠𝑒𝑑_ℎ𝑜𝑝_𝑐𝑜𝑢𝑛𝑡𝑗𝑑) into 𝑟𝑜𝑢𝑡𝑒_𝑙𝑖𝑠𝑡𝑖𝑑; 17: end if

18: end if

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu kỹ thuật định tuyến đa đường hiệu quả, tin cậy và tiết kiệm năng lượng trên cơ sở cải tiến giao thức AOMDV​ (Trang 30 - 32)