LỜI CAM ĐOAN Tôi xin cam đoan: Các công việc trình bày trong luận văn: “Thuật toán A* tìm đường đi ngắn nhất tránh vật cản” là công trình nghiên cứu của cá nhân, được thực hiện trên cơ
Trang 2LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Người hướng dẫn khoa học: TS LÊ HỒNG TRANG
NGHỆ AN, 2017
Trang 3LỜI CẢM ƠN
Lời đầu tiên, tôi xin bày tỏ lòng biết ơn sâu sâu sắc của mình tới tất cả những thầy giáo, cô giáo đã hỗ trợ, giúp đỡ tôi trong quá trình thực hiện luận văn tốt nghiệp
Tôi xin cảm ơn các thầy giáo, cô giáo Khoa công nghệ thông tin, phòng Sau Đại học đã tạo mọi điều kiện thuận lợi nhất giảng dạy giúp đỡ tôi trong quá trình học tập và làm luận văn tốt nghiệp
Tôi xin gửi lời cảm ơn chân thành đến TS.Lê Hồng Trang, là người
hướng dẫn, nhận xét, thầy đã đóng góp những định hướng, ý kiến quý báu, giúp đỡ tôi có thể hoàn thành được luận văn này
Xin kính chúc các thầy cô giáo sức khỏe và tiếp tục đạt nhiều thành công trong nghiên cứu khoa học và trong sự nghiệp giảng dạy, chúc khoa công nghệ thông tin ngày một phát triển
Cuối cùng, tôi xin cảm ơn gia đình và đồng nghiệp, những người luôn ở bên động viên cổ cũ tôi trong suốt quá trình học tập
Tôi xin chân thành cảm ơn !
Nghệ An, tháng 06 năm 2017
Học viên
Bùi Đức Hoàng
Trang 4LỜI CAM ĐOAN
Tôi xin cam đoan:
Các công việc trình bày trong luận văn: “Thuật toán A* tìm đường đi
ngắn nhất tránh vật cản” là công trình nghiên cứu của cá nhân, được thực
hiện trên cơ sở nghiên cứu lý thuyết, kiến thức kinh điển, nghiên cứu khảo sát tình hình thực tiễn và dưới sự hướng dẫn khoa học của Tiến sĩ Lê Hồng Trang, đảm bảo không vi phạm luật sở hữu trí tuệ và pháp luật Việt Nam Nếu sai, tôi xin chịu trách nhiệm trước pháp luật
TÁC GIẢ LUẬN VĂN
Bùi Đức Hoàng
Trang 5MỤC LỤC
TRANG PHỤ BÌA
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC CÁC BẢNG, HÌNH VẼ 5
MỞ ĐẦU 7
CHƯƠNG 1 LÝ THUYẾT VỀ HEURISTIC VÀ ĐỒ THỊ 10
1.1 Hàm đánh giá Heuristic 10
1.1.1 Tính khả chấp 10
1.1.2 Tính đơn nhất 11
1.1.3 Khả năng cập nhật thông tin 11
1.1.4 Ví dụ 11
1.2 Các khái niệm cơ bản về lý thuyết đồ thị 13
1.2.1 Khái niệm về đồ thị 13
1.2.2 Phân loại đồ thị 13
1.2.3 Các thuật ngữ cơ bản trong đồ thị 16
1.2.4 Một số dạng đồ thị đặc biệt 18
1.2.5 Biểu diễn đồ thị 20
CHƯƠNG 2 THUẬT TOÁN A* 23
2.1 Bài toán 23
2.2 Thuật toán A* 29
2.3 Mô tả thuật toán A* 29
2.4 Ví dụ minh họa hoạt động thuật toán A* 31
CHƯƠNG 3 THUẬT TOÁN A* TÌM ĐƯỜNG ĐI NGẮN NHẤT TRÁNH VẬT CẢN 42
3.1 Bài toán tìm đường đi tránh vật cản 42
Trang 63.2 Mô tả thuật toán A* tránh vật cản 43
3.3 Sử dụng hàm định hướng 43
3.4 Ví dụ minh họa 44
3.5.Thực thi thuật toán 46
KẾT LUẬN 48
TÀI LIỆU THAM KHẢO 50
PHỤ LỤC 51
Trang 7DANH MỤC CÁC BẢNG, HÌNH VẼ
Bảng 1.1 Danh sách kề 22
Bảng 2.2: Biểu diễn viết tắt của các địa điểm trong thành phố Vinh 31
Hình Hình 1.1 Các bước di chuyển của các ô số 13
Hình 1.2 Biểu đồ phân loại đồ thị 13
Hình 1.3 Đơn đồ thị vô hướng 14
Hình 1.4 Đa đồ thị vô hướng 14
Hình 1.5 Giả đồ thị vô hướng 15
Hình 1.6 Đơn đồ thị có hướng 15
Hình 1.7 Đa đồ thị có hướng 16
Hình 1.8 Cho đồ thị 17
Hình 1.9 Cho đồ thị 18
Hình 1.10 Biểu đồ các dạng đồ thị đặc biệt 18
Hình 1.11 Đồ thị đầy đủ K2, K3, K4 19
Hình 1.12 Đồ thị vòng C3, C4, C5 19
Hình 1.13 Đồ thị vòng W3, W4, W5 19
Hình 1.14 Đồ thị vòng Q1, Q2, Q3 20
Hình 1.15 Mô tả đồ thị phẳng 20
Hình 1.16 Biểu diễn đồ thị dưới dạng ma trận liền kề 21
Hình 1.17 Đồ thị 22
Hình 2.1 Đồ thị biểu diễn không gian trạng thái 24
Hình 2.2 Đồ thị biểu diễn đường đi của bước 1 24
Hình 2.3 Đồ thị biểu diễn đường đi của bước 2 25
Trang 8Hình 2.4 Đồ thị biểu diễn đường đi của bước 3 25
Hình 2.5 Đồ thị biểu diễn đường đi của bước 4 26
Hình 2.6 Đồ thị biểu diễn bản đồ thành phố Vinh 32
khoảng cách tính theo (km) 32
Hình 2.7 Biểu diễn đường đi của bước 1 34
Hình 2.8 Biểu diễn đường đi của bước 2 35
Hình 2.9 Biểu diễn đường đi của bước 3 36
Hình 2.10 Biểu diễn đường đi của bước 4 38
Hình 2.11 Biểu diễn đường đi của bước 5 40
Hình 2.12 Biểu diễn đường đi của bước 6 41
Hình 3.1 Môi trường hoạt động của robot 42
Hình 3.2 Tìm đường đi từ A đến B 44
Hình 3.3 Các bước di chuyển của robot 45
Hình 3.4 Kết quả đường đi ngắn nhất của robot 45
Hình 3.5 Giao diện chương trình 46
Hình 3.6 Bản đồ được tạo trên chương trình 47
Hình 3.7 Đường đi của robot 47
Hình 3.8 Bản đồ có nhiều đường đi 48
Hình 3.9 Đường đi tìm được của robot 48
Trang 9MỞ ĐẦU
1 Sự cần thiết của vấn đề nghiên cứu
Bài toán đường đi ngắn nhất là bài toán tìm một đường đi giữa hai đỉnh sao cho tổng các trọng số của các cạnh tạo nên đường đi đó là nhỏ nhất Trong thực tế bài toán tìm đường đi ngắn nhất là một bài toán rất kinh điển và
cơ bản, chúng ta cho hai điểm bất kỳ vào một miền, mặt phẳng nào đó tìm đường đi ngắn nhất giữa hai điểm thuộc miền, mặt phẳng đó Và thông thường để giải quyết bài toán đó người ta rời rạc hóa các miền, mặt phẳng đó thành các đồ thị và chúng ta chuyển bài toán về dạng bài toán tìm đường đi ngắn nhất trên đồ thị
Thuật toán Dijkstra là một trong những thuật toán nổi tiếng nhất trong khoa học máy tính Trở lại trước khi máy tính là một điều, khoảng năm 1956, Edsger Dijkstra đã nghĩ ra một cách để tìm ra con đường ngắn nhất trong đồ thị có cạnh là tất cả các giá trị không âm Cho đến ngày nay, thuật toán của ông vẫn được sử dụng trong những lĩnh vực "định tuyến" Nó đã được mở rộng bởi những người khác để tạo ra con đường tiên tiến hơn việc tìm kiếm các thuật toán như A *
Thuật toán A* là thuật toán được thiết kế và được kiểm nghiệm rất tốt để giải bài toán tìm đường đi ngắn nhất trên đồ thị Đây là thuật toán đầy đủ theo nghĩa rằng nó sẽ luôn luôn tìm thấy một lời giải nếu bài toán có lời giải Thuật toán bao gồm một số các đặc điểm sau:
- Là mở rộng của thuật toán Dijkstra
- Kết hợp với sử dụng một “đánh giá heuristic” tăng hiệu năng tìm kiếm
của thuật toán trên đồ thị Trên thực tế người ta đã kiểm nghiệm và nhận thấy được tính hiệu quả của nó
Vì vậy, tôi chọn đề tài là áp dụng thuật toán A* để giải một cách hiệu quả bài toán tìm đường đi ngắn nhất tránh vật cản
Trang 102 Mục tiêu nghiên cứu
Luận văn tập trung vào 3 mục tiêu chính sau:
- Tìm hiểu thuật toán A* và bài toán tìm đường đi ngắn nhất;
- Mở rộng thuật toán A* trong việc giải quyết bài toán tìm đường đi ngắn nhất tránh vật cản;
- Mô phỏng đường đi của robot
3 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
(a) Nghiên cứu lý thuyết
Nghiên cứu bài toán tìm đường đi ngắn nhất qua các tài liệu trong và ngoài nước; các kết quả khảo sát có tính chất đánh giá của các nghiên cứu đi trước; các tài liệu lập trình để thực thi thuật toán
(b) Nghiên cứu thực nghiệm
Sử dụng một ngôn ngữ lập trình để thực thi thuật toán cho ví dụ ứng dụng trong thực tế của bài toán tìm đường đi ngắn nhất tránh vật cản
3.2 Phạm vi nghiên cứu
Trong phạm vi luận văn này, tôi tập trung nghiên cứu, giải quyết bài toán tìm đường đi ngắn nhất tránh vật cản, ứng dụng bài toán vào một ví dụ với ngôn ngữ Matlab
4 Nội dung nghiên cứu
4.1.Về lý thuyết:
- Tìm hiểu lý thuyết về Heuristic và đồ thị
Trang 11- Biểu diễn bài toán tìm đường đi ngắn nhất sử dụng thuật toán A*
- Phân tích đánh giá, hiệu quả của thuật toán
4.2.Về thực nghiệm
- Thực thi thuật toán trên Matlab và giả lập ứng dụng tìm đường đi
5 Đóng góp luận văn
- Tìm hiểu và nắm rõ về thuật toán trong bài toán tìm đường đi ngắn nhất
và những ứng dụng trong bài toán mang lại, cũng như thấy được tác dụng của thuật toán khi áp dụng trong thực tế cuộc sống
- Mở rộng bài toán tìm đường đi ngắn nhất khi đường đi cần tránh những vật cản cho trước
- Áp dụng thuật toán A* cho bài toán tìm đường đi ngắn nhất tránh vật cản cho robot
6 Kết cấu của luận văn
Luận văn gồm 3 chương và được cấu trúc với nội dung như sau:
Chương 1: Trình bày khái niệm về Heuristic, sự quan trọng của hàm
đánh giá Heuristic và các tính chất của nó Mô tả qua một ví dụ minh họa Trình bày các đặc trưng cơ bản về lý thuyết đồ thị
Chương 2: Nội dung chương mô tả thuật toán A*, giới thiệu thuật toán
thấy rõ được cách thức hoạt động của thuật toán Ứng dụng nó giải quyết các bài toán trong thực tế, làm cơ sở để vận dụng giải quyết bài toán được đề cập
ở chương tiếp theo
Chương 3: Nội dung chương sẽ trình bày bài toán, phân tích bài toán,
mô hình hoá bài toán dưới dạng bài toán tìm đường đi ngắn nhất tránh vật cản, phân tích vật cản là gì, khi gặp vật cản robot sẽ đi như thế nào? vận dụng thuật toán đề cập ở Chương 2 để giải quyết bài toán Nội dung chương cũng
sẽ mô phỏng tìm đường đi ngắn nhất tránh vật cản của thuật toán A* qua ngôn ngữ Matlab
Trang 12CHƯƠNG 1 LÝ THUYẾT VỀ HEURISTIC VÀ ĐỒ THỊ
Chương này trình bày tổng quan về lý thuyết heuristic và đồ thị Mục 1.1 trình bày khái niệm và các tích chất đặc trưng về hàm đánh giá heuristic Mục 1.2 nêu lên các nội dung cơ bản về lý thuyết đồ thị cần biết để vận dụng vào giải quyết bài toán luận văn đề cập tới Nội dung của chương được trích dẫn từ các tài liệu [1, 2, 3]
1.1 Hàm đánh giá Heuristic
Heuristics là các quy tắc, phương pháp, chiến lược, mẹo giải hay hướng cách nào đó nhằm làm giảm khối lượng tìm kiếm lời giải trong không gian bài toán cực lớn
Hàm đánh giá Heuristics đó là các hàm phỏng đoán, ước chừng, thô, giá trị của hàm phụ thuộc vào trạng thái hiện tại của bài toán tại mỗi bước giải Nhờ giá trị này, ta có thể chọn được cách hành động tương đối hợp lý trong từng bước của thuật giải
Hàm đánh giá đóng vài trò rất quan trọng:
Nếu hàm đánh giá chính xác thì tìm kiếm hiệu quả
Nếu hàm đánh giá không chính xác thì tìm kiếm kém hiệu quả
Hàm đánh giá được xây dựng tùy thuộc vào vấn đề bài toán và một vấn
đề có thể có nhiều hàm đánh giá
1.1.1 Tính khả chấp
Một heuristic dùng để tìm ra con đường dẫn đến đích ngắn nhất bất cứ khi nào nó có tồn tại được gọi là heuristic khả chấp Nói cách khác, tính khả chấp của heuristic là nó sẽ bảo đảm tìm thấy đường đi ngắn nhất đến trạng thái đích
Một thuật toán tìm kiếm có thể chấp nhận được nếu nó được đảm bảo sẽ tìm thấy một đường đi tối thiểu dẫn đến lời giải, bất kỳ lúc nào con đường đó
Trang 13có mặt Trong việc xác định tính khả chấp của một heuristic Chúng ta định
nghĩa hàm đánh giá f: f(n) = g(n) + h(n)
Với g(n) là giá của đường đi ngắn nhất từ nút bắt đầu đến nút n, còn h(n)
là giá thực sự của đường đi ngắn nhất từ nút n đến nút đích Như vậy f(n) là chi phí thực của con đường tối ưu từ nút xuất phát đến nút đích đi qua nút n Nếu thuật toán A dùng hàm đánh giá f, thì nó được gọi là thuật toán A*
1.1.2 Tính đơn nhất
Khi có một trạng thái được phát hiện nhờ sử dụng tìm kiếm heuristic, liệu có bảo đảm rằng về sau sẽ không tìm được một trạng thái như vậy với khoảng cách ngắn hơn tính từ trạng thái xuất phát Đây chính là thuộc tính của sự đơn nhất Nói cách khác, tính đơn nhất của một heuristic là nó sẽ bảo đảm đường đi ngắn nhất đến mỗi trạng thái
Một heuristic h sẽ là đơn nhất nếu:
- Đối với tất cả các trạng thái n và n+1, ta có:
h(n) - h(n+1)< c(n, n+1)
Trong đó: c(n, n+1) là chi phí thực tính của đường đi từ trạng thái n đến trạng thái n+1
- Giá trị heuristic của trạng thái đích là 0, tức h(goal) = 0
1.1.3 Khả năng cập nhật thông tin
Chúng ta có thể đặt câu hỏi liệu có một heuristic nào “tốt hơn” những cái khác không? Heuristic này tốt hơn heuristic kia theo ý nghĩa nào? Đây là khả
năng cung cấp thông tin của một heuristic Đối với hai heuristic h1 và h2, nếu
h1(n)< h2(n) ứng với tất cả các trạng thái n trong không gian tìm kiếm thì
heuristic h2 được gọi là có khả năng cung cấp thông tin nhiều hơn so với h1
1.1.4 Ví dụ
Cho bài toán 8 số với các hàm đánh giá như sau:
Trang 14Khi đó ta xét h(n) là các ô số không nằm đúng vị trí trong trạng thái đích
ta thực hiện di chuyển các ô số sao cho về trạng thái đích (xem Hình 1.1)
Trang 15Hình 1.1 Các bước di chuyển của các ô số
1.2 Các khái niệm cơ bản về lý thuyết đồ thị
1.2.1 Khái niệm về đồ thị
Là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh đó Được
mô tả hình thức: G = (V, E) V gọi là tập các đỉnh và E gọi là tập các cạnh Có thể coi E là tập các cặp (u, v) với u và v là hai đỉnh thuộc V
1.2.2 Phân loại đồ thị
Các loại đồ thị (Hình 1.2)
Hình 1.2 Biểu đồ phân loại đồ thị
Trang 16 Đơn đồ thị vô hướng
Đồ thị G=(V,E) được gọi là đơn đồ thị vô hướng:
V: Là tập các đỉnh
E: Là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V
Ví dụ: Cho đơn đồ thị vô hướng (Hình 1.3)
Hình 1.3 Đơn đồ thị vô hướng
Khi đó: V={1,2,3,4,5}
E={(1,2),(1,3),(1,5),(2,5),(3,4),(3,5),(4,5)}
Đa đồ thị vô hướng
Đồ thị G=(V,E) được gọi là đa đồ thị vô hướng:
V: Là tập các đỉnh
E: Là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V
Hai cạnh e 1 , e 2 gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Ví dụ: Cho đa đồ thị vô hướng (Hình 1.4)
Hình 1.4 Đa đồ thị vô hướng
Trang 17Khi đó: V={1,2,3,4,5}
E={(1,2),(1,3),(1,5),(2,5),(3,4),(3,5),(4,5),(1,2),(2,1),(5,2),(3,5)}
Giả đồ thị vô hướng
Đồ thị G=(V,E) được gọi là giả đồ thị vô hướng:
V: Là tập các đỉnh
E: Là các cặp không có thứ tự gồm hai phần tử không nhất thiết phải khác
nhau của V
Cạnh e được gọi là khuyên nêu nó có dạng: e=(u,u)
Ví dụ: Cho giả đồ thị vô hướng (xem Hình 1.5)
Hình 1.5 Giả đồ thị vô hướng
E: Là tập các cặp có thứ tự gồm hai phần tử khác nhau của V (tập các cung)
Ví dụ: Cho đơn đồ thị có hướng (xem Hình 1.6)
Hình 1.6 Đơn đồ thị có hướng
Trang 18E: Là tập các cặp có thứ tự gồm hai phần tử khác nhau của V (tập các cung)
Hai cạnh e 1 , e 2 gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Ví dụ: Cho đa đồ thị có hướng (Hình 1.7)
Trang 19Hình 1.8 Cho đồ thị
Khi đó: Deg(1)=2, Deg(2)=2, Deg(3)=3
Deg(4)=3, Deg(5)=3, Deg(6)=1, Deg(7)=0
Đỉnh treo: là đỉnh chỉ có duy nhất một cạnh liên thuộc với nó Đỉnh 6
Đỉnh cô lập: là đỉnh không có cạnh nào liên thuộc với nó Đỉnh 7
Trọng số (độ dài)
Trọng số: là mỗi cạnh được gắn với một giá trị nào đó, được gọi là trọng số (độ dài) hoặc các tên khác tùy theo ứng dụng
Ví dụ: Cho đồ thị để hiểu về trọng số (độ dài) ta xem Hình 2.7
Khi đó ta biết: (1,2)=a, (1,3)=b, (2,5)=e, (3,4)=c, (3,5)=d, (4,5)=f, (4,6)=g
Kề trong đồ thị có hướng
Giả sử u và v là hai đỉnh của đồ thị có hướng G và e=(u,v) là một cung
của đồ thị, khi đó ta nói:
- u và v kề nhau, cung e đi ra đỉnh u và đi vào v
- u là đỉnh đầu, V là đỉnh cuối của cạnh e
Đường đi, chu trình
Đường đi độ dài n từ đỉnh u đến đỉnh v trên đồ thị vô hướng G = (V,E) là
dãy theo đỉnh: x0, x1, xn Trong đó: u = x0,v= xn, (x0, x1, xn) ∈ E
Ví dụ: Cho đồ thị (Hình 1.9)
Khi đó: u gọi là đỉnh đầu, v gọi là đỉnh cuối của đường đi
Trang 20Hình 1.9 Cho đồ thị
Theo đỉnh: (1, 3, 4, 5, 6) Theo cạnh: (b, c, h, g)
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau
Chu trình được gọi là đơn nếu nó không đi qua một cạnh nào quá 1 lần
Chu trình đơn: (1, 2, 6, 3, 1) Không phải là chu trình đơn: (1, 3, 4, 5, 6, 3, 1) Đường đi: (4,2,1,3,5,6)
Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau
Chu trình: (2,1,3,5,6,2)
1.2.4 Một số dạng đồ thị đặc biệt
Một số dạng đồ thị đặc biệt được mô tả (Hình 1.10)
Hình 1.10 Biểu đồ các dạng đồ thị đặc biệt
Trang 21 Đồ thị đầy đủ
Là một đồ thị đơn vô hướng n đỉnh được gọi là đồ thị đầy đủ nêu 2 đỉnh
bất kỳ đều được nối với nhau bằng 1 cạnh Ký hiệu: K n (xem Hình 1.11)
Hình 1.11 Đồ thị đầy đủ K2, K3, K4
Đồ thị vòng
Một đồ thị đơn vô hướng n đỉnh được gọi là đồ thị vòng nếu nó duy nhất
một chu trình đơn đi qua tất cả các đỉnh Ký hiệu: C n (xem Hình 1.12)
Trang 22 Đồ thị siêu khối
Là đồ thị k= 2n đỉnh là đồ thị có các đỉnh được đánh số bằng các chuỗi nhị phân độ dài n Ký hiệu: Q n (xem Hình 1.14)
Hai đỉnh kề nhau nếu 2 chuỗi nhị phân tương ứng chỉ khác nhau 1 bit
Trang 23Giả sử G = (V, E) là một đơn đồ thị có số đỉnh là n, không mất tính tổng
quát có thể coi các đỉnh được đánh số 1, 2, , n Khi đó ta có thể biểu diễn đồ
thị bằng một ma trận vuông cấp n, A = [aij] Trong đó: aij = 1 nếu (i, j)∈ E, aij = 0 nếu (i, j)∉ E
Đối với đa đồ thị thì việc biểu diễn cũng tương tự trên, chỉ có điều nếu
như (i, j) là cạnh thì không phải ta ghi số 1 vào vị trí aij mà là ghi số cạnh nối giữa đỉnh i và đỉnh j
Ví dụ: Biểu diễn đồ thị dưới dạng ma trận liền kề (Hình 1.16)
Hình 1.16 Biểu diễn đồ thị dưới dạng ma trận liền kề
Ưu điểm của ma trận liền kề:
- Đơn giản, trực quan, dễ cài đặt trên máy tính
- Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc kiểm tra bằng một phép so sánh: a uv ≠ 0
Nhược điểm của ma trận liền kề:
- Tiêu tốn bộ nhớ: Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền
kề luôn luôn đòi hỏi n 2
ô nhớ để lưu các phần tử ma trận
- Khó làm việc với đồ thị có số lượng đỉnh lớn
Trang 24Khi đó, từ đồ thị (Hình 1.17) ta có danh sách kề (xem Bảng 1.1)
Ưu điểm: Dễ dàng duyệt tất cả các đỉnh kề với một đỉnh v cho trước, dễ dàng
duyệt tất cả các cạnh
Nhược điểm: Cài đặt danh sách kề có phần dài dòng hơn
Trang 25CHƯƠNG 2 THUẬT TOÁN A*
Chương này sẽ trình bày thuật toán A* giải quyết bài toán tìm đường đi ngắn nhất Xét ví dụ tìm đường đi ngắn nhất trên đồ thị sử dụng thuật toán A*
và Dijkstra từ đó so sánh, đánh giá được ưu, nhược điểm của hai thuật toán
Mô tả thuật toán A*, đưa ra ví dụ thực tế thấy rõ được quá trình thực thi thuật toán và đánh giá hiệu quả của các thuật toán tương ứng Các nội dung nghiên cứu trong chương này được tham khảo từ các tài liệu [1, 3, 4, 5, 6,7]
2.1 Bài toán
Cho đồ thị G=(V,E) và hai đỉnh a, b Tìm đường đi ngắn nhất nếu có đi
từ đỉnh a đến đỉnh b trong đồ thị G Giả sử n là một trạng thái đạt tới (có đường đi từ trạng thái ban đầu a tới n) Ta xác định hàm đánh giá:
f(n) = g(n) + h(n)
Trong đó:
g(n): Là chi phí từ nút gốc a tới nút hiện tại n
h(n): Chi phí ước lượng từ nút hiện tại n tới b
f(n): Chi phí tổng thể ước lượng của đường đi qua nút hiện tại a đến b Một ước lượng heuristic h(n) được xem là chấp nhận được nếu với mọi nút n:
0<h(n)< h*(n)
Trong đó: h*(n) là chi phí thật (thực tế) để đi từ nút n đến b
Ví dụ: Cho đồ thị như hình vẽ tìm đường đi ngắn nhất sử dụng Thuật toán A*
và Thuật toán Dijkstra Trạng thái ban đầu là A, trạng thái đích là B và so sánh (xem Hình 2.1)
Các số ghi trên các cạnh là chiều dài thực tế giữa 2 đỉnh kề nhau g(n)
Các số ghi trên đỉnh là chiều dài đánh giá từ đỉnh đó tới đỉnh B là h(n)
Yêu cầu tìm đường đi ngắn nhất sử dụng thuật toán A* và thuật toán Dijkstra và so sánh giữa hai thuật toán trên trong ví dụ này
Trang 26Hình 2.1 Đồ thị biểu diễn không gian trạng thái
Tìm đường đi ngắn nhất sử dụng Thuật toán A*:
Bước 1: Xuất phát từ A sinh ra các đỉnh C, D, E, F:
g(E) = g(A) + c(A,E) = 0 + 13 = 13;
f(E) = g(E) + h(E) = 13 +8 = 21;
g(F) = g(A) + c(A,F) = 0 + 20 = 20;
f(F) = g(F) + h(F) = 20 +7 = 27;
Hình 2.2 Đồ thị biểu diễn đường đi của bước 1
Trang 27Vì f(D) có giá trị bé nhất nên chọn đỉnh D ta có đường đi bước 1 (Hình 2.2)
Bước 2: Ta xét đỉnh D, sinh ra 2 đỉnh H và E:
g(H) = g(D) + c(H,D) = 7 + 8 = 15;
f(H) = g(H) + h(H) =15 +10 = 25;
g(E) = g(D) + c(E,D) = 7 + 4 = 11;
f(E) = g(E) + h(E) = 11 +8 = 19;
Hình 2.3 Đồ thị biểu diễn đường đi của bước 2
Vì f(E) có giá trị bé nhất nên chọn đỉnh E ta có đường đi bước 2 (Hình 2.3)
Bước 3: Ta xét đỉnh E sinh ra các đỉnh K, I:
g(K) = g(E) + c(E,K) = 11 + 4 = 15;
f(K) = g(K) + h(K) = 15 +2 = 17;
g(I) = g(E) + c(E,I) = 11 + 3 = 14;
f(I) = g(I) + h(I) = 14 +4 = 18;
Hình 2.4 Đồ thị biểu diễn đường đi của bước 3