You are on page 1of 18

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG


-----š›&š›-----

BÁO CÁO BÀI TẬP LỚN

TRÍ TUỆ NHÂN TẠO


Đề tài: Heuristic, các thuật toán tìm đường đi ngắn nhất

Giáo viên hướng dẫn: Nguyễn Vũ Hải


Sinh viên thực hiện: Hà Bảo Khiêm – 20187175
Đặng Văn Dũng – 20187163
Phạm Thị Quyên – 20187195
I. Phần mở đầu:
Ngày nay, khi công nghệ đang trong giai đoạn phát triển mạnh hơn bao giờ
hết, dẫn đến các tập ngành kinh tế phát triển rất phong phú, đa dạng và đan xen
lẫn nhau. Việc 1 chiếc điện thoại có thể vừa dùng để chụp ảnh, vừa dùng để nhắn
tin, nghe gọi và kể cả tìm kiếm thông tin nóng hổi hiện nay đã không còn quá xa lạ
với mọi người. Không chỉ có điện thoại mà mọi hoạt động sản xuất hiện nay, đều
có sự hiện diện của máy móc. Ví dụ như: sản xuất ô tô, dược phẩm, thực phẩm
chức năng, đồ điện tử…vv hoàn toàn sử dụng bằng máy móc. Công cuộc sản xuất
sản phẩm vô cùng quan trong, thế nhưng nếu chỉ sản xuất mà không phân phối
đưa đến tay người tiêu dung thì thật phí phạm. Việc phân phối, vận chuyển thế
nào cho hiệu quả luôn là bài toán lớn cho mỗi doanh nghiệp phải suy nghĩ. Ban
đầu, ta phải hiểu thế nào là phân phối hiệu quả? Phân phối hiệu quả là việc điều
tiết hàng hoá theo một trật tự nhất định mà không để lại hậu quả nhất định, Phân
phối hiệu quả là việc điều tiết hàng hoá theo một trật tự nhất định mà không tốn
quá nhiều chi phí vận chuyển, đúng thời gian. Để giải quyết vấn đề đó, những
phần mềm AI tìm đường đi ngắn nhất ra đời.

II. Tổng quan về trí tuệ nhân tạo tìm đường đi ngắn
nhất:

1. Thế nào là trí tuệ nhân tạo (AI) tìm đường đi ngắn nhất:
Là việc máy tính sử dụng các giải thuật sẵn có và tính toán quãng đường di
chuyển và tự nhận định con đường ngắn nhất, hiển thị lên màn hình thông báo
cho người dùng nắm rõ thông tin.
Các ứng dụng thực tiễn:
 Google map sử dụng trí tuệ nhân tạo tìm đường đi ngắn nhất.
 Các ứng dụng Be, Grab, Uber sử dụng Google map để tìm đường đi ngắn
nhất, hỗ trợ việc di chuyển, đưa đón hành khách.
2. Tổng quan về giải thuật tìm kiếm Heuristic:
Trong ngành khoa học máy tính một giải thuật tìm kiếm là một thuật toán lấy đầu
vào là một
bài toán và trả về kết quả là một lời giải cho bài toán đó, thường là sau khi cân
nhắc giữa một loạt các lời giải có thể. Hầu hết các thuật toán được nghiên cứu bởi
các nhà khoa học máy tính để giải quyết các bài toán đều là các thuật toán tìm
kiếm tập hợp tất cả các lời giải có thể đối với một bài toán được gọi là không gian
tìm kiếm thuật toán thử sai (brute-force search) hay các thuật toán tìm kiếm "sơ
đẳng" không có thông tin sử dụng phương pháp đơn giản nhất và trực quan nhất
trong khi đó, các thuật toán tìm kiếm có thông tin sử dụng heuristics để áp dụng
các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết
cho việc tìm kiếm.
2.1. Heuristic:
George Polya định nghĩa heuristic là “sự nghiên cứu về các phương pháp và các
qui tắc trong việc khám phá và phát minh” (Polya 1945) nghĩa này có thể xuất
phát từ gốc Hy Lạp của động từ eurisco nghĩa là “tôi phát hiện”.
Trong tìm kiếm không gian trạng thái, heuristic là các luật dùng để chọn những
nhánh nào có nhiều khả năng nhất dẫn đến một giải pháp chấp nhận được:
- Heuristic chỉ là một phỏng đoán chứa các thông tin về bước tiếp theo sẽ được
chọn dùng trong việc giải quyết một vấn đề.
- Heuristic là những tri thức được rút ra từ những kinh nghiệm, “trực giác” của
con người
- Heuristic có thể là những tri thức đúng hoặc sai
Vì các heuristic sử dụng những thông tin hạn chế nên chúng ít khi có khả năng
đoán trước chính xác cách hành xử của không gian trạng thái ở những giai đoạn
xa hơn
2.2. Chức năng của Heuristic:
Các chương trình giải quyết những vấn đề trí tuệ nhân tạo sử dụng Heuristic cơ
bản theo hai dạng:
- Vấn đề có thể không có giải pháp chính xác vì những điều không rõ ràng
trong diễn đạt vấn đề hoặc trong các dữ liệu có sẵn.
- Vấn đề có thể có giải pháp chính xác, nhưng chi phí tính toán để tìm ra nó
không cho phép.

