ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
------------- o0o -------------
BÁO CÁO CUỐI KỲ ĐỒ ÁN 1
Đề tài: AI Flappy Bird
SE121.L21.PMCL
Giáo viên hướng dẫn:
Huỳnh Tuấn Anh
Nhóm thực hiện:
Nguyễn Trần Hồng Hiếu - 18520054
Nguyễn Đức Chiến - 18520528
NHẬN XÉT CỦA GIẢNG VIÊN
.....................................................................................................................................
.................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
...................................................................................................................................................
Người nhận xét
(Ký tên và ghi rõ họ tên)
1
MỤC LỤC
LỜI CẢM ƠN
3
TỔNG QUAN VỀ ĐỀ TÀI
Đề tài:
Giới thiệu đề tài
Cách xây dựng:
Mục tiêu:
4
4
4
4
4
Bước đầu
5
Kế hoạch
Phân tích
Mục tiêu:
Thuật tốn AI phù hợp:
5
5
5
5
KHÁI QT VỀ NỘI DUNG TÌM HIỂU
6
Trí tuệ nhân tạo
AI
Machine learning
Reinforcement learning
Giải thuật di truyền
6
6
6
6
7
Flappy bird
9
THỰC HIỆN
9
NGHIÊN CỨU
12
HƯỚNG PHÁT TRIỂN:
13
KẾT LUẬN:
14
2
LỜI CẢM ƠN
Lời đầu tiên, em xin chân thành gửi lời cảm ơn đến trường Đại học
Công nghệ Thông tin đã tạo điều kiện cho em có một mơi trường học tập
tốt, tự do sáng tạo. Em cũng xin cảm ơn tất cả các thầy, cơ đã hết lịng
quan tâm, dạy bảo cho chúng em một nền tảng kiến thức tốt, hỗ trợ chúng
em rất nhiều trong q trình hồn thành đồ án này.
Em xin gửi lời cảm ơn chân thành đến thầy Huỳnh Tuấn Anh - giảng
viên khoa Công nghệ phần mềm - cũng đã tận tình hướng dẫn, góp ý và
giải đáp các thắc mắc cho nhóm trong suốt q trình làm đề tài.
Mặc dù nhóm đã hồn thành đồ án nhưng khơng thể tránh khỏi
những sai sót, chúng em rất mong nhận được những lời nhận xét, đánh
giá chân thành từ phía thầy, cơ. Nhóm chúng em xin chân thành cảm ơn.
Thành phố Hồ Chí Minh, ngày 29 tháng 6 năm 2021
Nhóm thực hiện
3
I. TỔNG QUAN VỀ ĐỀ TÀI
1. Đề tài:
Huấn luyện AI chơi game Flappy Bird
2. Giới thiệu đề tài
Khi xã hội ngày càng phát triển và máy móc ngày càng được
tăng khả năng, trí tuệ nhân tạo (hay AI) cũng theo đó phát
triển ngày càng mạnh với nhiều ứng dụng thiết thực trong
nghiên cứu khoa học hay đời sống con người. Để kiểm tra
mức độ thông minh của AI, mà theo các nhà khoa học tin
tưởng, là thơng qua các trị chơi. Nhờ đó có thể đo lường và
so sánh các sản phẩm AI để xác định sản phẩm nào thực
hiện công việc tốt hơn. Trong nhiều thập kỷ qua, họ đã tập
hợp được các thuật tốn trí tuệ nhân tạo đối đầu với con
người trong nhiều trò chơi với các quy tắc và thử thách khác
nhau như cờ vua, poker hay cờ vây,… Chính vì thế, nhóm
chúng em đã chọn huấn luyện AI chơi game làm đề tài lần
này mà cụ thể ở đây là huấn luyện AI chơi game Flappy
Bird.
3. Cách xây dựng:
Integrated Development Environment: Pycharm
Sử dụng ngôn ngữ lập trình Python
Framework: Pygame, Neat python
Sử dụng Reinforcement learning ( huấn luyện tăng cường)
và thuật toán Genetic Algorithm để huấn luyện AI
4. Mục tiêu:
Tạo ra AI chơi flappy bird mà không thể thua được
4
II. Bước đầu
1. Kế hoạch
Mục đích
Nghiên cứu
Nghiên cứu về Python và AI
Thực thi
Tạo ra Bot chơi Flappy Bird
Huấn luyện
Biến Bot thành AI, bot sẽ tự huấn luyện để lấy thông
số đầu vào
2. Phân tích
a. Mục tiêu:
Mục tiêu của trị chơi là điều khiển một chú chim bay
qua những cái ống. Nếu chú chim chạm vào chướng
ngại vật thì trị chơi sẽ kết thúc. Mỗi khi chú chim vượt
qua một cặp ống thì người chơi nhận được một
điểm.(Source: Wiki)
b. Thuật tốn AI phù hợp:
Sau nhiều tìm hiểu và nghiên cứu thì nhóm nhận thấy
là thuật tốn Genetic Algorithm (thuật tốn di truyền) là
phù hợp để xây dựng hệ thống.
5
III. KHÁI QT VỀ NỘI DUNG TÌM HIỂU
1. Trí tuệ nhân tạo
a. AI
● AI - Artificial Intelligence hay còn gọi là Trí tuệ nhân tạo là
một ngành khoa học, kỹ thuật chế tạo máy móc thơng minh,
đặc biệt là các chương trình máy tính thơng minh.
● AI được thực hiện bằng cách nghiên cứu cách suy nghĩ của
con người, cách con người học hỏi, quyết định và làm việc
trong khi giải quyết một vấn đề nào đó, và sử dụng những
kết quả nghiên cứu này như một nền tảng để phát triển các
phần mềm và hệ thống thông minh, từ đó áp dụng vào các
mục đích khác nhau trong cuộc sống. Nói một cách dễ hiểu
thì AI là việc sử dụng, phân tích các dữ liệu đầu vào nhằm
đưa ra sự dự đoán rồi đi đến quyết định cuối cùng.
b. Machine learning
● Machine learning (ML) hay máy học là một nhánh của trí tuệ
nhân tạo (AI), nó là một lĩnh vực nghiên cứu cho phép máy
tính có khả năng cải thiện chính bản thân chúng dựa trên dữ
liệu mẫu (training data) hoặc dựa vào kinh nghiệm (những gì
đã được học). Machine learning có thể tự dự đốn hoặc đưa
ra quyết định mà khơng cần được lập trình cụ thể.
c. Reinforcement learning
● Reinforcement learning là một lĩnh vực con của học máy,
nghiên cứu cách thức một agent trong một môi trường nên
chọn thực hiện các hành động nào để cực đại hóa một
khoản thưởng (reward) nào đó về lâu dài. Các thuật tốn
học tăng cường cố gắng tìm một chiến lược ánh xạ các
trạng thái của thế giới tới các hành động mà agent nên chọn
trong các trạng thái đó.
6
d. Giải thuật di truyền
- Giới thiệu Genetic Algorithm - GAs
GAs (John Holland, 1975) mơ phỏng tiến hóa tự nhiên
(Darwinian Evolution) ở mức gen sử dụng tư tưởng của
survival of the fittest (chọn lọc tự nhiên). Một cá thể
(chromosome) mô tả một lời giải ứng viên của bài toán. Một
tập các cá thể “alive”, gọi là quần thể (population) được tiến
hóa từ thế hệ này tới thế hệ khác phụ thuộc vào sự thích
nghi của các cá thể. Thế hệ sinh ra sẽ chứa lời giải của bài
toán.
- Giải thuật
○ Khởi tạo quần thể P(0)
○ Chỉ số i chỉ thế hệ thứ i
○ Lặp đến khi quần thể hội
tụ hoặc đạt đến tiêu
chuẩn kết thúc
+ Đánh giá độ thích nghi
của mỗi cá thể trong P(i)
+ Lựa chọn các cha từ P(i)
dựa trên độ thích nghi của chúng
trong P(i).
+ Áp dụng các toán tử Gen
(crossover, mutation) từ các cha
đã chọn để sinh ra các con
+ Đạt được thế hệ tiếp theo
P(i + 1) gồm các cá thể con và
cha P(i)
- Các thành phần cơ bản của GAs
a. Khởi tạo (Initialization)
Tạo ngẫu nhiên một số cá thể chấp nhận được để
được một quần thể phù hợp với kích thước quần thể
được quy định sẵn
b. Hàm thích nghi (Fitness Function)
7
Gán giá trị thích nghi cho mỗi cá thể. Giá trị thích nghi
càng sát với thực tế thì độ chính xác càng cao.
c. Lựa chọn để kết hợp lại (Selection)
Có nhiều kiểu lựa chọn
+ roulette wheel selection
+ Boltzman selection
+ Tournament selection
+ rank selection
+ steady state selection
+ Elitism
d. Mã hóa
Mã hóa chuỗi gene của mỗi cá thể thành dạng thích
hợp (nhị phân, mã hóa giá trị, mã hóa hốn vị)
e. Lai ghép
Sau khi chọn được các cặp NST dùng để lai, ta tiến
hành cắt ghép để tạo được các NST mới (con mới).
Có nhiều hình thức lai ghép: lai 1 điểm, lai nhiều điểm,
lai bằng các phép toán nhị phân, …
f. Đột biến
Sau khi lai ghép, để tạo sự đa dạng quần thể, ta làm
phép đột biến đối với một vài cá thể. Trên chuỗi gene,
tại 1 vài vị trí, làm thay đổi giá trị của 1 đoạn gene nào
đó.
g. Đánh giá
Khi đã có quần thể mới, ta tiến hành kiểm tra đánh giá
xem cá thể nào tốt nhất, cá thể nào tồi. Loại bỏ bớt
những cá thể tồi để lặp lại các bước trên đó
h. Tiêu chuẩn kết thúc
Khơng có q trình nào là khơng thể kết thúc. Q
trình tiến hóa có thể dừng lại sau một khoảng tgian
8
được quy định(một số thế hệ) hoặc sau khi đã hội tụ
(khơng thể tìm thêm được cá thể tốt hơn)
2. Flappy bird
Flappy Bird (tạm dịch là "chú chim vỗ cánh") là một trị chơi
trên điện thoại do Nguyễn Hà Đơng, một lập trình viên ở Hà
Nội, Việt Nam phát triển, và do dotGEARS, một studio phát
triển game quy mô nhỏ, hoạt động độc lập có trụ sở tại Việt
Nam phát hành vào năm 2013. Trị chơi được trình bày theo
phong cách side-scroller (phong cách game với các đối
tượng được nhìn thấy ở mặt bên (side-view) và di chuyển từ
cạnh trái sang cạnh phải của màn hình), trong đó người chơi
điều khiển một chú chim, cố gắng vượt qua các hàng ống
màu xanh lá cây mà không chạm vào chúng.(Source: Wiki)
IV. THỰC HIỆN
1. Tạo Flappy bird game
Hiện tại game Flappy bird đã rất được phổ biến trên toàn thế
giới, mẫu game Flappy bird đã được rất nhiều người làm lại.
9
Ta có thể clone nhanh về một open source Flappy Bird trên
github về và tiếp tục phát triển AI trong đấy.
2. Tổng quan và triển khai
Tạo AI:
AI được tạo với sự hỗ trợ của package neat-python,
neat-python cung cấp các thuật tốn có sẵn và người
dùng có thể modify các thơng tin và tính fitness để tạo
ra AI phù hợp với dự án.
Khi phân tích, ta nhận thấy cần các thơng số đảm bảo
với một người chơi Flappy bird thông thường là: độ
cao của chú chim, độ cao của ống trên và độ cao của
ống dưới. Máy tính cũng như vậy để đưa ra quyết định
hợp lý, ta sẽ truyền thông số vào AI để chúng quyết
định làm gì tiếp theo.
Nhưng chỉ các thơng số trên thơi thì là chưa đủ, chúng
đều quan trọng, nhưng trong một số trường khác nhau
thì việc ưu tiên khoảng cách giữa cột trên và cột dưới
so với chú chim sẻ khác nhau. Vì vậy để đưa ra lựa
chọn chính xác, ta phải cho mỗi thơng số một cân nặng
(weight).
Từ đó ta có cách tính điểm:
a=Độ cao của chim
b=Độ cao của ống trên
c=Độ cao của ống dưới
score=a*w1 + b*w2 + c*w3
Với w1 – w3 là các weight tương ứng
với các thông số trên và được tạo ngẫu nhiên. Và khi
xử lý, ta sẽ đọc tất cả các trường hợp nhảy của chú
chim, tính score cho từng vị trí, và chọn trường hợp có
score là tốt nhất để lưu lại vào khả năng nhảy của
chim.
10
Đầu tiên nhóm tạo một hàm tạo ra các cá thể là chim.
Sau đó. với hàm tính fitness của một quần thể sẽ trả
về điểm số của từng cá thể trong một quần thể theo
các trường hợp:
- Điểm chú chim sẽ được +0.1 nếu nó được di
chuyển
- Điểm chú chim sẽ được +5 nếu nó nhảy qua
được ống
- Điểm chú chim sẽ được giảm 1 điểm nếu nó
nhảy trúng ống
Sau đó chúng ta áp dụng mơ hình thuật tốn tiến hóa
để có thể ra weights phù hợp.
11
V. NGHIÊN CỨU
● Để đánh giá kết quả nghiên cứu, chúng ta sẽ áp dụng 3 kiểu
active function khác nhau Tanh, Sigmoid, Relu lần lượt cho output
để xem độ hiệu quả mà chúng mang lại
Số lượng cá thể mỗi đời: 10
Số lượng đời tối đa: 5
Case 1: Tanh (Hyperbolic Tangent)
12
Case 2: Relu (Rectified Linear Unit)
Case 3: Sigmoid
Case
Avg fitness
Max fitness
Final
Population
Rank
Tanh
15.36
127.1
5
2
Relu
19.46
130.6
3
1
Sigmoid
19.66
153.2
2
3
Dựa vào bảng so sánh, thì Relu phù hợp nhất với AI của nhóm, khi dùng
relu làm activation function thì AI có thể đạt được khả năng ghi điểm cao
nhanh nhất (sau 3 gen)
VI. HƯỚNG PHÁT TRIỂN:
Nhóm dự định sẽ phát triển AI flappy bird chơi với nhiều thử thách
hơn nữa như cho các cột di chuyển lên xuống được, thông số
trọng lực ngẫu nhiên,... Ngồi ra nhóm sẽ tự thử thách mình tạo ra
các AI chơi những trị chơi khác.
13
VII. KẾT LUẬN:
Sau một thời gian nghiên cứu và tìm tịi, nhóm đã tiếp thu được
nhiều kiến thức mới và đã tạo được một AI chơi Flappy Bird không
chết được. AI đã bay được hơn 1000 điểm trong 1 tiếng đồng hồ
và có thể bay tiếp được nữa.
Các kiến thức trên có thể được dùng cho học tập và các dự án
sau này, nhóm rất vui vì đã chọn được một đề tài tốt và mang lại
nhiều kiến thức bổ ích.
Cảm ơn các thầy cô hoặc các bạn đã đọc qua báo cáo.
14
THAM KHẢO
Link github:
/>Genetic Algorithm:
/>hon-5ab67bb124a6
NEAT python:
/>Reinforcement learning:
/>
15