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

Báo Cáo Chuyên Đề Học Phần Nhập Môn Trí Tuệ Nhân Tạo Áp Dụng Thuật Toán Minimax Vào Trò Chơi Tictactoe.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 (1.96 MB, 18 trang )

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

<b>TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN</b>

<b>BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN NHẬP MƠN TRÍ TUỆ NHÂN TẠO</b>

<b>ĐỀ T!I:</b>

<b>ÁP DỤNG THUẬT TỐN MINIMAX V!O TRỊ CHƠI TICTACTOE</b>

<b> ĐẶNG ĐÌNH VIỆT ANH NGUYỄN QUỐC VIỆTGiảng viên hướng dẫn : VŨ VĂN ĐỊNH</b>

<i><b>Hà Nội, tháng 12 năm 2023</b></i>

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

<b>PHIẾU CHẤM ĐIỂM</b>

Sinh viên thực hiện:

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

<b>MỤC LỤC</b>

<b><small>LỜI NĨI ĐẦU...4</small></b>

<b><small>CHƯƠNG 1: GIỚI THIỆU B!I TỐN...5</small></b>

<b><small>1.1Giới thiệu trị chơi TicTacToe...5</small></b>

<b><small>1.2Áp dụng thuật toán minimax vào bài toán Tic Tac Toe...5</small></b>

<b><small>CHƯƠNG 2: THUẬT TỐN MINIMAX...6</small></b>

<b><small>2.1 Khái niệm thuật tốn MINIMAX...6</small></b>

<b><small>2.2 Cách xây dựng thuật toán...9</small></b>

<b><small>2.2.1 Các bước giải thuật Minimax...10</small></b>

<b><small>2.2.2 Ví dụ mơ phỏng giải thuật Minimax cho trị chơi Tic Tac Toe...10</small></b>

<b><small>2.3 Ưu điểm và nhược điểm...11</small></b>

<b><small>2.3.1 Ưu điểm...11</small></b>

<b><small>2.3.2 Nhược điểm...11</small></b>

<b><small>2.4 Làm thế nào để áp dụng thuật tốn minimax vào các trị chơi phức tạp hơn?...12</small></b>

<b><small>2.5 Thuật tốn minimax có thể được sử dụng cho những mục đích nào ngồi các trị chơi?...12</small></b>

<b><small>CHƯƠNG 3: C!I ĐẶT THUẬT TỐN...13</small></b>

<b><small>3.1 Triển khai thuật tốn Minimax...13</small></b>

<b><small>3.2 Demo sản phẩm...15</small></b>

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

<b>DANH MỤC HÌNH ẢNH</b>

Hình 1: Trị chơi Tic Tac Toe 5Hình 2.1: Hình minh họa thuật tốn Minimax 6Hình 2.2: Hình minh họa Game Tree 7Hình 2.3: Hình minh họa Game Tree 8Hình 2.4: Hình minh họa Game Tree 8Hình 2.5: Hình minh họa Game Tree 9Hình 2.6: Mơ hình mimax trong Tic-Tac-Toe 10Hình 3.1: Hình ảnh hàm triển khai nước đi tối ưu nhất của AI 13Hình 3.2: Hình ảnh hàm kiểm tra kết quả thắng cuộc 14Hình 3.3: Hình ảnh hàm kiểm tra lượt chơi người chơi Max và Min 14Hình 3.4: Hình minh họa thực hiện trị chơi Tic Tac Toe 15Hình 3.5: Hình mơ phỏng các trường hợp có thể xảy ra khi O thực

hiện lượt đi

16

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

<b>LỜI NÓI ĐẦU</b>

Trong ngành khoa học máy tính, một giải thuật tìm kiếm là một thuật toánlấy đầu vào là một bài toán và trả về kết quả là một lời giải cho bài tốn đó, thườnglà sau khi cân nhắc giữa một loạt các lời giải có thể. Tập hợp tất cả các lời giải cóthể cho bài tốn được gọi là khơng gian tìm kiếm. Có những thuật tốn tìm kiếm“sơ đẳng” khơng có thơng tin, đây là những phương pháp đơn giản và trực quan,trong khi đó các thuật tốn tìm kiếm có thơng tin sử dụng hàm đánh giá heuristicgiúp ta giảm đáng kể thời gian cần thiết cho việc tìm kiếm lời giải.

