You are on page 1of 5

Note:

 Tựa ghi “báo cáo giữa kì” hay gì đó cũng được


 Giới thiệu thành viên nhóm
1. Pacman
1.1. Bài toán SingleFoodSearchProblem

Initial State: (row, column) – Vị trí ban đầu của pacman trên mê cung

State: (row, column) – Vị trí hiện tại của pacman trên mê cung

Node: (state: tuple, actions: list, path_cost: int, heuristic: int/float) – Chứa vị trí
hiện tại của pacman, các bước mà pacman từng đi, path cost để đi được đến vị trí hiện
tại, khoảng cách từ vị trí hiện tại tới đích

Goal: (row, column) – Vj trí của điểm mồi duy nhất trên mê cung

Goal test: Không còn điểm mồi nào trên mê cung

Path cost: Hàm tính path cost dựa trên số hành động thực hiện được trên mỗi node

Ý tưởng tạo node dựa trên ma trận:

- Thiết lập Node đầu tiên gồm vị trí hiện tại của pacman, action rỗng, path cost
bằng 0
- Tại mỗi node pacman sẽ có 4 khả năng di chuyển đến 4 hướng tương ứng với 4
toạ độ liền kề đó lần lượt là {“West”, “East”, “North”, “South”}. Trường hợp
toạ độ liền kề bất kì là tường thì loại toạ độ đó ra. Với mỗi hướng đi mà
pacman có khả năng đi tạo một node mới
Child Node: (next_state, old actions + new action, old cost + 1)

1.2. Bài toán MultiFoodSearchProblem


Kế thừa lại class SingleFoodProblem,
Goal: set – Một set các toạ độ của các điểm thức ăn trên mê cung
Goal test: Không còn điểm mồi nào còn tồn tại trong goal set
1.3. Giải thuật BFS
Cấu trúc dữ liệu được sử dụng: Queue (FIFO)
Nguyên tắc chạy:
Bước 1: Đưa từng child node của node hiện tại vào Queue,
Bước 2: Ứng dụng nguyên tắt First in First out của lấy ra child node đầu tiên được
đưa vào Queue
Bước 3: Lập lại bước 1 và 2 cho đến khi đạt được goal test
Bước 4 (MultiFoodSearchProblem): gán state của node chứa điểm mồi vừa ăn là
initial state
Bước 5: (MultiFoodSearchProblem): Gọi đệ quy hàm BFS với initial state là toạ
độ điểm mồi vừa ăn

1.4. Giải thuật DFS:


Cấu trúc dữ liệu được sử dụng: Stack (FILO)
Nguyên tắc chạy:
Bước 1: Đưa từng child node của node hiện tại vào Stack,
Bước 2: Ứng dụng nguyên tắt First in Last out của lấy ra child node cuối cùng
được đưa vào Stack
Bước 3: Lập lại bước 1 và 2 cho đến khi đạt được goal test thì dừng bài toán
Bước 4 (MultiFoodSearchProblem): gán state của node chứa điểm mồi vừa ăn là
initial state
Bước 5: (MultiFoodSearchProblem): Gọi đệ quy hàm DFS với initial state là toạ
độ điểm mồi vừa ăn

1.5. Giải thuật UCS


Cấu trúc dữ liệu được sử dụng: Priority Queue
Nguyên tắc chạy:
Bước 1: Đưa từng child node của node hiện tại vào Priority Queue với priority là
path cost của child node đó,
Bước 2: Lấy ra child node có priority cao nhất (path cost nhỏ nhất)
Bước 3: Lập lại bước 1 và 2 cho đến khi đạt được goal test
Bước 4 (MultiFoodSearchProblem): gán state của node có chứa điểm mồi vừa ăn
là initial state
Bước 5: (MultiFoodSearchProblem): Gọi đệ quy hàm UCS với initial state là toạ
độ điểm mồi vừa ăn

2. Inform search - Pacman


2.2. Thuật toán tính Heuristic (Chừa slide trống)

Manhattan Distance

Euclidean Distance

Canberra Distance

2.3. Giải thuật A*


Với bài toán SingleFoodSearchProblem: Sử dụng Mahattan distance và Euclidean
distance
Với bài toán MultiFoodSearchProblem: Sử dụng Canberra distance (một biến thể
của Manhattan) vì Canberra chuyên dùng để tính khoảng cách từ điểm hiện tại tới
cái điểm lân cận trong môi trường N-D (2D) đồng thời tận dụng được độ lớn của
vector 2 chiều cho ra heuristic là một con số cực nhỏ thích hợp để tính khoảng
cách đến nhiều điểm mồi

Các bước chạy thuật toán


Bước 1: Đưa từng child node của node hiện tại vào Priority Queue với priority là
f(n) của child node đó,
Bước 2: Lấy ra child node có priority cao nhất (f(n) nhỏ nhất)
Bước 3: Lập lại bước 1 và 2 cho đến khi đạt được goal test
Bước 4 (MultiFoodSearchProblem): gán state của node có chứa điểm mồi vừa ăn
là initial state
Bước 5: (MultiFoodSearchProblem): Gọi đệ quy hàm A* với initial state là toạ độ
điểm mồi vừa ăn

2.4. Giải thuật GBFS

Với bài toán SingleFoodSearchProblem: Sử dụng Mahattan distance và Euclidean


distance

Với bài toán MultiFoodSearchProblem: Sử dụng Canberra distance

Các bước chạy thuật toán

Bước 1: Đưa từng child node của node hiện tại vào Priority Queue với priority là
estimate cost của child node đó,

Bước 2: Lấy ra child node có priority cao nhất (estimate cost nhỏ nhất)

Bước 3: Lập lại bước 1 và 2 cho đến khi đạt được goal test

Bước 4 (MultiFoodSearchProblem): gán state của node có chứa điểm mồi vừa ăn
là initial state

Bước 5: (MultiFoodSearchProblem): Gọi đệ quy hàm GBFS với initial state là toạ
độ điểm mồi vừa ăn

3. EightQueenProblem
3.1. Ý tưởng bài toán:
 Ví bàn cờ như một ma trận
 Mỗi quân hậu trên ma trận sẽ xuất hiện hiện trên một hang ngang, một
đường phía trên (hoặc dưới) đường chéo chính (đường chéo từ góc trái trên
cùng đến góc phải dưới cùng ), một đường chéo phụ (các đường chéo từ
góc phải trên cùng đến góc trái dưới cùng).

 Đếm số lượng quân hậu tồn tại trên những đường trên -> tính tổ hợp chập 2
trên mỗi đường -> cộng tất cả lại ta sẽ được số lượng cặp hậu có thể ăn
nhau trực tiếp, gian tiếp (giá trị H của bàn cờ)

Mỗi lần lập bài toán sẽ lấy ra các successor là tất cả các nước đi khả thi của một
quân hậu trên cột tương ứng. Tính H của tất cả các successor rồi chọn ra successor có H
nhỏ nhất

8*7 = 56 successors

3.2. Giải thuật Hill climbing


Các bước lập bài toán:
Bước 1: Từ state hiện tại sinh ra tất cả tất cả cá successor của state đó
Bước 2: Tính giá trị H của tất cả successor
Bước 3: Chọn ra state có H nhỏ nhất
Bước 4: Kiểm tra xem nếu state được chọn có H lớn hơn state hiện tại không, nếu
có thì dừng bài toán
Bước 5: Gán state được chọn làm state hiện tại
Bước 6: Quay lại bước 1

You might also like