You are on page 1of 17

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP HỒ CHÍ MINH


KHOA CÔNG NGHỆ THÔNG TIN
-------------------------

ĐỒ ÁN
Đề tài:GAME TÌM ĐƯỜNG VỀ NHÀ
GVHD: Trần Đình Toàn
Lớp: 12DHTH08
Sinh viên thực hiện 1. Phan Thị Huỳnh Y.
2. Phan Vũ Thúy Vân.
3. Huỳnh Ngọc Dung.

Tp.Hồ Chí Minh, tháng 12 năm 2023.

1
MỤC LỤC
MỞ ĐẦU____________________________________________________________________________8
1. Lý do chọn đề tài._______________________________________________________________8
2. Mục tiêu nghiên cứu.____________________________________________________________8
3. Đối tượng phạm vi.______________________________________________________________8
4. Phạm vi: Phương pháp nghiên cứu.________________________________________________9
5. Cấu trúc đề tài._________________________________________________________________9
CHƯƠNG 1: GIỚI THIỆU____________________________________________________________10
I. Thuật toán A star ._____________________________________________________________10
II. Các bước giải thuật toán A*____________________________________________________10
CHƯƠNG 2: ỨNG DỤNG THUẬT TOÁN.______________________________________________13
Ưu điểm:__________________________________________________________________________13
Khuyết điểm của thuật toán A* trong bài toán tìm đường về nhà:____________________________14
CHƯƠNG 3: DEMO CODE.___________________________________________________________15
TÀI LIỆU THAM KHẢO_____________________________________________________________16

2
BẢNG PHÂN CÔNG VIỆC.
MSSV Họ tên. Công việc. Hoàn thành.
2001210554 Phan Thị Huỳnh Y Word , Nội dung của 100%
thuật toán A*.
2001210675 Phan Vũ Thúy Vân Ppt, ứng dụng thuật toán 100%
ưu và nhược điểm.
2001215660 Huỳnh Ngọc Dung Code demo và ứng dụng. 100%

3
LỜI NÓI ĐẦU.
Hiện nay, khoa học và công nghệ đã biến đổi không ngừng, trải qua nhiều sự bùng
nổ của thông tin và dữ liệu, một trong những lĩnh vực quan trọng không thể thiếu trong
cuộc cách mạng này là thuật toán. Thuật toán A*, hay còn gọi là thuật toán tối ưu hóa,
đóng một vai trò quan trọng trong việc tối ưu hóa các hệ thống phức tạp. Nó là công cụ
không thể thiếu trong việc giải quyết các vấn đề thực tế có tính phức tạp và quy mô lớn.

Để hiểu rõ hơn về cơ sở lý thuyết của thuật toán A* và tìm hiểu cách nó tối ưu
hóa các vấn đề thực tế, từ quản lý tài nguyên đến thiết kế hệ thống nên chúng em đã chọn
đề tài thuật toán tìm kiếm đường về nhà làm đề tài nghiên cứu.

4
LỜI CAM ĐOAN.

Nhóm chúng em xin giới thiệu với Thầy và các bạn đề tài “GAME TÌM ĐƯỜNG
VỀ NHÀ”. Chúng em chọn đề tài này theo sự phân công của thầy Trần Đình Toàn và
đồng thời mong muốn mang giải thuật đến gần hơn với tất cả mọi người.

Trong quá trình thực hiện đề tài này còn có nhiều thiếu sót do kiến thức còn hạn hẹp
và chưa tiếp cận được nhiều bài báo cáo mang tính học thuật cao, nhưng là công trình
nghiên cứu của cả nhóm em trong thời gian qua. Mọi số liệu sử dụng phân tích trong
bài tiểu luận này là kết quả nghiên cứu của tất cả các bạn trong nhóm tự tìm hiểu,
phân tích một cách khách quan, trung thực, có nguồn gốc rõ ràng và có sự chọn lọc kỹ
càng cùng với sự giúp đỡ nhiệt tình của Gv Trần Đình Toàn.

