Thông qua việc xây dựng một phần mềm trò chơi cờ vua dựa trên trí tuệ nhân tạo, nhóm chúng tôi không chỉ nâng cao kiến thức cá nhân về AI, mà còn đóng góp vào việc phát triển các ứng dụn
Trang 1GVHD: Gv Nguyễn Duy Trường Giang
Sinh viên thực hiện: Nguyễn Đức Bảo – Mã SV: 95057
Lê Anh Tú – Mã SV: 95213
Dương Xuân Hợp – Mã SV: 96645
Trang 2Hải Phòng, tháng 10 năm học 2024-2025
Trang 3Danh mục các từ viết tắt, thuật ngữ:
1 AI: Artifical Intelligence
2 IBM: International Business Machines Corporation
3 PVS: Principle Variation Search
4 UCI: Universal Chess Interface
5 LMR: Late Move Reduction
Trang 4LỜI MỞ ĐẦU
Trong thời đại công nghệ phát triển mạnh mẽ, các lĩnh vực liên quan đến trí tuệ nhân tạo (AI) đã và đang trở thành xu hướng hàng đầu trong nghiên cứu và ứng dụng Trong bối cảnh đó, tiểu luận này mang ý nghĩa vô cùng quan trọng, không chỉ giúp chúngtôi tìm hiểu sâu hơn về công nghệ AI, mà còn mở ra cơ hội áp dụng những lý thuyết tiên tiến vào thực tiễn Thông qua việc xây dựng một phần mềm trò chơi cờ vua dựa trên trí tuệ nhân tạo, nhóm chúng tôi không chỉ nâng cao kiến thức cá nhân về AI, mà còn đóng góp vào việc phát triển các ứng dụng thông minh phục
vụ nhu cầu giải trí và học tập của con người
Lý do chọn đề tài là vì trò chơi cờ vua từ lâu đã được coi là một biểu tượng của tư duy chiến lược và sự phát triển trí tuệ Cờ vua không chỉ là một môn thể thao trí tuệ mà còn là một thử thách đối với cả người chơi lẫn máy tính Khi kết hợp với trí tuệ nhân tạo, việc xây dựng một phần mềm cờ vua giúp tái hiện lại các chiến thuật và động thái phức tạp của trò chơi, đồng thời cho phép phát triển các chiến lược AI thông minh hơn Chính từ mongmuốn khám phá sự kết hợp giữa AI và cờ vua, tiểu luận này đã được lựa chọn với hy vọng mang lại một góc nhìn mới mẻ về lĩnh vực này
Để hoàn thành tiểu luận này, nhóm tôi xin gửi lời cảm ơn sâu sắc đến giáo viên hướng dẫn, người đã không ngừng hỗ trợ và định hướng trong suốt quá trình nghiên cứu Những ý kiến đóng góp quý báu và sự chỉ dẫn tận tình của thầy đã giúp tôi vượt qua
nhiều khó khăn, mở rộng tầm hiểu biết về chủ đề này Tôi cũng xin cảm ơn các bạn bè và những người thân đã luôn tạo điều kiện thuận lợi, khuyến khích và hỗ trợ tôi về tinh thần cũng như vật chất trong suốt thời gian hoàn thành tiểu luận
Trang 5Bố cục của tiểu luận này gồm bốn phần chính Phần đầu tiên giới thiệu tổng quan về trí tuệ nhân tạo, từ các khái niệm cơ bản đến lịch sử phát triển và những ứng dụng quan trọng Phần thứ hai đi sâu vào việc phân tích cấu trúc, thiết kế và các thuật toán liên quan đến phần mềm cờ vua AI Phần ba là giới thiệu về ngôn ngữ
mà nhóm tôi dùng để thực hiện chủ đề này Cuối cùng, phần bốn
là những đánh giá về khả năng phát triển trong tương lai và
những thách thức khi áp dụng AI vào các trò chơi trí tuệ, đồng thời đề xuất những cải tiến cho dự án trong các nghiên cứu tiếp theo
Với mục tiêu cung cấp một cái nhìn toàn diện về ứng dụng của trítuệ nhân tạo trong trò chơi cờ vua, tiểu luận hy vọng sẽ mang lại những giá trị hữu ích cho những ai quan tâm đến lĩnh vực này Qua đó, tôi mong rằng sẽ đóng góp được phần nào vào sự phát triển của công nghệ AI và các ứng dụng của nó trong cuộc sống
Trang 6MỤC LỤC
Danh mục các từ viết tắt, thuật ngữ: 1
Chương 1: Cơ sở lý thuyết 7
1.1 Giới thiệu 7
1.1.1 Cờ vua (Chess) 7
1.1.2 Ảnh hưởng của trí tuệ nhân tạo với cờ vua 7
1.2 Cơ sở lý thuyết 8
1.2.1 Minimax và cây trò chơi 8
1.2.2 Cắt tỉa Alpha-Beta 9
1.2.3 Iterative Deepening (tìm kiếm sâu dần) 10
1.2.4 Bảng trạng thái 11
1.2.5 Phương án chính và tìm kiếm phương án chính 12
1.2.6 Mở rộng tìm kiếm 12
1.2.7 Nước đi huỷ diệt 12
1.2.8 Giao thức UCI 13
1.2.9 Giảm bớt nước đi cuối 13
Chương 2: PHÂN TÍCH BÀI TOÁN 14
2.1 Giao diện người dùng và luật chơi cờ vua 14
2.2 Bot cờ vua 15
2.2.1 Tổng điểm của quân cờ trên bàn cờ 15
2.2.2 Hàm đánh giá 16
Trang 7Chương 3: Ngôn ngữ thực hiện 18
3.2 Thư viện chính hỗ trợ cờ vua 18
Chương 4: Các kết quả đạt được 20
4.1 Thực hiện chương trình Giao diện trạng thái ban đầu: Một bàn cờ vua có 2 bên trắng và đen Người dùng có thể chọn tự chơi với bot hay chọn để cho engine tự chơi với nhau thông qua các phím với các cấp độ khác nhau 20
4.2 Đánh giá chương trình 22
KẾT LUẬN 23
Tài liệu tham khảo 25
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu
1.1.1 Cờ vua (Chess)
Cờ vua, được biết đến với tên gọi tiếng Anh là "chess," là một trò chơi đối kháng trí tuệ chơi trên bảng dành cho hai người Xuất phát từ những trò chơi cổ có nguồn gốc từ Ấn Độ và Ba Tư, cờ vua đã trải qua một quá trình phát triển dài lâu để trở thành trò chơi như ngày nay Đặc biệt, vào nửa sau của thế kỷ 15, cờ vua lan rộng và được chơi nhiều phổ biến ở Nam Âu
Trang 8Hình 1.1
Trò chơi diễn ra trên một bàn cờ vuông chia thành 64 ô, với mỗingười chơi điều khiển một quân đội bao gồm tốt, mã, tượng, xe, hậu
và vua Mục tiêu chính của người chơi là chiếu hết vua đối phương
1.1.2 Ảnh hưởng của trí tuệ nhân tạo với cờ vua
Trong thế kỷ 20 và đặc biệt là thế kỷ 21, sự phát triển của trí tuệnhân tạo đã đánh dấu một cột mốc quan trọng trong lịch sử cờ vua,biến những trò chơi đấu trí truyền thống giữa người và người thànhcuộc đấu giữa con người và máy tính Một số sự kiện đáng chú ý đãchứng kiến sức mạnh đáng kinh ngạc của máy tính trong trò chơinày
Đối mặt với một trong những đại kiện tướng cờ vua hàng đầu thếgiới, Deep Blue, máy tính của IBM, đã tạo nên lịch sử khi chiếnthắng ván đầu tiên trong một trận đấu 6 ván với Garry Kasparovvào năm 1996 Bất ngờ không chỉ dừng lại ở đó khi Deep Blue táiđấu với Kasparov vào năm 1997 và giành chiến thắng chung cuộc,điều này đã chứng kiến sức mạnh trí tuệ vượt trội của AI
AlphaZero của DeepMind, một cơ sở thuộc sở hữu của Google,tiếp tục làm chao đảo cộng đồng cờ vua khi nó tự học và đánh bại
Trang 9một trong những chương trình cờ mạnh mẽ nhất thế giới, Stockfish,
mà không cần bất kỳ dữ liệu cờ vua trước đó
Năm 2021, Stockfish đã thể hiện sức mạnh của mình khi đánhbại một loạt các đại kiện tướng thế giới trong một sự kiện độc đáo
Sự kiện này đặt ra những thách thức mới và khám phá sự cân bằnggiữa con người và trí tuệ nhân tạo trong thế giới đầy chiến thuật vàsáng tạo của cờ vua
Ngày nay, cờ vua không chỉ là một trò chơi giải trí tại nhà mà còn
là một bộ môn thể thao trí tuệ tại các câu lạc bộ và giải đấu trêntoàn thế giới Cờ vua thu hút hàng triệu người chơi, không chỉ trongcác buổi chơi gia đình mà còn thông qua các nền tảng trực tuyến vàcác giải đấu lớn tổ chức khắp nơi trên thế giới Sự kết hợp giữachiến thuật tinh tế và sự tính toán chiến lược làm cho cờ vua trởthành một trong những trò chơi giáo dục và giải trí hàng đầu thếgiới
1.2 Cơ sở lý thuyết
Mục tiêu của nhóm là xây dựng một chương trình AI cờ vua đồhọa đơn giản có thể chơi với người chơi ở mức khá thông qua việc
sử dụng phương pháp đã được học trong môn học Trí tuệ nhân tạo
và tìm hiểu trên các nền tảng khác nhau : Minimax, cắt tỉa Beta, Iterative Deepening (tìm kiếm sâu dần), sắp xếp nước đi(move ordering), tìm kiếm phương án chính (principle variationsearch - PVS), nước đi huỷ diệt (killer moves), bảng trạng thái(transposition table)
1.2.1 Minimax và cây trò chơi
Minimax là một thuật toán quyết định giúp máy tính đưa
ra quyết định
trong môi trường chơi có tính cạnh tranh Nó dựa trên ý tưởng của hai đối thủ, một
Trang 10tìm kiếm để tối đa hóa giá trị, và một để tối thiểu hóa.
Cây trò chơi đại diện cho toàn bộ không gian trạng thái và các lựachọn có thể có được thực hiện tại mỗi trạng thái Mỗi nút của câybiểu diễn một trạng thái trong trò chơi và mỗi cạnh biểu diễn mộtlựa chọn khả dụng
Hình 1.2 Sơ đồ thuật toán Minimax
Trang 11số các nước đi không được xét đến, chương trình sẽ đảo nước đi có vẻ tốt lên đầu Kĩthuật này được gọi là sắp xếp nước đi (move ordering) Khác với thuật toán tốt nhất đầutiên (best-first) hay thuật toán leo đồi (hill climbing), chúng ta sẽ sắp xếp các toán tử(nước đi) thay vì các trạng thái (thế cờ).
Hình 1.3 Ví dụ thuật toán minimax cắt tỉa Alpha-Beta
Trang 121.2.3 Iterative Deepening (tìm kiếm sâu dần)
Thay vì tìm kiếm cố định ở độ sâu 3, ta sẽ tìm kiếm ở độ sâu 1, rồi độ sâu 2, cho đến khiđạt giới hạn (về độ sâu, về thời gian hay do yêu cầu bên ngoài) Tổng thời gian của cáclần lặp trước thực ra chỉ bẳng một phần so với lần lặp sâu nhất, cho nên thời gian phátsinh thêm là không quá nhiều Thuật toán cũng cho phép ta lưu trữ 1 số thông tin từ lầnlặp trước để áp dụng vào việc sắp xếp nước đi ở lần lặp sau Nó giống như một bộ phim
về vòng lặp thời gian vậy:
Nhân vật chính vì thua một ván cờ vua nên bị giết chết Tuy nhiên, anh ta đã không chết mà lại quay trở về đúng lúc chuẩn bị đi ở nước đi thứ 69 Vì nhớ được mình
đã thua như thế nào, anh ta quyết định đi nước cờ khác Tuy nhiên, đối thủ vẫn đi nước
cờ giống hệt như lần trước và anh ta vẫn thua Tưởng như đã chết, anh ta lại quay trở về lúc mình sắp đi nước thứ 69 Rút kinh nghiệm, lần này anh ta quyết định suy nghĩ xem đối phương sẽ đi như thế nào nếu mình đi nước này, nước kia; và rồi chọn ra 1 nước đi khác Đối thủ thấy chiến thuật của mình bị phát hiện, liền thay đổi sang chiến thuật khác Nhân vật chính do không lường trước điều này nên vẫn thua cuộc Anh ta lại bị đưa về trước khi đi nước thứ 69 Điều này cứ lặp đi lặp lại cho đến khi anh ta hoà cờ hoặc thắng trện thì mới kết thúc
Tuy nhiên thuật toán này sẽ khiến việc tìm kiếm trở nên mất thời gian hơn bởi có nhiềunút sẽ được duyệt nhiều lần, gây lãng phí thời gian khả năng tính toán
để làm việc này:
Trang 13 Cách 1: Chuyển thế cờ thành xâu FEN rồi dùng xâu này làm khoá, vì xâu trong Python hỗ trợ băm FEN là Forsyth–Edwards Notation (kí hiệu Forsyth–
Edwards), là một cách để biểu diễn thế cờ bằng kí hiệu (VD:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1)
Cách 2: Dùng hàm băm Zobrist (Zobrist hashing) để chuyển thế cờ thành 1 sốnguyên, rồi dùng nó để làm khoá Hàm băm Zobrist được dùng ở phần lớn bot cờvua
Trong mã nguồn đã có cài đặt bảng trạng thái, dùng hàm băm Zobrist Tuy nhiên, hàmbăm Zobrist lại chạy khá chậm, giảm được số nút phải xét đến nhưng lại tăng thời giantìm kiếm lên từ 1,3 đến 2 lần Vì vậy, bảng trạng thái mặc định sẽ bị tắt đi
Cập nhật ngày 06/10/2024: Đối tượng Board của thư viện python-chess có sẵn phươngthức _transposition_table() Hàm này trả về một tuple (bộ) chứa các bảng bit, và bămbằng tuple này nhanh hơn nhiều so với hàm băm Zobrist Sau khi điều chỉnh thì bảngtrạng thái mặc định sẽ được bật lên
1.2.5 Phương án chính và tìm kiếm phương án chính
Phương án chính (principle variation - PV) là chuỗi nước đi tốt nhất mà bot tìm được.Giả sử cả 2 bên đều chọn nước đi tốt nhất thì các nước đi này sẽ trùng với phương ánchính Nước đi nằm trong phương án chính gọi là nước đi phương án chính (nước đi PV)Nước đi được chọn ở mỗi lần lặp chính là nước đi đầu tiên của phương án chính Ta sẽdùng phương án chính của lần lặp gần nhất để dẫn hướng cho lần lặp tiếp theo Cần phảichắc rằng phương án chính của lần lặp trước không khác lần lặp này quá nhiều Bằngcách đảo phương án chính lên đầu, ta sẽ cắt tỉa sớm hơn so với trước
Tìm kiếm phương án chính (principle variation search - PVS) là việctận dụng phương án chính của lần lặp trước để cắt tỉa nhiều các nước
đi nhất có thể Thay vì chỉ đơn thuần ưu tiên tìm trong nước đi PV đầutiên, đặt nước đi PV là nước đi tiên quyết, các nước đi còn lại sẽ là nước
đi với độ ưu tiên thấp hơn Ta sẽ thử chứng minh rằng PV là nước đi tốtnhất bằng cách gọi thuật toán tương ứng nhưng với alpha-beta cựchẹp là alpha- alpha+1 (ở nút MAX) Trong alpha-beta, khoảng cách
Trang 14giữa alpha và beta được gọi là cửa sổ (window); cửa sổ càng hẹp thìcắt tỉa được càng nhiều, nhưng độ chính xác sẽ giảm Thông thường,
ta để cửa sổ ban đầu là vô cực để alpha và beta dần dần thu hẹp lại.Gọi hàm với cửa sổ cực hẹp sẽ nhanh hơn nhiều so với thông thường.Sau bước này nếu phát hiện có nước đi tốt hơn, ta lại gọi hàm với alpha
và beta như thường; nếu không thì dừng tìm kiếm
1.2.7 Nước đi huỷ diệt
Trong cờ vua, có những nước đi tuy không bắt quân nhưng lại doạbắt quân hoặc gây khó dễ cho đối thủ (chẳng hạn như Mã chiếu Hậu
và Tượng cùng lúc) Những nước đi như thế này thường giảm bớt sốnước đi mà đối thủ sẽ lựa chọn (vì đối thủ sẽ ưu tiên chạy Hậu mà bịchậm nhịp phát triển) nên cũng là nước đi khá tốt Nước đi như vậyđược gọi là nước đi huỷ diệt (killer move) Trong thuật toán alpha-beta, nước đi huỷ diệt sẽ gây ra sự cắt tỉa, bỏ qua những nước đi cònlại Vì vậy, mỗi khi có nước đi huỷ diệt ở một thế cờ, ta sẽ lưu nó lại rồinhóm theo số thứ tự của nước đi (ply) Khi sắp xếp các nước đi ở cùngply, ta sẽ xếp nước đi huỷ diệt trước, chỉ sau nước đi PV và nước đi bắtquân
Trang 151.2.9 Giảm bớt nước đi cuối
Giảm bớt nước đi cuối (late move reduction - LMR) là việc giảm độ sâutìm kiếm ở các nước đi về sau Giả sử các nước đi được sắp xếp từ tốtnhất đến tệ nhất, nhiều khả năng các nước đi ở nửa sau sẽ khôngmang lại lợi thế lớn cho bên ta Vì vậy từ nước đi thứ n, ta sẽ tìm kiếmvới cửa sổ cực hẹp và độ sâu giảm bớt để giảm số nút cần tìm kiếm.Nếu sau khi tìm với độ sâu giảm bớt mà có nước đi tốt hơn thì ta tiếptục tìm kiếm như thường
CHƯƠNG 2: PHÂN TÍCH BÀI TOÁN 2.1 Giao diện người dùng và luật chơi cờ vua
Nhóm đã lựa chọn thư viện Python python-chess để hỗ trợ việc triển
khai trò chơi Thư viện này cung cấp giao diện đầy đủ để tạo và quản
lý bàn cờ, đồng thời cài đặt tất cả các quy tắc chơi cờ vua một cáchtrực quan và dễ sử dụng Thư viện bao gồm các chức năng như:
Vẽ bàn cờ, quân cờ
Hiện quân bị ăn
Trang 16 Báo vị trí quân chiếu tướng
Hiện nước đi vừa đi
Cho phép bot khác đi thay cho người chơi
Báo thắng, thua, hoà
Hiệu ứng âm thanh, nhạc nền
Tốt sẽ luôn phong Hậu
Sơ đồ phím:
Enter: chơi lại sau khi trò chơi kết thúc
R: đánh hộ người chơi bằng nước cờ ngẫu nhiên
F: đánh hộ người chơi bằng thuật toán đơn giản
M: đánh hộ người chơi bằng thuật toán minimax
A: đánh hộ người chơi bằng thuật toán alpha-beta
I: đánh hộ người chơi bằng thuật toán lặp sâu
P: đánh hộ người chơi bằng thuật toán PVS
Z: hoàn tác nước đi cuối của người chơi và bot
Sự hỗ trợ mạnh mẽ từ python-chess đã giúp nhóm đơn giản hóa quá
trình phát triển trò chơi, giúp chúng tôi chỉ cần tập trung vào việctriển khai các thuật toán để tìm kiếm nước đi tối ưu Đây là bước tiếnquan trọng để áp dụng các thuật toán đã học vào thực tế
2.2 Bot cờ vua
Để thuật toán hoạt động hiệu quả, chương trình cần phải có các bảng điểm đánh giá bàn
cờ một cách hiệu quả Sau một thời gian, nhóm đã tìm được một số cách khá hay màkhông khiến tăng quá nhiều chi phí tính toán có thể áp dụng cho trò chơi cờ vua và tạo rahàm để đánh giá các thế cờ đó
2.2.1 Tổng điểm của quân cờ trên bàn cờ
Để đánh giá giá trị của từng quân cờ trong trò chơi cờ vua, nhóm đã
sử dụng một hệ thống tính điểm dựa trên cả giá trị cơ sở của quân cờ
và vị trí của nó trên bàn cờ Giá trị cơ sở của mỗi quân cờ được xácđịnh như sau:
Trang 17Tuy nhiên, không chỉ giá trị cơ sở mà cả vị trí của quân cờ trên bàn
cờ cũng đóng vai trò quan trọng Nhóm đã tạo ra các bảng điểm vị trí(piece square tables) cho từng quân cờ, với các giá trị khác nhau tạimỗi ô vuông trên bàn cờ Điều này giúp đánh giá xem vị trí của quân
cờ có tốt hay không và ảnh hưởng đến chiến lược tổng thể
Ví dụ, đối với quân Tốt, giá trị vị trí sẽ khác nhau tùy theo nó đang ởđâu trên bàn cờ Nếu Tốt tiến lên hàng thứ hai hoặc thứ ba, nó có thể
có giá trị cao hơn so với khi ở hàng cuối cùng:
Hình 2.1 Ma trận thể hiện giá trị của quân Tốt tùy vị trí
Gọi A là ma trận điểm của quân Tốt thì nếu nó ở điểm x, y thì sẽ cóđiểm là 𝐴[𝑥][𝑦]
Các quân khác như Mã, Tượng, Xe, Hậu và Vua cũng có bảng vị trítương tự để xác định giá trị