6 Tổng kết
2.1 Mã giả giải thuật Dijkstra và A*
1 cho A*.
2.2.4 Các thuật toán Sampling-based
Ở phần này, chúng ta sẽ xem xét qua hai giải thuật tìm đường đi thuộc hệ các phương pháp lấy mẫu là Rapidly-exploring Random Tree* và Informed Rapidly-exploring Ran- dom Tree*. Tuy không tìm được đường đi tối ưu trong thời gian thực, thuật toán RRT* lại rất phù hợp cho bài toán tìm đường đi trong không gian trạng thái nhiều chiều, hoặc có độ phức tạp cao chứa số lượng lớn trạng thái cần duyệt. Thuật toán có thể nhanh chóng trả về một kết quả không tối ưu, và theo thời gian, dần dần giảm giá trị của kết quả tìm được. Thuật toán Informed-RRT* hoạt động tương tự đồng thời mang lại cải tiến về tốc độ hội tụ đến kết quả tối ưu nhờ vào giảm thiểu vùng lấy mẫu.
Các thủ tục cần thiết
Khác với các thuật toán tìm kiếm quy hoạch động, ta cần định nghĩa thêm một số thủ tục cần thiết khác để thực thi giải thuật.
SampleF ree() Một hàm ngẫu nhiên trả về trạng thái bất kì x ∈ Xf ree, các giá trị mà hàm số trả về tuân theo phân bố đều (uniform distribution) có mẫu là Xf ree.
N earest(G = (V,E), x) Cho đồ thị G và một trạng thái x ∈ X, hàm số này trả về đỉnh v ∈ V gần vớix nhất theo khoảng cách Euclidean.
N ear(G = (V,E), x, r) Hàm số này trả về tập conV′ ⊂ V mà các đỉnh trong tập con nằm bên trong đường tròn có bán kínhrvới tâm là trạng thái
x
P arent(x) Hàm trả về trạng thái cha của x trong đồ thị dạng cây G Steer(x, y) Cho hai trạng thái x, y. Hàm số này trả về trạng thái z ∈ X
sao cho ||z−x|| ≤η và ||z−y|| là nhỏ nhất
CollisionF ree(x, x′) Cho hai điểm xvàx′ ∈ X. Hàm trả vềTruenếu đoạn thẳng nối hai đỉnh đầu vào nằm trong X{∇⌉⌉, và False nếu ngược lại.
Rapidly-exploring Random Tree* Mã giả cho RRT*:
Mã giả cho giải thuật RRT* được mô tả trong bảng 2.2. Đầu tiên, giải thuật khởi tạo một cây tìm kiếm G với một đỉnh tại trạng thái bắt đầu us. Sau đó cây tìm kiếm dần được mở rộng với mục tiêu đặt trạng thái kết thúc vào một nhánh của cây. Tại các bước 4 đến 6, giải thuật tìm ra một trạng thái ngẫu nhiên mới cần xét. Vòng lặp for từ dòng 11 đến 14 giải thuật tìm đỉnh gần nhất tạo với đỉnh mới một đường đi có giá trị nhỏ nhất và tạo cạnh giữa hai đỉnh. Cuối cùng, tại vòng for từ 15 đến 18, giải thuật xem xét có thể giảm thiểu giá trị đường đi của đỉnh mới đến các đỉnh lân cận, chỉnh sửa cây tìm kiếm nếu đạt giá trị tốt hơn ban đầu.
Sau khi giải thuật kết thúc với số lần lặp n, ta có được cây tìm kiếm G. Thủ tục ở bảng 2.3 được sử dụng để trích xuất đường đi đến trạng thái mong muốn. Thủ tục này nhận vào cây tìm kiếm, trạng thái kết thúc, và một bán kính nhằm tìm đỉnh gần nhất với trạng thái kết thúc.
Tính toàn vẹn về xác suất của giải thuật RRT*
1: procedure RRT∗(us, n)
2: V ←us; E ← ∅;
3: for i= 1, ..., n do
4: xrand =SampleF ree();
5: xnearest ←N earest(G(V,E), xrand);
6: xnew ←Steer(vnearest, xrand);
7: if ObstacleF ree(xnearest, xrand)then
8: Xnear ←N ear(G, xnew, rRRT∗);
9: V ← V ∪ {xnew};
10: xmin ←xnearest; cming(xnearest) +c(xnearest, xnew);
11: for xnear ∈Xnear do ⊲ Connect new vertext to a minimun cost path
12: if CollisionF ree(xnew, xnear)∧g(xnear) +c(xnew, xnear)< cmin then
13: xmin ←xnear; cmin ←g(xnear) +c(xnew, xnear);
14: E ← E ∪ {(xmin, xnew)};
15: for xnear ∈Xnear do ⊲ Rewire the tree
16: if CollisionF ree(xnew, xnear)∧g(xnear) +c(xnew, xnear)< g(xnear)then
17: xparent ←P arent(xnear);
18: E ←(E \ {(xparent, xnear)} ∪ {(xnew, xnear)});
19: return G(V,E)
Bảng 2.2: Mã giả giải thuật RRT*. Thay vào việc tìm kiếm trên đồ thị cho trước, thuậttoán xây dựng một đồ thịG(V,E)có cấu trúc cây từ trạng thái bắt đầu us. Cây tìm kiếm