1. Trang chủ
  2. » Cao đẳng - Đại học

Đồ án huấn luyện AI chơi game tetris

24 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 636,91 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Source: Wikipedia - Cách một cá nhân thông thường chơi Tetris: • Đảm bảo độ cao hiện tại là tối thiểu: Khi các viên gạch Tetris chạm đến độ cao tối đa, thì người chơi sẽ thua cuộc, nên

Trang 1

Thành phố Hồ Chí Minh, tháng 6 năm 2021

🙡🕮🙣

ĐỒ ÁN 1

Đề tài: Huấn luyện AI chơi game Tetris

Giáo viên hướng dẫn: Huỳnh Tuấn Anh

Sinh viên thực hiện: Dư Chế Anh - 18520445

Thi Thanh Chương -18520539

Trang 3

3

NHẬN XÉT

Trang 4

4

LỜI CẢM ƠN

Cảm ơn thầy Huỳnh Tuấn Anh vì đã cung cấp cho nhóm chúng em nói riêng

và các sinh viên trong lớp nói chung những đề tài đồ án thú vị ạ, nhóm chúng

em đã có những kiến thức mới và kinh nghiệm làm việc nhóm thú vị

Trong quá trình làm việc, khó tránh được các sai sót từ nhỏ đến lớn, mong

các thầy cô quan tâm và góp ý tận tình giúp nhóm chúng em có thể phát triển

hơn ạ

Cảm ơn các thầy cô ạ!

Trang 5

5

Contents

GIỚI THIỆU 6

1 Mục đích tài liệu: 6

2 Đề tài: 6

3 Vấn đề: 6

4 Hướng giải quyết: 6

5 Mục tiêu: 6

KẾ HOẠCH VÀ PHÂN TÍCH 7

1 Kế hoạch 7

2 Phân tích 7

Thực thi 10

1 Tetris: 10

2 Bot: 10

3 AI 11

NGHIÊN CỨU 12

Case #1: Ai cơ bản train ở 1 seed 13

Case #2: AI cơ bản train ở nhiều seed 14

Case #3: AI với fitness mới và train ở 1 seed 15

Case #4: AI tự train vs AI tự train 17

KẾT LUẬN 19

THAM KHẢO 20

Records 21

Record1 21

Record 2 21

Record 3 22

Record 4 23

Record 5 23

Trang 6

6

GIỚI THIỆU

1 Mục đích tài liệu:

Tài liệu này được xây dựng với mục đích giới thiệu đề tài, ghi nhận và phân

tích quá trình tiếp nhận và giải quyết vấn đề, từ ban đầu cho đến khi hoàn thành

đồ án

2 Đề tài:

Huấn luyện AI chơi game Tetris

3 Vấn đề:

Tetris mà một tựa game cần chú ý nhiều input

Các sinh viên thực hiện đề tài không có kinh nghiệm với học máy hoặc trí tuệ

nhân tạo

4 Hướng giải quyết:

Sử dụng ngôn ngữ lập trình Python cho dự án, vì số lượng tài liệu và hướng

Trang 7

7

KẾ HOẠCH VÀ PHÂN TÍCH

1 Kế hoạch

Nghiên cứu Nghiên cứu về Python và ứng dụng trong AI

Thực thi Tạo ra bot chơi Tetris, bot sẽ được feed thông số đầu vào

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

- Tetris: Mục tiêu của trò chơi là di chuyển các khối gạch đang rơi từ từ xuống

trong kích thước hình chữ nhật 20 hàng x 10 cột (trên màn hình) Chỗ nào có

gạch rồi thì không di chuyển được tới vị trí đó Người chơi xếp những khối hình

sao cho khối hình lấp đầy 1 hàng ngang để ghi điểm và hàng ngang ấy sẽ biến

mất (Source: Wikipedia)

- Cách một cá nhân thông thường chơi Tetris:

• Đảm bảo độ cao hiện tại là tối thiểu: Khi các viên gạch Tetris chạm

đến độ cao tối đa, thì người chơi sẽ thua cuộc, nên ta phải đảm bào được khi chọn vị trí đặt gạch ta sẽ tối ưu độ cao của chúng