2.3. Ưu điểm của thuật giải Heuristic:


Thuật giải Heuristic thể hiện cách giải bài toán với các đặc tính sau:
- Thường tìm được lời giải tốt (Nhưng không chắc là lời giải tốt nhất)
- Giải bài toán theo thuật giải Heuristic thường dễ dàng và nhanh chóng đưa ra
kết quả hơn so với giải thuật tối ưu, vì vậy chi phí thấp hơn.
- Thuật giải Heuristic thường thể hiện khá tự nhiên, gần gũi với cách suy nghĩ và
hành động con người
2.4. Phương pháp xây dựng thuật giải Heuristic:
Thuật giải Heuristic gồm hai phần: Hàm đánh giá Heuristic và thuật toán để sử
dụng nó trong tìm kiếm không gian trạng thái. Có nhiều các để xây dựng một
thuật giải Heuristic, trong đó người ta thường dựa và một số nguyên lý cơ bản
như sau:
- Nguyên lý vét cạn thông minh: Trong một bài toán tìm kiếm nào đó, khi không
gian tìm kiếm lớn, ta thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực
hiện một kiểu dò tìm đặc biệt dựa vào đặc thù của bài toán để nhanh chóng tìm ra
mục tiêu
- Nguyên lý tham lam (Greedy): lấy tiêu chuẩn tối ưu (Trên phạm vi toàn cục) của
bàitoán để làm tiêu chuẩn chọn lựa hành động cho phạm vi cục bộ của từng bước
(Hay từng giai đoạn) trong quá trình tìm kiếm lời giải
- Nguyên lý thứ tự: thực hiện hành động dựa trên một cấu trúc thứ tự hợp lý của
không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt
2.5. Tìm kiếm kinh nghiệm (Heuristic Search) :
Các kỹ thuật tìm kiếm sử dụng hàm đánh giá để hướng dẫn sự tìm kiếm được gọi
chung là các
kỹ thuật tìm kiếm kinh nghiệm (heuristic search). Các giai đoạn cơ bản để giải
quyết vấn đề
bằng tìm kiếm kinh nghiệm như sau:
- Tìm biểu diễn thích hợp mô tả các trạng thái và các toán tử của vấn đề.
- Xây dựng hàm đánh giá.
- Thiết kế chiến lược chọn trạng thái để phát triển ở mỗi bước.
3. Các thuật toán sử dụng
- Astar
- Breadth First - Search
- Depth Limited Search
- Greedy Best First Search
- Interative Depth First Search
- Uniform Cost Search

III, Các giải thuật có thể áp dụng trong tìm đường đi


ngắn nhất:

Tổng quan về bài toán:


Trong lý thuyết đồ thị, 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. Định nghĩa một cách hình thức, cho trước một đồ thị có trọng số (gồm một
tập đỉnh V, một tập cạnh E) . Kí hiệu w (i,j) là trọng số của cạnh (i,j). và độ dài
đường đi là
sao cho:

là nhỏ nhất

Giải thuật tổng quát:


