Thuật toántìm kiếm leo đồi

Một phần của tài liệu Thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng (Trang 44)

Thuật toán tìm kiếm leo đồi là tìm kiếm theo độ sâu đƣợc hƣớng dẫn bởi hàm đánh giá. Song khác với tìm kiếm theo độ sâu, khi phát triển một đỉnh u thì bƣớc tiếp theo ta chọn trong số các đỉnh con của u, đỉnh có hứa hẹn nhiều nhất để phát

2.7.1. Thuật toán Input:

Đồ thị G = (V,E), đỉnh xuất phát n0. Hàm đánh giá h(n) đối với mỗi đỉnh n. Tập đỉnh đích DICH

Đƣờng đi từ đỉnh n0 đến DICH bool result = false;

openList.Push(n0); while (!openList.IsEmpty()) { node = openList.Pop(); if (node.Equals(n*)) { result = true; break; } closeList.Push(node); Stack list = new Stack(); for (n in Tn(node)) {

if (!openList.InList(n) && !closeList.InList(n)) {

n.Cost = node.Cost + Edge(node, n).Value + n.Huerictis; BeforeOfNode(n, node);

list.Push(n); }

}

list.Sort(SortType.DESCENDING);//sắp xếp các đỉnh phát triển tiếp theo theo thứ tự hàm đánh giá

while (!list.IsEmpty()) {

openList.Push(list.Pop());//chuyển các đỉnh tiếp theo vào danh sách OPEN theo thứ tự hàm đánh giá

} } if (result) { DisplayResult(); } else { NotFound(); } 2.7.2. Ví dụ Cho đồ thị nhƣ hình vẽ

Với giá trị Hueristic của mỗi đỉnh nhƣ sau

H(1) = 1 H(2) = 3 H(3) = 5 H(4) = 6 H(5) = 4 H(6) = 1 H(7) = 2 H(8) = 3 H(9) = 1 H(10) = 6

Đỉnh xuất phát là (1), đỉnh đích là (10) Kết quả

(1), (2), (5), (6), (10).

2.8. Thuật toán tìm kiếm với tri thức bổ sung

Thuật toán AT là thuật toán tìm kiếm đƣờng đi tốt nhất đối với các cây chỉ có thông tin về đỉnh, cung và giá thành cung. Nhƣng trong nhiều trƣờng hợp việc tìm kiếm đƣờng đi sẽ đƣợc định hƣớng rõ thêm nếu sử dụng các tri thức thu đƣợc dựa trên những hiểu biết về tình huống vấn đề ở mỗi bƣớc. Các thủ tục tìm kiểm dựa trên 3 cách tiếp cận:

− Không tính đến các tri thức bổ sung ngoài thông tin về đỉnh, cung, giá thành.

− Sử dụng tri thức bổ sung để tìm cách giải riêng biệt cho vấn đề mà bỏ

qua việc xây dựng cây biểu diễn cho vấn đề.

− Xây dựng biểu diễn vấn đề dƣới dạng cây có tính đến tri thức bổ sung trong cấu trúc cây hoặc giá thành các cung.

Chương 3

XÂY DỰNG ỨNG DỤNG 3.1. Phát biểu bài toán

Trong đời sống, chúng ta thƣờng gặp những tình huống nhƣ sau: để đi từ địa điểm A đến địa điểm B trong thành phố, có nhiều đƣờng đi, nhiều cách đi; có lúc ta chọn đƣờng đi ngắn nhất (theo nghĩa cự ly), có lúc lại cần chọn đƣờng đi nhanh nhất (theo nghĩa thời gian) và có lúc phải cân nhắc để chọn đƣờng đi rẻ tiền nhất (theo nghĩa chi phí), v.v...

Có thể coi sơ đồ của đƣờng đi từ A đến B trong thành phố là một đồ thị, với đỉnh là các giao lộ (A và B coi nhƣ giao lộ), cạnh là đoạn đƣờng nối hai giao lộ. Trên mỗi cạnh của đồ thị này, ta gán một số dƣơng, ứng với chiều dài của đoạn đƣờng, thời gian đi đoạn đƣờng hoặc cƣớc phí vận chuyển trên đoạn đƣờng đó, ...

Đồ thị có trọng số là đồ thị G=(V, E) mà mỗi cạnh (hoặc cung) eE đƣợc gán bởi một số thực m(e), gọi là trọng số của cạnh (hoặc cung) e.