Chúng em xin cam đoan rằng: Nội dung trong bài là trung thực và không có bất kỳ sự
sao chép hay sử dụng để bảo vệ một học vị nào. Tất cả những sự giúp đỡ cho việc xây
dựng cơ sở lý luận cho bài luận đều được trích dẫn đầy đủ và ghi rõ nguồn gốc rõ ràng
và được phép công bố. Những nội dung trình bày trong báo cáo tiểu luận môn Trí Tuệ
Nhân Tạo này không phải là bản sao chép từ bất kì tiểu luận nào có trước. Những
phần sử dụng tài liệu tham khảo trong bài tiểu luận đã được nêu rõ trong phần tài liệu
tham khảo.

5
LỜI CẢM ƠN

Đầu tiên, em xin gửi lời cảm ơn chân thành đến Trường Đại học Công Thương
TPHCM đã đưa bài tập môn học Trí Tuệ Nhân Tạo vào trương trình giảng dạy. Đặc
biệt, em xin gửi lời cảm ơn sâu sắc đến giảng viên bộ môn – Thầy Trần Đình Toàn đã
dạy dỗ, truyền đạt những kiến thức quý báu cho em trong suốt thời gian học tập vừa
qua. Trong thời gian tham gia lớp học Trí Tuệ Nhân Tạo của Thầy, em đã có thêm cho
mình nhiều kiến thức bổ ích, tinh thần học tập hiệu quả, nghiêm túc. Đây chắc chắn sẽ
là những kiến thức quý báu, là hành trang để em có thể vững bước sau này.

Bộ môn Trí Tuệ Nhân Tạo là môn học thú vị, vô cùng bổ ích và có tính thực tế cao.
Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn của sinh viên. Tuy
nhiên, do vốn kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều bỡ
ngỡ. Mặc dù nhóm em đã cố gắng hết sức nhưng chắc chắn bài tiểu luận khó có thể
tránh khỏi những thiếu sót và nhiều chỗ còn chưa chính xác, kính mong thầy xem xét
và góp ý để bài tiểu luận của tiểu đội em được hoàn thiện hơn.

Nhóm 17 xin chân thành cảm ơn!

Nhóm thực hiện đề tài

Nhóm 17

6
MỞ ĐẦU
1. Lý do chọn đề tài.
- Tính ứng dụng: thuật toán A* có thể có tính ứng dụng vao trong nhiều
lĩnh vực khác nhau. Ví dụ nó có thể giải quyết một số vấn đề cụ thể
trong trí tuệ nhân tạo hoặc có thể áp dụng trong các lĩnh vực như xử lý
ảnh, xử lý ngôn ngữ tự nhiên, hoặc tối ưu hóa.
- Hiệu suất: thuật toán A* có thể có hiệu suất tốt, tức là nhanh chóng và
hiệu quả trong việc giải quyết vấn đề. Điều này có thể đáng chú ý đối
với các bài toán quy mô lớn hoặc yêu cầu xử lý thời gian thực.
- Nghiên cứu trước đó: Có thể đã có nhiều nghiên cứu trước đó về thuật
toán A*, cho thấy tính khả thi và hiệu quả của nó. Điều này có thể cung
cấp một nền tảng tốt để tiếp tục nghiên cứu và phát triển thuật toán.
- Tính sáng tạo: Thuật toán A* có thể đem lại sự sáng tạo và đột phá trong
việc giải quyết vấn đề. Nó có thể đưa ra một phương pháp mới hoặc cải
tiến đáng kể so với các thuật toán hiện có.
- Quan tâm của cộng đồng: Thuật toán A* có thể đang nhận được sự quan
tâm và quan tâm từ cộng đồng nghiên cứu hoặc ngành công nghiệp.
Điều này có thể tạo ra cơ hội để đóng góp vào lĩnh vực đang phát triển
nhanh chóng và có tầm ảnh hưởng.
2. Mục tiêu nghiên cứu.
- Là tìm kiếm đường đi ngắn nhất từ một điểm xuất phát đến một điểm
đích trên một đồ thị hoặc môi trường. Thuật toán A* kết hợp giữa thuật
toán tìm kiếm theo chiều rộng (BFS) và thuật toán tìm kiếm theo chi phí
(Dijkstra) để tối ưu hóa quá trình tìm kiếm.
- Mục tiêu chính của thuật toán A* là tìm ra đường đi ngắn nhất từ điểm
xuất phát đến điểm đích mà đồng thời cân nhắc vào cả chi phí đã đi qua
và ước tính chi phí còn lại. Thuật toán sử dụng một hàm heuristic để
ước tính chi phí còn lại từ mỗi điểm đến điểm đích, giúp tìm kiếm theo
hướng tiềm năng nhất.
- Mục tiêu nghiên cứu của thuật toán A* là tìm hiểu và phát triển các
phương pháp để cải thiện hiệu suất và độ chính xác của thuật toán, đồng
thời áp dụng nó vào các bài toán thực tế như tìm đường đi trong bản đồ,
lập kế hoạch di chuyển cho robot, hoặc tìm kiếm trong trò chơi điện tử.
3. Đối tượng phạm vi.
- Thuật toán A* (A-star) là một thuật toán tìm kiếm đường đi ngắn nhất
được sử dụng rộng rãi trong trí tuệ nhân tạo và lĩnh vực liên quan. Đối
tượng của thuật toán A* là tìm kiếm đường đi ngắn nhất từ một điểm bắt
đầu đến một điểm đích trên một đồ thị hoặc một môi trường.
- Phạm vi của thuật toán A* là áp dụng cho các bài toán tìm đường đi
trong không gian đa chiều, trong đó mỗi điểm trong không gian được