• Đảm bảo người chơi clear được số hàng nhiều nhất (ghi điểm nhiều nhất): Người chơi sẽ ghi điểm trong game bằng các clear các hàng, nên điểm sẽ là cách chúng ta độ hiệu quả của AI

Trang 8

8

• Đảm bảo số lượng lỗ giữa cột là nhỏ nhất: Các lỗ giữa hàng sẽ gây

cản trở cho việc ghi điểm và clear nhiều hàng một lúc nên chúng ta phải đảm bảo cho việc trên

• Đảm bảo các cột có độ lệch không lớn: Nếu độ lệch giữa các cột gần

nhau lớn thì chúng sẽ giới hạn số lượng gạch có thể được đặt trên chúng

nên cần phải tối ưu thông số này

Bumpiness = |3-5| + |5-6| + |6-5| + |5-4| + |4-5| = 6

Trang 9

9

- AI phù hợp: Sau nhiều lần nghiên cứu tài liệu và video hướng dẫn thì nhóm

đã đi đến quyết định chọn Genetic Algorithm (thuật toán di truyền) để sử dụng

cho hệ thống

• Giới thiệu về thuật toán di truyền: Là một mô hình mô phỏng thuyết

chọn lọc tự nhiên của Darwin

• Quy trình thực thi thuật toán di truyền:

1 Tạo ra một quần thể với số lượng các cá thể cho trước mang thông số ngẫu nhiên

2 Tính fitness cho từng cá thể trong quần thể (fitness là hàm tính độ phù hợp cho hệ thống, như tetris thì fitness sẽ trả về số điểm hoặc số line đã clear)

3 Chọn ra các các thể có fitness cao nhất để

đi lai tạo

4 Các cá thể lai tạo sẽ tạo ra các cá thể mới,

có thông số ngẫu nhiên (có thể lớn hoặc nhỏ hơn cá thể bố và mẹ)

5 Các cá thể vừa được lai tạo có tỉ lệ nhỏ bị đột biến, khi cá thể bị đột biến, thông số của cá thể sẽ có sự thay đổi

6 Sau đó chúng ta tổng hợp các cá thể tốt nhất của đời này và các cá thể mới được lai tạo, tổng hợp lại để tạo thành một quần thể mới

7 Lặp lại quá trình cho đến khi nào đạt nhu cầu của người lập trình, ta thu kết quả và lấy cá thể có kết quả tốt nhất

Trang 10

10

Thực thi

1 Tetris:

Vì đây là đồ án huấn luyện AI chơi game tetris nên nhóm

bỏ qua bước phát triển game tetris bằng cách clone một

tetris repo trên github về và phát triển tính năng AI thêm

vào repo trên (info)

Repo có chức năng cơ bản, đọc dễ hiểu và có khả năng

chỉnh sửa cao

2 Bot:

Trong quá trình phân tích nhóm đã đưa ra các thông số cần đảm bảo với một

người chơi tetris thông thường, đó là: Độ cao hiện tại, số dòng clear, số lượng

lỗ giữa các cột, độ lệch giữa các cột Để chơi tetris người chơi phải cân nhắc

các thông số trên (ở tốc độ của con người) để đưa ra quyết định hợp lý, máy

tính cũng tương tự, ta sẽ đưa các thông số vào cho AI để chúng quyết định

xem nên tiến hành bước 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

đối với người chơi thì clear dòng sẽ quan trọng hơn thảy và người chơi sẽ quan

trọng việc hạn chế lỗ giữa cột hơn là đảm bảo độ cao hiện tại 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 đưa ra cách tính điểm:

a=Aggregate Height b=Lines Clear c=Holes d=Bumpiness score = a*w1 + b*w2 + c*w3 + d*w4

Với w1 – w4 là các weight tương ứng

với các thông số trên Và khi xử lý, ta

Trang 11

11

Sau khi tạo nên các hàm tính toán cần thiết, ta chỉ việc cho chúng 1 bộ weights

phù hợp May mắn thay có một dự án có bộ weights sẵn cho các thông số

tương tự nên ta có thể áp dụng chúng vào bot để cho bot hoạt động được

Weights= [-0.510066, 0.760666, -0.35663, -0.184483] (source)

3 AI