1. Thuật toán Astar: A*
* Mô tả:
- Thuật toán A * là có lẽ là một trong những thuật toán tìm đường được sử dụng
nhiều nhất hiện nay, nó đảm bảo tìm ra con đường tốt nhất giữa bất kỳ điểm xuất
phát nào và bất kỳ điểm kết thúc. Vì vậy nó được sử dụng nhiều trong các ứng
dụng khác nhau như game, bản đồ…
- Để biết những tuyến đường nào có khả năng sẽ dẫn tới đích, A* sử dụng một
"đánh giá heuristic" về khoảng cách từ điểm bất kỳ cho trước tới đích. Trong
trường hợp tìm đường đi, đánh giá này có thể là khoảng cách đường chim bay -
một đánh giá xấp xỉ thường dùng cho khoảng cách của đường giao thông.

Thứ tự ưu tiên cho một đường đi đươc quyết định bởi hàm Heuristic được đánh
giá: f(x) = g(x) + h(x)
g(x) là chi chi phí của đường đi từ điểm xuất phát cho đến thời điểm hiện tại.
h(x) là hàm ước lượng chi phí từ đỉnh hiện tại đến đỉnh đích
f(x) là tổng của h và g, thường có giá trị càng thấp thì độ ưu tiên càng cao.

* Ưu điểm:
- Thuật toán A* có tính đến khoảng cách đã đi qua, điều này khiến cho A* trở nên
đầy đủ và tối ưu.
- Luôn tìm thấy đường đi ngắn nhất nếu nó tồn tại.
* Nhược điểm:
- Nếu không gian các trạng thái là hữu hạn, vô hạn và không có giải pháp để tránh
việc xét (lặp) lại các trạng thái, thì giải thuật A * là không hoàn chỉnh
- Không đảm bảo sẽ chạy nhanh hơn các thuật toán tìm kiếm đơn giản hơn

* Mô tả thuật toán:

1. Open: tập các trạng thái đã được sinh ra nhưng chưa được xét đến.
2. Close: tập các trạng thái đã được xét đến.
3. Cost(p, q): là khoảng cách giữa p, q.
4. g(p): khoảng cách từ trạng thái đầu đến trạng thái hiện tại p.
5. h(p): giá trị được lượng giá từ trạng thái hiện tại đến trạng thái đích.
6. f(p) = g(p) + h(p)
o Bước 1:
 Open: = {p}
 Close: = {}
o Bước 2: while (Open !={})
 Chọn trạng thái (đỉnh) tốt nhất p trong Open (xóa p khỏi Open).
 Nếu p là trạng thái kết thúc thì thoát.
 Chuyển p qua Close và tạo ra các trạng thái kế tiếp q sau p.
 Nếu q đã có trong Open
 Nếu g(q) > g(p) + Cost(p, q)
 g(q) = g(p) + Cost(p, q)
 f(q) = g(q) + h(q)
 prev(q) = p (đỉnh cha của q là p)
 Nếu q chưa có trong Open
 g(q) = g(p) + cost(p, q)
 f(q) = g(q) + h(q)
 prev(q) = p
 Thêm q vào Open
 Nếu q có trong Close
 Nếu g(q) > g(p) + Cost(p, q)
 Bỏ q khỏi Close
 Thêm q vào Open
o Bước 3: Không tìm được.

- Ý tưởng là tìm kiếm không gian trạng thái và tìm con đường ngắn nhất đến trạng
thái mục tiêu.
- Trong quá trình tìm kiếm, ta sẽ theo dõi 2 danh sách các trạng thái, các nút.
Danh sách đầu tiên là OPEN list, danh sách này lưu trữ các nút đã tạo bằng cách
sử dụng các quy tắc từ một nút hiện có, nhưng chúng tôi chưa biết chúng dẫn đến
đâu; danh sách thứ hai là các nút mà ta đã tạo bằng việc khám phá vị trí của
chúng.
- Mỗi trạng thái được lưu trữ cùng với một số dữ liệu bổ sung cần thiết để tìm
kiếm. Điều đầu tiên được yêu cầu là một con trỏ cha. Chúng ta cần biết cách để
đến được nút này, vì kết quả cuối cùng của việc tìm ra trạng thái mục tiêu sẽ là
tạo ra một đường dẫn trở lại điểm bắt đầu.
- Theo dõi nút nào được đặt trong gốc nút này cho phép thực hiện việc này. Nút
này cũng có ba xếp hạng được sử dụng trong quá trình tìm kiếm là chi phí của nút,
ước tính heuristic của nút này và 'f' là tổng của hai điểm kia.
- Hàm uớc tính heuristic có thể phức tạp hơn nhiều mà chúng ta đã thấy. Chúng ta
có thể đoán xem nút này tốt như thế nào bằng cách nó gần mục tiêu. Cuối cùng là
xếp hạng nút để thể hiện mức độ tốt của nó về mặt chi phí để đi đến đó và
khoảng cách gần với mục tiêu mà ta cần đi đến. Đảm bảo trong suốt quá trình tìm
kiếm luôn đi theo con đường tối ưu nhất.