7
biểu diễn bằng một nút trong đồ thị. Thuật toán A* có thể được sử dụng
trong các bài toán như tìm đường đi trên bản đồ, tìm đường đi trong môi
trường 3D, hoặc tìm đường đi trong các trò chơi.
- Thuật toán A* kết hợp giữa hai yếu tố là chi phí đã đi được từ điểm bắt
đầu đến điểm hiện tại (g-cost) và ước tính chi phí còn lại từ điểm hiện
tại đến điểm đích (h-cost). Phạm vi của thuật toán A* là tìm kiếm đường
đi ngắn nhất bằng cách duyệt qua các nút trong đồ thị và cập nhật các
giá trị g-cost và h-cost để tìm ra đường đi tối ưu.
- Tóm lại, đối tượng của thuật toán A* là tìm kiếm đường đi ngắn nhất từ
một điểm bắt đầu đến một điểm đích trên một đồ thị hoặc môi trường,
và phạm vi của nó là áp dụng cho các bài toán tìm đường đi trong không
gian đa chiều.
4. Phạm vi: Phương pháp nghiên cứu.
 Nghiên cứu và phân tích, tham khảo tài liệu từ nhiều nguồn trên mạng.
 Code trên phần mềm Visual Studio 2022 và Google Colab.
5. Cấu trúc đề tài.
Gồm 3 phần chính:
1. Giới thiệu thuật toán A* cho game tìm đường về nhà.
2. Ứng dụng và ưu nhược điểm.
3. Demo code và ứng dụng thuật toán.

8
CHƯƠNG 1: GIỚI THIỆU
I. Thuật toán A star .
Khái niệm:
- A* là giải thuật tìm kiếm đồ thị, tìm đường đi từ một đỉnh hiện tại đến
đích có sử dụng hàm để ước lượng khoảng cách hay còn gọi là hàm
Heuristic.
- Từ trạng thái hiện tại A* xây dựng tất cả các đường đi có thể đi dùng
hàm ước lượng khoảng cách (hàm Heuristic) để đánh giá đường đi tốt
nhất có thể đi. Tùy theo mỗi dạng bài khác nhau mà hàm Heuristic sẽ
được đánh giá khác nhau. A* luôn tìm được đường đi ngắn nhất nếu tồn
tại đường đi như thế.
- A* lưu giữ một tập các đường đi qua đồ thị, từ đỉnh bắt đầu đến đỉnh kết
thúc, tập các đỉnh có thể đi tiếp được lưu trong tập Open.
- 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).
o G(x): là chi phí của đường đi từ điểm xuất phát cho đến thời
điểm hiện tại.
o H(x): là hàm ước lượng chi phí tử đỉnh hiện tại đến đỉnh đích f(x)
thường có giá trị càng thấp thì độ ưu tiên càng cao.

II. Các bước giải thuật toán A*

