Tải bản đầy đủ (.pdf) (19 trang)

Nhập Môn Trí Tuệ Nhân Tạo Đề Tài Áp Dụng Ai Vào Game Tetris.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.87 MB, 19 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

N h ó m 1 8

<b>ÐẠI HOC BÁCH KHOA HÀ NỘI</b>

<b>TRƯỜNG CÔNG NGHỆ THÔNG TIN TRUYỀNVÀ THÔNG </b>

---

<b>BÁO CÁO BÀI TẬP LỚN NHẬP MƠN TRÍ TUỆ </b>

<b>NHÂN TẠO </b>

<b>Đề tài: Áp dụng AI vào game Tetris </b>

GVHD: Thân Quang Khốt

Nhóm sinh viên thực hiện: Phạm Quang Nghĩa – 20204554 Phạm Thị Hồng Hạnh – 20204546Trịnh Minh Hiếu – 20204554 Đào V Thi - ănều 20204610

<i><b>Hà nội, tháng 2/2023 </b></i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

N h ó m 1 8

Mục lục

1. Cơng việc của các thành viên nhóm. ...4

2. Giới thiệu và mơ tả bài tốn thực tế ợc giải quyết (Hiếđư u) ...4

3. Phương pháp được dùng để ải quyết bài toángi ...5

<i>a. Các đặc trưng được sử dụng ...5 </i>

<b>a.1 Tổng chiều cao của trạng thái (currentHeight) ...5 </b>

<b>a.2 Số hàng có thể xóa (lines) ...6 </b>

<b>a.3 Số hố (currentNumHoles) ...6 </b>

<b>a.4 Độ gập ghềnh (bumpiness) ...6 </b>

<b>a.5 Chiều cao của cột cao nhất (currentMaxHeight) </b>...7

<b>a.6 Số hố được giải phóng (holesFreed)</b> ...7

<b>a.7 Số hố được tạo ra (holesCreated)</b> ...7

<i>b. Greedy best-first search ...7 </i>

5. Các phương pháp, gói phần mềm, dữ ệu,… có sẵn được sử dụli ng ... 14

6. Các vấn đề gặp phải và cách giải quyết ... 14

7. Kết luận... 14

<i>a. Đánh giá Greedy Best-first search (Hạnh) ... 14 </i>

<i>b. Đánh giá Genetic algorithm ... 16 </i>

<i>c. Một số kết luận chung khác: </i>... 18

8. Đề ất hướng phát triểxu n: ... 19

9. Tài liệu tham khảo: ... 19

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

N h ó m 1 8

Figure 1: Hình ảnh minh họa game Tetris ...4

Figure 2: Hình ảnh minh họa game AI Tetris do chúng em xây dựng ...5

Figure 3: Tổng chiều cao trạng thái ...6

Figure 4: Tổng số hố ...6

Figure 5: Đô gập ghềnh ...7

Figure 6: Mô tả cách áp dụng của thuật toán Greedy best-first search ...7

Figure 7: Hàm heuristic ban đầu ...8

Figure 8: Quá trình thực hiện genetic algorithm ... 10

Figure 9: Cấu hình 7 loại block và các rotation của chúng ... 11

Figure 10: Lớp block ... 11

Figure 11: điều khiển hướng di chuyển và xoay của block ... 12

Figure 12: Màn hình các chức năng game ... 12

Figure 13: kích cỡ ần thểqu ... 13

Figure 14: số ế hệth ... 13

Figure 15: Minh họa cây trò chơi ... 14

Figure 16: các hàm heuristic thử nghiệm ... 15

Figure 17: Điểm các lần chơi của từng hàm heuristic ... 16

Figure 18: Điểm trung bình của các hàm heuristic ... 16

Figure 19: Điểm trung bình 100 player ở 5 thế hệ ... 17

Figure 20: độ tăng giảm điểm trung bình giữ các thế hệ (x=1.0 có y tương ứng là độ tăng giảm điểa m từ ế hệ 1 lên thế hệ th 2) ... 18

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

N h ó m 1 8

1. Cơng việc của các thành viên nhóm.

Phạm Quang Nghĩa Code phần thuật toán Greedy best-first search và genetic algorithm, sửa lỗi nội dung và tổng hợp báo cáo, làm slide Phạm Thị Hồng Hạnh Code game Tetris, đóng góp báo cáo phần đánh giá greedy

