frontier then return failure node ← POPfrontier add node.STATE to explored for each action in problem.ACTIONSnode.STATE do child ← CHILD-NODEproblem, node, action if child.STATE is not i
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BÀI BÁO CÁO GIỮA KỲ
Người hướng dẫn:
Người thực hiện: Cao Thị Thùy Giang - 52200138
Nguyễn Hòa An - Trần Thị Thảo Nguyên - Đào Thụy Bảo Hân -
Lớp: 22050301 Khóa: 26
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
BÀI BÁO CÁO GIỮA KỲ MÔN TRÍ TUỆ NHÂN TẠO
Người hướng dẫn:
Người thực hiện: Cao Thị Thùy Giang - 52200138
Nguyễn Hòa An - Trần Thị Thảo Nguyên - Đào Thụy Bảo Hân -
Lớp: 22050301 Khóa: 26
Trang 3THÀNH PHỐ HỒ CHÍ MINH, NĂM 2023
Trang 4Em xin chân thành cảm ơn
Trang 5BÀI BÁO CÁO ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Chúng tôi xin cam đoan đây là bài báo cáo của riêng nhóm chúng tôi tôi Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo
Nếu phát hiện có bất kỳ sự gian lận nào chúng tôi xin hoàn toàn chịu trách nhiệm về nội dung bài báo cáo của mình. Trường đại học Tôn Đức Thắng không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 13 tháng 03 năm 2024
Tác giả (ký tên và ghi rõ họ tên)
Trang 6PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
_
Tp Hồ Chí Minh, ngày tháng năm (ký và ghi họ tên)
Phần đánh giá của GV chấm bài
_
Tp Hồ Chí Minh, ngày tháng năm (ký và ghi họ tên)
Trang 9MỤC LỤC
Trang 10DANH MỤC BẢNG CHỮ CÁI VIẾT TẮT
• BFS: Breath – First Search –• A*: A – Start
• UCS: Uniform – Cost – Search
Trang 11PHẦN 1: TÓM TẮT I Vấn đề nghiên cứu
Các kiến thức đã được tiếp cận trong quá trình học môn trí tuệ nhân tạo
II Cách giải quyết vấn đề
o Tham khảo tài liệu trên internet
o Tham khảo slide bài giảng môn học và ghi chép trong quá trình học o Áp dụng những hiểu biết qua các kiến thức đã được tiếp cận trong quá trình
học tập
III Kết quả đạt được
o Hoàn thành các câu hỏi nội dung được đưa ra trong bài báo cáo
o Hệ thống lại toàn bộ những kiến thức đã được học trong suốt thời gian học tập
o Bảo đảm kiến thức nền tảng phục vụ cho các môn học sau cũng như công việc sau này
Trang 12PHẦN 2: NỘI DUNG
1 Câu hỏi 1: 8-Puzzle
Trò chơi 8-puzzle có mục tiêu là di chuyển các khối số từ trạng thái bắt đầu đểđạt đư c trạng thái kết quợ ả Trong đó:
• Trạng thái bắ ầt đu có th ể là một cách s p x p bắ ế ất kỳ 8 khối số và ô tr ng trên ốbàn c ờ
• Trạng thái đích là một trong hai cách sắp xếp như mô tả trong bảng sau
1.1 Mô hình hoá bài toán dưới dạng không gian tr ng thái ạ
• Trạng thái bắt đầu: Bàn cờ được biểu diễn dưới dạng ma trận 3x3n, mỗi ô chứa các giá trị ngẫu nhiên gồm các phần t t ử ừ 1 đến 8, v i 1 là ô tr ng ớ ố
• Trạng thái đích: Ma trận 3x3 được s ắp xếp theo thứ tự tự 1 đến 8, với ô đầu tiên hoặc ô cu i cùng là ô trố ống theo như yêu cầu của đề bài
• Hành động: Di chuy n lên, xu ng, qua trái, qua ph i ể ố ả
• Chi phí đường đi: Mỗi bước di chuyển tiêu tốn 1 đơn vị, không di chuy n ểtiêu tốn 0 đơn vị
Trang 131 2 3
7 5 8
• Ý tưởng thuật toán :
o Giả s ử thuật toán là 1 đồ thị G = (V, E) Th c hi n l p l ch duy t cho ự ệ ậ ị ệcác đỉnh của đồ th G Việc duyệt các đỉnh s được ưu tiên sao cho ị ẽđỉnh nào gần v i nó nhấ ẽớ t s được duyệt trư c ớ
Trang 14o Bước 2: Lấy phân t u tiên cử đầ ủa hàng đợi và thêm nó vào danh sách đã duyệt
o Bước 3: Tạo một danh sách các đỉnh liền k cề ủa đỉnh đang xét Thêm những đỉnh không có trong danh sách đã duyệt vào cuối hàng đợi.o Bước 4: Tiếp tụ ặp lc l ại bước 2 và 3 cho đến khi hàng đợi trống • Mã giả
Function BREADTH-FIRST-SEARCH(problem) returns a solution, or failure
node ← a node with STATE = problem.INITIAL-STATE, PATH-COST = 0
if problem.GOAL-TEST(node.STATE) then return SOLUTION(node) frontier ← a FIFO queue with node as the only element
explored ← an empty set loop do
if EMPTY?( frontier) then return failure node ← POP(frontier)
add node.STATE to explored
for each action in problem.ACTIONS(node.STATE) do child ← CHILD-NODE(problem, node, action) if child.STATE is not in explored or frontier then
if problem.GOAL-TEST(child.STATE) then return SOLUTION(child)
frontier ← INSERT(child, frontier) 1.2.2 Thuật toán A*
• Ý tưởng thuật toán
Thuật toán A* s t o mẽ ạ ột hàng đợi ưu tiên Tạo 1 hàm heuristic để tính chi phí sau mỗi lần thay đổ ạng thái kể cả i tr trạng thái ban đầu T ừ trạng thái
Trang 15ban đầu thực hiện di chuyển tất cả hoạt động có thể xảy ra, tính toán chi phí và đưa vào hàng đợi Lấy trạng thái có chi phí thấp nhất ra khỏi hàng đợi để tiếp tục tính toán và thay đổi trạng thái cho đến khi đạt được trạng thái đích• Giải thuật
o Bước 1: Xác định các trạng thái ti p theo có thế ể x y ra c a bài toán ả ủo Bước 2: So sánh xem trạng thái nào có chi phí đường đi ngắn nhấ ểt đ
xác định trạng thái tiếp theo
o Bước 3: Tiếp tụ ặp lc l ại cho đến khi đạt được trạng thái đích• Mã giả
Function AStartSearch(problem, h, g) returns list of actions and path cost explored ← an empty set
frontier ← a priority queue
startNode ← a node with STATE = problem.INTIAL-STATE, cost = 0, heuristic(start,goal)
frontier ← INSERT(startNode) loop do
if EMPTY?(frontier) then return failure curr_node ← POP(frontier)
curr_state ← curr_node.state if curr_state isGoal then path ← an array empty loop do
Trang 16if None(curr_node.parent) then return failure
append curr_node.action to path curr_node ← curr_node.parent
return reverse of path add curr_state to explored
for each action in problem.ACTION(curr_state) succ_state ← problem.getResult(curr_state, action) if succ_state not in explored then
succ_cost ← curr_node.cost + problem.getCost(curr_state,action)
succ_node ←
Node(succ_state,curr_node,action,succ_cost,heuristic(succ_state,goal) frontier.INSERT(succ_node)
• Nhận xét 1.3 Mã ngu n ồ
1.3.1 Chương trình 1
o Input: trạng thái bắt đầu tu ỳ ý do người dùng nh p; tên thu t toán mong mu n ậ ậ ốo Output: Danh sách actions để giải trò chơi (Left, Right, Up, Down); tổng chi phí o Visualization: Sử dụng thư viện graphviz để ẽ đường đi từ trạ v ng thái bắ ầt đu
đến trạng thái kết thúc
Trang 171.3.2 Chương trình 2
o Phát sinh ng u nhiên 1000 tr ng thái bẫ ạ ắt đầu
o Chạy thuật toán BFS và A* để tìm ra gi i pháp, tính t ng chi phí ả ổo Lấy trung bình chi phí của 1000 lần thí nghiệm cho mỗi thu t toán ậo Vẽ biểu đồ ột để đố c i sánh hi u suệ ất của các thuật toán.
2 Câu 2 Pacman
Cài đặt các thuật toán thông tin để giúp pacman ăn hết các điểm mồi trong bản đồ và đi qua bốn góc của bản đồ theo thứ tự bất kỳ
2.1 Mô hình hoá bài toán dưới dạng không gian trạng thái
2.2 Thuật toán UCS và A* để giải trò chơi.
2.2.1 Thuật toán UCSo Ý tưởng thuật toán
▪ UCS sử d ng mụ ột hàng đợi ưu tiên để duy t các tr ng thái theo ệ ạthứ t ự tăng dần c a chi phí vủ ới trạng thái ban đầu được thêm vào hàng đợi trước tiên
▪ Mỗi lầ ặn l p, node v i chi phí th p nhớ ấ ất được đưa ra khỏi hàng đợi để duyệt Các tr ng thái tiếp theo được thêm vào hàng đợi v i chi ạ ớphí được tính từ trạng thái hiện tại
Trang 18▪ Bước 4: Lặp lại từ Bước 2 đến khi hàng đợi trống o Mã giả
Function UCSSearch(problem,start,goal) returns list of actions and path cost
explored ← an empty set frontier ← a priority queue
startNode ← a node with STATE = problem.INTIAL-STATE, cost = 0
frontier ← INSERT(startNode) loop do
if EMPTY?(frontier) then return failure curr_node ← POP(frontier)
curr_state ← curr_node.state if curr_state isGoal then path ← an array empty loop do
if None(curr_node.parent) then return failure
append curr_node.action to path curr_node ← curr_node.parent return reverse of path
add curr_state to explored
for each action in problem.ACTION(curr_state) succ_state ← problem.getResult(curr_state, action)
if succ_state not in explored then succ_cost ← curr_node.cost + problem.getCost(curr_state,action)
Trang 19succ_node ← Node(succ_state,curr_node,action,succ_cost)
frontier.INSERT(succ_node) o Nhận xét
2.2.2 Thuật toán A*o Ý tưởng thuật toán
▪ A* sử d ng mụ ột hàng đợi ưu tiên để lưu trữ và duyệt các trạng thái
▪ Tạo một hàm heuristic để ước lượng chi phí t ng thái hi n ừ trạ ệtạ ếi đn trạng thái đích
▪ Chi phí tính toán c a A* s ủ ẽ được tính ừ t chi phí thực tế (tính từtrạng thái ban đầu đến trạng thái hiện tại) cộng v i heuristic ớ(ước lư ng từ trạng thái hiện tại đến trợ ạng thái đích) ▪ Mỗi lầ ặn l p, node v i chi phí th p nhớ ấ ất được đưa ra khỏi hàng
đợi để duy t Các trạệ ng thái ti p theo được thêm vào hàng đợi ếvới chi phí được tính t ng thái hi n t i ừ trạ ệ ạ
Trang 20Function AStartSearch(problem,start,goal) returns list of actions and path cost
explored ← an empty set frontier ← a priority queue
startNode ← a node with STATE = problem.INTIAL-STATE, cost = 0, heuristic(start,goal)
frontier ← INSERT(startNode) loop do
if EMPTY?(frontier) then return failure curr_node ← POP(frontier) curr_state ← curr_node.state if curr_state isGoal then
path ← an array empty loop do
if None(curr_node.parent) then return failure append curr_node.actio n to path curr_node ← curr_node.parent
add curr_state to return reverse of path
explored
for each action in problem.ACTION(curr_state)succ_state ← problem.getResult(curr_state, action)
Trang 21if succ_state not in explored thensucc_cost ← curr_node.cost + problem.getCost(curr_state,action)
succ_node ←
Node(succ_state,curr_node,action,succ_cost,heuristic(succ_state,goal) frontier.INSERT(succ_node)
o Hàm heuristic ▪ Mã nguồn:
• Admissibility (tính thu nạp): • Consistency (tính nhất quán):o Nhận xét
2.3 Chương trình để thực thi các thuật toán
- Input: đường dẫn đến tập tin chứa bản đồ; tên thuật toán cần chạy - Output: danh sách các actions (North, East, West, South, Stop) cần thực
hiện; - tổng chi phí
- Cấu trúc bản đồ như sau:
o % là vật cản, tường, không thể quao P à vị trí ban đầu của pacman o là vị trí điểm mồi, số lượng bất kỳo Các ô trống còn lại pacman có thể đi qua
Trang 22o Không có ma trong trò chơi
2.3.1 Phương pháp giải quyết2.3.2 Mã nguồn
2.4 Visualization
Trực quan hoá các bước chạy của trò chơi trên màn hình console
3 Câu 3 Graphical Pacman
Trang 23TÀI LIỆU THAM KHẢO