- Bài toán tìm đường về nhà có thể được giải quyết bằng thuật toán A*.
Thuật toán A* là một thuật toán tìm đường trên đồ thị, nó kết hợp
giữa thuật toán tìm kiếm theo chiều rộng (BFS) và thuật toán tìm
kiếm theo độ ưu tiên (Best-First Search) để tìm đường đi ngắn nhất.
- Các bước để áp dụng thuật toán A* vào bài toán tìm đường về nhà
như sau:
o Bước 1. Xác định đối tượng và mục tiêu: Xác định vị trí nhà
của bạn là điểm đích và vị trí hiện tại của bạn là điểm xuất
phát.
o Bước 2. Xây dựng các đỉnh và các cạnh của đồ thị: Xây dựng
đồ thị gồm các đỉnh biểu diễn các vị trí có thể được di chuyển
trong khu vực hiện tại và các cạnh biểu diễn các khoảng cách
giữa các đỉnh.
o Bước 3. Xác định hàm đánh giá: Xác định hàm đánh giá
(heuristic function) để ước lượng khoảng cách còn lại từ các
đỉnh đến đích. Trong trường hợp tìm đường về nhà, hàm đánh
giá có thể là khoảng cách Euclid hoặc Manhattan giữa vị trí
hiện tại và nhà.

9
o Bước 4. Khởi tạo hàng đợi ưu tiên và danh sách mở/đóng: Tạo
hàng đợi ưu tiên để lưu trữ các đỉnh chờ được duyệt. Tạo danh
sách mở/đóng để lưu trữ các đỉnh đã được duyệt và chưa được
duyệt.
o Bước 5. Gán giá trị ban đầu cho các đỉnh: Gán giá trị ước
lượng f = g + h ban đầu cho tất cả các đỉnh, với g là khoảng
cách từ điểm xuất phát đến đỉnh và h là giá trị ước lượng từ
đỉnh đến đích.
o Bước 6. Vòng lặp chính của thuật toán: Bắt đầu từ đỉnh xuất
phát, lặp lại các bước sau cho đến khi tìm được đỉnh đích hoặc
không còn đỉnh nào trong hàng đợi ưu tiên:
 Lấy ra đỉnh có f nhỏ nhất từ hàng đợi ưu tiên.
 Nếu đỉnh này là đích, kết thúc thuật toán.
 Đánh dấu đỉnh này đã được duyệt.
 Duyệt qua các đỉnh kề của đỉnh hiện tại. Nếu đỉnh kề
chưa được duyệt hoặc có f mới nhỏ hơn f hiện tại, cập
nhật giá trị f và đỉnh cha của đỉnh kề và đưa vào hàng
đợi ưu tiên.
o Bước 7. Truy vết đường đi: Sau khi tìm được đỉnh đích, từ
đỉnh cha của nó ta có thể truy vết ngược theo đường đi ngắn
nhất để đến nhà.
- Thuật toán A* áp dụng cho bài toán tìm đường về nhà giúp tìm ra
đường đi ngắn nhất từ vị trí hiện tại đến nhà, với độ phức tạp thời
gian tốt hơn so với một số thuật toán tìm đường khác.

10
Sơ đồ minh họa thuật toán A* tìm đường về đích.
STT Nút được mở rộng Tập biên
0 S(8)
1 S As(14), Bs(16)
2 As Bs(16), Ca(15)
3 Ca Bs(16), Ec(29), G1c(17)
4 Bs Ec(29), G1c(17), Cb(14), Db(9)
5 Db Ec(29), G1c(17), Cb(14), Fd(23)
6 Cb Ec(28), G1c(16), Fd(23),
7 G1c Dừng

 Vậy đường đi là G1 <- C <- B <- S

 Với chi phí là: 16.

11
CHƯƠNG 2: ỨNG DỤNG THUẬT TOÁN.

