Ta xem xét mô hình mạng ñược sử dụng phổ biến nhất trong thực tế là mô hình bảng trắng ñiều khiển (control whiteboard), với các liên kết song công (full-duplex). Như
chương trước ñã ñề cập, không tồn tại giải thuật truyền bá thông tin giữa các tác tử trong mạng ñộng không ñồng bộ. Do trong mạng không ñồng bộ, không có cách nào ñể “ñánh thức” các tác tử ñang ñứng yên hoạt ñộng trở lại. Vì vậy, trong phần này, tôi muốn ñề
xuất một số giải thuật ñối với mạng ñồng bộ. Tư tưởng của các giải thuật này ñó là sử
dụng cận thời gian trong mỗi vòng của mạng ñồng bộ. Mỗi nút trong mạng sẽ có một
ñồng hồ thời gian. Khi một tác tửñợi quá một khoảng thời gian nào ñó mà không gặp bất cứ tác tử nào. Nó sẽ coi như tác tửñang di chuyển trên mạng ñã bị mất và khởi ñộng lại giải thuật. Thời gian ñợi thông thường sẽ là khoảng thời gian cần thiết ñể một tác tử duyệt toàn mạng trong một hệ thống ñồng bộ.
Ba giải thuật ñược ñề xuất sau ñây cùng sử dụng tư tưởng trên, vì vậy chúng ñều có chung một số cấu trúc dữ liệu ñiều khiển. Mỗi nút v có bảng trắng chứa các thông tin ñiều khiển sau ñây:
•inLinkv[]: lưu trữ danh sách các cặp (tác tử, liên kết), cho biết các tác tử ñã ñến nút v qua liên kết nào. Ví dụ: inLinkv chứa thông tin (i, a) chứng tỏ tác tử i ñã ñến nút v qua liên kết cục bộ a của nút v.
•outLinkv[]: tương tự inLink nhưng cho biết tác tửñã rời khỏi v qua liên kết nào. Hai cấu trúc dữ liệu này giúp các tác tử truy vết ñường ñi của mình trong quá trình duyệt trên mạng
•minIDv: Lưu trữñịnh danh tác tử nhỏ nhất trong số các tác tửñã ñến nút v. Biến này giúp tìm ra tác tử thủ lĩnh (tác tử sẽ liên tục duyệt trên toàn mạng)
•timev: Đồng hồ thời gian tại nút v (Đồng hồ này tự ñộng tăng lên sau mỗi ñơn vị
4.2. Giải thuật duyệt toàn mạng 4.2.1. Tư tưởng của giải thuật:
Đây là giải thuật ñơn giản nhất, trong ñó các tác tử sẽ tự ñộng duyệt trong toàn mạng. Trong quá trình duyệt, nếu tác tử phát hiện ra ID của mình không phải là nhỏ nhất, nó sẽ tựñộng dừng lại tại một nút nào ñó. Cuối cùng, chỉ còn tác tử có ID nhỏ nhất (tác tử
thủ lĩnh) là liên tục duyệt trong toàn mạng, ñảm nhiệm vai trò trao ñổi thông tin giữa các tác tử. Khi có một sự thay ñổi trong cấu trúc mạng, tác tử thủ lĩnh bị ngắt khỏi mạng, các tác tử còn lại sẽ phát hiện ra (do mạng ñồng bộ và có sử dụng cận thời gian), tiến hành quá trình bầu thủ lĩnh lại từñầu.
Sau khi chọn ñược tác tử thủ lĩnh, tác tử này sẽñóng vai trò duyệt liên tục trong toàn mạng. Trong quá trình duyệt, tác tử sẽ dựa vào hai cấu trúc dữ liệu inLink và outLink tại mỗi nút ñể di chuyển và quay lui. Tuy nhiên, dữ liệu của lần duyệt trước có thể vẫn còn giữ lại tới lần duyệt sau. Điều này có thểảnh hưởng ñến quá trình di chuyển của tác tử. Vì vậy, ñể phân biệt, mỗi tác tử sẽ có một cờ hiệu flag, cờ hiệu này sẽ ñược ñổi trạng thái (true, false) mỗi lần tác tử thực hiện lại quá trình duyệt. Trên mỗi nút, chúng ta khai báo thêm một mảng t_flag lưu trữ cờ hiệu của mỗi tác tử khi ñến thăm nút. Nhờ vậy, các tác tử có thể phân biệt ñược dữ liệu tại một nút là thuộc lần duyệt trước hay lần duyệt hiện tại.
Thuật toán có thểñược mô tả như sau:
• Ở trạng thái bắt ñầu, các tác tử sẽ thực hiện việc duyệt qua toàn mạng (bằng các thuật toán duyệt thông thường như duyệt theo chiều sâu hoặc chiều rộng).
•Mỗi khi tác tửñến 1 nút v:
Tác tử kiểm tra biến minIDv tại nút ñó, nếu minIDv > ID của tác tử, tác tử sẽ
lưu ID của mình vào minIDv, khởi tạo lại thời gian timev = 0 và tiếp tục di chuyển tiếp trên mạng
Nếu minIDv < ID, tác tử sẽ tạm dừng lại tại nút v
•Trong quá trình di chuyển, nếu 2 tác tử gặp nhau tại một nút sẽ tiến hành trao ñổi thông tin ngay lập tức
•Khi tác tửñợi tại một nút, nếu timev > WaitTime (quá thời gian chờñợi), tác tử sẽ
Hình 26. Tác tử thủ lĩnh di chuyển liên tục
Hình 28. Các tác tử tự khởi ñộng lại quá trình di chuyển Thủ tục visit(v) (Tác tử p ñến nút v qua liên kết a của v) { if (flagp khác với t_flagv) { (tác tử p lần ñầu ñến v trong lần duyệt hiện tại)
Đưa (p, a) vào inLinkv, ñưa flagp vào tflagv if (IDp <= minIDv) {
minIDv = IDp
timev = 0 (Khởi tạo lại thời gian ñợi) if (degv >= 2) {
Đưa (i, a + 1) vào outLinkv Di chuyển qua liên kết a + 1 }
else
Quay lui qua liên kết a }
else
(tác tử p tìm thấy ñịnh danh nhỏ hơn mình)
Tác tử p dừng lại tại nút v }
else if ((i, a) không thuộc outLinkv)
(tác tử p ñến một nút ñã thăm)
Quay lui qua liên kết a else {
(tác tử p quay lui trở lại v)
if (IDp <= minIDv) {
if (còn liên kết chưa thăm)
Tiếp tục di chuyển qua liên kết ñó
else if (v là nút nhà hoặc liên kết quay lui bịñứt) {
(Không quay lui ñược nữa thì khởi tạo lại quá trình duyệt) Đảo ngược cờ flagp Thực hiện lại quá trình duyệt } else Tiếp tục quay lui } else (tác tử p tìm thấy ñịnh danh nhỏ hơn mình) Tác tử p dừng lại tại nút v } } Thủ tục timeout (Tác tử p ñang ñợi tại nút v) { if (timev > WaitTime) {
(Tác tửñã ñợi quá thời gian dự kiến, thực hiện lại thủ tục di chuyển)
minIDv = IDp timev = 0
Đảo ngược cờ flagp
Lần lượt di chuyển qua các liên kết của v }
}
4.2.2. Đánh giá giải thuật
Tính ñúng ñắn của thuật toán có thể thấy qua hai trường hợp sau:
•Tác tử có ID nhỏ nhất (tác tử thủ lĩnh) sẽ liên tục di chuyển trên mạng (do ID của tác tử này luôn nhỏ hơn hoặc bằng minID tại các nút). Nhờ ñó, tác tử thủ lĩnh có thể thu thập và truyền bá thông tin của tất cả các tác tử trong mạng. Trong trường hợp có tác tử mới tham gia vào mạng, thì tác tử thủ lĩnh vấn có thể phát hiện và thu thập thông tin của tác tử mới này.
•Trong trường hợp tác tử thủ lĩnh bị ngắt ra khỏi mạng, hoặc thời gian chờñợi quá lâu, các tác tử khác có thể phát hiện và tựñộng khởi tại lại quá trình di chuyển. Vì vậy không xảy ra tình trạng deadlock trong thuật toán.
Như vậy, bài toán truyền bá thông tin giữa các tác tửñược ñảm bảo.
Từ thuật toán ta có thể thấy chỉ tác tử có ID nhỏ nhất là liên tục di chuyển trên toàn mạng ñể thu thập và truyền bá thông tin của các tác tử khác. Các tác tử còn lại sau vài bước di chuyển có thể phát hiện ra tác tử có ID nhỏ hơn (dựa vào biến minID) và dừng lại. Nếu không có thay ñổi trong topo mạng, ñến một cấu hình nào ñó chỉ còn duy nhất tác tử thủ lĩnh có ID nhỏ nhất là di chuyển. Như vậy ñộ yên tĩnh của thuật toán này là k – 1.
Tuy nhiên, do việc di chuyển của tác tử thủ lĩnh dựa theo thuật toán duyệt. Vì vậy, với mỗi vòng di chuyển, tác tử thủ lĩnh phải di chuyển theo tất cả các liên kết trong mạng.
Độ phức tạp di chuyển với mỗi vòng sẽ là O(E).
4.3. Giải thuật dựa trên bài toán xây dựng cây khung tĩnh 4.3.1. Tư tưởng của giải thuật
Giải thuật duyệt toàn mạng ở trên có “ñộ yên tĩnh” là k – 1. Tuy nhiên ñộ phức tạp di chuyển với mỗi vòng duyệt là O(E). Đây là ñộ phức tạp tương ñối lớn, do tác tử thủ
lĩnh mỗi lần phải duyệt toàn bộ các liên kết trong mạng.
Để giảm ñộ phức tạp di chuyển trong giải thuật trên, chúng ta sẽ tìm cách giảm số
liên kết phải di chuyển trong mỗi vòng. Để làm ñược ñiều này, ta sẽ tìm cách xây dựng một cây khung trong mạng. Từ ñó, tác tử thủ lĩnh chỉ cần di chuyển trên cây khung là có thểñến ñược tất cả các nút. Độ phức tạp di chuyển trong trường hợp này sẽ giảm xuống còn O(V).
Hình 30. Tác tử chỉ di chuyển trên cây khung
Bài toán mới ñặt ra ở ñây là: xây dựng một cây khung trong hệ thống bằng mô hình tác tử. Để giải quyết bài toán này, chúng tôi trước hết ñề xuất sử dụng giải thuật xây dựng cây khung tối thiểu là GHS-83. Đây là giải thuật xây dựng cây khung tối thiểu trên mạng tĩnh trong mô hình truyền thông báo. Vì vậy, khi áp dụng giải thuật này, chúng ta phải xem xét hai vấn ñề sau ñây:
• Chuyển giải thuật từ mô hình truyền thông báo sang mô hình tác tử: vấn ñề này có thể giải quyết bằng cách sử dụng giải thuật MSA
• Tìm cách áp dụng giải thuật GHS-83 cho mạng ñộng: ta có thể sử dụng phương pháp chuyển ñổi truyền thống. Đó là áp dụng giải thuật bình thường, và mỗi khi có thay ñổi trong topo mạng, hủy toàn bộ cây khung và thực hiện lại từñầu.
Quá trình khởi tạo lại thuật toán mỗi khi có thay ñổi trong mạng có thể gặp một số
vấn ñề trong một hệ phân tán. Ví dụ, trong quá trình gửi các thông báo khởi tạo ñi các nút, một số nút trong mạng có thể chưa nhận ñược thông báo này, và trạng thái của nút ñó vẫn thuộc lần thực hiện trước của thuật toán. Điều này khiến cho các tác tử có thể nhầm lẫn khi ñến các nút này.
Để giải quyết vấn ñề này, mỗi nút sử dụng thêm một biến reset. Khi nhận ñược yêu cầu khởi tạo lại thuật toán, biến reset sẽ ñược ñổi thành true. Các tác tử khi ñến nút có reset = true sẽ phải ñợi trong một khoảng thời gian, ñảm bảo cho toàn bộ các nút ñã ñược khởi tạo, mới bắt ñầu thực hiện lại thuật toán.
Thuật toán có thể mô tả như sau:
•Tại thời ñiểm ban ñầu, các nút có tác tử sẽ tựñộng chuyển trạng thái từ sleeping sang find ñể tiến hành xây dựng cây khung theo giải thuật GHS-83. Các tác tử tại mỗi nút sẽ làm nhiệm vụ tính toán cục bộ và truyền thông báo giống như trong giải thuật MSA
•Xây dựng xong cây khung, các thực hiện của thuật toán sẽ diễn ra tương tự giải thuật duyệt ñơn giản ở phần trên. Các tác tử tiến hành di chuyển theo cây khung. Khi một tác tử phát hiện ra tác tử có ID nhỏ hơn, nó sẽ dừng lại. Cuối cùng, chỉ còn tác tử có ID nhỏ nhất là liên tục di chuyển trên cây khung, thu thập và truyền thông tin cho các tác tử khác trong mạng
•Các tác tử ñứng yên tại mỗi nút sẽ ñợi trong một giới hạn thời gian, nếu quá giới hạn này mà không có tác tử nào di chuyển ñến nút ñó, nó sẽ tự ñộng khởi tạo lại quá trình di chuyển theo cây khung.
•Khi topo mạng thay ñổi:
Trong quá trình xây dựng cây khung, một tác tử phát hiện ra topo mạng bị
thay ñổi (mất kết nối, hoặc thêm các kết nối mới). Tác tử sẽ dừng lại, duyệt toàn mạng ñể gửi một thông báo khởi tạo ñến tất cả các nút khác trong mạng. Tại mỗi nút, tác tử sẽ thiết lập biến reset tại nút ñó, khởi tạo lại biến thời gian timev Khi tác tửñến một nút có biến reset = true ñược thiết lập, sẽ phải ñợi ñến khi timev > WaitTime, khởi tại lại reset = false, và thực hiện thuật toán từñầu. Việc
ñợi cho ñến hết thời gian ñảm bảo toàn bộ các nút trong mạng ñều ñã biết việc khởi tạo lại thuật toán, tránh trường hợp các tác tử sử dụng nhầm trạng thái ở
lượt chạy trước.
Chương trình chính
•Thực hiện thủ tục BUILD_TREE xây dựng cây khung trong hệ thống
•Di chuyển trên cây khung bằng thủ tục VISIT ñể thu thập thông tin
•Nếu phát hiện thấy tác tử có ID nhỏ hơn, dừng lại và gọi thủ tục TIMEOUT
•Phát hiện thay ñổi trong mạng, gọi thủ tục RESET ñể khởi tạo lại thuật toán
•Nếu thấy nút chứa tác tử có reset = true, ñợi một khoảng thời gian rồi khởi ñộng lại chương trình chính
(Xây dựng cây khung bằng cách ghép các mảnh MST theo thuật toán GHS-83, chuyển ñổi sang mô hình tác tử bằng thuật toán MSA)
Lặp liên tục cho ñến khi chỉ còn một mảnh MST duy nhất
•Tìm kiếm liên kết ngoài tối thiểu:
Tác tử tại nút gốc lần lượt gửi các yêu cầu tìm kiếm ñến các nút con trong mảnh.
Tác tử tại mỗi nút sẽ tìm các liên kết ngoài tối thiểu cục bộ bằng cách thăm dò các liên kết lân cận.
Tác tử ñến một nút sau khi nhận ñược tất cả phản hồi từ các nút con, sẽ lọc ra liên kết ngoài tối thiểu cục bộ và di chuyển lên nút cha.
Khi tác tử trở về nút gốc sẽ tìm ñược liên kết ngoài tối thiểu của mảnh. Nếu không tìm ñược liên kết nào thì thủ tục kết thúc
Chuyển gốc: tác tử sẽ thực hiện việc chuyển thông báo chuyển gốc ñến nút kề
với liên kết ngoài cục bộ, nút này sẽ trở thành gốc
•Kết hợp mảnh:
Tác tử sẽ gửi thông báo kết hợp mảnh cho nút kề thuộc mảnh bên kia Mảnh sẽñược kết hợp dựa trên các ñiều kiện trong giải thuật GHS-83
Hai tác tử thuộc hai mảnh vừa kết hợp lại gặp nhau, tác tử có ID lớn hơn có thể dừng lại.
Thủ tục VISIT
(Tác tử duyệt theo cây khung, ñể tiến hành tìm thủ lĩnh và thu thập thông tin)
Khi tác tử p ñến nút v Nếu IDp <= minIDv
(Đặt lại các giá trị minIDv và timev)
minIDv = IDp timev = 0
Di chuyển tiếp theo cây khung Nếu không
Dừng lại tại nút v.
Thủ tục TIMEOUT
(Đợi tại một nút trong một khoảng thời gian)
Nếu timev > WaitTime thì gọi lại thủ tục VISIT
Thủ tục RESET
(Khi phát hiện ra một thay ñổi trong topo mạng)
Duyệt toàn bộ mạng, khi ñến một nút: Đặt resetv = true
Đặt timev = 0
Khởi tạo tất cả các biến trạng thái.
4.3.2. Đánh giá giải thuật
Tính ñúng ñắn của giải thuật có thểñược chứng minh qua các ñịnh lý sau ñây:
Định lý 4.1. Cây khung trong mạng luôn ñược xây dựng sau một thực hiện nào ñó của giải thuật.
Chứng minh:
Nếu không có thay ñổi trong mạng, ñịnh lý có thể suy ra trực tiếp từ tính ñúng ñắn của hai giải thuật GHS-83 và MSA.
Nếu có sự thay ñổi trong mạng, nút phát hiện ra ñiều này sẽ gửi thông báo khởi tạo
ñến tất cả các nút khác. Theo thuật toán, các tác tử sẽ ñợi cho tất cả các nút biết ñược trạng thái này rồi mới tiến hành khởi tạo lại giải thuật. Vì vậy, toàn bộ trạng thái của mạng sẽ quay lại ban ñầu. Định lý ñược chứng minh.
Định lý 4.2. Khi hai tác tửở trên hai nút liên thông, chúng sẽ trao ñổi ñược thông tin sau một thực hiện nào ñó.
Theo ñịnh lý 5.1, cây khung trong hệ thống sẽ ñược sau một cấu hình nào ñó. Vì vậy, tác tử thủ lĩnh có thể di chuyển ñến tất cả các nút và truyền bá thông tin ñến tất cả
các tác tử khác.
Định lý 4.3. “Độ yên tĩnh” của thuật toán là k – 1.
Chứng minh:
Sau khi xây dựng xong cây khung, trừ tác tử có ID nhỏ nhất, các tác tử khác trong quá trình di chuyển sẽ phát hiện ra ID nhỏ hơn mình và dừng lại. Cuối cùng chỉ còn tác tử
thủ lĩnh là liên tục di chuyển trong mạng. Định lý ñược chứng minh
Định lý 4.4. Độ phức tạp di chuyển của tác tử thủ lĩnh trong mỗi vòng là O(V). (V là số nút trong mạng)
Chứng minh:
Tác tử thủ lĩnh chỉ cần di chuyển trên các liên kết trên cây khung trong mỗi vòng là
ñủñể duyệt toàn mạng. Và số liên kết trên cây là V – 1. Định lý ñược chứng minh
Định lý 4.5. Độ phức tạp di chuyển ñáp ứng với mỗi thay ñổi trong mạng là O(E).(E là số liên kết trong mạng)
Chứng minh:
Độ phức tạp thông báo ñể xây dựng cây khung của giải thuật GHS-83 là O(E). Giải thuật MSA chuyển một giải thuật trong mô hình thông báo sang mô hình tác tử sẽ có ñộ
phức tạp di chuyển tương ñương với ñộ phức tạp thông báo. Vì vậy, ñộ phức tạp di chuyển ñể xây dựng lại cây khung là O(E).
Tác tử khi phát hiện ra sự thay ñổi trong mạng, sẽ phải duyệt toàn mạng ñể gửi thông báo khởi tạo. Độ phức tạp của việc duyệt này là O(E).