Để áp dụng được các giải thuật tìm kiếm, ta cần chuyển khơng gian tìm kiếmvề dạng đồ thị. Với dạng đồ thị ta sẽ nắm bắt những mối liên hệ, những ảnh hưởnggiữa các trạng thái của bài tốn một cách nhanh chóng và ngắn gọn. Chính vì vậy,nhóm chúng em chọn đề tài: “Áp dụng thuật toán Minimax vào trị chơiTicTacToe” làm bài báo cáo của mình.

Trong q trình làm báo cáo do có những hạn chế về trình độ, thời gian nênchúng em khơng khỏi có những thiếu sót trong q trình tìm hiểu, nghiên cứu cũngnhư thực nghiệm. Rất mong nhận được đánh giá và chỉnh sửa từ các thầy cơ.

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

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

<b>CHƯƠNG 1: GIỚI THIỆU B!I TỐN1.1 Giới thiệu trị chơi TicTacToe</b>

Tic Tac Toe hay còn gọi là Xs và Os là trò chơi thể loại giấy và bút dành chohai người đánh theo lượt bằng cách đánh dấu vào những ô trống bằng hàng ba vớiX hoặc O. Người chơi nào thành công trong việc điền ba ô với X hoặc O theochiều ngang hoặc dọc là người chiến thắng.

Hình 1: Trị chơi Tic Tac Toe

Trò chơi được chơi trên một bảng gồm 9 ô vuông, được chia thành 3 hàng và3 cột. Nếu khơng có người chơi nào đạt được điều kiện thắng sau khi tất cả các ôđã được đánh đầy, trò chơi sẽ kết thúc với kết quả là hòa. Tic-Tac-Toe là trị chơigiải trí phổ biến và thường được sử dụng để giúp trẻ em phát triển tư duy và kỹnăng tương tác xã hội. Ngồi ra, cịn có các “biến thể” của trò chơi như 5x5 và7x7.

<b>1.2 Áp dụng thuật toán minimax vào bài toán Tic Tac Toe</b>

Phần mềm trị chơi Tic-Tac-Toe là một chương trình xây dựng trị chơi vàgiải quyết bài tốn này. Phầm mềm được viết trên nền Javascript và Html, sử dụnggiao diện đơn giản để mơ phỏng trị chơi và thuật tốn Minimax để cho AI khiđánh với người chơi sẽ đi lối đi tối ưu nhất để làm khó người chơi. Người chơi sửdụng chuột click để điền X hoặc O vào bàn 3x3 của trò chơi.

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

<b>CHƯƠNG 2: THUẬT TỐN MINIMAX2.1 Khái niệm thuật tốn MINIMAX</b>

Thuật tốn Minimax là một thuận toán đệ quy lựa chọn bước đi kế tiếp.Thuật tốn phổ biến trong trị chơi đối kháng trong đó hai người thay phiên đi nướcđi của mình như: cờ vua, tic-tac-toe, cờ vây, .... Khi chơi bạn có thể khai triển hếtkhơng gian trạng thái nhưng khó khăn chủ yếu là bạn phải tính tốn được phản ứngvà nước đi của đối thủ mình như thế nào? Cách xử lý đơn giản là bạn giả sử đối thủcủa bạn cũng sử dụng kiến thức về không gian trạng thái giống bạn. Giải thuậtMinimax áp dụng giả thuyết này để tìm kiếm khơng gian trạng thái của trị chơi.

Để dễ hình dung hơn ta sẽ có một ví dụ đơn giản như sau:

Hình 2.1: Hình minh họa thuật toán Minimax

Ta thấy Max và Min xen kẽ nhau, ta xét trạng thái A lúc đang ở hàng Maxbây giờ ta sẽ phải tìm trạng thái Max của A, trong đó A có 3 node lá với giá trị lầnlượt là B(-3), C(-1), D(2) mà ta thấy rằng trong 3 node lá của A, D có giá trị lớnnhất là 2 trong khi đó B là -3 và C là -1 nên Max A(-3,-1,2) = 2

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