- Thuật toán A* được sử dụng rộng rãi trong nhiều ứng dụng khác
nhau với mục đích tìm kiếm đường đi tối ưu trên một bản đồ hoặc
một đồ thị.
- Dưới đây là một số ví dụ về ứng dụng của thuật toán A*:
- Tìm đường đi trong các trò chơi máy tính: A* thường được sử dụng
để tìm đường đi ngắn nhất từ vị trí hiện tại của nhân vật đến mục tiêu
trong các trò chơi game như game nhập vai, game chiến thuật, game
điều khiển xe hơi, v.v.
- Tìm đường đi trong robot tự động: A* có thể được sử dụng để lập kế
hoạch đường đi cho các robot tự động trong các ứng dụng công nghệ
như tự động hóa trong nhà máy, robot giao hàng tự động, robot hút
bụi, v.v.
- Tìm đường đi trong mạng lưới điện hay mạng lưới thông tin: A* có
thể được sử dụng để tìm đường đi tối ưu nhất trong mạng lưới điện,
mạng lưới giao thông, mạng lưới viễn thông và các ứng dụng liên
quan.
- Tìm đường đi trong trò chơi cờ vây: A* có thể được sử dụng để tính
toán các đội hợp lý và đường đi tối ưu trong trò chơi cờ vây.
- Tìm đường đi trong lập kế hoạch di chuyển: A* có thể được sử dụng
để lập kế hoạch di chuyển trong các lĩnh vực như đi lại trong thành
phố, lập kế hoạch tàu bay, lập kế hoạch du lịch, v.v.
- Tìm đường đi trong hệ thống điều kiển: A* có thể được sử dụng để
lập kế hoạch và tìm kiếm đường đi tối ưu trong các hệ thống điều
khiển tự động như hệ thống điều khiển máy bay, hệ thống điều khiển
tàu, hệ thống điều khiển giao thông, v.v.-
- Đây chỉ là một số ví dụ phổ biến về ứng dụng của thuật toán A*.
Thuật toán này có thể được sử dụng để giải quyết nhiều bài toán tìm
kiếm đường đi tối ưu khác nữa trong nhiều lĩnh vực khác nhau.

Ưu điểm và khuyết điểm của thuật toán A* khi áp dụng vào bài toán
tìm đường về nhà.

Ưu điểm:

 Hiệu suất cao: A* tỏ ra hiệu quả trong việc tìm đường


ngắn nhất giữa hai điểm bằng cách tận dụng thông tin
đường đi từ điểm đang xét đến điểm đích dựa trên hàm
Heuristic.

12
 Đảm bảo tìm được đường ngắn nhất: Với điều kiện các
hàm Heuristic được định nghĩa một cách hợp lý, A*
luôn tìm được đường đi ngắn nhất từ điểm bắt đầu đến
điểm đích.
 Khả năng tối ưu: A* có khả năng tìm đường ngắn nhất
mà không cần kiểm tra toàn bộ các đường đi. Nó chỉ tìm
kiếm các đường đi tiềm năng và đánh giá dựa trên các
thông tin định hướng.

Khuyết điểm của thuật toán A* trong bài toán tìm đường về
nhà:

 Đòi hỏi thông tin đường đi chính xác: A* dựa trên


thông tin đường đi ước lượng từ hàm Heuristic. Nếu
hàm Heuristic không được định nghĩa hoặc không đạt
hiệu quả, A* có thể không tìm ra đường đi tối ưu.
 Yêu cầu lưu trữ lớn: A* tạo ra và duy trì một danh sách
các nút đã mở trong quá trình tìm kiếm. Kích thước của
danh sách này tăng dần theo quá trình tìm kiếm và yêu
cầu lưu trữ lớn trong trường hợp bài toán đường đi phức
tạp.
 Thời gian chạy có thể lâu: Trong một số trường hợp, A*
có thể tốn nhiều thời gian để tìm ra đường đi ngắn nhất,
đặc biệt là khi có rào cản lớn hoặc khi không tồn tại
đường đi từ điểm bắt đầu đến điểm đích.

13
CHƯƠNG 3: DEMO CODE.

1. Giao diện

Chương trình gồm:


a. 1 ma trận gồm các ô vuông mà robot có thể đi qua
b. Các ô có trọng số quảng đường là 1
c. Vật cản cố định: robot không thể đi qua
d. ….

14
2. Giao diện

a) Tối ưu về ĐƯỜNG ĐI

15
b) Tối ưu về THỜI GIAN

c) Tối ưu cả ĐƯỜNG ĐI và THỜI GIAN

16
TÀI LIỆU THAM KHẢO
1. https://vi.wikipedia.org/wiki/Gi%E1%BA%A3i_thu%E1%BA%ADt_t
%C3%ACm_ki%E1%BA%BFm_A*
2. https://www.iostream.co/article/thuat-giai-a-DVnHj.
3. https://vi.wikipedia.org/wiki/B%C3%A0i_to%C3%A1n_
%C4%91%C6%B0%E1%BB%9Dng_%C4%91i_ng%E1%BA%AFn_nh
%E1%BA%A5t

17

You might also like