2, Breadth-First Search (BFS):


- Là một thuật toán tìm kiếm trong đó việc tìm kiếm chỉ bao gồm 2
thao tác:
 (a) Cho trước một đỉnh của đồ thị.
 (b) Thêm các đỉnh kề với đỉnh vừa cho vào danh sách có thể
hướng tới tiếp theo.
Thuật giải:
Để cài đặt các thuật giải theo kiểu tìm kiếm BFS, người ta thường cần dùng 2 tập
hợp sau:
OPEN: tập chứa các trạng thái đã được sinh ra nhưng chưa được xét đến (vì ta đã
chọn một trạng thái khác). Thực ra, OPEN là một loại hàng đợi ưu tiên (priority
queue) mà trong đó, phần tử có độ ưu tiên cao nhất là phần tử tốt nhất người ta
thường cài đặt hàng đợi ưu tiên bằng Heap các bạn có thể tham khảo thêm trong
các tài liệu về Cấu trúc dữ liệu về loại dữ liệu này.
CLOSE: tập chứa các trạng thái đã được xét đến chúng ta cần lưu trữ những trạng
thái này trong bộ nhớ để đề phòng trường hợp khi một trạng thái mới được tạo
ra lại trùng với một trạng thái mà ta đã xét đến trước đó trong trường hợp không
gian tìm kiếm có dạng cây thì không cần dùng tập này.
* Thuật giải BEST-FIRST SEARCH
1. Đặt OPEN chứa trạng thái khởi đầu.
2. Cho đến khi tìm được trạng thái đích hoặc không còn nút nào trong OPEN, thực
hiện:
a) Chọn trạng thái tốt nhất (Tmax) trong OPEN (và xóa Tmax khỏi OPEN)
b) Nếu Tmax là trạng thái kết thúc thì thoát.
c) Ngược lại, tạo ra các trạng thái kế tiếp Tk có thể có từ trạng thái Tmax. Đối với
mỗi trạng thái kế tiếp Tk thực hiện: Tính f(Tk); Thêm Tk vào OPEN
Ví dụ:

- Khởi đầu, chỉ có một nút (trạng thái) A nên nó sẽ được mở rộng tạo ra 3 nút mới
B, C và D.
- Do D là nút có khả năng nhất nên nó sẽ được mở rộng tiếp sau nút A và sinh ra 2
nút kế tiếp là E và F.
- Đến đây, ta lại thấy nút B có vẻ có khả năng nhất (trong các nút B, C, E, F) nên ta
sẽ chọn mở rộng nút B và tạo ra 2 nút G và H.
- Hai nút G, H này được đánh giá ít khả năng hơn E, vì thế sự chú ý lại trở về E. E
được mở rộng và các nút được sinh ra từ E là I và J.
- Ở bước kế tiếp, J sẽ được mở rộng vì nó có khả năng nhất. Quá trình này tiếp tục
cho đến khi tìm thấy một lời giải.
3, Thuật toán Depth limited search
* Mô tả:
- Depth Limited Search là thuật toán tìm kiếm theo độ sâu và nó có thể khắc
phục bằng cách áp đặt một ranh giới hoặc giới hạn cho độ sâu của miền tìm
kiếm. Việc đặt giới hạn độ sâu làm cho chiến lược tìm kiếm DFS trở nên tinh tế
hươn và được tổ chức thành một vòng lặp hữu hạn.
- Giới hạn độ sâu có thể bị chấm dứt với hai điều:
+) Giải quyết xong được vấn đề.
+) Xác định không có giải pháp cho vấn đề trong một giới hạn độ sâu đã
cho.
- DLS có thể được gọi là phiên bản mở rộng và tinh chỉnh của thuật toán DFS.
- Thích hợp với bài toán biết trước độ sâu tối đa và có nhiều trạng thái đích.
* Ưu điểm: tránh được trường hợp của đường dẫn vô hạn trong tìm kiếm theo
độ sâu.
* Nhược điểm: không đầy đủ, tốn thời gian, nó có thể không tối ưu nếu bài
toán có nhiều hơn một giải pháp.
*Mô tả thuật toán:
- Nút bắt đầu hoặc nút 1 được thêm vào đầu ngăn xếp. Sau đó, nó được đánh
dấu là đã truy cập và nếu nút 1 không phải là nút mục tiêu trong tìm kiếm, thì
chúng ta đẩy nút thứ hai 2 lên trên cùng của ngăn xếp.
- Tiếp theo, đánh dấu nó là đã thăm và kiểm tra xem nút 2 có phải là nút mục
tiêu hay không. Nếu nút 2 không được tìm thấy là nút mục tiêu thì ta đẩy nút 4
lên đầu ngăn xếp. Bây giờ chúng ta tìm kiếm trong cùng một giới hạn độ sâu và
di chuyển theo độ sâu để kiểm tra các nút mục tiêu.
- Nếu nút 4 cũng không được tìm thấy là nút mục tiêu và giới hạn độ sâu được
tìm thấy là đạt đến thì ta truy xuất trở lại các nút gần nhất mà vẫn chưa được
khám phá hoặc chưa được khám phá. Sau đó đẩy chúng vào ngăn xếp và đánh
dấu chúng đã ghé thăm.
- Tiếp tục thực hiện các bước này theo các cách lặp đi lặp lại trừ khi đạt đến
nút mục tiêu hoặc cho đến khi tất cả các nút trong giới hạn độ sâu đã được
khám phá cho mục tiêu.
- Khi so sánh các bước trên với DFS, ta có thể thấy rằng DLS cũng có thể được
thực hiện bằng cách sử dụng cấu trúc dữ liệu hàng đợi. Ngoài ra với mỗi cấp
độ của nút cần được tính toán để kiểm tra tính hữu hạn và tầm với của nút
mục tiêu từ nút nguồn.
4, Greedy Best-First Search (Greedy BFS)
Thuật toán sẽ sử dụng 1 hàm đánh giá là hàm Heuristic H(n). Hàm Heuristic này sẽ
đánh giá chi phí để đi từ nút hiện tại n đến nút mục đích (mục tiêu).
- Ví dụ: trong bài toán sử dụng H(n) = ước lượng khoảng cách đường thẳng
từ thành phố hiện tại n đến Buncharest. Phương pháp này sẽ xét các nút có
vẻ gần với nút đích nhất vì nó chỉ phát triển từ những nút có ước lượng tốt
nhất.

- Từ hình vẽ, giả sử bắt đầu từ Arad, đường đi thực tế đến Sibiu = 140,
điểm đích là Buncharest, ước lượng từ Arad đến đích là 366.
- Cách hoạt động của thuật toán:
 Bắt đầu từu Arad: TÌm các hang xóm của Arad và tính hàm ước lượng từ
các điểm đó tới đích.

 Ta thấy Sibiu có ước lượng nhỏ nhất, ta tiếp tục phát triển Sibiu.

 Tương tự với Fagaras.

* Ưu điểm:
- Nhanh, độ phức tạp thời gian: O(b^m).
- Một hàm heuristic tốt có thể mang lại cải thiện lớn.
* Nhược điểm:
- Không tối ưu.
- Chưa hoàn chỉnh, có thể vướng trong các vòng lặp vô hạn (VD: Lasi -> Neamt ->
Lasi -> Neamt -> …).
5, Iterative Depth – First Search (IDFS):
- Giống với DFS nhưng không bao giờ mở rộng các nút có độ sâu quá một giới
hạn nào đó, giới hạn độ sâu sẽ được tăng dần cho đến khi tìm được lời giải.
- Thích hợp với bài toán cây tìm kiếm có độ sâu lớn
- Tối ưu, có tính đầy đủ
*Mô tả thuật toán:
- Tương tự như DFS nhưng độ sâu tìm kiếm sẽ được tăng dần khi chưa tìm
được lời giải. Quá trình lặp đi lặp lại với độ sâu lần lượt là 1, 2, 3 … đến một độ
sâu nào đó.
Thuật giải:
fringe là một cấu trúc hàng đợi, trong đó các phần tử được sắp xếp theo chi
phí đường đi