Tương tự Min ta xét trạng thái của D lúc này đây đang ở hàng Min nên taphải xét trạng thái Min cho node D, node D lại có 3 node con lần lượt là H(2), I(3),J(4) ta thấy trong 3 node con thì H có giá trị nhỏ nhất là 2 nên Min D(2,3,4) = 2

Dưới đây là ví dụ về Game Tree đại diện cho trị chơi hai người chơi.- Trong ví dụ này, có hai người chơi, một người được gọi là Maximizer và

người khác được gọi là Minimizer.

- Maximizer sẽ cố gắng đạt được số điểm Tối đa có thể, và Minimizer sẽ cốgắng đạt được số điểm tối thiểu có thể.

- Thuật tốn này áp dụng DFS, vì vậy trong Game Tree này, chúng ta phải đihết các lá để đến được các nút đầu cuối.

- Tại nút đầu cuối, các giá trị đầu cuối được đưa ra vì vậy chúng tơi sẽ so sánhcác giá trị đó và điều chỉnh lại cây cho đến khi trạng thái ban đầu xảy ra. Sauđây là các bước chính liên quan đến việc giải quyết Game Tree hai ngườichơi:

Bước 1: Trong bước đầu tiên, thuật toán tạo ra Game Tree và áp dụng hàm tiện íchđể nhận các giá trị và các trạng thái kết thúc.

Trong sơ đồ cây dưới đây, hãy lấy A là trạng thái bắt đầu của Tree. Giả sửbộ tối đa hóa thực hiện lượt đi đầu tiên có giá trị ban đầu trong trường hợp xấunhất = – infinite và minimizer sẽ thực hiện lượt tiếp theo có giá trị ban đầu trongtrường hợp xấu nhất = + infinity.

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

Hình 2.2: Hình minh họa Game Tree

Bước 2: Bây giờ, đầu tiên chúng ta tìm giá trị tiện ích cho Maximizer, giá trị banđầu của nó là -∞, vì vậy chúng ta sẽ so sánh từng giá trị ở trạng thái đầu cuối vớigiá trị ban đầu của Maximizer và xác định các giá trị nút cao hơn. Nó sẽ tìm thấymức tối đa trong số tất cả.

Đối với nút D max (-1, – -∞) => max (-1,4) = 4Đối với nút E max (2, -∞) => max (2, 6) = 6Đối với nút F max (-3, -∞) => max (-3, -5) = -3Đối với nút G max (0, -∞) = max (0, 7) = 7

Hình 2.3: Hình minh họa Game Tree

Bước 3: Trong bước tiếp theo, đến lượt trình thu nhỏ, vì vậy nó sẽ so sánh giá trịtất cả các nút với + ∞ và sẽ tìm giá trị nút lớp thứ 3.

Đối với nút B = min (4,6) = 4Đối với nút C = min (-3, 7) = -3

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

Hình 2.4: Hình minh họa Game Tree

Bước 4: Bây giờ đến lượt Maximizer, nó sẽ lại chọn giá trị lớn nhất của tất cả cácnút và tìm giá trị lớn nhất cho nút gốc. Trong Game Tree này, chỉ có 4 lớp, do đóchúng tơi truy cập ngay đến nút gốc, nhưng trong trị chơi thực, sẽ có nhiều hơn 4lớp.

Đối với nút A max (4, -3) = 4

Hình 2.5: Hình minh họa Game TreeĐó là tồn bộ quy trình làm việc của trò chơi minimax hai người chơi.

<b>2.2 Cách xây dựng thuật tốn </b>

Hai đối thủ trong trị chơi được gọi là MIN và MAX luân phiên thay thếnhau đi. MAX đại diện cho người quyết dành thắng lợi và cố gắng tối đa hóa ưuthế của mình, ngược lại người chơi đại diện cho MIN lại cố gắng giảm điểm số củaMAX và cố gắng làm cho điểm số của mình càng âm càng tốt. Giả thiết đưa raMIN và MAX có kiến thức như nhau về khơng gian trạng thái trò chơi và cả haiđối thủ đều cố gắng như nhau. Mỗi Node biểu diễn cho một trạng thái trên cây tròchơi. Node lá là Node chứa trạng thái kết thúc của trò chơi. Giải thuật Minimax thể

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

<b>2.2.1 Các bước giải thuật Minimax</b>

• Nếu như đạt đến giới hạn tìm kiếm (đến tầng dưới cùng của cây tìm kiếm tứclà trạng thái kết thúc của trị chơi).