Đầu tiên nhóm tạo một class chứa các hàm của thuật toán tiến hóa

Trong đó 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ể với một số lượng gạch giới hạn nào đó (piecelimit)

Sau đó chúng ta áp dụng mô hình thuật toán tiến hóa để dự án có thể tự đưa

ra weights phù hợp

Trang 12

12

NGHIÊN CỨU

Lưu ý:

• Các kết quả nghiên cứu sau được tiến hành với fastmode=True (các viên

gạch được rơi ngay) và sẽ không hiển thị GUI để đảm bảo độ chính xác của kết quả (hiển thị GUI sẽ ảnh hưởng đến kết quả tùy theo sức mạnh của phần cứng)

• Weight được lấy từ ví dụ trên mạng trong bài đã được huấn luyện rất

nhiều và có thể chơi tetris liên tục 2 tuần liền, và clear hơn 2 triệu lines

mà vẫn không có dấu hiệu thua cuộc, nên nhóm thấy đây sẽ là một mốc

so sánh tốt

• Kiểm tra file readme.md trên github repo nếu muốn tiến hành thực thi lại các thí nghiệm sau

Để đánh giá kết quả nghiên cứu, chúng ta sẽ so sánh kết quả khi dùng weight

huấn luyện được với dùng weight của ví dụ trên mạng

Weight trên mạng ta sẽ gọi là demo_weight =

[-0.510066, 0.760666, -0.35663, -0.184483]

Weight ta train được sẽ gọi là trained_weight

Trang 13

13

Case #1: Ai cơ bản train ở 1 seed Đặc điểm:

▪ Các viên gạch và thứ tự gạch xuất hiện luôn là giống nhau (dùng seed)

▪ AI được train với seed=1

Fitness được đo bằng số điểm đạt được

Kết quả huấn luyện ( record1 )

thể

SL Đời

SL lai

SL gạch

Max fitness Weight của cá thể tốt nhất

Train fitness/demo fitness

Phân tích case#1:

- AI của chúng ta được huấn luyện

qua 5 đời, mỗi đời gồm 5 cá thể, với

giới hạn gạch là 100

- Ở 1.1, các thông số của được set

tương tự như lúc AI được huấn

luyện, nên điểm số cho ra đạt được

93% so với demo_weight

- Ở 1.2, vì số lượng gạch tăng lên

nhiều hơn so với lúc huấn luyện nên

- Cần có thêm nhiều cá thể ở mỗi

đời, thêm nhiều đời cho quần thể

- Huấn luyện với seed nhất định sẽ tối ưu thời gian (nếu ta kiểm thử ở seed đó), nhưng khả năng cao sẽ phát sinh vấn đề khi sử dụng AI trong thực tiễn

Trang 14

14

Case #2: AI cơ bản train ở nhiều seed Đặc điểm:

▪ Các viên gạch và thứ tự gạch xuất hiện luôn là ngẫu nhiên

▪ AI được train với seed=random

Fitness được đo bằng số điểm đạt được

Kết quả huấn luyện ( record2 )

thể

SL Đời

SL lai

SL gạch

Max fitness Weight của cá thể tốt nhất

Train fitness/demo fitness

Phân tích case #2:

- AI của chúng ta được huấn luyện

qua 10 đời, mỗi đời gồm 10 cá

Kết luận case#2:

- Huấn luyện AI với các seed ngẫu

nhiên có khả năng tạo ra AI tốt hơn

