Phầm mềm được viết trên nền Javascript và Html, sử dụng giao diện đơn giản để mô phỏng trò chơi và thuật toá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
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
NHẬP MÔN TRÍ TUỆ NHÂN TẠO
ĐỀ T!I:
ÁP DỤNG THUẬT TOÁN MINIMAX V!O TRÒ CHƠI TICTACTOE
ĐẶNG ĐÌNH VIỆT ANH NGUYỄN QUỐC VIỆT Giảng viên hướng dẫn : VŨ VĂN ĐỊNH
Hà Nội, tháng 12 năm 2023
Trang 2PHIẾU CHẤM ĐIỂM
Sinh viên thực hiện:
1
Nguyễn Hữu Việt Anh
MSV: 21810310042
2
Đặng Đình Việt Anh
MSV:
3
Nguyễn Quốc Việt
MSV: 19810320446
Phiếu chấm điểm của giảng viên:
Giảng viên chấm 1 :
Giảng viên chấm 2 :
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 4
CHƯƠNG 1: GIỚI THIỆU B!I TOÁN 5
1.1 Giới thiệu trò chơi TicTacToe 5
1.2 Áp dụng thuật toán minimax vào bài toán Tic Tac Toe 5
CHƯƠNG 2: THUẬT TOÁN MINIMAX 6
2.1 Khái niệm thuật toán MINIMAX 6
2.2 Cách xây dựng thuật toán 9
2.2.1 Các bước giải thuật Minimax 10
2.2.2 Ví dụ mô phỏng giải thuật Minimax cho trò chơi Tic Tac Toe 10
2.3 Ưu điểm và nhược điểm 11
2.3.1 Ưu điểm 11
2.3.2 Nhược điểm 11
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ạp hơn? 12
2.5 Thuật toán minimax có thể được sử dụng cho những mục đích nào ngoài các trò chơi? 12
CHƯƠNG 3: C!I ĐẶT THUẬT TOÁN 13
3.1 Triển khai thuật toán Minimax 13
3.2 Demo sản phẩm 15
Trang 4DANH MỤC HÌNH ẢNH
Hình 1: Trò chơi Tic Tac Toe 5 Hình 2.1: Hình minh họa thuật toán Minimax 6 Hình 2.2: Hình minh họa Game Tree 7 Hình 2.3: Hình minh họa Game Tree 8 Hình 2.4: Hình minh họa Game Tree 8 Hình 2.5: Hình minh họa Game Tree 9 Hình 2.6: Mô hình mimax trong Tic-Tac-Toe 10 Hình 3.1: Hình ảnh hàm triển khai nước đi tối ưu nhất của AI 13 Hình 3.2: Hình ảnh hàm kiểm tra kết quả thắng cuộc 14 Hình 3.3: Hình ảnh hàm kiểm tra lượt chơi người chơi Max và Min 14 Hình 3.4: Hình minh họa thực hiện trò chơi Tic Tac Toe 15 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 đi
16
Trang 5LỜI NÓI ĐẦU
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án lấ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 toán đó, thường
là 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 toán được gọi là không gian tìm kiếm Có những thuật toá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 toán tìm kiếm có thông tin sử dụng hàm đánh giá heuristic giú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ếm
về 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ưởng giữa các trạng thái của bài toá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ơi TicTacToe” làm bài báo cáo của mình
Trong quá trình làm báo cáo do có những hạn chế về trình độ, thời gian nên chúng em không khỏi có những thiếu sót trong quá trình tìm hiểu, nghiên cứu cũng như 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!
Trang 6CHƯƠNG 1: GIỚI THIỆU B!I TOÁN 1.1 Giới thiệu trò chơi TicTacToe
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 cho hai 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ới
X 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 theo chiề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ơi giả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 Ngoài ra, còn có các “biến thể” của trò chơi như 5x5 và 7x7
1.2 Áp dụng thuật toán minimax vào bài toán Tic Tac Toe
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 toán này Phầm mềm được viết trên nền Javascript và Html, sử dụng giao diện đơn giản để mô phỏng trò chơi và thuật toá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
Trang 7CHƯƠNG 2: THUẬT TOÁN MINIMAX 2.1 Khái niệm thuật toán MINIMAX
Thuật toán Minimax là một thuận toán đệ quy lựa chọn bước đi kế tiếp Thuật toá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ết không gian trạng thái nhưng khó khăn chủ yếu là bạn phải tính toán được phản ứng
và 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ật Minimax á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 Max bâ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ần lượ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ớn nhất là 2 trong khi đó B là -3 và C là -1 nên Max A(-3,-1,2) = 2
Trang 8Tương tự Min ta xét trạng thái của D lúc này đây đang ở hàng Min nên ta phả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 toán này áp dụng DFS, vì vậy trong Game Tree này, chúng ta phải đi hế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ánh cá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ười chơ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ấu nhất = – infinite và minimizer sẽ thực hiện lượt tiếp theo có giá trị ban đầu trong trường hợp xấu nhất = + infinity
Trang 9Hì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ới giá trị ban đầu của Maximizer và xác định các giá trị nút cao hơn Nó sẽ tìm thấy mứ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
Trang 10Hì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ác nú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 4 lớp
Đối với nút A max (4, -3) = 4
Hình 2.5: Hình minh họa Game Tree
Đó là toàn bộ quy trình làm việc của trò chơi minimax hai người chơi
2.2 Cách xây dựng thuật toán
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 ưu thế 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ủa MAX 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 ra MIN 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ể
Trang 112.2.1 Các bước giải thuật Minimax
• 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ức
là 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ục Minimax 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ục Minimax này cho các con của nó Ghi nhớ kết quả lớn nhất
2.2.2 Ví dụ mô phỏng giải thuật Minimax cho trò chơi Tic Tac Toe
Quy ước:
• MAX đại diện quân đi O
• MIN đại diện quân đi X
Trạng thái kết thúc là trạng thái có 3 ô liên tiếp ngang, dọc, chéo có cùng một quân cờ X hoặc O, nếu là X tức MIN thắng còn O tức MAX thắng còn nếu tất
cả các ô cờ đều được đi và trạng thái chưa kết thúc thì bàn cờ hòa Điểm thắng của
X là -10, của O là 10, và bàn cờ hòa là 0
Hình 2.6: Mô hình mimax trong Tic-Tac-Toe
Trang 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ặp trạng thái chiến thắng (Node lá) như trong lần 1 người chơi O có ba hướng đánh tự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 quân 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 quân 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
2.3 Ưu điểm và nhược điểm
2.3.1 Ưu điểm
• Đảm bảo tìm được chiến lược tối ưu cho một người chơi trong trò chơi hai người với lượt đi xen kẽ
• Dễ hiểu và áp dụng
• Tính toán độ chính xác cao khi số lượng các trạng thái trong trò chơi không
Trang 132.3.2 Nhược điểm
• Độ phức tạp tính toán của thuật toán tăng rất nhanh khi kích thước của cây trò chơi tăng, làm cho việc tính toán trở nên không thực tế cho các trò chơi lớn
• Cần phải tính toán toàn bộ cây trò chơi trước khi đưa ra quyết định, làm tốn thời gian và tài nguyên tính toán
• Chỉ có thể được áp dụng cho các trò chơi với lượt đi xen kẽ và có số lượng trạng thái hữu hạn, không áp dụng cho các trò chơi thời gian thực hoặc trò chơi với
số lượng trạng thái vô hạn
Tóm lại, thuật toán Minimax là một thuật toán tìm kiếm cây trò chơi phổ biến
và 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ững giớ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
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ạp hơn?
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ơn rấ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 toán minimax 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 toá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 toán minimax, ta có thể sử dụng bảng này
để tránh tính toán lại các giá trị đánh giá đã được tính toán trước đó
Ngoài ra, ta cũng có thể sử dụng các kỹ thuật thay thế cho thuật toán minimax, như phương pháp Monte Carlo, để giảm thời gian tính toán và tối ưu hóa thuật toán cho các trò chơi phức tạp hơn
2.5 Thuật toán minimax có thể được sử dụng cho những mục đích nào ngoài các trò chơi?
Mặc dù thuật toá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 toán tối ưu hóa và quyết định trong các lĩnh vực khác Ví dụ, thuật toán minimax có thể được sử dụng để tìm kiếm chiến
Trang 14lược tối ưu trong quản lý tài sản và quản lý rủi ro Thuật toán minimax cũng có thể được sử dụng trong các bài toán tìm kiếm con đường tối ưu trong đường đi tối ưu hoá, tối ưu hóa mạng và tối ưu hóa vận hành của hệ thống
Trang 15CHƯƠNG 3: C!I ĐẶT THUẬT TOÁN 3.1 Triển khai thuật toán Minimax
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ới việ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 ta
có 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.Đồng thờ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
Trang 16trường hợp này Máy là Max (bestScore), Máy sẽ duyệt đệ quy tất cả các trường hợ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ện nướ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
Trang 17Hà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ường hợ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à +10 trong 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ười chơ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
3.2 Demo sản phẩm
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 Toe
Khi đó sẽ chia ra thành các trường hợp mà máy có thể đánh X như sau:
Trang 18Hì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
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ặp trạng thái chiến thắng