Trong game có sử dụng thuật toán MiniMax với độ sâu là 4 và thuật toán cắt cụt alpha-beta để giảm thời gian tính toán.. Do thời gian có hạn nên chúng em chưa thể tối ưu được các thuật to
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
Sinh viên thực hiện: Hồ Quang Huy – MSV: 78333
Nguyễn Linh Chi – MSV: 77305
Trang 2Hải phòng, tháng 11 năm 2020
Trang 3TRƯỜNG ĐẠI HỌC HÀNG HẢI KHOA CÔNG NGHỆ THÔNG TIN
-*** -BÀI TẬP LỚN HỌC PHẦN: TRÍ TUỆ NHÂN TẠO
- Tìm hiểu về cây trò chơi và thuật toán Minimax
- Viết chương trình cho bài toán
- Làm báo cáo bài tập lớn
4 Yêu cầu
- Làm báo cáo
- Nộp báo cáo
Trang 4Hải Phòng, tháng 10 năm 2019
NGƯỜI HƯỚNG DẪN
M C LỤ Ụ
ii
Trang 5MỤC LỤC iii
DANH MỤC CÁC HÌNH VẼ, BẢNG BIỂU iv
DANH MỤC CÁC TỪ VIẾT TẮT v
MỞ ĐẦU 1
CHƯƠNG 1: GIỚI THIỆU BÀI TOÁN 2
1.1 Mô t bài toán ả 2
1.2 M c têu ụ 3
1.3 H ướ ng gi i quyêết bài toán ả 3
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 4
2.1 Cây trò ch i ơ 4
2.2 Thu t toán Minimax ậ 5
2.3. Mô ph ng gi i thu t Minimax cho trò ch i Tic Tac Toe ỏ ả ậ ơ 6
2.4 Đánh giá thu t toán ậ 8
2.4.1 Ư u đi m ể 8
2.4.2 Nh ượ c đi m ể 8
2.5 Ngôn ng l p trình (công c cài đ t) s d ng ữ ậ ụ ặ ử ụ 8
CHƯƠNG 3: CHƯƠNG TRÌNH CÀI ĐẶT BÀI TOÁN 9
1 Code l nh ệ 9
2 Kêết quả 18
https://kingbazoka.blogspot.com/2012/?view=classic 19
Trang 6DANH MỤC CÁC HÌNH VẼ, BẢNG BIỂU
iv
Trang 7Recommandé pour toi
Tổng ôn ngữ pháp tiếng anh Chuyên ĐỀ 16 - LIÊN TỪ
Trang 8DANH MỤC CÁC TỪ VIẾT TẮT
v
Trang 9MỞ ĐẦU
Hiện nay, nền CNTT đang ngày càng phát triển mạnh mẽ với sự phát triển của KH-CN Việc ứng dụng trí tuệ nhân tạo trong các ứng dụng hàng ngày làm cho máy móc biết suy nghĩ hay giải quyết những bài toán một cách thông minh nhất và việc phát triển game đã trở nên vô cùng phổ biến, đặc biệt
là những game mang tính trí tuệ cao Và Tic Tac Toe là một game như vậy
Chính vì lý do đó mà chúng em đã quyết định lựa chọn Tic Tac Toe làm
đề tài cho bài tập lớn Đây là tài liệu dùng để miêu tả một cách cơ bản về việc xây dựng game Tic Tac Toe Trong game có sử dụng thuật toán MiniMax với
độ sâu là 4 và thuật toán cắt cụt alpha-beta để giảm thời gian tính toán Tài liệu này giúp ta có một cái nhìn tổng quát về việc áp dụng thuật toán MiniMax và cắt cụt alpha-beta vào game cờ Caro
Do thời gian có hạn nên chúng em chưa thể tối ưu được các thuật toán
sử dụng trong game, nhưng chúng em sẽ cố gắng hoàn thiện trong thời gian sớm nhất Nhóm thực hiện đề tài này với mục đích xây dựng game Caro có tính nhân tạo cao Tuy nhiên trong quá trình thực hiện không thể tránh khỏi cónhững sai sót, chúng em rất mong nhận được những góp ý và đánh giá của cô
Trang 10CHƯƠNG 1: GIỚI THIỆU BÀI TOÁN
1.1 Mô tả bài toán
Tic-tac-toe là một dạng đơn giản của trò đánh cờ Caro Đây trò chơi phổ biến dùng viết trên bàn cờ giấy có 9 ô, 3x3 gồm hai người chơi, một người dùng ký hiệu , người kia dùng ký hiệu O X
Luật chơi: Hai người chơi lần lượt điền ký hiệu của mình vào một ô bất kỳ (ô đó chưa được đánh) trên bàn cờ Khi 9 ô được điền đầy, trò chơi kết thúc ở
1 trong 3 trạng thái:
Khi có 3 quân thẳng hàng ( ngang, dọc hoặc chéo) liên tiếp
o Người chơi ký hiệu X thắng
o Người chơi ký hiệu O thắng
Khi không có 1 đường thẳng/chéo nào được ghi: 2 người chơi sẽ cùng hòa
Hình 1: Trò chơi Tic Tac Toe
Trang 111.2 Mục tiêu
- Đến lượt chơi của mình, người chơi cố gắng tạo ra 3 nước cờ thẳng hàng thì sẽ chiến thắng
- Hoặc cố ngăn cản đối thủ của mình tạo ra 3 nước cờ thẳng hàng
1.3 Hướng giải quyết bài toán
* Để giải quyết bài toán này và tìm ra nước đi tối ưu, chúng ta sẽ sử
• Có 2 người chơi là Min và Max
• MAX: là người chơi cố gắng dành chiến thắng
• MIN: là người chơi ngăn cản điểm số của MAX
Áp dụng vào game Tic Tac Toe
- Người chơi cầm quân X đóng vai trò như Max
- Người chơi cầm quân O đóng vai trò như Min
- Để quyết định nước đi tiếp theo, ta xây dựng một thủ tục đệ quy gồm 2 hàm:
max_value() để tìm nước đi tiếp theo cho quân X
min_value() để tìm nước đi tiếp theo cho quân O
Trang 12CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
- TTBĐ là sự sắp xếp các quân cờ trong lúc đầu của cuộc chơi Trong hình trên ( Hình 3 ) người chơi O chỉ có thể đặt quân cờ đầu tiên vào 3 vị trí Lượt đi tiếp theo dành cho người chơi X, tại vị trí thứ nhất có 5 cách đi quân cờ, vị trí thứ 2 có 2 cách đi quân cờ, vị trí thứ 3 có 5 cách đi quân cờ Tương tự cho cáclượt đi tiếp theo, số lượt đi tối đa cho cả 2 đối thủ trong trò chơi là 9
Cách xây dựng cây trò chơi:
4
Hình 3: Cây trò ch i Tic Tac Toe ơ
Trang 13 Gốc của cây ứng với trạng thái u
Có thể gọi đỉnh ứng với TT X ( O ) đưa ra nước đi là đỉnh X ( O )
Nếu 1 đỉnh là X ( O ) ứng với trạng thái thì đỉnh con của nó là tất cả u
các đỉnh biểu diễn trạng thái , nhận được từ do X ( O ) thực hiện v u
nước đi hợp lệ nào đó
2.2 Thuật toán Minimax
- Đây là 1 thuật toán đệ quy được dùng trong tìm kiếm có đối thủ và được sử dụng làm chiến lược cho tìm kiếm nước đi trong KGTK của trò chơi có tính chất đối kháng
Ví dụ: Trong trò chơi đối kháng (cờ Vua, cờ Tướng, cờ Caro,…) khi người
chơi đánh với máy, thì KGTT là cả bàn cờ đó – KGTT là cách mà máy tính biểu diễn bàn cờ thực hiện lên bộ nhớ máy tính Với mỗi nước đi, sẽ làm cho KGTT của bàn cờ thay đổi thành một KGTT mới Như vậy để tìm ra nước đi tốt nhất cho máy chiến lược tìm kiếm nước đi Minimax sẽ được sử dụng
Hàm đánh giá:
- Hàm đánh giá sẽ quyết định chất lượng của một chương trình
- Để thiết kế 1 hàm đánh giá cần phụ thuộc vào các yếu tố: các quân cờ của 2 bên, số lượng quân cờ còn lại, sự sắp xếp các quân cờ,…Eval(u) = (Rows, Columns, Diagonal còn mở đối với MAX)
= (Rows, Columns, Diagonal còn mở đối với MIN)
Trang 142.3. Mô phỏng giải thuật Minimax cho trò chơi Tic Tac Toe
MAX: người chơi sử dụng ký hiệu O
MIN: người chơi sử dụng ký hiệu X
- Trong trò chơi từ TT hiện tại sẽ dự đoán được nước đi của TT tiếp theo cho đến khi gặp TT chiến thắng (Node lá) Nếu nó không là node lá (trò chơi chưa kết thúc nhưng vì giới hạn các ô nên không thể tính đến node lá) TTKT 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 ( Là X thì MIN win, là O thì MAX win, các ô đều kín và TT chưa kết thúc thì 2 bên hòa )
-Ta chỉ tính giá trị của các node ở mức cao nhất được giới hạn Các node ở mức trước được tính dựa trên các node con của nó Node đó đang là MAX thì giá trị của nó sẽ là giá trị của node lớn nhất trong tất cả các node con của
nó Node đó đang là MIN thì giá trị của nó sẽ là giá trị của node nhỏ nhất trong các node con của nó Mỗi node MAX hoặc MIN sẽ chọn node con có giá trị bằng nó để làm nước đi tối ưu
6
Trang 162.4 Đánh giá thuật toán
2.4.1 Ưu điểm
- Thuật toán giúp tìm kiếm tất cả nước đi tiếp theo sau và lựa chọn nước đi tốt nhất
2.4.2 Nhược điểm
- Tốn thời gian ( vì phải duyệt hết tất cả các trạng thái)
2.5 Ngôn ngữ lập trình (công cụ cài đặt) sử dụng
Trò chơi Tic Tac Toe được viết bằng: Ngôn ngữ : C#
IDE : Visual Studio Code
8
Trang 17CHƯƠNG 3: CHƯƠNG TRÌNH CÀI ĐẶT BÀI TOÁN
public string huPlayer = "O";
public string aiPlayer = "X";
Trang 18publicList List< < >>int winCombo = newList List< < >>() {int
new List<int>(){ 1 2},0, ,
new List<int>(){ 4 5},3, ,
new List<int>(){ 7 8},6, ,
new List<int>(){ 3 6},0, ,
new List<int>(){ 4 7},1, ,
new List<int>(){ 4 8},0, ,
new List<int>(){ 4 2},6, ,
new List<int>(){ 5 8},2, ,
Trang 19using System.Collections.Generic;using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;using System.Windows.Data;
using System.Windows.Documents;using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;
namespace AI_tick_tac_toe
Trang 23Buttonbtn = sender asButton;
(if btn.Content.ToString ==() "") // cho khoong click vao lan 2
Trang 25(if checkWin Player.huPlayer( )) { return -10;
else if ( availSpots == null return 0) ;
List Move< > moves = new List Move< >();
for int i = 0 i < availSpots.Count i++ ( ; ; ) {
Move move = newMove();
Trang 26move.index = Int32.Parse matrix( [availSpots i Tag.ToString [ ]] ()); matrix availSpots i Content[ [ ]] = player;
(if player == Player.aiPlayer)
{
move.score = minimax(Player.huPlayer); }
else if ( player == Player.huPlayer)
Trang 28(if moves i[ ].score < bestScore ) {
bestScore = moves[i score ] ; bestMove = i ;
Trang 29privateList<int> emptyRoom() {
List<int> emt = newList< >();int
boolcheck = false;
for int i = 0 i < 9 i++ ( ; ; )
{
(if matrix[i Content.ToString == ] () "") {
emt.Add(i);
check = true;
}
}
Trang 30(if !check) return null;
Trang 32private void announce(string player)
Trang 33private bool checkWin(string player)
{
for int i = 0 i < Player.winCombo.Count i++ ( ; ; )
{
varchiso1 = Player.winCombo i 0 [ ][ ];
varchiso2 = Player.winCombo i 1 [ ][ ];
varchiso3 = Player.winCombo i 2 [ ][ ];
(if matrix[chiso1].Content.ToString == player && ()
matrix chiso2 Content.ToString == player && matrix chiso3 Content.ToString[ ] () [ ] ()
Trang 34public intindex;
public int score;
}
26
Trang 352 Kết quả
Trang 36KẾT LUẬN
TÀI LIỆU THAM KHẢO
28