- Huấn luyện AI với seed ngẫu nhiên cần rất nhiều cá thể mỗi đời và cần qua rất nhiều đời để đạt được khả năng ứng dụng cao (khi so với ứng

dụng trong case #2)

Trang 15

15

Case #3: AI với fitness mới và train ở 1 seed Đặc điểm:

▪ Các viên gạch và thứ tự gạch xuất hiện được xác định bằng seed

▪ AI được train với seed=1

Fitness được đo bằng:

số lượng line đã xóa*1000 + số lượng gạch đã đặt

Kết quả huấn luyện ( record3 )

thể

SL Đời

SL lai

SL gạch

Max fitness Weight của cá thể tốt nhất

->fitness tối đa có thể đạt được là: 300*0.4*1000 + 300 =120,300

Ta sẽ giới thiệu thêm thông số nằm sau fitness của 2 weight đó là tỉ lệ của chúng so với fitness tối đa đối với thông số của chúng

Với các bài train ở số lượng gạch là vô hạn thì chúng sẽ được giám sát kèm với UI nên số điểm có thể thấp hơn số điểm tối đa

STT seed

Số lượng gạch

Theoretical maximum

Trained fitness Demo fitness

Train fitness/

demo fitness

(98.3%)

117,300 (97.5%) 1.008

(98.3%)

237,600 (98.7%) 0.995

3.3 1 1,000 401,000 399,000

(99.5%)

400,000 (99.7%) 0.997

Trang 16

16

(99%)

196,500 (98%) 1.010

3.5 2 Infinite Infinite

1,535,862 (99%,thua ở line 3862)

1,049,655 (98.5%, thua ở line 2655)

▪ Có sự khác biệt rất lớn khi thay đổi công thức tính fitness

Kết luận case#3:

▪ Huấn luyện AI tetris muốn đạt hiệu quả cao, nhanh chóng thì ta tính fitness bằng số lượng line đã clear, sẽ tốt hơn là tính điểm, vì công thức tính điểm là số lượng line clear = [1,2,3,4] thì sẽ có số điểm là [40,100,300,1200], vì công thức tính điểm chơi ưu tiên clear nhiều line một lúc, có thể mang lại nguy hiểm cho AI vì độ cao trung bình sẽ được đẩy lên để ưu tiên clear nhiều line AI với fitness theo số line đã clear thì

sẽ ưu tiên clear line trước, dẫn đến độ cao trung bình thấp, khiến chúng

sống được lâu hơn

Cần có kiểm chứng về thực lực của các AI với các bộ fitness khác nhau

Trang 17

17

Case #4: AI tự train vs AI tự train Đặc điểm:

▪ Khi so sánh với nhau các AI sẽ được so sánh bằng số điểm đạt được

▪ Các viên gạch và thứ tự gạch xuất hiện được xác định bằng seed

▪ 2 AI sẽ được train ở seed = 1

▪ Ta sẽ train 2 AI đối đầu với nhau

Fitness của AI 1 được đo bằng:

số lượng line đã xóa*1000 + số lượng gạch đã đặt

Kết quả huấn luyện AI 1 ( record4 )

thể

SL Đời

SL lai

SL gạch

Max fitness Weight của cá thể tốt nhất

5 5 2 300 119,300 [0.40254199, 0.83214954, 1.22852379,

-0.60817082]

Fitness của AI 2 được đo bằng số điểm đạt được

Kết quả huấn luyện AI 2 ( record5 )

thể

SL Đời

SL lai

SL gạch

Max fitness Weight của cá thể tốt nhất

STT seed Số lượng

gạch

AI 1 Score

AI 2 Score

Trang 18

18

4.5 2 Infinite 337,842

(lost)

1,550,578 (lost) 0.217881332

▪ AI được huấn luyện với fitness ưu tiên clear nhiều hàng một lúc (AI 2)

sẽ có hiệu năng tốt hơn trong số lượng gạch được cho phép

▪ AI được huấn luyện với fitness ưu tiên độ cao của các cột (AI 1) sẽ có

khả năng tồn tại tốt hơn (4.4)

▪ Nếu muốn đánh giá AI bằng các seed khác nhau thì nên thử ở nhiều seed vì kết quả sẽ phụ thuộc vào seed đó (4.5)

Trang 19

19

KẾT LUẬN

Sau các bài nghiên cứu và huấn luyện thì nhóm đã có nhiều kiến thức và đã

tạo được một AI có khả năng chơi Tetris hơn 34,000,000 điểm AI được huấn

luyện qua 20 đời, gồm 20 cá thể, 5000 gạch giới hạn và được huấn luyện hoàn

chỉnh trong vòng 13h (Video)

Sau khi hoàn thành đồ án và tiến hành các bài nghiên cứu, nhóm đã biết thêm

được nhiều nội dung liên quan đến AI nói chung và AI cho game Tetris nói

riêng

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

Ngày đăng: 05/09/2021, 20:46

TỪ KHÓA LIÊN QUAN

w