Ví dụ:
6, Thuật toán Uniform Cost Search:
1. Khái niệm
Thuật toán Uniform Cost Search (hay còn gọi là tìm kiếm chi phí cực tiểu hoặc tìm
kiếm theo giá thành thống nhất, viết tắt tiếng Anh là UCS) là một cách duyệt cây
dùng cho việc duyệt hay tìm kiếm một cây, cấu trúc cây, hoặc đồ thị có trọng
lượng (chi phí). Việc tìm kiếm bắt đầu tại nút gốc và tiếp tục bằng cách duyệt các
nút tiếp theo với trọng lượng hay chi phí thấp nhất tính từ nút gốc. Các nút được
duyệt tiếp tục cho đến khi đến được nút đích cần đến.
2. Thuật toán
- Định nghĩa: Hàng đợi ưu tiên Priority Queue là cấu trúc dữ liệu lưu trữ các phần
tử cùng với độ ưu tiên của nó và khi lấy phần tử ra khỏi hàng đợi sẽ căn cứ vào độ
ưu tiên nhỏ nhất.
Cho một trạng thái n, ký hiệu g(n) là tổng chi phí đường đi ngắn nhất (hiện có) từ
trạng thái ban đầu S đến trạng thái n. Thuật toán UCS sử dụng một hàng đợi ưu
tiên (Priority Queue – PQ) để lưu trữ và duyệt các trạng thái trên đường đi. Thuật
toán dùng thêm một danh sách CLOSE để lưu trữ các trạng thái đã được xét

MÃ GIẢ:
- Khởi tạo: Priority Queue (PQ) rỗng, CLOSE rỗng.
- Đưa trạng thái ban đầu START vào PQ, độ ưu tiên g(START) = 0
- Lấy một trạng thái n (có g thấp nhất) ra khỏi PQ. Đưa n vào CLOSE.
- Nếu n là trạng thái đích GOAL thì “đã tìm thấy”. Dừng thuật toán.
- Nếu không, với mỗi trạng thái con n’ chưa xét (n’ không thuộc CLOSE) của n:
+ Tính độ ưu tiên: g(n’) = g(n) + cost(n, n’)
+ đưa (n’, g(n’)) vào PQ
- Lặp đến khi PQ rỗng.
- Thông báo không có đường đi từ START đến GOAL.
Ví dụ: Cho đồ thị, nút gốc là A, duyệt và tìm đường đi đến G với chi phí thấp nhất.
Bảng dưới đấy mô tả các bước duyệt đồ thị
VI. KẾT LUẬN
Các heuristic và việc thiết kế thuật toán để thực hiện tìm kiếm heuristic từ lâu đã
là sự quan tâm chủ yếu của các công trình nghiên cứu trí tuệ nhân tạo chơi game
và chứng minh định lý là hai ứng dụng lâu đời nhất, cả hai đều cần đến các
heuristic để thu giảm bớt không gian giải pháp có thể không thể nào kiểm tra hết
mọi suy luận có thể sinh ra trong lĩnh vực toán hoặc mọi nước đi có thể có trên
bàn cờ vua, tìm kiếm heuristic thường là câu trả lời thực tế duy nhất gần đây việc
tìm kiếm trong các hệ chuyên gia cũng xác nhận mức độ quan trọng của các
heuristic như là một phần không thể thiếu trong quá trình giải quyết vấn đề.
TÀI LIỆU THAM KHẢO:
1, Iterative deepening depth-first search - Wikipedia
2, thuật toán tìm kiếm greedy best-first search – Blog Lập Trình (wordpress.com)
3, Iterative Depth First Traversal of Graph - GeeksforGeeks
4, (PDF) Giải quyết vấn đề bằng tìm kiếm Nhập môn trí tuệ nhân tạo | KogMaw
Devil - Academia.edu
5, Uniform Cost Search | Algorithm of Uniform Cost Search (educba.com)
6, Tìm kiếm chi phí đều – Wikipedia tiếng Việt
7, Tìm kiếm theo chiều rộng – Wikipedia tiếng Việt
8,https://web.archive.org/web/20000528203204/http://www.geocities.com/jhey
esjones/astar.html
9,https://www.educative.io/edpresso/what-is-the-a-star-algorithm

You might also like