Tetris – một tựa game xếp hình được ra đời năm 1984 tại Soviet, Nga bởi một lập trình viên yêu thích giải đố. Từ một phần mềm nhỏ củ Soviet, Tetris dần tiến hoá thành tựa game máy a tính nổi tiếng nhất thế ới từ trước đến nay. Nó được chơi tại hơn 200 quốc gia, trên 50 nềgi n tảng khác nhau bởi hàng triệu người vẫn miệt mài chơi hàng tỷ ván game mỗi năm.

<i>Figure 1: Hình ảnh minh họa game Tetris</i>

Cách chơi của game Tetris rất đơn giản, một khối với hình dạng ngẫu nhiên sẽ ất hiệ ở xu n trên cùng của cửa sổ và sẽ rơi xuống với tốc độ đều, nhiệm vụ của người chơi là điều khiển khối đó sao cho phù hợp để hồn thành 1 hàng để ăn điểm, cũng như xóa hàng đó trong màn hình.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

N h ó m 1 8

Nhóm chúng em vận dụng các kiến thức, thuật tốn đã học trong mơn học Nhập mơn Trí tuệ nhân tạo để nghiên cứu, xây dựng và phát triển một phiên bản Game Tetris tự động điề u khiển các khối sao cho có thể đạt được điểm số cao trong thời gian ngắn. Có thể nói việc áp dụng AI vào 1 game như Tetris khơng có nhiề ứng dụng thực tiễn, ngồi việc thử nghiệu m rằng máy có thể “chơi game” tốt hơn con người khơng, có thể đánh bại những người giỏi nhất khơng. Trên thực tế, có những Tetris bot có thể chơi mãi mà khơng thua trong một thời gian rất dài.

<i>Figure 2: Hình ảnh minh họa game AI Tetris do chúng em xây dựng</i>

a. Các đặc trưng ợc sử dụđưng

a.1 TTTTTổng chiều cao của trạng thái (curreổng chiều cao của trạng thái (curreổng chiều cao của trạng thái (currentHeight)ntHeight)ntHeight)

Đặc trưng này cho chúng ta biết về tổng thể thì “bàn cờ” cao như thế nào. Để tính toán chiều cao tổng hợp, chúng em lấy tổng chiều cao của mỗi cột (khoảng cách từ ô cao nhất trong mỗi cột đến cuối bàn cờ).

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

a.2 Số hàng có thể xSố hàng có thể xSố hàng có thể xóa (lineóa (lineóa (lines)s)s)

Đây có lẽ là đặc trưng dễ ểu nhất trong năm đặc trưng. Nó chỉ đơn giản là số hàng có thể hixóa khi đặt mộ block vào bàn cờ. Chúng em muốn tối đa đặc trưng này, do mục tiêu của AI t là xóa càng nhiều hàng càng tốt và việc xóa các hàng này sẽ cho chúng ta nhiều khoảng trống hơn để có nhiều khối gạch hơn.

a.3 Số hố (currentNumHoleSố hố (currentNumHoleSố hố (currentNumHoles)s)s)

Một hố ợc định nghĩa là một khoảng trống sao cho có ít nhất một ơ trong cùng một cộđư t phía trên nó. Hố thì khó xóa hơn, do chúng ta phải xóa tất cả các đường phía trên trước khi chúng em có thể ạm tới hố và lấp đầy nó. Do đó, chúng em sẽ ải giảm thiểu số các hố ch phnày.

<i>Figure 4: Tổng số hố</i>

a.4 Độ gập ghềnh (bumpiness)Độ gập ghềnh (bumpiness)Độ gập ghềnh (bumpiness)

Từ Hình 3, xét trường hợp sau, các Block xếp trên bàn cờ của chúng ta và chừa ra một cái giếng sâu (được đánh số 0). Điều này thật khó chịu, bởi vì: Những giếng này có thể ợc lấđư p đầy một cách dễ dàng, và thật khủng khiếp khi giếng bị ặn bởi những khối gạch. Và sau đó, chrất khó để có thể lấp đầy. Để khái quát hóa ý tưởng về ếng, chúng em đị nghĩa một đặgi nh c trưng được đặt tên là độ gập ghềnh.

Độ gập ghềnh cho chúng ta biết sự thay đổi chiều cao của từng cột trong bàn cờ. Nó được tính bằng cách tính tổng các giá trị tuyệt đối của hiệu chiều cao hai cột liền kề.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

N h ó m 1 8

Từ các chỉ số chiều cao của các cột trên bàn cờ, dưới đây là cách tính độ gập ghềnh:

<i>Figure 5: Đô gập ghềnh|4-5| + |5-2| + ... + |4-3|+ |3-3| =9</i>

Mục tiêu của chúng em là giảm thiểu sự ất hiện và độ sâu của những cái giếng này. Vì vậy, xuđây là giá trị cần được giảm thiểu.