• Tính giá trị của thế cờ hiện tại ứng với người chơi ở đó. Ghi nhớ kết quả.• Nếu như mức đang xét là của người chơi cực tiểu (nút MIN), áp dụng thủ tụcMinimax này cho các con của nó. Ghi nhớ kết quả nhỏ nhất.

• Nếu như mức đang xét là của người chơi cực đại (nút MAX), áp dụng thủ tụcMinimax này cho các con của nó. Ghi nhớ kết quả lớn nhất.

<b>2.2.2 Ví dụ mơ phỏng giải thuật Minimax cho trị chơi Tic Tac Toe</b>

Hình 2.6: Mơ hình mimax trong Tic-Tac-Toe

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

Áp dụng giải thuật Minimax: Từ trạng thái bàn cờ hiện tại ta dự đoán nướcđi của trạng thái tiếp theo nếu trạng thái tiếp theo ta tiến hành lượng giá cây tròchơi bằng cách ta tiến hành quét cạn tất cả các trạng thái tiếp theo cho đến lúc gặptrạng thái chiến thắng (Node lá) như trong lần 1 người chơi O có ba hướng đánhtựa trưng cho 3 node lá khi ta đánh thắng thì MAX sẽ được tính điểm cho node đónhư sau:

• Nếu ở trạng thái mà ta gặp chiến thắng nếu đó là lượt đi của qn X thì đánh giáđiểm trạng thái đó là -10.

• Nếu ở trạng thái ta gặp chiến thắng nếu đó là lượt đi của qn O thì đánh giáđiểm trạng thái đó là 10.

• Nếu là hịa thì điểm trạng thái đó là 0.Sau đó tính ngược lại cây trị chơi theo quy tắc:

• Nút thuộc lớp MAX thì gán cho nó giá trị lớn nhất của các Node con của Nodeđó.

• Nút thuộc lớp MAX thì gán cho nó giá trị nhỏ nhất của các Node con của Nodeđó.

Sau khi lượng giá hết cây trị chơi ta tiến hành chọn bước đi tiếp theo nguyên tắc:• Nếu lớp tiếp theo là MAX ta chọn Node con có giá trị lớn nhất.

• Nếu lớp tiếp theo là MIN ta chọn Node con có giá trị nhỏ nhất.

<b>2.3 Ưu điểm và nhược điểm2.3.1 Ưu điểm</b>

• Đảm bảo tìm được chiến lược tối ưu cho một người chơi trong trò chơi haingười với lượt đi xen kẽ.

• Dễ hiểu và áp dụng.

• Tính tốn độ chính xác cao khi số lượng các trạng thái trong trị chơi khơng

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

Tóm lại, thuật tốn Minimax là một thuật tốn tìm kiếm cây trò chơi phổ biếnvà mạnh mẽ cho các trò chơi hai người với lượt đi xen kẽ. Tuy nhiên, nó có nhữnggiới hạn về khả năng áp dụng cho các trò chơi lớn và phức tạp hơn

<b>2.4 Làm thế nào để áp dụng thuật toán minimax vào các trị chơi phức tạphơn?</b>

Các trị chơi phức tạp hơn, ví dụ như cờ vua, thường có số lượng nút lớn hơnrất nhiều so với các trò chơi đơn giản hơn như tic-tac-toe. Để áp dụng thuật tốnminimax vào các trị chơi phức tạp hơn, ta cần sử dụng các kỹ thuật cải tiến đểgiảm số lượng nút trong cây trò chơi, và tối ưu hóa thời gian tính tốn.

Một trong những kỹ thuật cải tiến phổ biến là sử dụng bảng tra cứu đánh giá,trong đó các giá trị đánh giá cho các trường hợp đặc biệt đã được tính toán trước vàlưu trữ trong bảng. Khi thực hiện thuật tốn minimax, ta có thể sử dụng bảng nàyđể tránh tính tốn lại các giá trị đánh giá đã được tính tốn trước đó.

Ngồi ra, ta cũng có thể sử dụng các kỹ thuật thay thế cho thuật toánminimax, như phương pháp Monte Carlo, để giảm thời gian tính tốn và tối ưu hóathuật tốn cho các trị chơi phức tạp hơn.

