Do đó, việcxây dựng một hệ thống AI có thể chơi Cờ Tướng không chỉ là một thách thức tronglĩnh vực trí tuệ nhân tạo mà còn góp phần thúc đẩy sự hiểu biết sâu sắc về các thuậttoán như Min
Trang 1TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM VIỆN ĐÀO TẠO CHẤT LƯỢNG CAO
BÁO CÁO BÀI TẬP LỚN
HỌC PHẦN : TRÍ TUỆ NHÂN TẠO XÂY DỰNG TRÒ CHƠI CỜ TƯỚNG
NHÓM 13
Trương Hoàng Quý-90773Khổng Hữu Khang-91409Trương Nhật Minh-90594
GIÁO VIÊN HƯỚNG DẪN: NGUYỄN DUY TRƯỜNG GIANG
Trang 2MỤC LỤC
CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI 1
1 Lý do chọn đề tài 1
1.2 Mục tiêu nghiên cứu 1
1.3 Phạm vi nghiên cứu 2
CHƯƠNG II: CƠ SỞ LÝ THUYẾT 4
2.1 Nguyên tắc trò chơi Cờ Tướng 4
2.2 Hàm lượng giá bàn cờ 5
2.3 Thuật toán Minimax 6
2.4 Thư viện sử dụng 7
CHƯƠNG III: PHƯƠNG PHÁP NGHIÊN CỨU 9
3.1 Quy trình thực hiện 9
3.2 Mô hình hệ thống 10
CHƯƠNG IV: TRIỂN KHAI HỆ THỐNG 12
4.1 Giao diện bàn cờ 12
4.2 Hàm lượng giá bàn cờ 14
4.3 Thuật toán Minimax 16
CHƯƠNG V: KẾT QUẢ VÀ ĐÁNH GIÁ 18
5.1 Kết quả thực nghiệm 18
5.2 Đánh giá hệ thống 19
LỜI CẢM ƠN 21
TÀI LIỆU KHAM KHẢO 22
Trang 3CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI
1 Lý do chọn đề tài
Trong bối cảnh phát triển mạnh mẽ của công nghệ trí tuệ nhân tạo (AI), việcứng dụng các thuật toán AI vào các trò chơi trí tuệ như Cờ Tướng đã thu hút sự quantâm của nhiều nhà nghiên cứu và nhà phát triển Cờ Tướng, với lịch sử lâu đời và sựphức tạp về chiến thuật, là một trò chơi mang tính đối kháng cao, đòi hỏi người chơikhông chỉ có khả năng tính toán mà còn phải đưa ra các chiến lược hợp lý Do đó, việcxây dựng một hệ thống AI có thể chơi Cờ Tướng không chỉ là một thách thức tronglĩnh vực trí tuệ nhân tạo mà còn góp phần thúc đẩy sự hiểu biết sâu sắc về các thuậttoán như Minimax và lượng giá trạng thái bàn cờ
Mục tiêu của đề tài này là thiết kế và triển khai một hệ thống AI chơi Cờ Tướngdựa trên thuật toán Minimax, kết hợp với hàm lượng giá bàn cờ để tối ưu hóa các nước
đi Đây là cơ sở để tìm hiểu cách thức AI có thể mô phỏng tư duy chiến thuật của conngười và nâng cao khả năng chơi cờ của chính người dùng
1.2 Mục tiêu nghiên cứu
Mục tiêu chính của nghiên cứu này là xây dựng một hệ thống AI có khả năngchơi Cờ Tướng thông minh bằng cách áp dụng thuật toán Minimax, kết hợp với cáchàm lượng giá bàn cờ để đánh giá trạng thái và đưa ra quyết định tốt nhất Cụ thể:
Phát triển hệ thống AI chơi Cờ Tướng:
o Triển khai AI có khả năng phân tích trạng thái bàn cờ, đưa ra nước đi tối
ưu và có thể cạnh tranh với người chơi ở mức độ trung bình hoặc cao
o Tích hợp giao diện bàn cờ trực quan, cho phép người chơi tương tác với
AI một cách dễ dàng
Ứng dụng thuật toán Minimax:
Trang 4o Sử dụng thuật toán Minimax để AI có thể dự đoán nhiều bước đi, cânnhắc các chiến lược tấn công và phòng thủ dựa trên điểm lượng giá bàncờ.
o Đánh giá hiệu quả của thuật toán Minimax trong việc đưa ra quyết địnhtrong các tình huống phức tạp của Cờ Tướng
Phát triển hàm lượng giá bàn cờ:
o Thiết kế hàm lượng giá để AI đánh giá được lợi thế dựa trên giá trị quân
cờ, vị trí và trạng thái của bàn cờ
o Tối ưu hóa hàm lượng giá để AI không chỉ ưu tiên ăn quân mà còn cókhả năng tìm kiếm chiến thắng thông qua chiến lược chiếu tướng
Nghiên cứu và đánh giá hệ thống:
o Đánh giá hiệu suất và hiệu quả của hệ thống AI thông qua các trận đấuthử nghiệm
o Phân tích các điểm mạnh và hạn chế của hệ thống, từ đó đề xuất cáchướng cải tiến
1.3 Phạm vi nghiên cứu
Nghiên cứu này tập trung vào việc phát triển hệ thống AI chơi Cờ Tướng, vớiphạm vi cụ thể như sau:
Lĩnh vực nghiên cứu:
o Ứng dụng thuật toán trí tuệ nhân tạo (AI) trong trò chơi Cờ Tướng
o Áp dụng thuật toán Minimax để giải quyết bài toán ra quyết định trongcác trò chơi đối kháng hai người
Trang 5 Hạn chế:
o Không tích hợp các thuật toán tối ưu hiệu suất như Alpha-Beta Pruning
o Hệ thống chỉ tập trung vào các chiến thuật cơ bản và không phát triểncác chiến lược phức tạp như dụ quân, phá thế phòng thủ
o Độ sâu dự đoán của thuật toán Minimax giới hạn ở mức trung bình (3-5lượt đi), chưa tối ưu cho các tình huống cực kỳ phức tạp
Trang 6CHƯƠNG II: CƠ SỞ LÝ THUYẾT
2.1 Nguyên tắc trò chơi Cờ Tướng
1 Giới thiệu:
Cờ Tướng là một trò chơi trí tuệ đối kháng dành cho hai người, có nguồn gốc từTrung Quốc, được chơi trên bàn cờ 9x10 với các quân cờ có chức năng khácnhau
Mục tiêu chính của trò chơi là chiếu tướng đối thủ, tức là đưa quân Tướng củađối thủ vào trạng thái không thể tránh khỏi việc bị bắt
o Tốt: Di chuyển 1 ô thẳng, chỉ được đi ngang khi qua sông
o Xe: Di chuyển ngang hoặc dọc không giới hạn số ô, miễn là không bị cản
o Pháo: Di chuyển giống Xe, nhưng chỉ ăn được quân khi có một quân cờchặn giữa
o Mã: Di chuyển theo hình chữ L (2 ô dọc và 1 ô ngang hoặc ngược lại), bịcản nếu ô ngay cạnh bị chặn
o Tượng: Di chuyển chéo 2 ô, không qua sông và bị cản nếu ô giữa bị chặn
o Sĩ: Di chuyển chéo 1 ô, chỉ hoạt động trong cung
o Tướng: Di chuyển 1 ô ngang hoặc dọc, chỉ hoạt động trong cung
Luật chơi:
o Hai người chơi thay phiên nhau di chuyển quân cờ của mình
o Quân cờ không thể di chuyển vào ô đã có quân cùng màu
Trang 7o Khi quân Tướng bị chiếu (bị tấn công mà không thể di chuyển để tránh),trận đấu kết thúc.
3 Chiến thuật cơ bản:
Tấn công: Tập trung vào việc chiếu tướng hoặc ăn quân đối thủ để tạo lợi thế
Phòng thủ: Bảo vệ quân Tướng và giữ thế trận cân bằng
Kiểm soát bàn cờ: Đưa quân cờ vào các vị trí chiến lược để gây áp lực lên đốithủ
2.2 Hàm lượng giá bàn cờ
1 Khái niệm hàm lượng giá:
Hàm lượng giá là một hàm số được sử dụng để tính toán mức độ lợi thế hoặcbất lợi của một trạng thái bàn cờ tại một thời điểm cụ thể
Điểm lượng giá càng cao thì trạng thái bàn cờ càng có lợi cho AI, và ngược lại
2 Nguyên tắc xây dựng hàm lượng giá:
Dựa trên giá trị quân cờ:
Mỗi quân cờ được gán một giá trị dựa trên tầm quan trọng của nó:
Dựa trên trạng thái bàn cờ:
o Vị trí của quân cờ (ở trung tâm hay gần biên)
o Sự an toàn của quân cờ (được bảo vệ hay bị đe dọa)
3 Cách tính hàm lượng giá:
Tổng điểm lượng giá = (Tổng điểm quân cờ của AI) - (Tổng điểm quân cờ củađối thủ)
Trang 8 Ví dụ: Nếu AI có một Xe (900 điểm) và một Tốt (100 điểm), còn đối thủ cómột Pháo (450 điểm):
Tổng điểm = (900 + 100) - 450 = 550 điểm
Trạng thái bàn cờ có lợi cho AI
4 Ý nghĩa của hàm lượng giá:
Giúp AI đánh giá được lợi thế hoặc bất lợi trong từng trạng thái
Là cơ sở để thuật toán Minimax so sánh các trạng thái và chọn nước đi tốt nhất
2.3 Thuật toán Minimax
1 Khái niệm thuật toán Minimax:
Thuật toán Minimax là một kỹ thuật tìm kiếm được sử dụng rộng rãi trong cáctrò chơi đối kháng hai người, như cờ vua, cờ tướng, hoặc cờ caro
Mục tiêu của thuật toán là tối ưu hóa nước đi của người chơi chính(Maximizing Player) trong khi giảm thiểu lợi thế của đối thủ (MinimizingPlayer)
Minimax hoạt động bằng cách giả lập tất cả các nước đi có thể từ một trạng tháiban đầu và tính toán điểm số lượng giá cho từng trạng thái
2 Quy trình hoạt động:
Lượt của Maximizing Player (AI):
o Chọn nước đi với điểm số lượng giá cao nhất để tối đa hóa lợi ích
Lượt của Minimizing Player (đối thủ):
Trang 9o Giả định đối thủ sẽ chọn nước đi làm giảm thiểu điểm số củaMaximizing Player.
Quá trình này được thực hiện đệ quy cho đến khi đạt độ sâu xác định (depth)hoặc đạt trạng thái kết thúc trò chơi (chiếu tướng hoặc hòa)
3 Đặc điểm:
Ưu điểm:
o Đảm bảo AI chọn nước đi tối ưu nhất trong phạm vi tính toán
o Tính toán toàn diện tất cả các trạng thái có thể xảy ra, đảm bảo nước đihợp lý
Hạn chế:
o Yêu cầu nhiều tài nguyên tính toán, đặc biệt khi độ sâu dự đoán tăng
o Không tự động tối ưu hiệu suất, cần kết hợp thêm các thuật toán khácnhư Alpha-Beta Pruning
4 Sơ đồ hoạt động của thuật toán Minimax:
Mỗi node trong cây biểu diễn một trạng thái của bàn cờ
Từ một trạng thái ban đầu (root), thuật toán giả lập tất cả các nước đi của AI vàđối thủ, tính toán điểm số cho từng nhánh, rồi chọn nhánh có lợi nhất
Ứng dụng trong đề tài:
Xiangqi.js được sử dụng để:
Trang 10o Sinh nước đi hợp lệ: Xác định danh sách tất cả các nước đi có thể từtrạng thái hiện tại.
o Kiểm tra trạng thái trận đấu: Xác định liệu trận đấu đã kết thúc (chiếutướng, chiếu bí, hòa) hay chưa
o Xử lý logic trò chơi: Giúp thực hiện các nước đi, hoàn tác nước đi(undo), và cập nhật trạng thái bàn cờ
Ví dụ chức năng chính:
o xiangqi.moves(): Trả về danh sách các nước đi hợp lệ
o xiangqi.move(): Thực hiện một nước đi
o xiangqi.undo(): Hoàn tác nước đi
o xiangqi.in_checkmate(): Kiểm tra xem có chiếu bí không
2.4.1 Xiangqiboard.js
Giới thiệu:
o Xiangqiboard.js là một thư viện JavaScript dùng để tạo và hiển thị bàn
cờ Cờ Tướng dưới dạng giao diện trực quan
o Thư viện này cho phép người dùng tương tác với bàn cờ, chẳng hạn nhưkéo thả quân cờ hoặc hiển thị trạng thái bàn cờ
Ứng dụng trong đề tài:
Xiangqiboard.js được sử dụng để:
o Hiển thị bàn cờ: Tạo bàn cờ Cờ Tướng với các quân cờ đặt đúng vị trí
o Hỗ trợ tương tác: Cho phép người chơi kéo thả quân cờ để thực hiệnnước đi
o Cập nhật trạng thái bàn cờ: Đồng bộ giao diện bàn cờ với trạng thái bàn
cờ logic được quản lý bởi Xiangqi.js
Ví dụ chức năng chính:
o Xiangqiboard(): Khởi tạo bàn cờ
o board.position(): Cập nhật vị trí quân cờ trên giao diện
o onDrop: Xử lý sự kiện khi người chơi kéo thả quân cờ
Trang 112.4.3 Mối liên hệ giữa Xiangqi.js và Xiangqiboard.js
Xiangqi.js xử lý logic của trò chơi, bao gồm:
Trang 12CHƯƠNG III: PHƯƠNG PHÁP NGHIÊN CỨU
3.1 Quy trình thực hiện
Phân tích yêu cầu:
o Xác định các chức năng cần thiết cho hệ thống, bao gồm:
Sinh nước đi hợp lệ
Lượng giá trạng thái bàn cờ
Ra quyết định nước đi tối ưu
Giao diện bàn cờ để người chơi tương tác
o Nghiên cứu các thuật toán thích hợp, đặc biệt là thuật toán Minimax
Tìm hiểu các thư viện hỗ trợ:
o Xiangqi.js: Thư viện xử lý logic trò chơi, giúp kiểm tra nước đi hợp lệ,trạng thái bàn cờ và điều kiện kết thúc trận đấu
o Xiangqiboard.js: Thư viện hiển thị bàn cờ và hỗ trợ tương tác kéo thảquân cờ
Thiết kế hệ thống:
o Phân chia các thành phần chính của hệ thống:
Giao diện bàn cờ: Hiển thị trạng thái và xử lý nước đi của ngườichơi
Logic AI: Sinh nước đi và quyết định nước đi của AI bằng thuậttoán Minimax
Hàm lượng giá: Đánh giá trạng thái bàn cờ dựa trên giá trị quân
cờ và chiến lược chiếu tướng
o Thiết kế giao diện trực quan, dễ sử dụng
Triển khai hệ thống:
o Sử dụng thư viện Xiangqi.js để sinh nước đi hợp lệ và kiểm tra trạng tháitrận đấu
o Tích hợp thuật toán Minimax để ra quyết định nước đi tối ưu
o Xây dựng hàm lượng giá để AI đánh giá trạng thái bàn cờ
Trang 13o Hiển thị bàn cờ bằng thư viện Xiangqiboard.js, cho phép người chơi kéothả quân cờ.
Thử nghiệm và đánh giá:
o Thực hiện nhiều trận đấu thử nghiệm giữa AI và người chơi để đánh giá:
o Độ chính xác của các nước đi
o Hiệu suất của hệ thống (tốc độ xử lý và phản hồi)
o Trình độ chơi của AI ở các độ sâu khác nhau
o Ghi nhận các hạn chế và đề xuất cải tiến
3.2 Mô hình hệ thống
1 Giao diện người dùng (UI):
Thành phần:
o Bàn cờ hiển thị: Được tạo bằng thư viện Xiangqiboard.js
o Quân cờ: Cho phép kéo thả để thực hiện nước đi
o Thông báo trạng thái: Hiển thị thông báo như "Tới lượt", "Chiếu tướng",
"Kết thúc trận đấu"
Chức năng:
o Cho phép người chơi thực hiện nước đi hợp lệ
o Đồng bộ trạng thái giao diện với logic trò chơi
o Hiển thị trạng thái bàn cờ sau mỗi lượt
2 Logic trò chơi:
Thành phần:
o Được triển khai dựa trên thư viện Xiangqi.js
o Xử lý các quy tắc trò chơi Cờ Tướng:
o Kiểm tra nước đi hợp lệ
o Thực hiện và hoàn tác nước đi
o Kiểm tra trạng thái trận đấu (chiếu tướng, hòa, hoặc kết thúc)
Chức năng:
o Sinh danh sách các nước đi hợp lệ
Trang 14o Kiểm tra điều kiện kết thúc trận đấu.
3 Thuật toán AI:
Thành phần:
o Thuật toán Minimax:
Giả lập các nước đi của cả AI và đối thủ đến một độ sâu xác định
Đưa ra nước đi tối ưu dựa trên điểm lượng giá của trạng thái bàncờ
o Hàm lượng giá:
Đánh giá trạng thái bàn cờ dựa trên giá trị quân cờ và chiến lượcchiếu tướng
Chức năng:
o Tìm nước đi tốt nhất cho AI
o Dự đoán các nước đi có lợi thế cho đối thủ và tối ưu hóa chiến thuật củaAI
4 Mô hình luồng hoạt động của hệ thống:
Người chơi thực hiện nước đi:
o Người chơi kéo thả quân cờ trên bàn cờ
o Giao diện gửi thông tin nước đi đến logic trò chơi
Kiểm tra nước đi hợp lệ:
o Logic trò chơi (Xiangqi.js) xác định xem nước đi có hợp lệ hay không
o Nếu nước đi không hợp lệ, quân cờ được trả về vị trí cũ
Cập nhật trạng thái bàn cờ:
o Logic trò chơi cập nhật trạng thái bàn cờ sau nước đi của người chơi
o Kiểm tra trạng thái trận đấu (chiếu tướng, chiếu bí, hoặc hòa)
AI thực hiện nước đi:
o Thuật toán Minimax được gọi để tìm nước đi tối ưu cho AI
o Giao diện bàn cờ cập nhật trạng thái mới sau nước đi của AI
Hiển thị trạng thái:
Trang 15o Giao diện hiển thị thông báo về trạng thái trận đấu, ví dụ: "Chiếu tướng",
"Hòa", hoặc "Tới lượt người chơi"
Trang 16CHƯƠNG IV: TRIỂN KHAI HỆ THỐNG
4.1 Giao diện bàn cờ
1 Mô tả giao diện bàn cờ:
Giao diện bàn cờ được xây dựng bằng thư viện Xiangqiboard.js, giúp hiển thịbàn cờ và các quân cờ theo đúng quy tắc Cờ Tướng
Giao diện cho phép người chơi kéo thả quân cờ, từ đó thực hiện nước đi
2 Chức năng chính của giao diện bàn cờ:
Hiển thị bàn cờ:
o Tạo bàn cờ với các quân cờ đặt đúng vị trí ban đầu
o Cập nhật trạng thái bàn cờ sau mỗi nước đi của người chơi hoặc AI
Hỗ trợ tương tác:
o Cho phép người chơi kéo thả quân cờ để thực hiện nước đi
o Tự động kiểm tra tính hợp lệ của nước đi thông qua logic trò chơi (sửdụng Xiangqi.js)
Thông báo trạng thái:
o Hiển thị các thông báo như "Tới lượt người chơi", "Chiếu tướng", "Kếtthúc trận đấu"
3 Triển khai giao diện:
Giao diện được cấu hình thông qua thư viện Xiangqiboard.js, với mã như sau:// Cấu hình bàn cờ
const config = {
boardTheme: ' /docs/img/xiangqiboards/wikimedia/xiangqiboard.svg', // Ảnh bàncờ
pieceTheme: ' /docs/img/xiangqipieces/wikimedia/{piece}.svg', // Ảnh quân cờ orientation: 'red', // Hướng bàn cờ (Đỏ ở dưới)
position: 'start', // Trạng thái ban đầu
showNotation: true, // Hiển thị tọa độ
Trang 17draggable: true, // Cho phép kéo thả quân cờ
onDrop: function (source, target) {
const move = xiangqi.move({ from: source, to: target }); // Xử lý nước đi củangười chơi
if (move === null) return 'snapback'; // Nếu không hợp lệ, trả quân về vị trí cũ updateGameStatus(); // Cập nhật trạng thái
board.position(xiangqi.fen()); // Hiển thị bàn cờ mới
if (!updateGameStatus() && xiangqi.turn() === 'b') { // Nếu chưa kết thúc và đếnlượt AI
setTimeout(makeAIMove, 500); // AI thực hiện nước đi sau 500ms
Giao diện bàn cờ trực quan, hiển thị trạng thái bàn cờ rõ ràng
Người chơi có thể dễ dàng kéo thả quân cờ để thực hiện nước đi
Trang 184.2 Hàm lượng giá bàn cờ
1 Vai trò của hàm lượng giá:
Hàm lượng giá giúp AI đánh giá mức độ lợi thế hoặc bất lợi của từng trạng tháibàn cờ
Đây là cơ sở để thuật toán Minimax so sánh và lựa chọn trạng thái tốt nhất
2 Cách thiết kế hàm lượng giá:
Giá trị của mỗi trạng thái bàn cờ được tính dựa trên tổng điểm của tất cả cácquân cờ, với giá trị của từng quân như sau:
Hàm cũng cần xem xét trạng thái chiếu tướng hoặc kết thúc trận đấu
3 Triển khai hàm lượng giá:
function evaluateBoard(board) {
let totalEvaluation = 0;
for (let i = 0; i < 10; i++) { // Duyệt qua các hàng trên bàn cờ