a.5 Chiều cao của cột cao nhChiều cao của cột cao nhChiều cao của cột cao nhất (currentMaất (currentMaất (currentMaxHeight)xHeight)xHeight)

Đặc trưng này cho biết chiều cao tối đa của các cột trên bàn cờ. Chúng ta muốn giảm tối thiểu giá trị này để có thể đặt nhiề Block hơn vào bàn cờu

a.6 Số hố Số hố Số hố ợc giải phóng (holesFreed)được giải phóng (holesFreed)

Đặc trưng này cho biết số hố ợc giải phóng. Chúng ta cần tối đa hóa giá trị này.đư

a.7 Số hố Số hố Số hố ợc tạo rđược tạo rợc tạo ra (holesCreata (holesCreata (holesCreated)ed)

Đặc trưng này cho biết số hố ợc tạ ra. Chúng ta cần giảm thiểu giá trị này.đư o

b. Greedy best-first search

Thuật toán greedy best first search là một chiến lược tìm kiếm với tri thức bổ sung từ ệc sử vidụng các tri thức cụ ể của bài toán.th Tư tưởng của thuật toán này là việc tìm kiếm bắt đầu tại nút gốc và tiếp tục bằng cách duyệt các nút tiếp theo có giá trị của hàm đánh giá (heuristic) là thấp nhất so với các nút còn lại.

Với mỗi block cần xét, ta cần tính điểm cho mỗi nước đi (bao gồm các tư thế xoay và những hồnh độ mà chúng có thể rơi xuống) và chọn nước đi có điểm cao nhất.

<i>Figure 6: Mô tả cách áp dụng của thuật tốn Greedy best-first search</i>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

N h ó m 1 8

Sau đây là mô tả về hàm heuristic ban đầu mà chúng em chọn:

<i>Figure 7: Hàm heuristic ban đầu</i>

c. Genetic algorithm

Với giải thuật di truyền, tác tử sẽ học một hàm heuristic để có thể xóa được nhiều hàng nhất có thể ở mỗi nước đi. Cách nó làm ợc điều này chính là dựa vào việc tạo ra 1 quần thể ban đưđầu, sử dụ các kỹ thuật tournament selection, crossover, mutation và delete-n-last ngreplacement, cùng với một hàm fitness hợp lý.

c.1 Năm đặc trưng đánh giá

Mục tiêu là xóa càng nhiều dịng càng tốt, nói cách khác là trì hỗn trạng thái kết thúc nhất có thể.

Để đạt được mục tiêu này, tác tử sẽ quyết định nước đi tốt nhất cho mộ block ất địt nh nh bằng cách suy tính tất cả các động tác có thể (xoay và vị trí). Nó tính score cho mỗi nước đi có thể và chọ một nước có điểm tốt nhất làm nước đi tiếp theo. n

Giống như Greedy best-first search, score cho mỗi bước di chuyển được tính bằng cách đánh giá trạng thái bàn cờ mà bước di chuyển sẽ dẫn đến. Score sử dụ năm đặc trưng: tổng ngchiều cao của trạng thái, số hàng có thể xóa, số hố, chiều cao cột cao nhất và độ gập ghềnh. Mỗi đặc trưng này tác tử sẽ ợc giải thuật cân nhắc, hoặc là cố gắng giảm thiểu, hoặc là tối đưđa hóa.

Trong đó a, b, c, d, e là các tham số ràng buộc.

Để có được hàm đánh giá score tối ưu, chúng em tạo ra năm tham số trên bằng cách sử dụng Giải thuật di truyền.

c.3 Tối ưu bộ tham số bằng Giải thuật di truyền

Mỗi bộ tham số (a, b, c, d, e) có thể ợc biểu diễn dưới dạng vectơ trong không gian đư ℝ<small>5</small>. 𝑝 = (𝑎, , , 𝑑, e) 𝑏 𝑐

Một Giải thuật di truyền chuẩn cho các gen có giá trị ực sẽ liên quan đến việc tìm kiếth m trong tồn bộ khơng gian để có một tập hợp các tham số tối ưu. Ở đây chúng em sẽ ỉ ℝ<small>5</small> chxét các vectơ nằm trên “mặt cầu” bán kính 1 trong khơng gian . Sau đây em sẽ trình bày lý ℝ<small>5</small>

do tại sao chỉ xét trên mặt cầu này.

Về mặt toán học, hàm đánh giá trong ngữ cảnh của vectơ được biểu diễn như sau:

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

N h ó m 1 8

𝑓 𝑥( ) = . 𝑝 𝑥

Với 𝑝 là bộ tham số (a, b, c, d, e), là bộ đặc trưng (tổng chiều cao của trạng thái, số hàng đã 𝑥xóa, số hố, chiều cao cột cao nhất, độ gập ghềnh), f là hàm đánh giá score cho mỗi nước đi. Giả sử chúng ta có hai nước đi, chúng em sẽ so sánh - move1 và move2, và lựa chọn nước đi nào tốt hơn, nói cách khác là score cao hơn. ả sử hai nước đi đó được biểu diễn dưới dạng Givectơ 𝑥1 và 𝑥2. Nếu move2 cho score tốt hơn move1, ta có 𝑓(𝑥2) > 𝑓(𝑥1) hay 𝑓(𝑥2 ) − 𝑓(𝑥1) >0.

Điều kiện kiểm tra có thể ết lại thành: vi

𝑓𝑖𝑡𝑛𝑒𝑠𝑠 𝑝<i>( ) = ổ𝑛𝑔 </i>𝑡 điểm<i> 𝑚à 𝑝 </i>đạt được

c.3.2 Tournament selection

Các cá thể bố mẹ ợc chọn để tạo ra thế hệ tương lai bằng cách sử dụng Tournament đưselection. Chúng em chọn khoảng 10% quần thể một cách ngẫu nhiên và từ đó lấy ra hai cá thể có điểm fitness cao nhất. Từng cá thể trong quần thể con này tiến hành crossover để tạo ra con cái mới. Quá trình này được lặp lại cho đến khi số lượng cá thể con mới được tạo ra đạt 30% kích thước quần thể.

c.3.3 Crossover

Đối với Crossvoer, cho hai vectơ cha mẹ là 𝑝1, 𝑝2 kết hợp với nhau bằng cách cộng hai vectơ đã nhân với điểm fitness của chính nó. Vectơ cá thể con 𝑝 được hình thành dưới dạng như sau:

𝑝 = 𝑓𝑖𝑡𝑛𝑒𝑠𝑠 𝑝1𝑝1 ( ) + 𝑝2 𝑓𝑖𝑡𝑛𝑒𝑠𝑠(𝑝2)

Cá thể bố/mẹ nào mang điểm fitness cao hơn sẽ mang tính trạng trội, ngược lại mang tính trạng lặn. Hay nói cách khác, cá thể con sẽ gần với cá thể bố/mẹ nào có điểm fitness cao hơn. Các vectơ con sau đó sẽ ợc chuẩn hóa nằm trên “mặt cầu” đã nói ở trênđư .

c.3.4 Mutation

Toán tử đột biến chúng em chọn khá đơn giản. Mỗi vectơ con được tạo ra có một cơ hội nhỏ (5%) để đột biến. Khi 1 vectơ 𝑝 được chọn để gây đột biến, thì một thành phần ngẫu nhiên (một trong năm tham số a, b, c, d, e) của vectơ này sẽ ợc điều chỉnh bởi một lượng ngẫđư u nhiên lên đến 0.2. Sau đó vectơ được c ẩn hóa.hu

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

N h ó m 1 8

c.3.5 Delete-n-last replacement

Khi số cá thể con tạo ra đạt ngưỡng 30%. Những cá thể yếu nhất (có ít điểm fitness nhất trong quần thể) sẽ bị xóa và thay thế bởi các cá thể con này. Kích thước quần thể vẫn giữ ngun. Tồn bộ q trình lặp lại cho đến khi kết thúc thế hệ ối cùng (tổng số ế hệ có thể cu thđược thay đổi bởi người chơi).

d. Game Tetris

Tetris là game gồm các khối hình. Mục tiêu của trị chơi là di chuyển các khối đang rơi từ từ xuống trong kích thước hình chữ ật 30 hàng x 15 cột (trên màn hình). Chỗ nào có khối rồi nhthì 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ẽ ến mất. Game kết thúc khi tất cả các bikhối xếp chồng lên nhau và chạm đến đỉnh của khung trị chơi.

<i>Figure 8: Q trình thực hiện genetic algorithm</i>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

N h ó m 1 8

Game gồm một khung hình ữ ật với kích thước 30 hàng x 15 cột, chiều dài và chiều rộng ch nhcủa khung hình tương ứng với trục tung và hoành của trục tọa độ DescartesGame với gốc tọa độ ở ểm trên cùng bên trái của khung game. Tetris gồm các khối hình, I (đứng thẳng), L đi(ngược), L, O (vuông), Z (ngược), T, Z, và các khối khi xoay 90 độ, 180 độ và 270 độ. Sử dụng một ma trận 4x4 với các phần tử là từ 1 đến 16 được xếp lần lượt. Chọn các phần tử, tương ứng với các ô của mỗi khối, trong ma trận để xác định tọa độ của khối đó.

<i>Figure 9: Cấu hình 7 loại block và các rotation của chúng</i>

Mỗi khối gồm các thuộc tính: hồnh độ, tung độ, một biến kiểu ngun dương n được sinh tự động. Biến n dùng để xác định ngẫu nhiên khối sẽ ợc xuất hiện và xác định màu củđư a khối đó.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

N h ó m 1 8

- →←: di chuyển sang phải và sang trái

4. Chức năng chính của hệ thống

<i>1. Người dùng tự chơi game Tetris (click vào “Start”) </i>

<i>2. Máy chơi game Tetris bằng Greedy best-first search (click vào “GBFS”) </i>

<i>3. Máy chơi game Tetris bằng Genetic algorithm from scratch (tức là ạy lại từ đầu với chweights random, click vào “GA (Scratch)”)</i>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

N h ó m 1 8

Phương pháp triển khai genetic algorithm được sử dụng là của trang codemyroad, đường link trong tài liệu tham khảo.

Ngôn ngữ sử dụng: Python

Gói phần mềm được sử dụng: Pygame

6. Các vấn đề gặp phải và cách giải quyết

Chưa nghĩ ra cách để thuật toán ực hiện các nước đi khó.thVí dụ wall kick (xoay block khi thực tế khơng có chỗ để xoay):

Ví dụ: khi block chạm đáy và bên cạnh có 1 lỗ ống có thể nhét vào => block chưa bị cố định tr(chuyển thành màu đen) mà dừng một lúc cho phép người chơi có thể dịch chuyển block lấp đầy lỗ này.

Vì vậy nên chúng em chưa triển khai chức năng thực hiện các nước đi này.

7. Kết luận

a. Đánh giá Greedy Best-first search (Hạnh)

m: tổng số block cho đến khi dừng (cũng là depth của cây) b: trung bình số vị trí có thể đặt 1 block bất kỳ trong 1 lượt đặt

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

N h ó m 1 8

<i>Tính hồn chỉnh: Hồn chỉnh, thuật tốn sẽ dừng khi có block chạm đỉnh. </i>

<i>Độ phức tạp thời gian: O(bm), do có m block, và ở mỗi lượt đặt block chỉ ải xét score đối </i>phvới các vị trí có thể đặt của block đó.

<i>Độ phức tạp bộ nhớ: b), do thuật toán chỉ ải ghi nhớ score đối với các vị trí có thể đặ</i>O( ph t block ện tại.hi

<i>Tính tối ưu: Khơng tối ưu, vì thuật tốn chỉ ọn được vị trí tốt nhất của block hiện tại chứ </i>chkhơng tính đến tổ hợp các block về sau này.

Thử nghiệm thuật tốn với các cơng thức heuristic khác nhau:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

N h ó m 1 8

Thuật toán cho kết quả tốt nhất với hàm heuristic số 5, và cho kết quả ấp nhất với hàm thheuristic số 4. Đối với hàm heuristic số 1, hàm ban đầu chúng em chọn, dựa vào sự ước lượng tầm quan trọng của các đặc trưng, không cho kết quả ả quan như các hàm khác. khDựa vào kết quả này, em có thể ỉ ra 1 đặc trưng không quá quan trọng cho việc có số ch điểm cao là lines, điều này khá bất ngờ vì lines là chỉ số ực tiếp đóng góp vào số ểm của ngườtr đi i chơi.

b. Đánh giá Genetic algorithm

n: số ế hệth

p: số player trong 1 thế hệ

m: tổng số block cho đến khi dừng (cũng là depth của cây)

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

N h ó m 1 8

b: trung bình số vị trí có thể đặt 1 block bất kỳ trong 1 lượt đặt

<i>Tính hồn chỉnh: giống như thực hiện np (hữu hạn) số lượt chơi sử dụng GBFS, nên thuật </i>

toán kết thúc được.

<i>Độ phức tạp thời gian: O(npbm) Độ phức tạp bộ nhớ: O(b) </i>

Lý do có các độ ức tạp này giống như đối với greedy best-first search.ph

<i>Tính tối ưu: Các tham số có thể tiến đến xấp xỉ với với tham số tối ưu trong tập hàm được sử </i>

dụng ập hàm tuyến tính) khi số ế hệ lớn, nhưng khơng tối ưu trong tập tất cả các hàm có (t thbiến là 5 đặc trưng đã chọn.

Đánh giá performance của genetic algorithm:

</div>

×