Thuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hayThuật toán UCS, thuật toán cổ điển hay
Trang 1Môn: Trí tuệ nhân tạo Lớp TH2006/01,02
Nguyễn Ngọc Thảo, Võ Đình Phong, Lê Ngọc Thành, Trần Ngọc Trung
Bài tập thực hành 2
Thuật toán UCS
Nội dung
Cài đặt thuật toán tìm kiếm đường đi chi phí đồng nhất áp dụng trên bài toán đồ thị
Mục tiêu
- Sinh viên nắm được cơ chế vận hành của thuật toán tìm kiếm đường đi chi phí đồng nhất, áp dụng lên một dạng bài toán tìm kiếm cụ thể là tìm kiếm trên đồ thị
- Sinh viên chọn cách lưu trữ dữ liệu và triển khai cài đặt phù hợp khi chuyển từ bài toán đồ thị không trọng số sang đồ thị có trọng số
Yêu cầu
Cho một bản đồ có N thành phố và các đường đi có thể có giữa các thành phố.Chi phi di chuyển giữa hai thành phố kế cận nhau là w (w > 0), các đường đi có thể là 2 chiều (A đến được B thì B cũng đến được A), hoặc 1 chiều (chỉ có A đến được B) Cho trước thành phố xuất phát và thành phố đích
Hãy tìm đường đi giữa hai thành phố được chỉ định bằng thuật toán UCS Nếu tồn tại đường đi: xuất ra màn hình thứ tự đường đi và chi phí của đường đi này Nếu không tồn tại đường đi: thông báo không có đường đi
Định dạng dữ liệu đầu vào:
¾ Dòng 1: Số thành phố trên bản đồ
¾ Dòng 2: Thành phố xuất phát và thành phố đích
¾ N dòng tiếp theo: ma trận kề của đồ thị với quy ước:
9 M[i][j] = w: có đường nối trực tiếp từ i đến j với chi phí là w (w > 0)
9 M[i][j] = 0: không có đường nối trực tiếp từ i đến j Các thành phố được đánh chỉ số từ 0
Thời gian: 1 tuần
Quy định nộp: [không nộp bài]
Trang 2Môn: Trí tuệ nhân tạo Lớp TH2006/01,02
Nguyễn Ngọc Thảo, Võ Đình Phong, Lê Ngọc Thành, Trần Ngọc Trung
Ví dụ
START
GOAL
d b
p
q
c
e
h
a
f
r
2
8 1
1
2
3
5 3
4 4
15 1
2
5 2
START
GOAL
d b
p
q
c
e
h
a
f
r
START
GOAL
d b
p
q
c
e
h
a
f
r
2
8 1
1
2
3
5 3
4 4
15 1
2
5 2
Đường đi ngắn nhất từ START tới GOAL là:
START Æ d Æ e Æ h Æ q Æ r Æ f Æ GOAL, chi phí: 23
Các vấn đề khác
Vấn đề cài đặt hàng đợi ưu tiên: trong bài toán tìm đường đi ngắn nhất trên đồ thị, mục tiêu tại mỗi bước đi là tìm ra đường đi kế tiếp sao cho tổng chi phí tới thời điểm đang xét là nhỏ nhất Cấu trúc hàng đợi ưu tiên được thiết kế nhằm đẩy ra phần tử có chi phí nhỏ nhất Vấn đề đặt ra ở đây là: Tổ chức cấu trúc dữ liệu lưu trữ hàng đợi bằng gì? Để tìm ra phần tử nhỏ nhất, cần tìm kiếm trên hàng đợi hay sắp xếp lại hàng đợi mỗi khi có thao tác vào/ra? Nếu tìm kiếm thì tìm kiếm tuyến tính, hay dùng bảng băm? Nếu sắp xếp thì sắp xếp như thế nào để chi phí lấy ra hoặc đưa phần tử mới vào không quá lớn?
Vấn đề cài đặt tập đóng: cấu trúc tập đóng được đưa ra để lưu lại các trạng thái đã duyệt qua để tránh trường hợp mở lại không cần thiết Tập đóng này sẽ được duyệt đi duyệt lại nhiều lần trong quá trình thực hiện thuật toán Sinh viên cần suy nghĩ xem nên lưu trữ tập đóng như thế nào để có thể tìm kiếm nhanh và ít tốn chi phí (ví dụ: tìm tuyến tính so với sử dụng hàm băm…)
Liên hệ với thuật toán A*: về bản chất thuật toán, UCS và A* có gì giống và khác nhau? Ta có thể tận dụng phần cài đặt của UCS để phát triển lên A* hay không, nếu có thì cần chỉnh sửa những gì? (Sử dụng hàng đợi/stack, có cần thay đổi cấu trúc tập đóng hay không, cách tính chi phí có khác hay không?)