Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 39 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
39
Dung lượng
481,24 KB
Nội dung
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUN ĐỀ HỌC PHẦN NHẬP MƠN TRÍ TUỆ NHÂN TẠO ĐÊ TÀI: Áp dụng thuật toán minimax cắt tỉa alpha vào trò chơi cờ tướng Sinh viên thực Giảng viên hướng dẫn Ngành Chuyên ngành Lớp Khóa Hà Nội, tháng 12 năm 2021 PHIẾU CHẤM ĐIỂM STT Họ tên giảng viên Giảng viên chấm 1: Giảng viên chấm 2: MỤC LỤC LỜI CẢM ƠN LỜI NÓI ĐẦU MỞ ĐẦU I Đặt vấn đề CHƯƠNG 1: THUẬT TOÁN MINIMAX VÀÀ̀ CẮT TỈA ALPHA 1.1 Đặt ý tưởng 1.2 Thuật toán MiniMax AlphaBeta 1.2.1 Thuật toán MiniMax 1.2.2 Thuật toán cắt tỉa AlphaBeta Chương 2: PHÂN TÍCH VÀÀ̀ LẬP TRÌNH GAME 2.1 Mô tả ý tưởng 2.2 Xây dựng chương trình 2.2.1 Lượng giá 2.2.2 Sinh nước 2.2.3 Giao diện chương trình 2.3 Cài đặt chương trình CHƯƠNG : KẾT LUẬN 3.1 Các vấn đề khó khăn cách thức giải 3.2 Đánh giá chương trình 3.3 Hướng phát triển TÀÀ̀I LIỆU THAM KHẢO LỜI CẢM ƠN Trong thời gian nghiên cưu va hoc tâpp̣ mơn Nhập mơn Trí tuệ nhân tạo(Vơi ngôn ngữ lâpp̣ trinh java), môn đồ họa máy tính cùng vơi viêcp̣ tim hiêu va đoc cac tai liêu thư viêṇ Trường va viêcp̣ tim hiêu thêm tai liêu hoc tâpp̣ internet nhóm em đã găpp̣ không it kho khăn vê viêcp̣ xây dưng va thiêt kê game Cờ tướng sử dung ngôn java ưng dung đồ họa máy tính kiến thức lập trình hướng đối tượng Vơi sư giúp đỡ quy bau của cac thầy cô giao va cac ban nhom em đã hoan game va bai bao cao môn học Xây game cờ tướng Đông thời em xin gửi lời cam ơn đăcp̣ biêṭvê sư hương dẫn va chi bao nhiêṭtinh của thầầ̀y giáo Phạm Đức Hồng đã tâṇ tinh giúp đỡ nhóm em suât qua trinh hoan game cũng bai bao cao Tuy nhiên, kinh nghiêṃ còn thiêu nên game cũng bai bao cao chắn sẽ không tranh khỏi những thiêu sot, han chê nhât định Những y kiên nhâṇ xét va gop y quy bau của thầy cô va cac ban la sơ đê nhóm em hoc hỏi thêm va hoan thiêṇ thêm kiên thưc va củng cô thêm kinh nghiêṃ của ban thân minh Nhóm em rât mong nhâṇ đươc sư nhâṇ xét va gop y từ thầy cô va cac ban.Mặc dùầ̀ đãã̃ nỗ lực cố gắng chắn đề tài vẫã̃n còầ̀n nhiều thiếu sót,nhóm em mong sẽã̃ nhận đuợc góp ý, phê bình củủ̉a cac thầầ̀y cơ, va bạn để đề tài hoàn thiện Em xin chân thành cảm ơn! LỜI NĨI ĐẦU Các chiến lược tìm kiếm sửủ̉ dup̣ng thông tin chung củủ̉a tốn, khơng phùầ̀ hợp với nhiều tốn thực tế sống chúú́ng đòầ̀i hỏủ̉i nhiều thờầ̀i gian nhớ Bên cạnh đó, chúú́ng ta ngày đặt nhữã̃ng toán thực tế, nhằm giải vấn đề, nhu cầầ̀u củủ̉a ngườầ̀i, với lượng thông tin, dữã̃ liệu khổng lồ, cầầ̀n phải đưa nhữã̃ng chiến lượng giải tối ưu, thơng để đạt hiệu hơn, nên cầầ̀n nghiên cứu, thiết lập cải thiện nhữã̃ng chiến lược tìm kiếm với tri thức bổ sung (informed search strategies) sửủ̉ dup̣ng tri thức cup̣ thể củủ̉a tốn.Trong đồ án này, nhóm sinh viên chúú́ng em đãã̃ chọn giải thuật tìm kiếm để mơ phỏủ̉ng vào tốn thực tế chương trình “Cờầ̀ tướng”, tròầ̀ chơi quen thuộc với chúú́ng ta.Với mup̣c tiêu đặt hiểu vận dup̣ng giải thuật tìm kiếm tri thức, củủ̉ng cố kĩ lập trình để tạo nên demo hồn chỉnh Q trình thực bao cao gặp nhiều khó khăn ngơn ngữã̃ lập trình mới, kinh nghiệm thực tế còầ̀n hạn chế, em mong sẽã̃ nhận góp ý, phê bình củủ̉a để đề tài hồn thiện Em xin chân thành cảm ơn giúp đỡ Thầy! MỞ ĐẦU I Đặt vấn đề Game cờầ̀ tướng đãã̃ xuất từầ̀ lâu đờầ̀i, nhiều hệ yêu thích việc chơi cờầ̀ cũã̃ng việc cầầ̀n quân đánh trận Hiện nay, Cờầ̀ Tướng trở thành tròầ̀ chơi trí tuệ mang tầầ̀m cỡã̃ quốc tế Tròầ̀ chơi Cờầ̀ Tướng (tên phiên âm Trung Quốc XiangQi, tên tiếng Anh Chinese Chess) minh hoạ tốt cho tốn tìm kiếm tròầ̀ chơi áp dup̣ng thuật toán AlphaBeta Đây tròầ̀ chơi thúú́ vịp̣ tương đối phổ biến Việt nam, châu Á cũã̃ng tồn giới Nó tạo cảm giác dườầ̀ng máy tính suy nghĩ đọ sức với ngườầ̀i (thực tế vẫã̃n tính tốn mà thơi) Cờầ̀ Tướng loại cờầ̀ có độ phức tạp nhiều mặt tương đương với cờầ̀ Vua CHƯƠNG 1: THUẬT TOÁN MINIMAX VÀ CẮT TỈA ALPHA 1.1 Đặt ý tưởng Cờ tương la trò chơi đôi khang, đo hai người phiên nươc của minh Trang thai băt đầu la trang thai khơi tao ban cờ, sau môi nươc của môṭbên, trang thai ban cờ sẽ đươc thay đôi môṭtrang thai mơi hiêṇ hanh Cờ tương co luâṭcủa no, va trò chơi sẽ kêt thúc môṭngười co đươc trang thai phan anh sư thăng cuôcp̣ hoăcp̣ hai người rơi vao trang thai hòa cờ Ta tim cach phân tich xem từ môṭtrang thai nao đo sẽ dẫn đên đâu thủ nao sẽ thăng vơi điêu kiêṇ ca hai co trinh đô p̣như Giai thuâṭMinimax sẽ đươc ap dung vao trò chơi cờ tương Hai đâu thủ trò chơi sẽ đươc goi la MIN va MAX va hai đâu thủ đêu biêt rõ thông tin ban cờ - MAX đai diêṇ cho đâu thủ quyêt danh thăng lơi hoăcp̣ đa hoa ưu thê của minh - MIN ngươc lai, cô găng thiêu hoa điêm sô của MAX Ban cờ tương cũng chinh la môṭkhông gian trang thai vơi cac mưc va đươc biêu diên băng trò chơi Môi nút của biêu diên cho môṭtrang thai ban cờ Nút gôc biêu diên trang thai băt đầu van cờ Cac nút la thê hiêṇ trang thai kêt thúc của trò chơi (khi môṭđâu thủ gianh phần thăng, thua, hay hai đâu thủ hòa nhau) Hai đâu thủ đươc goi la MAX va MIN va luân phiên nươc cờ của minh nên môi mưc đươc biêu diên luân phiên la MAX va MIN Cac nút ưng vơi trang thai ma từ đo đâu thủ MAX chon nươc ưng vơi lơp MAX, cac nút ma đâu thủ MIN chon nươc ưng vơi lơp MIN Vơi môi nươc ban cờ, tương ưng vơi cac mưc cây, giai thuâṭminimax sẽ định gia trị cho cac nút sau: Nêu nút la nút la gan cho nút đo môṭgia trị đê phan anh trang thai thăng, thua hay hòa của cac đâu thủ Sử dung gia trị cac nút la đê xac định gia trị của cac nút mưc no: + Nút thuôcp̣ lơp MAX gan cho no gia trị lơn nhât cac nút la + Nút thuôcp̣ lơp MIN gan cho no gia trị nhỏ nhât cac nút la Gan gia trị cho từng thê cờ theo quy tăc chi rõ gia trị của trang thai tôt nhât ma môi đâu thủ hi vong đat đươc Cũng giông viêcp̣tinh toan nươc va thưc hiêṇ môṭnươc cờ thưc sư của đâu thủ Giai thuâṭMinimax thê hiêṇ viêcp̣tinh toan nươc ưu cho cac đâu thủ thông qua gia trị của cac nút đươc gan Trong môṭnươc cờ, đâu thủ MAX đên lươt đi, đâu thủ sẽ chon nươc ưng vơi trang thai co gia trị cao nhât cac trang thai con, còn đâu thủ MIN sẽ chon môṭ nươc ưng vơi trang thai co gia trị nhỏ nhât cac trang thai Tuy nhiên, cờ tương la môṭtrò chơi co thê noi la phưc tap, viêcp̣mơ rôngp̣ không gian trang thai ap dung giai thuâṭMinimax co thê găpp̣ kho khăn Vi thê ma chúng ta chi xét đên viêcp̣triên khai giai thuâṭMinimax vơi trò chơi cờ tương co mưc đô p̣sâu đươc định trươc (khoang mưc) Viêcp̣định trươc mưc hay đô sp̣ âu sẽ lam giam thời gian tinh toan cho giai thuâṭva AI (may) sẽ đưa đươc môṭ nươc nhanh va chinh xac Phần sau nhóm em sẽ trinh bay vê qua trinh xây dưng giai thuâṭMinimax 1.2 Thuật toán MiniMax AlphaBeta 1.2.1 Thuật tốn MiniMax 1.2.1.1 Mơ tả Giả sửủ̉ chúú́ng ta có phân tích cờầ̀ áp dup̣ng tất luật, phương pháp đánh cờầ̀ khác vào từầ̀ng cờầ̀ chuyển đổi chúú́ng thành số đại diện (cho điểm cờầ̀) Mặt khác, ta giả sửủ̉ số dương áp dup̣ng cho cờầ̀ củủ̉a đấu thủủ̉ (được gọi người chơi cực đại maximizer), âm áp dup̣ng cho đấu thủủ̉ bên (được gọi người chơi cực tiểu - minimizer) Q trình tính tốn cho điểm cờầ̀ gọi lượng giá tĩnh (static evaluation) Hàm thực việc tính tốn gọi lượng giá tĩnh, giá trịp̣ nhận gọi điểm lượng giá tĩnh Cả hai đấu thủủ̉ cố gắng để đạt điểm tuyệt đối lớn Ngườầ̀i chơi cực đại sẽã̃ tìm nhữã̃ng nước dẫã̃n đến điểm củủ̉a trở nên lớn (hay cao được) hay điểm củủ̉a đối thủủ̉ bớt âm (nhỏủ̉ giá trịp̣ tuyệt đối) Còầ̀n đấu thủủ̉ củủ̉a anh ta, ngườầ̀i chơi cực tiểu, lại sức phản kháng lại, để dẫã̃n tới điểm âm củủ̉a béú́ hay điểm dương củủ̉a đối thủủ̉ nhỏủ̉ (hình 1) Ví dup̣ phầầ̀n tròầ̀ chơi hình Ngườầ̀i chơi cực đại hi vọng chọn nước bên phải để đạt điểm Thế đến lượt củủ̉a ngườầ̀i chơi cực tiểu, sẽã̃ cố gắng không cho ngườầ̀i chơi cực đại đạt điểm cách chọn nước nhánh bên trái vậy, ngườầ̀i chơi cực đại có điểm thay Ngược lại, ngườầ̀i chơi cực đại chọn nước bên trái, tình xấu vẫã̃n còầ̀n điểm, lớn chọn nước bên phải Nói chung, ngườầ̀i chơi cực đại sẽã̃ phải tìm cách nhận nước củủ̉a đối phương làm cho điểm giảm xuống Và tương tự vậy, ngườầ̀i chơi cực tiểu phải nhận biết nước củủ̉a ngườầ̀i chơi cực đại cố gắng làm tăng điểm lên Thủủ̉ tup̣c tìm nước tốt tròầ̀ chơi gọi thủủ̉ tup̣c Minimax điểm núú́t điểm cực đại điểm cực tiểu có thuật tốn sau: 38 39 hoạch" nhiều điểm - điểm số q kéú́m thuật tốn khơng buồn xem xéú́t trườầ̀ng hợp còầ̀n lại nữã̃a Do đãã̃ tiết kiệm núú́t không cầầ̀n phải lượng giá cũã̃ng sinh nước cho hai trườầ̀ng hợp Kết luận cuối cùầ̀ng điểm cao mà ngườầ̀i chơi cực đại thu điểm nhờầ̀ chọn theo nhánh giữã̃a 22 Chương 2: PHÂN TÍCH VÀ LẬP TRÌNH GAME Chương trình cờ tướng áp dụng thuật toán Minimax Tròầ̀ chơi Cờầ̀ Tướng (tên phiên âm Trung Quốc XiangQi, têntiếng Anh Chinese Chess) minh hoạ tốt cho tốn tìm kiếm tròầ̀ chơi áp dup̣ng thuật toán Minimax AlphaBeta Đây tròầ̀ chơi thúú́ vịp̣ phổ biến Việtnam, châu Á cũã̃ng tồn giới Nó tạo cảm giác dườầ̀ng máy tính suy nghĩ đọ sức với ngườầ̀i (thực tế vẫã̃n tính tốn mà thơi) 2.1 Mơ tả ý tưởng Game có nhữã̃ng chức năng: Tạo bàn cờầ̀, với chế độ ngườầ̀i đấu với ngườầ̀i, ngườầ̀i đấu với máy, máy đấu với máy - Trong trườầ̀ng hợp, ngườầ̀i đấu với máy, chương trình cho phéú́p ngườầ̀i dùầ̀ng tủủ̉y chỉnh độ sâu xéú́t duyệt củủ̉a thuật tốn - (Máy nhìn trước nước đi), độ sâu cao, độ khó tăng thờầ̀i gian máy tính tốn lâu - Game có hiển thịp̣ thờầ̀i gian tính tốn, số lượng núú́t lượng giá, hệ số phân nhánh - Cho phéú́p ngườầ̀i dùầ̀ng chuyển qua lại giữã̃a hai thuật toán Minimax AlphaBeta để thấy khác biết tốc độ tính tốn 2.2 Xây dựng chương trình 2.2.1 Lượng giá Đánh giá cờầ̀ nhữã̃ng nhiệm vup̣ địp̣nh chương trình chơi cờầ̀ củủ̉a bạn có "cao thủủ̉" hay không Căn vào cờầ̀ máy sẽã̃ gán cho điểm số (lượng giá tĩnh) để đánh giá độ tốt - xấu Nhờầ̀ điểm máy so sánh cờầ̀ với biết chọn nước tốt Đây nhiệm vup̣ khó khăn phức tạp khơng tồn thuật tốn tổng qt thống để tính điểm Điểm củủ̉a cờầ̀ dựa nhiều yếu tố mà khó số hố hết phup̣ thuộc vào số lượng giá trịp̣ quân cờầ̀ tại, phup̣ thuộc vào tính hãã̃m, tính biến, cơng, thủủ̉ củủ̉a từầ̀ng quân cờầ̀ cũã̃ng cup̣c diện trận đấu Ví dup̣, cặp Mãã̃ giao chân, sát cánh tiến quân tựa lưng phòầ̀ng thủủ̉ thườầ̀ng có giá hai Mãã̃ đứng rờầ̀i Nhưng cũã̃ng có lúú́c hai Mãã̃ đứng rờầ̀i lại tốt hai Mãã̃ giao chân Mãã̃ lại cản Mãã̃ trận Ta cũã̃ng biết rằng, "lạc nước hai Xe đành - 23 bỏủ̉ phí, gặp thờầ̀i Tốt cũã̃ng thành cơng", số hố điều qua hàm lượng giá điều khó q sức Chúú́ng ta bắt đầầ̀u với việc cơng nhận giả thuyết sau: Ta biểu diễn chất lượng cờầ̀ số Ví dup̣, số đánh giá củủ̉a ta xác suất chiến thắng, đa số chương trình số khơng có đặc biệt, số mà mup̣c đích so sánh với Chúú́ng ta nên đo chất lượng củủ̉a cờầ̀ tương tự phéú́p đo củủ̉a đối phương (do đó, ta coi đạt tốt đối phương củủ̉a ta phải thấy xấu họ ngược lại) Điều không thật đúú́ng lắm, giúú́p cho thuật tốn tìm kiếm củủ̉a ta làm việc tốt thực tế cũã̃ng gầầ̀n với thật Trong chương chúú́ng ta cài đặt phương pháp đơn giản nhất: lượng giá dựa sở giá trịp̣ củủ̉a từầ̀ng quân cờầ̀ Cách tính sẽã̃ lấy tổng giá trịp̣ qn cờầ̀ có củủ̉a bên trừầ̀ tổng giá trịp̣ quân cờầ̀ có củủ̉a đối phương Do đó, cờầ̀ cờầ̀ chỗ còầ̀n nhiều qn bên hơn, nhiều quân giá trịp̣ cao cũã̃ng có bắt nhiều quân quân giá trịp̣ cao củủ̉a đối phương không Cách làm đãã̃ bỏủ̉ qua nhữã̃ng nghệ thuật, chiến lược chơi cờầ̀ (mà nhữã̃ng điểm để đánh giá ngườầ̀i giỏủ̉i cờầ̀ hay không) Các quân cờầ̀ triển khai không theo chiến lược chung hết (vơ địp̣nh) Nó còầ̀n tạo cảm giác cờầ̀ "vồ", nghĩa nhằm nhằm sơ hở củủ̉a đối phương "ăn" mà không cầầ̀n biết đến hậu (điều không hẳn đúú́ng, lí sẽã̃ trình bầầ̀y dưới) Tuy nhiên phương pháp tính điểm có nhữã̃ng ưu điểm sau: Là cách tính điểm nhất, đóng vai tròầ̀ chủủ̉ đạo điểm củủ̉a cờầ̀ Nó sở củủ̉a đa số hàm đánh giá Ta cũã̃ng nhận thấy phầầ̀n lớn thờầ̀i gian diễn trận đấu, hai bên tìm cách tiêu diệt quân củủ̉a Các phương án, chiến lược thườầ̀ng tính nhữã̃ng điểm cộng thêm vào đóng góp tỷ lệ nhỏủ̉ tổng số điểm củủ̉a cờầ̀ Việc nhằm "vồ" quân củủ̉a đối phương sau suy nghĩ sâu nhiều nước cũã̃ng đãã̃ trở thành "cao cờầ̀" Nói cho cùầ̀ng, mup̣c đích củủ̉a chúú́ng ta cũã̃ng "vồ" quân có giá trịp̣ cao - Tướng đối phương Là cách tính đơn giản nhanh Do tính nhanh, ta tăng thêm độ sâu tìm kiếm Việc tăng thêm độ sâu lại giúú́p máy có nhìn xa hơn, "cao cờầ̀" nhiều khắc phup̣c nhược điểm củủ̉a cách tính đơn giản 24 Điểm quân cờầ̀ đánh giá theo kinh nghiệm cho biết tương quan giữã̃a quân cờầ̀ Sau điểm từầ̀ng quân mà ngườầ̀i thườầ̀ng chấp nhận: Quân cờ Kí hiệu Tốt Sĩ Tượng Mãã̃ Pháo Xe Bạn cũã̃ng theo thang điểm khác tuỳ theo hiểu biết sở thích củủ̉a Ví dup̣ làng cờầ̀ Việt nam thườầ̀ng cho điểm quân khác (xem đọc dưới): Tốt - (2 đãã̃ qua sông), Sĩ - 2, Tượng - 2.5, Mãã̃ - 4.5, Pháo - 5, Xe - 10 Trong chương trình cờầ̀ củủ̉a chúú́ng ta, điểm cup̣ thể củủ̉a từầ̀ng quân cờầ̀ số nguyên 10, 20, 20, 40, 45 90 Ta dùầ̀ng mảng piecevalue để lưu điểm từầ̀ng quân cờầ̀ Cho điểm không nhữã̃ng vẫã̃n giữã̃ nguyên tương quan tránh dùầ̀ng số thực (tính chậm) mà ta còầ̀n có khoảng cách hợp lí giữã̃a điểm để sau dễ dàng thêm nhữã̃ng điểm bổ xung "thưởng" "phạt", tức nhữã̃ng điểm vào nhữã̃ng yếu tố khác (ví dup̣ cùầ̀ng Pháo lúú́c 40 điểm vịp̣ trí "bí", lúú́c khác lại đến 85 vịp̣ trí Pháo trống đe doạ Pháo lồng) Trong bàn cờầ̀, quân Tướng quân quan trọng nhất, dùầ̀ quân đạt cờầ̀ nữã̃a khơng Tướng dẫã̃n đến thua cờầ̀ Do đó, Tướng thườầ̀ng cho điểm cao, cách biệt nhiều lầầ̀n so với quân khác, đảm bảo điểm tổng củủ̉a quân còầ̀n lại cùầ̀ng đủủ̉ loại "thưởng", "thêm" khơng Tướng Trong chương trình, ta cho 1000 điểm Hàm lượng giá thật đơn giản sau (chúú́ ý ta chưa tăng điểm cho Tốt đãã̃ qua sông): function Eval: integer; const piecevalue:array[1 7]of integer=(10,20,20,40,45,90,1000); var i, s: integer; begin s := 0; for i:=1 to BOARD_SIZE begin 25 if color[i] = side then s := s + piecevalue[piece[i]] else if color[i] = xside then s := s piecevalue[piece[i]]; end; Eval := s; end; Vấn đề cải tiến hàm lượng giá sẽã̃ bàn riêng chương phầầ̀n sau Tham khảo kiến thức cờ Tướng GIÁ TRỊ CỦA CÁC QUÂN CỜ Khái niệm giá trị quân cờ người chơi cờ từ kỷ trước Từ lâu, làng cờ có câu nhận định sức mạnh quân chủ lực "Xe 10, Pháo 7, Mã 3" đánh giá Xe quân chủ lực mạnh câu "Nhất Xa sát vạn" hay đánh giá Tốt qua hà, sức mạnh nửa Xe (nhất Tốt độ hà, bán Xa chi lực) Thế đánh giá nhận định sức mạnh qn khơng xác khơng đầy đủ Do khái niệm giá trị quân cần xác định rõ hoàn chỉnh Thông thường, theo thời gian ván cờ chia thành ba giai đoạn: khai cuộc, trung tàn Trong ba giai đoạn trung chiếm nhiều thời gian có ý nghĩa đến thắng thua nhiều Do định giá quân cờ thường cho giai đoạn Chúng ta biết loại quân cờ hay binh chủng có đặc điểm, tính tác dụng khác nên sức mạnh chúng khác nhau, giá trị chúng không giống Ngay thân quân cờ lúc sức mạnh giữ nguyên cũ Khi đứng vị trí tốt phát huy tính tác dụng tối đa khác hẳn với đứng vị trí xấu, khơng thể phát huy tính tác dụng được, hay phát huy mức hạn chế Vậy điều trước tiên phải thấy quân cờ có hai giá trị: giá trị vốn có giá trị biến động Giá trị vốn có thường gọi giá trị (giá trị tĩnh), giá trị biến động gọi giá trị tương đối Các nhà nghiên cứu lí luận cờ trao đổi thống với bảng giá trị quân sau: Nếu lấy Tốt chưa qua sông làm chuẩn để xác định giá trị qn lực bàn cờ Khi chưa qua sơng kiểm soát hay khống chế điểm trước mặt nên tạm cho có giá trị Khi Tốt qua sơng, khống chế đến hay điểm trước mặt bên cạnh (Tốt biên khống chế 2) Bây 26 mang giá trị tương đối, phải thấy mạnh lúc chưa qua sơng nên giá trị lúc phải Đối với Sĩ, Tượng loại binh chủng phịng ngự, có nhiệm vụ bảo vệ an tồn cho Tướng, đơi lúc chúng trợ giúp quân khác công Trong giai đoạn trung cuộc, Tốt đối phương qua sông đổi Sĩ Tượng Do người ta đánh giá Sĩ Tượng có giá trị Tốt qua sơng, tức Nhưng so sánh lực Tượng Sĩ thấy Tượng có phần đắc lực nên định giá trị Sĩ Tượng phải 2.5 công Quân Mã bàn cờ có khả khống chế tối đa điểm Mỗi bước nhẩy vượt hai tuyến đường ngang hay dọc So Mã mạnh tác chiến tầm cự ly ngắn mà Nếu so với hai Tốt qua sông cặp kè lực Mã khơng bao nhiêu, định giá trị Mã 4.5 vừa Nên nhớ hai Tốt cặp kè qua sơng phải có giá trị Pháo binh chủng tác chiến tầm xa có hiệu Trên đường dọc, Pháo khống chế tối đa điểm cịn khống chế đường ngang Mặt khác Pháo qn có tính động cao, bước vượt đến tuyến đường Nhưng cự li gần, nhiều Pháo bất lực, khơng làm để khống chế đối phương Do so với Mã phải thấy quân có sở trường riêng, sức mạnh chúng coi tương đương Thế giai đoạn trung quân số hai bên tương đối nhiều, Mã lại dễ bị cản trở, Pháo nhanh nhẹn hơn, dễ phát huy lực nên giá trị Pháo phải Mã chút Đối với Xe rõ ràng binh chủng động mạnh nhất, khống chế ngang, dọc tối đa đến 17 điểm Nếu đem Xe đổi lấy Pháo Mã đối phương thấy có phần thiệt thịi chút, cịn hai Pháo coi cân Do giá trị Xe 10 Cịn Tướng, thân khơng có sức mạnh nhiều dù đơi làm nhiệm vụ trợ giúp cho quân phe cơng có kết Thế giá trị vơ to lớn, khơng qn so sánh Tất quân đổi, hi sinh riêng quân Tướng đánh đổi mà hi sinh, Tướng thua cờ Do khơng nên định giá trị Tướng định chẳng có ý nghĩa (Sưu tầm) 27 2.2.2 Sinh nước Một nhữã̃ng việc quan trọng để máy tính chơi cờầ̀ phải cho biết nước đi từầ̀ cờầ̀ Máy sẽã̃ tính tốn để chọn nước có lợi cho Các yêu cầầ̀u thủủ̉ tup̣c sinh nước là: Chính xác (rất quan trọng) Một nước sai sẽã̃ làm hỏủ̉ng tính tốn Đồng thờầ̀i chương trình bịp̣ trọng tài xửủ̉ thua ln Do số lượng nước sinh lớn, luật quân nhiều phức tạp nên việc kiểm tra tính đúú́ng đắn tương đối khó Đầầ̀y đủủ̉ (rất quan trọng) Sinh nước có từầ̀ cờầ̀ Nhanh Do chức phải sinh hàng triệu nước máy đến lượt nên giảm thờầ̀i gian sinh nước có ý nghĩa lớn Sinh nước thuật toán véú́t cạn Máy sẽã̃ tìm nước hợp lệ có Máy phải sinh từầ̀ nhữã̃ng nước hay nhữã̃ng nước ngớ ngẩn (như đẩy Tướng vào vịp̣ trí khống chế củủ̉a đối phương) Ta hình dung thủủ̉ tup̣c sinh nước Gen sẽã̃ có đầầ̀y nhữã̃ng vòầ̀ng lặp for, câu lệnh kiểm tra if rẽã̃ nhánh case, phéú́p tính kiểm tra giới hạn chiếm phầầ̀n đáng kể Thủủ̉ tup̣c sinh nước cho bên tới lượt chơi vào nội dung củủ̉a biến side Đây nhữã̃ng thủủ̉ tup̣c phức tạp dễ sai Một nước có hai giá trịp̣ cầầ̀n quan tâm Đó điểm xuất phát (from) điểm đến (dest) Ta sẽã̃ khai báo cấu trúú́c move sau để dùầ̀ng nhữã̃ng nơi cầầ̀n đến dữã̃ liệu nước type move = record { Địp̣nh nghĩa cấu trúú́c nước } from, dest: byte; end; 28 Kiểm tra giới hạn bàn cờ Ví dup̣ có quân Xe nằm ô số 84 (trong mảng piece) Bây giờầ̀ ta sẽã̃ sinh thửủ̉ nước sang trái cho Nước sang trái ô chuyển thành ô số 83 vịp̣ trí cùầ̀ng hàng với xuất phát nên chấp nhận Một nước khác cầầ̀n phải xem xéú́t sang trái ba - 81 Ơ 81 có bàn cờầ̀ khác hàng nên khơng chấp nhận Như vậy, muốn biết ô củủ̉a nước sang trái có phéú́p khơng ta phải kiểm tra xem có cùầ̀ng hàng với xuất phát khơng Việc kiểm tra thực cách chia cho (kích thước củủ̉a dòầ̀ng) lấy phầầ̀n nguyên (trước lại phải chuyển thứ tự gốc cách trừầ̀ 1) Ta thấy ((83-1) div 9) = ((84-1) div 9) nên ô 83 chấp nhận; ((81-1) div 9) ((84-1) div 9) nên kết luận nước đến ô 81 khơng hợp lệ (hình 2.5) 29 Các nước vừầ̀a sinh sẽã̃ đưa vào danh sách nước nhờầ̀ gọi thủủ̉ tup̣c Gen_push Thủủ̉ tup̣c có hai tham số vịp̣ trí xuất phát củủ̉a quân cờầ̀ sẽã̃ nơi đến dest củủ̉a quân cờầ̀ Dưới đoạn chương trình dùầ̀ng để sinh nhữã̃ng nước sang trái củủ̉a quân Xe, x vịp̣ trí củủ̉a qn Xe i := x - 1; { Nước sang trái đầầ̀u tiên } while ((i-1) div 9) = ((x-1) div 9) begin if (ô thứ i trống) or (ô thứ i có qn đối phương) then gen_push(vịp̣ trí củủ̉a Xe, vịp̣ trí xéú́t); if thứ i khơng trống then break; { Kết thúú́c q trình sinh nước sang trái } i := i - 1; { Xéú́t tiếp vịp̣ trí bên trái } end; Việc sinh nhữã̃ng nước theo chiều khác cũã̃ng tương tự (ví dup̣ để sinh nước theo chiều đứng ta cầầ̀n cộng trừầ̀ bội số củủ̉a 9) điều kiện kiểm tra sẽã̃ khác Như vậy, chương trình sinh nước Gen có dạng sau: for Xéú́t lầầ̀n lượt từầ̀ng quân cờầ̀ bên case quâncờầ̀ of Xe: begin while Xéú́t lầầ̀n lượt tất ô từầ̀ bên phải Xe lề trái bàn cờầ̀ begin if (ô xéú́t ô trống) or (ô xéú́t chứa quân đối phương) then gen_push(vịp̣ trí củủ̉a Xe, vịp̣ trí xéú́t) if ô xéú́t không trống then break; end; while Xéú́t lầầ̀n lượt tất ô từầ̀ bên trái Xe lề phải bàn cờầ̀ while Xéú́t lầầ̀n lượt tất ô từầ̀ bên Xe lề bàn cờầ̀ 30 while Xéú́t lầầ̀n lượt tất ô từầ̀ bên Xe lề bàn cờầ̀ end; { Xong quân Xe } Pháo: Phương pháp có nhược điểm chương trình phải viết phức tạp, cồng kềnh, khó tìm lỗi nhanh Trong chương trình mẫã̃u VSCCP, chúú́ng tơi giới thiệu kĩ thuật khác có tên gọi "hộp thư" (mail box - bảng củủ̉a có dạng hộp phân thư) Mup̣c đích củủ̉a kĩ thuật nhằm giảm bớt phéú́p kiểm tra vượt giới hạn bàn cờầ̀ làm đơn giản chương trình Mấu chốt thay cho bàn cờầ̀ có kích thước bình thườầ̀ng 9x10 = 90, ta dùầ̀ng bàn cờầ̀ mở rộng, chiều có thêm đườầ̀ng nữã̃a (bàn cờầ̀ có kích thước 13x14 = 182) Các ứng với đườầ̀ng bao mở rộng có giá trịp̣ -1, tức giá trịp̣ báo vượt biên Các nước bàn cờầ̀ 9x10 chuyển tương ứng sang bàn cờầ̀ Nếu nước sinh lại rơi vào hai đườầ̀ng bao có nghĩa đãã̃ rơi ngồi bàn cờầ̀ rồi, phải bỏủ̉ ngừầ̀ng sinh nước phía Sở dĩ có đến hai đườầ̀ng biên (chứ khơng phải một) quân Mãã̃ Tượng nhẩy xa đến hai (hình 2.6) Việc chuyển đổi toạ độ thực nhờầ̀ hai mảng Mảng mailbox90 dùầ̀ng để chuyển từầ̀ toạ độ bàn cờầ̀ thườầ̀ng sang toạ độ bàn cờầ̀ Mảng ứng với bàn cờầ̀ - mailbox182 dùầ̀ng để kiểm tra nước vượt đườầ̀ng biên dữã̃ liệu để chuyển trở lại toạ độ bình thườầ̀ng 31 Ví dup̣, vịp̣ trí qn Xe nằm ô số 84 (trong mảng piece) hình 2.5, đổi sang bàn cờầ̀ mở rộng sẽã̃ thành vịp̣ trí mailbox90[84] = 148 Có nghĩa ứng với thứ 148 củủ̉a mảng mailbox182 Bây giờầ̀ ta sẽã̃ sinh thửủ̉ nước sang trái ô cho quân Xe Việc sinh kiểm tra sẽã̃ thực bàn cờầ̀ mở rộng, nước ô số 148 - = 147 Do mailbox182[147] = 83 ¹ -1 nên nước chấp nhận Số 83 cho biết kết sang trái vịp̣ trí 83 bàn cờầ̀ bình thườầ̀ng Tuy nhiên, nước sang trái ba ô, có số 148 - = 145 mailbox182[145] = -1 cho biết nước khơng hợp lệ Chương trình cũã̃ng cầầ̀n kiểm tra số nước tối đa theo hướng củủ̉a quân cờầ̀ xéú́t Chỉ có quân Pháo Xe đến nước đi, còầ̀n quân khác có nhiều Việc quân sang vịp̣ trí thực chất ta đãã̃ thay đổi toạ độ củủ̉a cách cộng với số (dương âm) Ở ta đãã̃ thấy để quân Xe sang trái nước ta đãã̃ phải cộng vịp̣ trí với -1 Để sinh ô theo hàng dọc, ta phải cộng với +13 -13 (chúú́ ý, việc sinh nước kiểm tra hợp lệ dựa vào mảng mailbox182 nên giá trịp̣ 13 kích thước dòầ̀ng củủ̉a mảng này) Để sinh nước chéú́o ta phải cộng trừầ̀ với số khác Ta nên lưu số vào mảng offset có chiều Một chiều dựa vào loại quân cờầ̀ nên số đánh từầ̀ đến Chiều còầ̀n lại số hướng tối đa củủ̉a quân cờầ̀ Quân cờầ̀ có nhiều hướng quân Mãã̃ có tới hướng nên chiều khai báo số từầ̀ đến Các quân cờầ̀ có số hướng sẽã̃ điền vào phầầ̀n thừầ̀a Chúú́ ý nước quân Tốt củủ̉a hai bên khác hướng tiến Để tiết kiệm ta lưu nước tiến củủ̉a Tốt đen, còầ̀n nước tiến củủ̉a Tốt trắng đơn giản lấy ngược dấu Kiểm tra vị trí phép đến Việc chuyển toạ độ từầ̀ bàn cờầ̀ thườầ̀ng sang bàn cờầ̀ mở rộng giúú́p ta loại bỏủ̉ nước vượt biên Ta còầ̀n phải kiểm tra số giới hạn khác Ví dup̣ Tướng Sĩ khơng thể cung, Tượng phéú́p điểm cố địp̣nh phía bên mình, Tốt phéú́p tung hồnh đất đối phương, còầ̀n phía bên cũã̃ng bịp̣ giới hạn ngặt nghèo số ô Để thực nhữã̃ng phéú́p kiểm tra này, ta dùầ̀ng mảng legalmove ứng với từầ̀ng ô bàn cờầ̀ sẽã̃ cung cấp thông tin Để kiểm tra qn cờầ̀ có phéú́p khơng, ta dùầ̀ng mặt nạ bít Maskpiece mà tuỳ theo từầ̀ng qn sẽã̃ có giá trịp̣ khác Nếu cầầ̀n kiểm tra có bit trùầ̀ng với mặt nạ đặt qn cờầ̀ phéú́p đến 32 Ví dup̣, số có giá trịp̣ legalmove[3] = (chuyển thành số nhịp̣ phân 00000101) cho biết quân cờầ̀ phéú́p đến Tượng, Xe, Pháo, Mãã̃ Ngồi ra, ta còầ̀n phải kiểm tra nước bịp̣ cản (đối với Tượng Mãã̃) xửủ̉ lí cách ăn quân củủ̉a quân Pháo trườầ̀ng hợp đặc biệt Như vậy, tổng thể sinh nước cho quân cờầ̀ có dạng sau: p := piece[i]; { Sinh nước cho quân cờầ̀ p vịp̣ trí i } for j := to begin { Số hướng tối đa } if offset[p,j] = then break; x:=mailbox90[i]; { Chuyển sang bàn cờầ̀ mở rộng} if p in [ROOK, CANNON] then n := else n := 1; for t:=1 to n { Số nước theo hướng} begin if (p=PAWN) and (side=LIGHT) then x := x - offset[p, j] else x := x + offset[p, j]; { Nước } y := mailbox182[x]; { Chuyển toạ độ bình thườầ̀ng } if side = DARK then t := y else t := 91-y; if (y=-1) or { Ra lề ? } ((legalmove[t] and maskpiece[p])=0) { Được phéú́p vịp̣ trí khơng ? } then break; { Thốt nước không hợp lệ } { Kiểm tra nước cản với Tượng, Mãã̃ xửủ̉ lí Pháo } Một vấn đề nữã̃a luật hai Tướng không đối mặt trực tiếp với Việc kiểm tra thực nhờầ̀ hàm kingface Hàm sẽã̃ trả lại giá trịp̣ true nước vừầ̀a gây hở mặt Tướng Hàm đặt thủủ̉ tup̣c sinh nước Gen Tuy nhiên đơn giản hơn, ta đặt thủủ̉ tup̣c gen_push, hở mặt Tướng thủủ̉ tup̣c sẽã̃ khơng đưa nước 33 2.2.3 Giao diện chương trình 2.3 Cài đặt chương trình Chương trình cờầ̀ tướng viết C#, sửủ̉ dup̣ng IDE Visual Studio Toàn Project gồm Source Code file liên quan chứa thư mup̣c China Chess gửủ̉i kèm với báo cáo Để sửủ̉ dup̣ng chạy file ChineseChess.jar 34 CHƯƠNG : KẾT LUẬN 3.1 Các vấn đề khó khăn cách thức giải Mặc dùầ̀ đãã̃ áp dup̣ng thuật tốn tìm kiếm Minimax AlphaBeta vào để giải tốn, nhiên q trình làm việc nhóm đãã̃ gặp nhiều khó khăn; từầ̀ việc nghiên cứu hiểu giải thuật MiniMax, AlphaBeta đến việc ứng dup̣ng vào tốn cup̣ thể Nhóm đãã̃ cùầ̀ng nghiên cứu tìm hiểu kết hợp với nguồn tài liệu từầ̀ internet để áp dup̣ng vào chương trình Bên cạnh đó, kinh nghiệm lập trình hướng đối tượng thành viên nhóm còầ̀n có chênh lệch, nên việc thống công việc đầầ̀u còầ̀n khó khăn Trong q trình thực đề tài nhóm em đãã̃ nhận giúú́p đỡã̃ tận tình củủ̉a bạn cùầ̀ng lớp, thầầ̀y cô khoa đặc biệt thầầ̀y Phạm Đức Hồng giúú́p em hoàn thành tốt báo cáo này.Vì kiến thức vẫã̃n chưa nắm vực cùầ̀ng kinh nghiệm thực tế còầ̀n chưa nhiều nên báo cáo khơng tránh khỏủ̉i sai sót, mong giúú́p đỡã̃ góp ý từầ̀ thầầ̀y Nhóm em xin chân thành cảm ơn! 3.2 Đánh giá chương trình Chương trình mơ phỏủ̉ng thành cơng thuật tốn tìm kiếm MiniMax phương pháp cắt tỉa AlphaBeta Tuy nhiên chương trình dừầ̀ng lại mup̣c đích học tập nghiên cứu, giao diện chưa thân thiện với ngườầ̀i sửủ̉ dup̣ng 3.3 Hướng phát triển Mặc dùầ̀ bước đầầ̀u đãã̃ ứng dup̣ng nhữã̃ng thuật tốn tìm kiếm với tri thức bổ sung vào toán cup̣ thể, song chương trình mơ phỏủ̉ng vẫã̃n chưa thực hồn thiện mức độ thờầ̀i gian cũã̃ng chất lượng đánh giá tối ưu củủ̉a chương trình từầ̀ng nước củủ̉a quân cờầ̀, nên nhóm chúú́ng em sẽã̃ vẫã̃n tiếp tup̣c hồn thiện chương trình, tối ưu thuật tốn để giúú́p chương trình phổ biến rộng rãã̃i đến ngườầ̀i dùầ̀ng… tương lai sẽã̃ cố gắng phát triển nhiều thiết bịp̣ ngồi máy tính, thiết bịp̣ smart phone, tablet… 35 TÀÀ̀I LIỆU THAM KHẢO Trong trình xây dựng chương trình nhóm đãã̃ sửủ̉ dup̣ng tài liệu tham khảo sau: - Sách “Thuật toán chơi cờầ̀” củủ̉a Phạm Hồng Nguyên - Tham khảo code củủ̉a số nguồn Internet - Tài liệu mơn nhập mơn trí tuệ nhân tạo 36 ... vấn đề CHƯƠNG 1: THUẬT TOÁN MINIMAX VÀÀ̀ CẮT TỈA ALPHA 1.1 Đặt ý tưởng 1.2 Thuật toán MiniMax AlphaBeta 1.2.1 Thuật toán MiniMax 1.2.2 Thuật tốn cắt tỉa AlphaBeta... giai thuât? ?Minimax 1.2 Thuật toán MiniMax AlphaBeta 1.2.1 Thuật toán MiniMax 1.2.1.1 Mơ tả Giả sửủ̉ chúú́ng ta có phân tích cờầ̀ áp dup̣ng tất luật, phương pháp đánh cờầ̀ khác vào từầ̀ng... độ sâu trò chơi bị hạn chế nhiều Ta cần có thêm cải tiến để cải thiện tình hình 1.2.2 Thuật tốn cắt tỉa AlphaBeta 1.2.2.1 Mô tả Thủủ̉ tup̣c AlphaBeta cải tiến thuật toán Minimax nhằm tỉa bớt