<b>2.5 Thuật tốn minimax có thể được sử dụng cho những mục đích nào ngồicác trị chơi?</b>

Mặc dù thuật tốn minimax thường được sử dụng để giải quyết các trị chơi,nó cũng có thể được áp dụng cho các bài tốn tối ưu hóa và quyết định trong cáclĩnh vực khác. Ví dụ, thuật tốn minimax có thể được sử dụng để tìm kiếm chiến

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

lược tối ưu trong quản lý tài sản và quản lý rủi ro. Thuật tốn minimax cũng có thểđược sử dụng trong các bài tốn tìm kiếm con đường tối ưu trong đường đi tối ưuhố, tối ưu hóa mạng và tối ưu hóa vận hành của hệ thống.

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

<b>CHƯƠNG 3: C!I ĐẶT THUẬT TỐN3.1 Triển khai thuật tốn Minimax</b>

Hình 3.1: Hình ảnh hàm triển khai nước đi tối ưu nhất của AI

Với hàm này này AI sẽ tìm nước đi ngắn nhất và tối ưu nhất đồng nghĩa vớiviệc với ma trận 3x3 thì người chơi chỉ có thể hòa hoặc thua máy.

Chúng ta sẽ khai báo giá trị bestScore = âm vơ cực (-Infinity) để sau này tacó thể dùng nó để so sánh với điểm (score) tức là điều kiện để thắng của máy.Đồngthời với người chơi máy là Max ta sẽ để bestScore là âm vô cực tại vì để giả sửtrong trường hợp bị người chơi chặn nó sẽ tự tìm được nước đi tối ưu cịn lại

Sau đó ta sẽ viết lệnh kiểm tra if(board[i][j] == ‘ ’) xem nếu như ở vị tríđược chuẩn bị đánh ở trạng thái trống, AI sẽ đi nước đi của mình.Nên để nó có thểđi tối ưu nhất ta sẽ lồng thêm lệnh if nữa đó là if(score > bestScore) vì theo lýthuyết để đi tối ưu nhất ta phải biết được giá trị Min hoặc Max của nó, trong

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

trường hợp này Máy là Max (bestScore), Máy sẽ duyệt đệ quy tất cả các trườnghợp có thể đi được để tìm nước đi tối ưu nhất để đến chiến thắng, score có thể là+10 cho bestScore, sau đó move = {i ,j} là để đi nước đi tiếp theo.

Kết thúc lệnh if sẽ thực hiện lệnh board[move.i][move.j] = ai là để thực hiệnnước đi của máy, currentPlayer =human là để chuyển lượt chơi cho người chơi.

Hình 3.2: Hình ảnh hàm kiểm tra kết quả thắng cuộc

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

Hàm kiểm tra lượt chơi người chơi Max và Min nó sẽ duyệt đệ quy ra tất cảcác trường hợp có thể thắng hoặc đi nước đi tối ưu của hai người chơi ở trườnghợp này Max sẽ là máy (board[i][j]=ai) và điều kiện chiến thắng của nó là +10trong khi người chơi sẽ là min điều kiện chiến thắng (board[i][j]=human) là -10,nên nó duyệt để tìm các lối đi có thể xảy ra của cả hai người chơi từ đó nếu ngườichơi nào đạt được +10( đối với người chơi Max) hoặc -10 (đối với người chơi Min)bestScore sẽ được gán bằng score , score sẽ kiểm tra điều kiện được thiết lập thìngười đó sẽ thắng.

<b>3.2 Demo sản phẩm</b>

Giả sử chúng ta có trường hợp đánh như thế này (Người chơi là O)

Hình 3.4: Hình minh họa thực hiện trị chơi Tic Tac ToeKhi đó sẽ chia ra thành các trường hợp mà máy có thể đánh X như sau:

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

Hình 3.5: Hình mơ phỏng các trường hợp có thể xảy ra khi O thực hiện lượt điTừ trạng thái bàn cờ hiện tại ta dự đoán nước đi của trạng thái tiếp theo nếu trạng thái tiếp theo ta tiến hành lượng giá cây trò chơi bằng cách ta tiến hành quét cạn tất cả các trạng thái tiếp theo cho đến lúc gặp trạng thái chiến thắng.

</div>

×