Phát triển thuật toán

Một phần của tài liệu Nghiên cứu thuật toán tìm đường bao phủ một nhóm robot di động (Trang 43 - 46)

Cũng giống với các thuật toán ORMSTC ở trên nó cũng xây dưng một hàm khởi tạo ban đầu để thực hiện các khởi tạo cơ bản. Khác ở đây thay dùng một mảng

Mã giả thuật toán 6: Thuật toán 6 MSTC (W,X)

Đầu vào: Cell robot vừa đi ra W (cell cha), cell robot vừa đi vào X

Các bước tiến hành:

1. S1..4 ←4 cell lân cận của X theo bốn hướng (trái, phải, trên, dưới)

2. List_cell = null 3. for 𝑖 ← 14 do

4. if 𝑁𝑖 = 𝑣ậ𝑡𝑐ả𝑛 then

5. continue tiếp tục với giá trị 𝑖 tiếp theo

6. if 𝑁𝑖 đã nằm trong một cạnh của cây bao trùm của một 𝑗 robot khác

then

7. Hỏi robot 𝑗 xem nó còn sống không 8. if robot 𝑗 trả lời then

9. backtrack←( 𝑐ạ𝑛ℎ 𝑡ừ 𝑋 𝑡ớ𝑖 𝑁𝑖, 𝑡ê𝑛 𝑟𝑜𝑏𝑜𝑡) 10. continue tiếp tục với giá trị 𝑖 tiếp theo

11. //robot kia đã chết

12. else

13. if tìm thấy backtrack.find(tên robot chứa Ni ) then

14. Xóa robot 𝑗 khỏi backtrack

15. Xóa cạnh tất cả cạnh nối với cell robot 𝑗 đã đi và thông báo nó đã xong

16. List_cell ← Ni

17. //không thuộc bất kỳ cây con nào

18. else

19. List_cell ← Ni 20. Kết thúc vòng lăp

21. if List_cell.size()>0 then

23. Tìm Ni khoảng cách xa nhất tối thiểu theo Manhattan của robot đó đến các robot còn lại

24. Vẽ cạnh từ 𝑋 tới 𝑁𝑖 và thông báo 25. Thực thi MSTC(X, Ni)

26. else

27. Trở về cell cha

28. Thực thi MSTC(W, T)//T là cell cha cua o W 29. if trở về subcell điểm khởi đầu 𝑠𝑖 then

30. Thông báo hoàn thành công việc của mình

31. while tất cả các robot vẫn chưa thông báo hoàn thành công việc của

chúng do

32. Kiểm tra định kỳ các robot có kết nối với mình xem chúng còn sống không (adsbygoogle = window.adsbygoogle || []).push({});

33. if robot 𝑗 đã chết then

34. Xóa cạnh nối với cell robot 𝑗 đã đi và thông báo 35. Thông báo mình chưa hoàn thành công việc

36. Lấy thông tin cell cần phải đến gần nhất từ vị trí nó đứng trong backtrack

37. Di chuyển điểm đã kết nối với robot đã chết

38. 𝑋 ←cell mình kết nối với robot j

39. 𝑌 ←cell robot j kết nối với mình

40. Xóa các cell của robot j mà đã được cập nhật

41. Xóa robot j khỏi mảng backtrack và thông báo robot j đã thực

hiện xong

42. Vẽ cạnh từ 𝑋 tới 𝑌 và thông báo 43. Thực thi MSTC(X, Y)

Thuật toán 6 mô tả quá trình làm việc của một robot. Tất cả các robot đều thực thi thuật toán này, bởi vậy có bao nhiêu robot thì sẽ có bấy nhiêu thể hiện của thuật toán này. Từ dòng 1 tới dòng 20 của thuật toán này, giống với thuật toán ORMSTC đã trình bày ở trên. Việc thêm vào các cell là nó sẽ tìm kiếm tất cả các cell theo bốn hướng (trên, dưới, trái, phải), tìm kiếm kiểm tra nó đã ở trong bất kỳ cây con của robot nào hay chưa (dòng 6). Từ dòng 21 đến dòng 26 giống thành lập cây con trong quá trình tạo cây bao trùm với thuật toán MSTC-offline. Nếu nó tìm thấy nhiều hơn một cell mới thì dựa vào tính khoảng cách Manhattan qua đó khoảng cách xa nhất tối thiểu theo Manhattan của robot đó đến các robot còn lại. Tại dòng 31 đến 44 thì giống với thuật toán ORMSTC đã trình bày ở trên kiểm tra các robot khác.

Một phần của tài liệu Nghiên cứu thuật toán tìm đường bao phủ một nhóm robot di động (Trang 43 - 46)