Trong phần này, trọng số của mỗi cạnh đƣợc xét là một số dƣơng và còn gọi là chiều dài của cạnh đó. Mỗi đƣờng đi từ đỉnh u đến đỉnh v, có chiều dài là m(u,v), bằng tổng chiều dài các cạnh mà nó đi qua. Khoảng cách d(u,v) giữa hai đỉnh u và v là chiều dài đƣờng đi ngắn nhất (theo nghĩa m(u,v) nhỏ nhất) trong các đƣờng đi từ u đến v.

Có thể xem một đồ thị G bất kỳ là một đồ thị có trọng số mà mọi cạnh đều có chiều dài 1. Khi đó, khoảng cách d(u,v) giữa hai đỉnh u và v là chiều dài của đƣờng đi từ u đến v ngắn nhất, tức là đƣờng đi qua ít cạnh nhất.

Cho đơn đồ thị liên thông, có trọng số G=(V, E). Tìm khoảng cách d(u0,v) từ một đỉnh u0 cho trƣớc đến một đỉnh v bất kỳ của G và tìm đƣờng đi ngắn nhất từ u0 đến v. (adsbygoogle = window.adsbygoogle || []).push({});

3.2. Giải quyết bài toán

- Cách xây dựng bài toán dựa vào các thuật toán đã xét ở chƣơng 2

- Đồ thị đƣợc xây dựng dựa vào các điểm, đƣờng nối giữa các điểm và cách chọn điểm đầu, điểm cuối từ đó ta xây dựng form giao diện của chƣơng trình:

Hình 12. Form tìm kiếm đƣờng đi theo chiều rộng

Hình 14. Form tìm kiếm đƣờng đi theo chiều sâu dần với độ sâu tối đa = 4

Hình 16. Form tìm kiếm đƣờng đi theo thuật toán AT

KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN

Trong thời gian vừa qua, em đã tìm hiểu đƣợc các nội dung sau:  Các khái niệm cơ bản về lý thuyết đồ thị

 Thuật toán tìm kiếm Breath First Search (BFS)  Thuật toán tìm kiếm Depth First Search (DFS)  Thuật toán tìm kiếm Depthwise Search

 Thuật toán tìm kiếm tốt nhất đầu tiên

 Thuật toán tìm đƣờng đi có giá thành nhỏ nhất AT

 Tìm kiếm cực tiểu sử dụng hàm đánh giá - Thuật toán A*  Thuật toán tìm kiếm leo đồi

 Thuật toán tìm kiếm với tri thức bổ sung  Xây dựng ứng dụng

Thuật toán tìm đƣờng đi ngắn nhất là một phần rất quan trọng của thuật toán tìm đƣờng đi nói riêng và trí tuệ nhân tạo nói chung.

Trong khoá luận mới chỉ là thử nghiệm trên một số thuật toán nhƣ thuật toán tìm kiếm Breath First Seach, thuật toán tìm kiếm Depth First Search, thuật toán tìm kiếm tốt nhất đầu tiên, thuật toán tìm đƣờng đi có giá thành nhỏ nhất AT, tìm kiếm cực tiểu sử dụng hàm đánh giá - thuật toán A*, thuật toán tìm kiếm leo đồi, thuật toán tìm kiếm với tri thức bổ sung.

Hƣớng phát triển của khoá luận:

 Nâng cao hiệu quả trong việc tìm đƣờng đi ngắn nhất.  Tìm hiểu thêm thuật toán tìm đƣờng đi ngắn nhất.  Phát triển thêm các chức năng của ứng dụng.

TÀI LIỆU THAM KHẢO

1. Trí tuệ nhân tạo – Đinh Mạnh Tƣờng 2. Trí tuệ nhân tạo – George F. Luger 3. Trí tuệ nhân tạo – Nguyễn Thanh Thủy

4. Giáo trình nhập môn Trí tuệ nhân tạo – Hoàng Kiếm

5. Artificial Intelligence, A Modern Approach - Stuart J. Russell

6. Giáo trình toán rời rạc - Khoa Toán – Cơ - Tin học, Công nghệ Thông tin và Vật lý (Trƣờng Đại học Khoa học-Đại học Huế)

Một phần của tài liệu Thuật toán tìm đường đi ngắn nhất và xây dựng ứng dụng (Trang 44)