TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI BÁO CÁO BÀI TẬP LỚN TRÍ TUỆ NHÂN TẠO Đề tài Tìm hiểu các thuật toán tìm kiếm mù và ứng dụng vào bài toán 3 tu sĩ và 3 con quỷ Giảng viên hướng dẫn ThS Lê Thị Thủy Sin.
Trang 1
Đ tài: ề tài:
Tìm hi u các thu t toán tìm ki m mù và ng d ng vào bài ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài ứng dụng vào bài ụng vào bài
toán 3 tu sĩ và 3 con quỷ
Gi ng viên h ảng viên hướng dẫn: ướng dẫn: ng d n: ẫn: ThS.Lê Th Th y ị Thủy ủy
Sinh viên th c hi n ực hiện ện : Đ ngVi t Anh ặngViệt Anh ệt Anh 2020601857
Trang 2
M c L c ục Lục ục Lục
L I NÓI Đ U ỜNG ĐẠI HỌC ẦU 2
CH ƯƠNG 1: TỔNG QUAN VỀ CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ NG 1: T NG QUAN V CÁC THU T TOÁN TÌM KI M MÙ TRONG Đ TÀI CÓ ỔNG QUAN VỀ CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ Ề CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ ẬP LỚN TRÍ TUỆ NHÂN TẠO ẾM MÙ TRONG ĐỀ TÀI CÓ Ề CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ TH ÁP D NG Ể ÁP DỤNG ỤNG 3
1.1 Thuật toán tìm kiếm theo chiều rộng (BFS) 3
1.1.1 Ý tưởng 3
1.1.2 Thuật toán 4
1.2 Thuật toán tìm kiếm theo chiều sâu (DFS) 4
1.2.1 Ý tưởng 4
1.2.2 Thuật toán 5
1.3 Thuật toán tìm kiếm sâu dần (IDS) 5
1.3.1 Ý tưởng 5
1.3.2 Thuật toán 6
CH ƯƠNG 1: TỔNG QUAN VỀ CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ NG 2: TÌM KI M THEO CHI U R NG (BFS) TRONG BÀI TOÁN 3 TU SĨ VÀ 3 ẾM MÙ TRONG ĐỀ TÀI CÓ Ề CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ ỘI CON QUỶ 7
2.1 Phân tích bài toán 7
2.2 Thuật toán Best-first Search 7
2.3 Giải thuật bài toán qua sông áp dụng thuật toán Best-first Search 8
T NG K T ỔNG QUAN VỀ CÁC THUẬT TOÁN TÌM KIẾM MÙ TRONG ĐỀ TÀI CÓ ẾM MÙ TRONG ĐỀ TÀI CÓ 16
1 | T r a n g
Trang 3L I NÓI Đ U ỜNG ĐẠI HỌC ẦU
Ngày nay cùng v i s phát tri n v khoa h c và kỹ thu t là s phát tri n m nhới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ề tài: ọc Đăng 2020600505 ật toán tìm kiếm mù và ứng dụng vào bài ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ạnh
mẽ c a n n công ngh thông tin Trong quá trình công nghi p hóa và hi n đ iề tài: ệt Anh ệt Anh ệt Anh ạnh hóa đ t nưới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnhc thì công ngh thông tin là không th thi u Cùng v i nó là s ra đ iệt Anh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ời
c a các ngành khoa h c ph c v cho l i ích và nhu c u c a con ngọc Đăng 2020600505 ụng vào bài ụng vào bài ợi ích và nhu cầu của con người.Với quá ầu của con người.Với quá ười ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnhi.V i quá trình phát tri n c a khoa h c kỹ thu t và công ngh thì ngành công ngh thôngểu các thuật toán tìm kiếm mù và ứng dụng vào bài ọc Đăng 2020600505 ật toán tìm kiếm mù và ứng dụng vào bài ệt Anh ệt Anh tin đóng vai trò quan tr ng trong vi c gi i quy t các v n đ khó khăn trong côngọc Đăng 2020600505 ệt Anh ải quyết các vấn đề khó khăn trong công ếm mù và ứng dụng vào bài ề tài:
vi c nh : k toán, qu n lý nhân s , đi u khi n t đ ng hóa… ệt Anh ư ếm mù và ứng dụng vào bài ải quyết các vấn đề khó khăn trong công ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ề tài: ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ộng hóa…
Trên th gi i cũng nh Vi t Nam, công ngh thông tin đã tr thành m t ngàyếm mù và ứng dụng vào bài ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ư ở Việt Nam, công nghệ thông tin đã trở thành một ngày ệt Anh ệt Anh ở Việt Nam, công nghệ thông tin đã trở thành một ngày ộng hóa… công nghi p mũi nh n, nó là m t ngày khoa h c kỹ thu t không th thi u trongệt Anh ọc Đăng 2020600505 ộng hóa… ọc Đăng 2020600505 ật toán tìm kiếm mù và ứng dụng vào bài ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài
vi c áp d ng vào các ho t đ ng xã h i và khoa h c.N n công nghi p hi n nayệt Anh ụng vào bài ạnh ộng hóa… ộng hóa… ọc Đăng 2020600505 ề tài: ệt Anh ệt Anh mang tính ch t t đ ng hóa cao kèm theo đó là s đòi h i v vi c ng d ng côngự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ộng hóa… ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ỏi về việc ứng dụng công ề tài: ệt Anh ứng dụng vào bài ụng vào bài ngh thông tin cho lĩnh v c này V y đ có th đáp ng t t nh ng yêu c u c aệt Anh ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ật toán tìm kiếm mù và ứng dụng vào bài ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ứng dụng vào bài ốc Ca ững yêu cầu của ầu của con người.Với quá ngày càng cao h n trong lĩnh v c t đ ng hóa ngơng Ngọc Đăng 2020600505 ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ộng hóa… ườii ta đã ti n hành l p trình choếm mù và ứng dụng vào bài ật toán tìm kiếm mù và ứng dụng vào bài
nh ng c máy, nh ng ngững yêu cầu của ỗ Quốc Ca ững yêu cầu của ườii máy có th t duy nh con ngểu các thuật toán tìm kiếm mù và ứng dụng vào bài ư ư ườii nh m gi m b tằm giảm bớt ải quyết các vấn đề khó khăn trong công ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh các gánh n ng công vi c.ặngViệt Anh ệt Anh
Vi c ng d ng trí tu nhân t o đã t o ra m t cu c cách m ng l n trong vi c tìmệt Anh ứng dụng vào bài ụng vào bài ệt Anh ạnh ạnh ộng hóa… ộng hóa… ạnh ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ệt Anh
hi u và chinh ph c nh ng đi u mà con ngểu các thuật toán tìm kiếm mù và ứng dụng vào bài ụng vào bài ững yêu cầu của ề tài: ườii không dám m t i Đó là nh ngơng Ngọc Đăng 2020600505 ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ững yêu cầu của robot thông minh, nh ng c máy thông minh có th thay th con ngững yêu cầu của ỗ Quốc Ca ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài ườii làm vi cệt Anh trong nh ng môi trững yêu cầu của ườing kh c nghi t hay chinh ph c không gian bao la.Và bênắc nghiệt hay chinh phục không gian bao la.Và bên ệt Anh ụng vào bài
c nh đó là vi c ng d ng nh ng thành t u đó vào lĩnh v c gi i trí c a con ngạnh ệt Anh ứng dụng vào bài ụng vào bài ững yêu cầu của ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ải quyết các vấn đề khó khăn trong công ườii
Đó là nh ng con v t robot, nh ng trò ch i Đó là nh ng ng d ng l n lao c a tríững yêu cầu của ật toán tìm kiếm mù và ứng dụng vào bài ững yêu cầu của ơng Ngọc Đăng 2020600505 ững yêu cầu của ứng dụng vào bài ụng vào bài ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh
tu nhân t o vào c a s ng c a con ngệt Anh ạnh ốc Ca ườii
Trong bài t p l n này chúng em tìm hi u thu t toàn Tìm ki m theo chi u r ng ật toán tìm kiếm mù và ứng dụng vào bài ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài ề tài: ộng hóa… (Best-first Search) ng d ng vào bài toán 3 tu sĩ và 3 con quứng dụng vào bài ụng vào bài ỷ Đây là m t chộng hóa… ương Ngọc Đăng 2020600505ng trình nh có th nó ch a đỏi về việc ứng dụng công ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ư ượi ích và nhu cầu của con người.Với quác hoàn thi n nh ng quan tr ng h n đó là giúp m i ệt Anh ư ọc Đăng 2020600505 ơng Ngọc Đăng 2020600505 ọc Đăng 2020600505
ngườii hi u đểu các thuật toán tìm kiếm mù và ứng dụng vào bài ượi ích và nhu cầu của con người.Với quác vai trò c a vi c ng d ng trí tu nhân t o trong cu c s ng.M c ệt Anh ứng dụng vào bài ụng vào bài ệt Anh ạnh ộng hóa… ốc Ca ặngViệt Anh
dù r t c g ng đ hoàn thành công vi c, xong th i gian có h n và ki n th c ch a ốc Ca ắc nghiệt hay chinh phục không gian bao la.Và bên ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ệt Anh ời ạnh ếm mù và ứng dụng vào bài ứng dụng vào bài ư nhi u nên vi c chề tài: ệt Anh ương Ngọc Đăng 2020600505ng trình còn nhi u thi u sót c n đề tài: ếm mù và ứng dụng vào bài ầu của con người.Với quá ượi ích và nhu cầu của con người.Với quác b xung Vì v y chúngổ xung Vì vậy chúng ật toán tìm kiếm mù và ứng dụng vào bài
em mong nh n đật toán tìm kiếm mù và ứng dụng vào bài ượi ích và nhu cầu của con người.Với quác nh ng đóng góp c a th y cô và b n bè đ chững yêu cầu của ầu của con người.Với quá ạnh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ương Ngọc Đăng 2020600505ng trình ngày càng hoàn thi n h n và giúp ích đệt Anh ơng Ngọc Đăng 2020600505 ượi ích và nhu cầu của con người.Với quác nhi u h n.ề tài: ơng Ngọc Đăng 2020600505
Xin chân thành c m nải quyết các vấn đề khó khăn trong công ơng Ngọc Đăng 2020600505
Trang 4Ch ương 1: Tổng quan về các thuật toán tìm kiếm mù trong đề tài ng 1: T ng quan v các thu t toán tìm ki m mù trong đ tài ổng quan về các thuật toán tìm kiếm mù trong đề tài ề các thuật toán tìm kiếm mù trong đề tài ật toán tìm kiếm mù trong đề tài ếm mù trong đề tài ề các thuật toán tìm kiếm mù trong đề tài
có th áp d ng ể áp dụng ục Lục
1.1 Thu t toán tìm ki m theo chi u r ng (BFS) ật toán tìm kiếm mù trong đề tài ếm mù trong đề tài ề các thuật toán tìm kiếm mù trong đề tài ộng (BFS)
Thuật toán duyệt đồ thị ưu tiên chiều rộng (Breadth-first search - BFS) là một
trong những thuật toán tìm kiếm cơ bản và thiết yếu trên đồ thị Mà trong đó, những đỉnh nào gần đỉnh xuất phát hơn sẽ được duyệt trước
Ứng dụng của BFS:
- Giúp ta giải quyết tốt một số bài toán trong thời gian và không gian tối thiểu
- Dùng để tìm các thành phần liên thông của đồ thị, hoặc kiểm tra đồ thị hai phía,
…
Hình 1: Thứ tự thăm các đỉnh của BFS
1.1.1 Ý t ưởng ng.
Đầu tiên ta thăm đỉnh nguồn s.
Việc thăm đỉnh s sẽ phát sinh thứ tự thăm các đỉnh (u1 , u 2 , …,
u p) kề với s (những đỉnh gần s nhất)
Tiếp theo, ta thăm đỉnh u 1 , khi thăm đỉnh u 1 sẽ lại phát sinh yêu cầu thăm
những đỉnh (v 1 , v 2 , …, v q ) kề với u 1 Nhưng rõ ràng những đỉnh v này
“xa” s hơn những đỉnh u nên chúng chỉ được thăm khi tất cả những đỉnh u đều
đã được thăm Tức là thứ tự thăm các đỉnh sẽ là: s, u 1 , u 2 , …, u p , v 1 , v 2 , …, v q ,
…
3 | T r a n g
Trang 5Hình 2: Thứ tự thăm các đỉnh
1.1.2 Thu t toán ật toán tìm kiếm mù trong đề tài
Thuật toán sử dụng một cấu trúc dữ liệu hàng đợi (queue) để chứa các đỉnh sẽ được duyệt theo thứ tự ưu tiên chiều rộng
Bước 1: Khởi tạo
Các đỉnh đều ở trạng thái chưa được đánh dấu Ngoại trừ đỉnh
nguồn s đã được đánh dấu.
Một hàng đợi ban đầu chỉ chứa 1 phần tử là s.
Bước 2: Lặp lại các bước sau cho đến khi hàng đợi rỗng:
Lấy đỉnh u ra khỏi hàng đợi
Xét tất cả những đỉnh v kề với u mà chưa được đánh dấu, với mỗi đỉnh vv đó:
o Đánh dấu v đã thăm
o Lưu lại vết đường đi từ u đến v.
o Đẩy v vào trong hàng đợi (đỉnh v sẽ chờ được duyệt tại những bước sau).
Bước 3: Truy vết tìm đường đi
1.2 Thu t toán tìm ki m theo chi u sâu (DFS) ật toán tìm kiếm mù trong đề tài ếm mù trong đề tài ề các thuật toán tìm kiếm mù trong đề tài
Tìm kiếm ưu tiên chiều sâu hay tìm kiếm theo chiều sâu (Depthfirst search
-DFS): Tương tự thủ tục tìm kiếm theo chiều rộng, DFS chỉ khác là danh sách chứa các
đỉnh đang xet Open có kiểu LIFO (thay vì bổ sung các đỉnh vào cuối tập Open ta bổ sung A(n) vào tập đầu Open) Do đó, khi bổ sung đỉnh mới hoặc lấy đỉnh ra ta chỉ thực hiện ở một đầu
Trang 61.2.1 Ý t ưởng ng
1 DFS trên đ th vô hồ thị vô hướng ị vô hướng ưới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnhng cũng gi ng nh khám phá mê cung v i m t cu nốc Ca ư ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ộng hóa… ộng hóa…
ch và m t thùng s n đ đ đánh d u, tránh b l c Trong đóỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó ộng hóa… ơng Ngọc Đăng 2020600505 ỏi về việc ứng dụng công ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ị vô hướng ạnh
m iỗ Quốc Ca đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó s trong đ th tồ thị vô hướng ị vô hướng ượi ích và nhu cầu của con người.Với quáng tr ng cho m t c a trong mê cung.ư ộng hóa… ửa trong mê cung
2 Ta b t đ u tắc nghiệt hay chinh phục không gian bao la.Và bên ầu của con người.Với quá ừ đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó s, bu c đ u cu n ch vàoộng hóa… ầu của con người.Với quá ộng hóa… ỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó s và đánh đ u đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó này "đã
thăm" Sau đó ta đánh d u s là đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó hi n hànhệt Anh u.
3 Bây gi , n u ta đi theoời ếm mù và ứng dụng vào bài c nhạnh (u,v) b t kỳ.
4 N uếm mù và ứng dụng vào bài c nhạnh (u,v) d n chúng ta đ nẫn chúng ta đến ếm mù và ứng dụng vào bài đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó "đã thăm" v, ta quay tr v ở Việt Nam, công nghệ thông tin đã trở thành một ngày ề tài: u.
5 N uếm mù và ứng dụng vào bài đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó v là đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó m i, ta di chuy n đ nới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài v và lăn cu n ch theo Đánhộng hóa… ỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó
d u v là "đã thăm" Đ t ặngViệt Anh v thành đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó hi n hành và l p l i các bệt Anh ặngViệt Anh ạnh ưới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnhc
6 Cu i cùng, ta có th đi đ n m tốc Ca ểu các thuật toán tìm kiếm mù và ứng dụng vào bài ếm mù và ứng dụng vào bài ộng hóa… đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó mà t i đó t t c các c nh k v i nóạnh ải quyết các vấn đề khó khăn trong công ạnh ề tài: ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh
đ u d n chúng ta đ n cácề tài: ẫn chúng ta đến ếm mù và ứng dụng vào bài đ nhỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó "đã thăm" Khi đó, ta sẽ quay lui b ng cáchằm giảm bớt
cu n ngộng hóa… ượi ích và nhu cầu của con người.Với quác cu n ch và quay l i cho đ n khi tr l i m tộng hóa… ỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó ạnh ếm mù và ứng dụng vào bài ở Việt Nam, công nghệ thông tin đã trở thành một ngày ạnh ộng hóa… đ nh kỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó ề tài: v iới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh
m tộng hóa… c nhạnh còn ch a đư ượi ích và nhu cầu của con người.Với quác khám phá L i ti p t c quy trình khám phá nhạnh ếm mù và ứng dụng vào bài ụng vào bài ư trên
7 Khi chúng ta tr vở Việt Nam, công nghệ thông tin đã trở thành một ngày ề tài: s và không còn c nhạnh nào k v i nó ch a b khám phá làề tài: ới sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh ư ị vô hướng
lúc DFS d ng.ừ
1.2.2 Thu t toán ật toán
Bước 1: Chèn trạng thái đầu vào ngăn xếp
Bước 2: Duyệt trạng thái cao nhất trong ngăn xếp và kiểm tra nó
Nếu là trạng thái đích, dừng quá trình tìm kiếm và trả về kết quả
Nếu không phải trạng thái đích và chưa đạt độ sâu tối đa, chèn tất cả các trạng thái di chuyển được từ các trạng thái đang duyệt vào ngăn xếp, xóa trạng thái đang duyệt
Nếu không phải trạng thái đích và đã đạt độ sâu tối đa, xóa trạng thái đang duyệt
Bước 3: Nếu ngăn xếp không rỗng, quay về bước 2 Nếu ngăn xếp rỗng, thông báo thuật toán thất bại, không tìm được đích
1.3 Thu t toán tìm ki m sâu d n (IDS) ật toán tìm kiếm mù trong đề tài ếm mù trong đề tài ần (IDS)
Kỹ thuật tìm kiếm sâu dần là thực hiện việc tìm kiếm với độ sâu ở mức giới
hạn d nào đó Nếu không tìm ra nghiệm ta tăng độ sâu lên d+1 và lại tìm kiếm theo độ sâu tới mức d+1 Quá trình trên được lặp lại với d lần lượt là 1, 2, đến độ sâu max nào đó
Kỹ thuật tìm kiếm sâu dần thường được thực hiện khi cây tìm kiếm chứa nhánh
vô hạn, và nếu sử dụng tìm kiếm theo độ sâu ta có thể mắc kẹt ở một nhánh nào đó (thuật toán không dừng) và không tìm ra nghiệm
1.3.1 Ý t ưởng ng
Đầu tiên ta thăm đỉnh nguồn s.
5 | T r a n g
Trang 7Việc thăm đỉnh s sẽ phát sinh thứ tự thăm các đỉnh (u 1 , u 2 , …, u p ) kề
với s (những đỉnh gần s nhất)
Tiếp theo, ta thăm đỉnh u 1 , khi thăm đỉnh u 1 sẽ lại phát sinh yêu cầu thăm
những đỉnh (v 1 , v 2 , …, v q ) kề với u 1 Nhưng không giống như BFS, ta sẽ tiếp tục thăm đỉnh v 1 Giả dụ độ sâu tối đa là 2, tức từ s đến u 1 đến v 1 mà chưa tìm được đích, thuật toán sẽ không phát sinh thêm đỉnh con của v 1 mà sẽ quay ngược
lên u 1 và duyệt tiếp các con của u 1 là v 1 , v 2 , …, v q
Tức thứ tự thăm các đỉnh khi độ sâu là 3 là: s, u 1 , v 1 , v 2 , …, v q , u 2 , t 1 , t 2 , …, t r ,
u 3 ,
Nếu đã duyệt hết các đỉnh với độ sâu tối đa mà chưa tìm được đích, thuật toán
tự động tăng độ sâu và quay lại đỉnh v 1, sinh ra các đỉnh con và duyệt các đỉnh con mới đó
1.3.2 Thu t toán ật toán
Bước 1: Chèn trạng thái đầu vào ngăn xếp
Bước 2: Duyệt trạng thái cao nhất trong ngăn xếp và kiểm tra nó
Nếu là trạng thái đích, dừng quá trình tìm kiếm và trả về kết quả
Nếu không phải trạng thái đích và chưa đạt độ sâu tối đa, chèn tất cả các trạng thái di chuyển được từ các trạng thái đang duyệt vào ngăn xếp, xóa trạng thái đang duyệt khỏi ngăn xếp
Nếu không phải trạng thái đích và đã đạt độ sâu tối đa, lưu trạng thái đang duyệt vào 1 ô nhớ tạm, xóa trạng thái đang duyệt khỏi ngăn xếp
Bước 3: Nếu ngăn xếp không rỗng, quay về bước 2 Nếu ngăn xếp rỗng, lấy các trạng thái từ ô nhớ tạm, tặng độ sâu, quay về bước 2
Trang 8Ch ương 1: Tổng quan về các thuật toán tìm kiếm mù trong đề tài ng 2: Tìm ki m theo chi u r ng (BFS) trong bài toán 3 tu sĩ ếm mù trong đề tài ề các thuật toán tìm kiếm mù trong đề tài ộng (BFS)
và 3 con quỷ
a) Phát biểu bài toàn
Tại bến sông có 3 thầy tu và 3 con quỷ muốn qua sông Tại một thời điểm thuyền chỉ chở được tối đa 2 khách Nếu bất cứ ở trên bờ nào, bên này hoặc bên kia thì số con quỷ phải bé hơn hoặc bằng số thầy tu, ngược lại quỷ sẽ ăn thịt thầy tu Tìm cách để giải quyết bài toán Giải bài toán bằng thuật toán Best-first Search để tìm ra trạng thái cuối cùng
b) Mô tả bài toán
Bài toán qua sông có input là 3 thầy tu và 3 con quỷ, trong đó điều kiện ở đây là chỉ có
2 người được qua và số thầy tu ở mỗi bờ không ít hơn số quỷ Mục tiêu là đưa được cả
3 thầy tu và 3 con quỷ sang bên kia sông Dựa vào điều kiện có 3 trường hợp khi đưa
từ bờ trái sang bờ phải và có 2 trường hợp khi đưa về lại bờ trái Khi đó, bài toán qua sông trở thành bài toán tìm kiếm lựa chọn tốt nhất
2.2 Thu t toán Best-first Search ật toán
a) Giới thiệu thuật toàn
Trong khoa học máy tính, thuật toán Best-first Search là một thuật toán tìm kiếm theo bề rộng (Breadth First Search) được hướng dẫn bởi hàm đánh giá Tư tưởng của thuật toán này là 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 có giá trị của hàm đánh giá là thấp nhất so với các nút còn lại nằm trong hàng đợi
b) Mô tả thuật toán của bài toán
- Bài toán có hai trạng thái:
● Trạng thái bờ trái {số thầy tu, số quỷ}
● Trạng thái bờ phải {số thầy tu, số quỷ}
- Mỗi trạng thái có một cách thay đổi:
● Trạng thái bờ trái: Di chuyển thầy tu hoặc quỷ qua bờ phải
● Trạng thái bờ phải: Di chuyển thầy tu hoặc quỷ về lại bờ trái
- Mỗi cách thay đổi trạng thái sẽ có cách thay đổi cụ thể:
● Di chuyển thầy tu hoặc quỷ qua bờ phải có ba trường hợp thay đổi trạng thái:
+ Đưa 2 thầy tu qua bờ phải
7 | T r a n g
Trang 9+ Đưa 2 quỷ qua bờ phải.
+ Đưa 1 thầy tu hoặc 1 quỷ qua bờ phải
● Di chuyển thầy tu hoặc quỷ về lại bờ trái có hai trường hợp thay đổi trạng thái:
+ Đưa 1 quỷ về bờ trái
+ Đưa 1 thầy tu và 1 quỷ về bờ trái
- Mỗi lần thực hiện thay đổi trạng thái thì cần phải kiểm tra trạng thái đó có
thay đổi đúng hay không?
● Số thầy tu phải lớn hơn bằng số quỷ hoặc số thầy tu bằng 0 ở mỗi trạng thái
2.3 Gi i thu t bài toán qua sông áp d ng thu t toán Best-first Search ải thuật bài toán qua sông áp dụng thuật toán Best-first Search ật toán ụng thuật toán Best-first Search ật toán
1 Cài đặt thuật toán
- Viết bằng ngôn ngữ C++
2 Chương trình giải quyết bài toán qua sông
#include <conio.h>
#include <iostream>
using namespace std;
int brinkLeft[2];
int brinkRight[2];
static int count = 0;
void init(int n) {
brinkLeft[0] = n;
brinkLeft[1] = n;
brinkRight[0] = 0;
Trang 10brinkRight[1] = 0;
}
bool check(int monkLeft, int devilLeft, int monkRight, int devilRight, char mode) {
if(monkLeft == 0 && devilLeft == 2 && monkRight == 2 && devilRight
== 0 && mode == 'Q')
return false;
else if((monkLeft >= devilLeft || monkLeft == 0) && (monkLeft >= 0 && devilLeft >= 0)
&& (monkRight >= devilRight || monkRight == 0) && (monkRight >= 0
&& devilRight >= 0))
return true;
return false;
}
void brinkLeftToRight(int n) {
int tempLeft[2], tempRight[2];
for(int i = 0; i < 3; i++) {
tempLeft[0] = brinkLeft[0];
tempLeft[1] = brinkLeft[1];
tempRight[0] = brinkRight[0];
tempRight[1] = brinkRight[1];
switch(i) {
case 0: {
tempLeft[0] -= 2;
9 | T r a n g