Mục lục
Lời mở đầu 2
Phân công công việc: 3
I Giới thiệu về trò chơi cờ caro 4
II Phân tích bài toán 6
1 Mục đích bài toán 6
2 Biểu diễn bài toán dưới dạng cây trò chơi (Game Tree) 6
3 Chiến lược tìm kiếm 8
3.1 Thuật toán vét cạn liệu có được sử dụng? 8
3.2 Không gian tìm kiếm nước đi & chiến lược tìm kiếm trong cờ Caro 8
4 Biểu diễn các trạng thái: 9
IV Thuật toán sử dụng 11
1 Thuật toán MINIMAX 11
2 Thuật toán Anpha-Beta cắt tỉa 12
V Giới thiệu sản phẩm 13
Tài liệu tham khảo 19
Trang 2Lời mở đầu
Mục đích của chúng em về bài tập lớn này là xây dựng một chương trình vớimột trí tuệ nhân tạo - thông minh, nhanh nhạy có thể đối kháng với con ngườitrong một trò chơi cụ thể Ở bài tập lớn này chúng em xây dựng chương trình cờcaro, áp dụng các giải thuật MinMax, cắt tỉa alpha-beta Qua đó, giúp chúng emhiểu được cách thực mà con người đưa trí tuệ và bản lĩnh của mình vào máy móc,khiến máy móc có thể hoạt động tương đương hoặc thậm trí vượt trội hơn so vớicon người!
Trang 3Phân công công việc:
Nguyễn Đức Cường Nhóm trưởng
MSSV: 20101215 - Thiết kế các Form - Các chức năng thiết lập bàn cờ.
giải thuật MiniMax,
AnphaBeta cắt tỉa - Thiết kế class
- Các chức năng thiết lập bàn cờ.
Bàn cờ, class CGoban.- Viết báo cáo
Nguyễn Trung Đức 20096258 - Tìm hiểu và cài đặtgiải thuật
MiniMax,
AnphaBeta cắt tỉa - Thiết kế class
Bàn cờ, class
Trang 4CGoban.
Trang 5I Giới thiệu về trò chơi cờ caro
Hình 1: Gomoku
Cờ caro chính là môn cờ logic lâu đời và cổ xưa nhất trên Trái Đất Cờ carođã được sáng tạo từ nhiều nền văn minh khác nhau một cách độc lập Nó bắt đầuxuất hiện từ năm 2000 trước CN ở sông Hoàng Hà, Trung Quốc Một số nhà khoahọc đã tìm thấy bằng chứng chứng minh Caro đã được phát minh ở Hy lạp cổ đại
và ở Châu Mỹ trước thời Colombo Môn cờ cổ của Trung Quốc là Wutzu Cờ Caro
du nhập từ Trung Quốc vào Nhật Bản từ khoảng năm 270 trước CN Nó thườngđược gọi là Gomoku nhưng cũng có các tên gọi khác tuỳ theo thời gian và địaphương như Kakugo, gomoku-narabe, Itsutsu-ishi Người ta đã tìm thấy một tròchơi cổ từ một di tích ở Nhật năm 100 sau CN và thấy nó là một biến thể của Caro.Nó đã lan truyền nhanh chóng với cái tên Kakugo (trò 5 quân) Các nhà sử học nóirằng vào các thế kỷ 17 và 18, mọi người đều chơi trò này-người già cũng nhưngười trẻ Năm 1858, khi quyển sách đầu tiên về trò chơi này được xuất bản, nóđược gọi là Kakugo Nó tiếp tục được chơi, được gọi với nhiều tên khác nhau nhưGoren, Goseki, rồi Gomokunarabe, Gomoku và phát triển cho đến ngày nay thànhthể loại phức tạp nhất trong họ hàng đông đúc của nó, là Renju (chuỗi ngọc trai).
Trang 6- Luật chơi của Gomoku cổ như sau:o Bàn cờ 15 x 15, quân đen đi trước.
o Ai tạo được 5 quân liền nhau trước thì thắngNhư hình bên dưới thì O thắng:
Hình 2: Luật chơi Gomoku
Khi trình độ các kỳ thủ Gomoku được nâng cao, họ nhận ra rằng nếu chỉchơi đơn giản như trong Gomoku thì đó sẽ là một lợi thế quá lớn cho bên tiên tứcbên Đen (thực tế chính là ưu thế thắng) Sau đó một số nhà toán học đã chứngminh được rằng nếu chơi với luật Gomoku trên bàn cờ bằng hoặc rộng hơn 15x15thì Đen chắc chắn thắng (sure win), và sau đó cách đi cụ thể cũng đã được tìm ra,hệ thống và phân loại.Và chính vì vậy, từ đó Gomoku lâm vào một giai đoạnkhủng hoảng Khả năng đánh thắng 100 phần trăm của Đen đã làm trò chơi nàymất đi ý nghĩa của nó Có nhiều cải tiến được đề xuất, một số đã bị bỏ qua nhanhchóng, số khác làm xuất hiện các biến thể mới của Gomoku Ý tưởng chung củacác cải tiến là đề ra một số hạn chế cho Đen, nhằm cân bằng ưu thế đi tiên Dướiđây là một số biến thể phổ biến:
- Gomoku Hiện nay được chơi chính thức với bàn 13x13 Không có hoà.
Nếu hết đất thì Trắng thắng Chưa tìm được chứng minh nào cho thấy Đenchắc chắn thắng Tuy nhiên Đen vẫn có ưu thế rất lớn.
- ProGomoku Chơi trên bàn 15x15 Nước đầu của Đen đặt sẵn ở trung tâm.
Nước thứ ba (nước thứ hai của Đen) phải đặt ngoài hình vuông cấm Hìnhvuông cấm là hình vuông trung tâm kích thước 5x5 Không có hạn chế choTrắng Đã có chứng minh Đen chắc chắn thắng trong biến thể này.
Trang 7- Pente Biến thể này không còn giống Gomoku Luật bổ sung là có thể ăn
quân đối phương Nước ăn quân được thực hiện bằng cách chặn hai đầu mộtnước hai quân đối phương và ăn hai quân đó Ai tạo được nước năm hoặc ănđược 5 cặp quân trước thì thắng Rất phổ biến ở Mỹ Chơi trên bàn 19x19.
II Phân tích bài toán
o Hàm tiện ích (Utility function) để đánh giá các trạng thái kết thúco Trạng thái bắt đầu + Các nước đi hợp lệ = Cây biểu diễn trò chơi
2 Biểu diễn bài toán dưới dạng cây trò chơi (Game Tree)
Trò chơi có thể được biểu diễn như một cây gồm gốc, những nút, những lá vànhững nhánh
Hình 3: biểu diễn bài toán dưới dạng cây
Trang 8- Gốc là trạng thái ban đầu của trò chơi.Với mỗi trò chơi cụ thể thì trạngthái (ở mỗi thời điểm) lại được đặc trưng bởi nhưng thông số riêng
- Các nút (Node) của cây thể hiện tình trạng hiện tại của trò chơi, gồm nútcha (Parent Node) và nút con (Children Node)
- Các nhánh nối giữa các nút thể hiện nước đi, tức là cho biết từ một tìnhhuống của trò chơi chuyển sang tình huống khác thông qua chỉ một nướcđi nào đó.
- Các lá (leave) hay còn gọi là nút lá (leave node), thể hiện thời điểm kếtthúc khi mà kết quả của trò chơi đã rõ ràng.
- Ngoài ra thì còn một thông số của cây nữa là độ sâu (Fly) hay còn gọi làmức của cây, số tầng của cây.
Thường thì mỗi vị trí kết thúc của trò chơi (nút lá) sẽ gán một trọng số, chẳnghạn gán 1 cho chiến thắng, 0 cho hòa và -1 cho thua trận.Tại mỗi nút cũng có mộttrọng số tương ứng được xác định bằng một cách nào đó.Dựa vào cây trò chơi này,người ta có thể tìm ra nước đi “tốt” để giành phần thắng cho mình (nếu có thể),bằng cách tìm kiếm trên cây để tìm ra nước đi tốt nhất.
Dưới đây là ví dụ về cây trò chơi qua trò chơi bốc sỏi:
Giả thiết có 3 hộp bi, số lượng bi trong mỗi hộp là (1, 2, 2) Mỗi lượt chơi ngườichơi chỉ được bốc trong 1 hộp bi, với số lượng tùy ý.Người chơi nào bốc bi cuốicùng sẽ là người thua cuộc.
Dựa vào đánh giá ở cây trò chơi dưới, ta thấy được những nút lá mà có trọng sốlà 1, tức là đi theo những nhánh nào đó mà cuối cùng đến được những là đấy thìngười chơi Max sẽ giành thắng lợi.
Trang 9Hình 4: Ví dụ về cây trò chơi qua trò chơi bốc sỏi
Cây bi u di n trò ch i c Caroểễơ ờ
Trang 103 Chiến lược tìm kiếm
Như vậy với một trò chơi đối kháng, khi mà ta biểu diễn được trò chơi dướidạng một cây trò chơi, thì vấn đề đặt ra là phải tìm được chiến thuật đi trên cây tròchơi đó để chiếm lợi thế.Tức là phải có chiến lược tìm kiếm tốt để đảm bảo đườngđi của mình là “tốt”
3.1 Thuật toán vét cạn liệu có được sử dụng?
Nếu như thuật toán vét cạn thực sự dùng được để tìm kiếm trên cây trò chơithì ta chỉ cần chọn nhánh cây dẫn tới nút chiến thắng để đi, và như vậy các trò chơikhông còn sự hấp dẫn thường có.Và thực tế là, trong các trò chơi đối kháng thì saumột vài lượt đi thì lại sinh ra rất nhiều khả năng đánh tiếp theo (bùng nổ tổ hợp),chỉ có một số ít các trường hợp là có thể tìm kiếm theo kiểu vét cạn hết các khảnăng này.Do đó không dùng thuật toán vét cạn cho chiến lược tìm kiếm được.
3.2 Không gian tìm kiếm nước đi & chiến lược tìm kiếm trong cờ Caro
Như chúng ta đã biết, trong cờ caro thì cứ sau mỗi nước đi số ô trống sẽgiảm.Vì vậy việc tìm kiếm nước đi tiếp theo là việc tìm kiếm trong không gian cácô trống còn lại, sau mỗi lượt đi thì không gian tìm kiếm sẽ giảm dần
Chiến lược thường được cả người lẫn máy dùng là phân tích thế cờ chỉ saumột nước đi nào đó của cả 2 bên.Tức là trên cây trò chơi, việc tìm kiếm nước đi làchọn 1 nút trên cây sao cho nước đi đó là “tốt” Và để đánh giá được nút đó thìthường phải “nhìn xa”, liên quan đến độ sâu của cây (tương đương với việc ngườichơi phải “nhìn xa xem bàn cờ có những khả năng biến đổi nào sau mốt sô nước,từ đó đánh giá được độ tốt xấu của thế cờ hiện tại) Với máy tính thì thế cờ nàyđược đánh giá tốt hơn thế cờ kia nhờ so sánh điểm của thế cờ đó do bộ lượng giátrả lại.Vì không gian tìm kiếm là quá lớn nên chúng ta giới hạn cho máy tính chỉtìm kiếm ở một đọ sâu nhất định,
Và tất nhiên độ sâu càng lớn thì chương trình càng “thông minh” nhưng trả giávề mặt thời gian…
4 Biểu diễn các trạng thái:
- Bàn cờ được vẽ với kích thước nxn (với n từ 10 đến 18)
Trang 11- Các quân cờ được đánh tại giao điểm của các đường kẻ (số đường kẽ tùythuộc vào kích thước bàn cờ) tức các nút.
- Mỗi nút được biểu diễn bằng một trang ba trạng thái:o Trạng thái 0 (EMPTY): Ô cờ trống
o Trang thái 1(BLUE): Ô cờ được đánh bởi người thứ nhấto Trạng thái 2(RED): Ô cờ được đánh bởi người thứ hai- Class biểu diễn trạng thái của các nút
Hình 5: Class biểu diễn trạng thái các node- Khi khởi tạo tất cả các nút được gán trạng thái EMPTY.
- Tọa độ các nốt được biểu diễn bằng (x, y) Với (x, y) là tọa độ khi người chơi click vào các nốt.
Hình 6: Class biểu diễn tọa độ các nốt
Các trạng thái có thể xảy ra khi đang chơi:
+ Trạng thái WIN: khi một trong 2 người chơi đánh được 5 quân liên
tiếp theo một trong các trường hợp: 5 quân nằm ngang liên tiếp, 5 quânthẳng đứng liên tiếp, 5 quân chéo trái liên tiếp hoặc 5 quân chéo phải liêntiếp.
Trang 12+ Trạng thái FILLED: Khi tất cả các nốt trên bàn cờ đã được đánh mà
không ai dành chiến thắng Khi đó sẽ có cửa sổ thông báo hòa.
+ Trạng thái ILLEGAL: Phạm qui, không được đánh Người chơi phạm
qui khi đánh vào nước mà người chơi hoặc máy đã đánh trước đó hoặcđánh ra ngoài.
+ Trạng thái OK: Khi 3 trạng thái trên không xảy ra thì người chơi có thể
được đánh tiếp!
Trang 13IV Thuật toán sử dụng
1 Thuật toán MINIMAX.
- Các chiến lược tối ưu:
o Một chiến lược tối ưu là một chuỗi các nước đi giúp đưa đến trạngthái đích mong muốn (vd: chiến thắng)
o Chiến lược của MAX bị ảnh hưởng (phụ thuộc) vào các nước đi của MIN – và ngược lại
o MAX cần chọn một chiến lược giữa cực đại hóa giá trị hàm mục tiêu – với giả sử là MIN đi các nước tối ưu Min cần chọn một chiến lược giúp cực tiểu hoá giá trị hàm mục tiêu.
o Chiến lược này được xác định bằng việc xét giá trị MINIMAX đối với mỗi nút trong cây biểu diễn trò chơi Chiến lược tối ưu đối với các trò chơi có không gian trạng thái xác định (deterministic states).
- Giá trị MINIMAX
o MAX chọn nước đi ứng với giá trị MINIMAX cực đại (để đạt được giá trị cực đại của hàm mục tiêu).
o Ngược lại MIN chọn nước đi ứng với giá trị MINIMAX cực tiểu.
- Giải thuật MINIMAX
Trang 14- Theo thuật toán, hàm Max-Value sẽ lấy vị trí cho quân đưa vào mà ở đónếu quân đối địch đi để điểm trạng thái của quân đưa vào là min thì giá trịmin đó là lớn nhất.
- Hàm Min –Value sẽ ngược lại, tức là sẽ lấy vị trí cho quân đưa vào mà ởđó nếu quân đối địch đi để điểm trạng thái của nó là max thì giá trị max đólà nhỏ nhất.
- Hai hàm này hỗ trợ rất tốt cho tìm nước đi tối ưu, chúng tối ưu cho maxtrên cơ sở tối ưu của cả quân max và min trong các bước sau đó, phụ thuộcvào độ sâu lựa chọn.
- Các đặc điểm của giải thuật MINIMAX
o Tính hoàn chỉnh: Có (nếu cây biểu diễn trò chơi là hữu hạn)
o Tính tối ưu: Có (đối với một đối thủ luôn chọn những nước đi tối ưu)o Độ phức tạp về thời gian: O(b^m)
o Độ phức tạp về bộ nhớ: O(bm) (khám phá theo chiến lược tìm kiếmtheo chiều sâu)
Trang 152 Thuật toán Anpha-Beta cắt tỉa.
- Vấn đề: Giải thuật tìm kiếm MINIMAX vấp phải vấn đề bùng nổ tổ hợp (mức hàm mũ) các khả năng nước đi cần phải xét, không phù hợp với nhiều bài toán trò chơi thực tế.- Chúng ta có thể cắt tỉa (bỏ đi – không xét đến) một số nhánh tìm kiếm trong cây biểu
diễn trò chơi.
- Phương pháp cắt tỉa α-β (Alpha – Beta prunning)
o Ý tưởng: Nếu một nhánh tìm kiếm nào đó không thể cải thiện đối với giá trị (hàm tiện ích) mà chúng ta đã có thì không cần xét đến nhánh tìm kiếm đó nữa.
o Việc cắt tỉa các nhánh tìm kiếm “tồi” không ảnh hưởng đến kết quả cuối cùng.- Ví dụ:
Hình 1:
- Thuật toán Cắt tỉa tỉa α-β (Alpha – Beta)
o α là giá trị cảu nước đi tốt nhất đối với MAX (giá trị tối đa) tính đến hiện tại đối
Trang 16o Nếu v là giá trị tồi hơn α thì MAX sẽ bỏ qua nước đi ứng với v Cắt tỉa nhánh ứng với v.
o β được định nghĩa tương tự với MIN.
Trang 17- Theo thuật toán, tại mỗi trạng thái con của hàm Max-Value, nếu giá trị củatrạng thái đó nhỏ hơn giá trị Max đang có , thì nhánh đó sẽ không được xéttiếp.
- Tương tự với hàm Min –Value, trạng thái con nào có giá trị trạng thái lớnhơn giá trị Min đang có thì sẽ không được xét tiếp.
- Thuật toán có hiệu quả rất nhiều trong việc cắt giảmkhông gian tìm kiếm, cảithiện thời gian tìm kiếm một cách đáng kể.
- Chương trình được viết bằng ngôn ngữ java.
- Dưới đây là một số hình ảnh cho quá trình chạy và kết quả của chương trình!- Giao diện chương trình:
- Giao diện màn hình khi khởi động:
Trang 19- Giao diện màn hình About (cửa sổ thông tin nhóm):
Trang 20- Giao diện chương trình khi chơi game:
Trang 21- Giao diện thay đổi thông tin cái đặt:Ví dụ: thay đổi kích thước
Trang 22+ Giao diện chương trình khi chơi
Trang 23- Giao diện khi người chơi hoặc máy chiến thắng
Trang 24Tài liệu tham khảo
1 Tài liệu về các thuật giải trên mạng: