Các hệ thống thông minh nhân tạo và ứng dụng Các hệ thống thông minh nhân tạo và ứng dụng Khoa CNTT, ĐH KHTN HCM 1 HƯỚNG DẪN THỰC HÀNH TÌM KIẾM VỚI CHI PHÍ ĐỒNG NHẤT UCS 1 Các cấu trúc dữ liệu cần dùn[.]
Các hệ thống thông minh nhân tạo ứng dụng HƯỚNG DẪN THỰC HÀNH TÌM KIẾM VỚI CHI PHÍ ĐỒNG NHẤT - UCS Các cấu trúc liệu cần dùng 1.1 Cấu trúc biểu diễn thông tin đoạn đường Class MyStreet { private: int vertex1; int vertex2; char name[100]; float length; }; 1.2 Cấu trúc biễu diễn đồ thị class MyGraph { int N; //Số đỉnh (số giao lộ) float A[MAX][MAX]; //Ma trận trọng số }; 1.3 Cấu trúc lưu giữ thông tin hàng đợi class NODE { private: int vertex; float cost; }; //thông tin trạng thái //Chi phí từ START đến trạng thái 1.4 Hàng đợi ưu tiên (Priority Queue) Tính chất cần để ý hàng đợi ưu tiên lấy phần tử khỏi hàng đợi ta lấy phần tử có chi phí thấp Sinh viên tự cài đặt hàng đợi ưu tiên sử dụng thư viện hỗ trợ sẵn Chú ý thay lưu số nguyên phải lưu NODE Một số hàm cần dùng 2.1 Hàm đọc thông tin từ file input void MyGraph::InputGraph(char* filename, int &start, int &end) { //1 Đọc dòng từ từ file lưu vào start, end //2 Đọc dòng từ từ file lưu vào g.N, g.M //3 Đọc M dòng vào thông tin đoạn đường lưu vào g.arrStreets Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng //4 Xây dựng ma trận trọng số từ g.arrStreets } 2.2 Hàm chạy thuật toán UCS bool MyGraph::RunUCS(const int &start, const int &end, int* dinhTruoc); Cấu trúc liệu đánh dấu địa điểm/trạng thái viếng thăm, sinh viên sử dụng cách sau: o Mảng chiều: false chưa thăm true thăm Ban đầu, khởi gán phần tử mảng false o Bảng băm (map) bool MyGraph::RunUCS(const int &start, const int &end, int* dinhTruoc) { Khởi tạo hàng đợi ưu tiên pQueue Tạo NODE tương ứng với start thêm vào pQueue while(pQueue phần tử) { Lấy node s khỏi hàng đợi ưu tiên If s.vertex == end then return true Đánh dấu s.vertex viếng thăm For đỉnh u mà từ s.vertex có cạnh nối đến { If u chưa viếng thăm && không thuộc pQueue { Tạo node p ứng với đỉnh u: +p.vertex = u +p.cost = s.cost + g.A[s.vertex][u] Thêm p vào qQueue Cập nhật đỉnh trước u v Cập nhật chi phí UCS u } If u chưa viếng thăm && thuộc pQueue { s’ NODE u pQueue If (s.cost + g.A[s.vertex][u]) < s’.cost { Cập nhật s’: s’.cost = s.cost + g.A[s.vertex][u] Cập nhật đỉnh trước u v Cập nhật chi phí UCS u } } Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng } } return false; } Khoa CNTT, ĐH KHTN HCM ... không thuộc pQueue { Tạo node p ứng với đỉnh u: +p.vertex = u +p.cost = s.cost + g.A[s.vertex][u] Thêm p vào qQueue Cập nhật đỉnh trước u v Cập nhật chi phí UCS u } If u chưa viếng thăm && thuộc... chạy thuật toán UCS bool MyGraph::RunUCS(const int &start, const int &end, int* dinhTruoc); Cấu trúc liệu đánh dấu địa điểm/trạng thái viếng thăm, sinh viên sử dụng cách sau: o Mảng chi? ??u: false... s’.cost { Cập nhật s’: s’.cost = s.cost + g.A[s.vertex][u] Cập nhật đỉnh trước u v Cập nhật chi phí UCS u } } Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng } } return false;