Hình 2.1 Luật chơi 2.2 Chiến thuật trong cờ caro - Tấn công: Người chơi cố gắng tạo ra chuỗi liên tiếp của năm quân cờ của mình để thắng trò chơi.. - Giao diện người dùng: Giao diện ngườ
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC NHẬP MÔN TRÍ TUỆ NHÂN TẠO
Đ TI:
TRÒ CHƠI CỜ CARO ỨNG DỤNG THUẬT TOÁN MINIMAX V ALPHA BETA
PRUNNING
Sinh viên thực hiện :
Giảng viên hướng dẫn : Thầy VŨ VĂN ĐỊNH
Hà Nội, 2023
PHIẾU CHẤM ĐIỂM
Trang 2STT Họ và tên
sinh viên
Nội dung thực hiện Điểm Chữ ký
1
2
3
Giảng viên chấm 1:
Giảng viên chấm 2:
Lời mở đầu
Trí tuệ nhân tạo đã đánh dấu một bước tiến quan trọng trong lĩnh vực khoa học máy tính và công nghệ thông tin, mở ra rất nhiều cơ hội và
Trang 3thách thức cho việc phát triển ứng dụng thông minh trong nhiều lĩnh vực khác nhau Hiện nay, việc ứng dụng trí tuệ nhân tạo vào 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à cờ Caro là một game như vậy Chính vì lý do đó mà chúng
em đã quyết định lựa chọn cờ Caro làm để tài cho bài tập lớn môn trí tuệ nhân tạo Đâ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 cờ Caro Trong game có sử dụng thuật toán MiniMax và thuật toán cắt cụt alpha-beta để giảm thời gian tính toán Bài báo cáo 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 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 thầy cô
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
Mục lục Chương I: Giới thiệu game cờ caro 4
1 Lịch sử và xuất xứ: 4
Trang 42 Trò chơi cờ caro 5
2.1 Quy tắc chơi 5
2.2 Chiến thuật chơi 5
2.3 Phạm vi phát triển 6
Chương II: Phân tích bài toán 7
1.Một số khái niệm 7
1.1.Dạng trò chơi 7
1.2 Cây trò chơi 8
2.Thuật toán minimax 8
a, Giải thuật Minimax 8
b, Các bước thuật giải Minimax 10
c, Ví dụ 10
d, Áp dụng vào game cờ caro 11
e, Ưu điểm và nhược điểm 13
3 Thuật toán cắt tỉa ALPHA - BETA 13
* Cắt tỉa ALPHA 14
* Cắt tỉa BETA: 15
4 Hàm đánh giá 16
Chương III: Chương trình cài đặt 17
Chương IV: Giao diện 17
V Kết luận 18
Chương I: Giới thiệu game cờ caro
1 Lịch sử và xuất xứ:
Trang 5Trò chơi Caro có nguồn gốc từ Nhật Bản và được gọi là "Gomoku" Nó được chơi từ hàng thế kỷ 15 và sau đó trở nên phổ biến ở Nhật Bản Trò chơi Caro hiện đại có nguồn gốc từ Trung Quốc, và từng được gọi là
"Wu Zi Qi" Nó đã được giới thiệu vào Nhật Bản vào thế kỷ 7 và sau đó đến Hàn Quốc và cả Trung Quốc
Caro là phiên bản quốc tế của trò chơi này và được chơi trên bàn cờ ô vuông thay vì bàn cờ lưới hình tam giác truyền thống của Gomoku
Hình 1.1: Gomoku
2 Trò chơi cờ caro
2.1 Quy tắc chơi:
- Bàn cờ: Bàn cờ thường có kích thước 15x15 ô vuông, nhưng có thể thay
đổi kích thước tùy ý
- Người chơi: Trò chơi thường có hai người chơi, một đại diện cho X và
một đại diện cho O Đôi khi, người chơi cũng có thể được đặt tên là "đen"
và "trắng" hoặc "người chơi 1" và "người chơi 2"
- Nước đi: Người chơi lần lượt thực hiện nước đi trên bàn cờ, đặt dấu của
mình (X hoặc O) vào một ô trống trên bàn cờ
Trang 6- Mục tiêu: Mục tiêu của trò chơi là tạo ra một chuỗi gồm năm dấu của
mình liên tiếp theo hàng ngang, hàng dọc, hoặc đường chéo Người chơi nào làm được điều này trước thì thắng
- Kết thúc trò chơi: Trò chơi kết thúc khi một người chơi thắng hoặc bàn
cờ đầy quân cờ và không còn nước đi hợp lệ nữa Trong trường hợp này, trò chơi thường được xem là hòa
Hình 2.1 Luật chơi
2.2 Chiến thuật trong cờ caro
- Tấn công: Người chơi cố gắng tạo ra chuỗi liên tiếp của năm quân cờ
của mình để thắng trò chơi Họ cần cẩn thận xây dựng các nước đi để tấn công đối thủ
- Phòng thủ: Để ngăn chặn đối thủ tạo ra chuỗi năm quân cờ, người chơi
cần đặt quân cờ mình sao cho không bị đối thủ phá hỏng chuỗi năm
- Bắt đầu tốt: Nước đi đầu tiên có thể quyết định chiến thắng Người
chơi cần chọn một nước đi khôn ngoan để bắt đầu trò chơi
2.3 Phạm vi phát triển
Trang 7- Bàn cờ đa dạng: ẽ hỗ trợ nhiều kích thước bàn cờ để người chơi có thể
lựa chọn Tuy nhiên, phạm vi cơ bản của game sẽ bao gồm bàn cờ 15x15,
là kích thước phổ biến cho cờ Caro
- Đối thủ máy tính thông minh: Đối thủ máy tính sẽ được phát triển dựa
trên thuật toán Minimax và Alpha-Beta Pruning để đảm bảo tính thông minh và khả năng tạo ra các nước đi tối ưu
- Hàm đánh giá (Heuristic Function): phát triển một hàm đánh giá để
đánh giá tình hình trên bàn cờ Hàm này sẽ đóng vai trò quan trọng trong quá trình ra quyết định cho nước đi của đối thủ máy tính
- Giao diện người dùng: Giao diện người dùng sẽ được thiết kế một cách
trực quan, bao gồm bàn cờ và các điều khiển để người chơi có thể thực hiện nước đi và tùy chỉnh trò chơi
Trang 8Chương II: Phân tích bài toán 1.Một số khái niệm
1.1 Dạng trò chơi:
Các trò chơi có dạng như cờ Vua, cờ Tướng, cờ Vây, cờ Caro,… là những trò chơi đối kháng, diễn ra giữa hai đấu thủ
Nói chung, các trò chơi này đều có thể chuyển về một dạng bài toán tìm kiếm đặc biệt: tìm đường đi đến các điểm cao nhất giữa hai đấu thủ Đặc điểm của loại trò chơi này như sau:
- Có hai đấu thủ, mỗi người chỉ đi một nước khi tới lượt
- Các đấu thủ đều biết mọi thông tin về tình trạng trận đấu
- Trận đấu không kéo dài vô tận, phải diễn ra hài hoà, hoặc một bênthắng
và bên kia thua
1.2 Cây trò chơi:
Các trạng thái bàn cờ khác nhau trong quá trình chơi có thể biểu diễn thành một cây tìm kiếm và ta sẽ tiến hành tìm kiếm trên cây để tìmđược nước đi tốt nhất Ở cây này, các nút của cây là các tình huống khác nhau của bàn cờ, các nhánh nối sẽ cho ta biết từ một tình huống cờ thế này chuyển sang tình huống cờ như thế khác thôngqua một nước đi đơn nào
đó Các nước đi này diễn ra theo cặp do hai đấu thủ lần lượt tiến hành Độ sâu của cây trò chơi là số tầng của cây
2.Thuật toán minimax
Giải thuật Minimax là một thuật toán đệ quy lựa chọn bước đi kế tiếp trong một trò chơi có hai người Xét một trò chơi đối kháng trong đó hai người thay phiên đi nước đi của mình như tic-tac-toe, cờ vua, cờ tướng,
cờ caro, 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
Trang 9thuậ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
a, Giải thuật Minimax
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
* Biểu diễn không gian trạng thái trên cây trò chơi
Cách xây dựng cây trò chơi gốc của cây ứng với trạng thái u: với trạng thái u chúng ta có thể tạo ra các nước đi hợp lệ để tạo các trạng thái con của nó
* Nhận xét
- Độ cao của cây là tổng số nước đi của cả hai người
- Các nút lá của cây tương ứng với trạng thái kết thúc
- Cách tính điểm cho các đỉnh trên cây trò chơi: Để xác định giá trị tại đỉnh có gốc là u ta sẽ phải đi lên từ mức thấp nhất đến đỉnh u
- Cây trò chơi sẽ được phân thành các lớp Min max xen kẽ lẫn nhau + Lớp min: lấy giá trị nhỏ nhất của các node con
+ Lớp max: lấy giá trị lớn nhất của các node con
* Nghiên cứu thuật toán minimax
Cho các node lá và ngược lại => Chỉ khả thi với những bài toán có không gian trạng thái nhỏ như cờ caro 3 x 3
- Không khả thi với cờ caro 5x5 vì không gian bài toán là rất lớn
- Giải pháp giới hạn không gian trạng thái theo độ sâu nhất định theo một quy tắc nào đó
Giải thuật minimax
function MINIMAX-DECISION (state) returns an action
Trang 10v MAX-VALUE (state)←
the action in (state) with the value v
function MAX-VALUE (state) returns an utility value
if TERMINAL-TEST (state) then return the UTILITY (state)
v -∞←
for each s in succs(state) do
v ← MAX(v, MIN-VALUE(s))
return v
function MIN-VALUE (state) returns an utility value
if TERMINAL-TEST (state) then return the UTILITY (state)
v +∞←
for each s in succs(state) do
v MIN(v, MAX-VALUE(s))←
v
return
b, Các bước thuật giải 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
c, Ví dụ
Trang 11
Hình 2.1VD cây tìm kiếm cho thuật toán minimax
Xét từ dưới lên trên: Gồm đỉnh A và các nút con
Xét nhánh trái đầu tiên
- Xét hàng 3 của cây hay hàng max lấy gía trị lớn nhất: Xét đỉnh E chưa biết giá trị, có 2 nút con M và L, do giá trị của M (8) có giá trị lớn hơn L (4), hàng 3 lấy giá trị max nên E lấy giá trị lớn hơn là 8 (M) tương tự với các nút con còn lại ở hàng 3 ta sẽ có giá trị của F, G, H, I, J, K
- Xét hàng thứ 2 của cây hay hàng min lấy giá trị nhỏ nhất: Xét đỉnh B có
2 nút con E và F, đỉnh B lấy giá trị min nên đỉnh B lấy giá trị nhỏ hơn giữa đỉnh E và F là giá trị 8 (E) tương tự ta có giá trị các các nút còn lại:
C, D
- Tìm giá trị đỉnh A: đỉnh A có 3 con : B, C, D Ở đây ta lấy giá trị max nên giá trị đỉnh B sẽ được lấy là 8
d, Áp dụng vào game cờ caro
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
Max:
Min:
Max:
Min:
Trang 12cho quân X, min_value() để tìm nước đi tiếp theo cho quân O Để giảm thời gian của đệ quy ta giới hạn độ sâu của giải thuật bằng 4
<code cài đặt >
Hàm xác định trạng thái kết thúc terminal_test() :
Hàm có nhiệm vụ xác định xem trò chơi có kết thúc hay không khi một quân cờ được đánh thêm vào Hàm hoạt động như sau:
- Từ vị trí thêm quân cờ, kiểm tra theo các chiều ngang, dọc, chéo (ví dụ kiểm tra theo chiều ngang: giả sử quân cờ đánh vào là X, duyệt theo hướng bên trái cho đến khi gặp quân O hoặc tường thì dừng lại, tiếp tục
Trang 13duyệt theo hướng bên phải tương tự để xác định số quân X liên tiếp nhau)
- Nếu số quân X (hoặc O) liên tiếp là 5 thì trả lại giá trị true, ngược lại trả
về giá trị false
e, Ưu điểm và nhược điểm
- Ư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 quá lớn
+ Có thể được mở rộng để giải quyết các trò chơi phức tạp hơn bằng cách
sử dụng các biến thể như Alpha-Beta pruning hoặc Monte Carlo Tree Search
- 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
3 Thuật toán cắt tỉa ALPHA - BETA
- Mục đích của việc giảm số nhánh cho cây tìm kiếm
Trang 14- Không làm ảnh hưởng đến đỉnh đang xét
- Cho phép cắt bỏ các nhánh không cần thiết cho sự đánh giá của đỉnh đang xét
- Hai giá trị Alpha và beta được đặt trong đó Alpha có liên quan đến nút Max và sẽ không bao giờ giảm Beta có liên quan đến nút Min và không bao giờ tăng
Hình 2.2 VD cây tìm kiếm cho thuật toán alpha-beta.
* Cắt tỉa ALPHA
Đầu tiên tìm giá của B: B có 2 con là E và F; E có 2 con : L, M và F có 2 con: N, O trong đó đỉnh O chưa biết giá trị và
+Đỉnh E (minimax) xác định có giá trị là 8
+ Đỉnh F ta có giá trị của N là 9, O chưa biết
Xét O có 2 khả năng:
+ Giá trị O <= 9 : Ta sẽ lấy 9 là giá trị của F vì hàng thứ 3 lấy giá trị max( minimax) nhưng hàng 2 là B sẽ lấy giá trị min hay giá trị nhỏ hơn (nhỏ nhất) Như vậy giữa đỉnh E và F thì đỉnh E sẽ nhỏ hơn nên ta lấy giá trị của đỉnh E là giá trị của đỉnh B
Trang 15+ Giá trị O > 9 : Nếu O > 9 ,thì giá trị của F sẽ lấy là giá trị của O nhưng nếu O là giá trị lớn hơn 9 thì O chắc chắn sẽ lớn hơn 8 (đỉnh E) mà hàng thứ 2(đỉnh B) chỉ lấy giá trị min nên ta sẽ chỉ lấy giá trị của E là giá trị của B
=> Cho nên ta thấy rằng dù có biết được giá trị của O hay không không ảnh hưởng đến việc tìm giá trị của đỉnh B nên ta có thể bỏ và không xét đỉnh O
* Cắt tỉa BETA:
Xét nhánh giữa , xác định giá trị đỉnh C: C gồm 3 con: G, H, I ; G có 2 con: P, Q biết giá trị còn H, I chưa biết gía trị và chúng ta dùng thuật taosn minimax để xác định gía trị của đỉnh G là 2 vì P và Q thì Q nhỏ hơn P nên ta sẽ lấy giá trị của G là 2
Xét H , I có 2 khả năng:
+ H, I > C : Nếu H, I lớn hơn C, C chỉ lấy gtnn hay giá trị min thì ta sẽ Lấy luôn 2( đỉnh G) là giá trị của C
+ H, I < 2 (đỉnh G) : Ta sẽ lấy giá trị của H hoặc I làm giá trị của C nhưng nếu nhưu vậy thì giá trị của C sẽ nhỏ hơn giá trị của B trong khi đỉnh A chỉ lấy giá trị max cho nên chúng ta sẽ không lấy giá trị của C mà sẽ lấy giá trị của B làm giá trị cho A
Để thấy dù có xét đỉnh H ,I hay không thì cũng không ảnh hưởng đến việc xác định đỉnh cuối ( A) nên sẽ bỏ không xét 2 đỉnh này
Giải thuật alpha beta
function ALPHA-BETA-SEARCH (state) returns an action
input: state, current state in game
v ← MAX-VALUE (state, -∞, +∞)
return the action in succs(state) with the value v
function MAX-VALUE (state, α, β ) returns an utility value
input: state, current state in game
α : the value of the best alterminate for MAX along the patth to state
Trang 16β: the value of the best alterminate for MIN along the patth to state
if TERMINAL-TEST (state) then return the UTILITY (state)
v ← -∞
for each s in succs(state) do
v ← MAX(v, MIN-VALUE(s,α,β))
if v ≥ β then return v
α ← MAX(α, v)
function MIN-VALUE (state, α, β) returns an utility value
input: state, current state in game
α: the value of the best alterminate for MAX along the patth to state
β: the value of the best alterminate for MIN along the patth to state
if TERMINAL-TEST (state) then return the UTILITY (state)
v ← +∞
for each s in succs(state) do
v ← MIN(v, MIN-VALUE(s, α , β ))
if v ≤ α then return v
β ← MIN(β, v)
3 Hàm đánh giá
Hàm đánh giá là một hàm quan trọng trong việc xây dựng trò chơi cờ caro Hàm này giúp cho điểm trạng thái của bàn cờ để từ đó xây dựng cây trờ chơi Việc xây dựng hàm lượng giá hợp lý, chính xác sẽ giúp cho hệ thống có đáng giá chính xác về trạng thái bán cờ để đưa ra nước đi thông minh hơn
Đối với bài toán cờ caro, ta có thể dùng 1 hàm lượng giá để đánh giá tính
"tốt, xấu" tại 1 thời điểm Những ô nào ở gần các quân đã đánh trước sẽ được điểm cao hơn Những ô càng xa thì được càng ít điểm Tuy nhiên đây chỉ là Heuristic nên ta phải bổ sung thêm các Heuristic khác nữa, ví
dụ vùng có 2, 3, 4 quân liên tiếp thì sẽ được cộng thêm 1 số điểm