Bên cạnh đl, chqng ta ngay cang đă ct ra những bai toán trong thực tế, nhằm giải quyết được các vấn đề, nhu cuu của con người, với một lượng thông tin, dữ liệu khổng lồ, cun phải đưa ra
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG CHUYÊN ĐỀ HỌC PHẦN
TRÍ TUỆ NHÂN TẠO
ĐỀ TI:
ÁP DỤNG THUẬT TOÁN MINIMAX ĐỂ TẠO GAME CỜ
VÂY
Sinh viên thực hiện : TRẦN ANH QUANG
: LÊ TUẤN LÂM : NGUYỄN VĂN ĐĂNG Giảng viên hướng dẫn : VŨ VĂN ĐỊNH
Ngành : CÔNG NGHỆ THÔNG TIN Chuyên ngành : HỆ THỐNG THƯƠNG MẠI
ĐIỆN TỬ
Trang 2Hà Nội, tháng 11 năm 2023
MỤC LỤ
C
LỜI CẢM ƠN 2
LỜI NÓI ĐẦU 4
CHƯƠNG 1: GIỚI THIỆU VỀ CỜ VÂY VÀ THUẬT TOÁN MINIMAX 1
1.1 Tổng quan về trò chơi Cờ Vây 1
1.1.1 Giới thiệu trò chơi 1
1.1.2 Các quy tắc của trò chơi 1
1.2 Một số khái niệm 2
1.2.1 Dạng trò chơi: 2
1.2.2 Cây trò chơi: 2
1.2.3 Vét cạn: 2
1.2.4 Chiến lược tìm kiếm 3
CHƯƠNG 2: GIỚI THIỆU VỀ THUẬT TOÁN MINIMAX 4
2.1 Lượng giá thế cờ : 4
2.2 Thuật toán Minimax 4
2.3 Hướng cải thiện việc tỉa nhánh của thuật toán AlphaBeta 8
CHƯƠNG 3: GIAO DIỆN TRÒ CHƠI CỜ VÂY 9
3.1 Đánh giá một thế cờ 9
3.1.1 Xử lí một nước đi "thử" 9
3.3 Triển khai trò chơi 10
KẾT LUẬN 12
TÀI LIỆU THAM KHẢO 13
Trang 3LỜI CẢM ƠN
Trong thời gian nghiên c`u va học tâ cp môn Nhâ cp môn Trí tuệ nhân tạo (với các ngôn ngữ lâ cp trình), cing với việc tìm hiểu va đọc các tai liệu va việc tìm hiểu thêm tai liệu học tâ cp trên internet em đj gă cp không ít khl khăn về việc xây dựng va thiết kế game CỜ VÂY sử dụng ngôn ngữ C# kiến th`c lâ cp trình hướng đối tượng Với sự giqp đr qus báu của các thuy cô giáo va các bạn nhlm em đj hoan thanh game va bai báo cáo môn học Xây dựng game CỜ VÂY Đồng thời em xin gửi lời cảm ơn đă cc biệt về sự hướng dwn va chỉ bảo nhiệt tình của thuy Vũ Văn Định đj tâ cn tình giqp đr em trong suất quá trình hoan thanh game cũng như bai báo cáo nay
Tuy nhiên, kinh nghiệm còn thiếu nên trong game cũng như bai báo cáo nay chắc chắn s{ không tránh kh|i những thiếu slt, hạn chế nhất định Những s kiến nhâ cn xét va glp s qus báu của thuy cô va các bạn la cơ s} để em học h|i thêm va hoan thiện thêm kiến th`c va củng cố thêm kinh nghiệm của bản thân mình Em rất mong nhâ cn được sự nhâ cn xét va glp s t• thuy cô va các bạn
Mă cc di đj rất nỗ lực va cố gắng nhưng chắc chắn rằng đề tai vwn còn nhiều thiếu slt, em mong s{ nhâ cn đuợc sự glp s, phê bình của các thuy cô, va các bạn để
đề tai hoan thiện hơn
Trang 4LỜI NÓI ĐẦU
Các chiến lược tìm kiếm cơ bản chỉ sử dụng các thông tin chung của bai toán,
nl không phi hợp với nhiều bai toán thực tế trong cuộc sống vì chqng đòi h|i quá nhiều về thời gian va bộ nhớ Bên cạnh đl, chqng ta ngay cang đă ct ra những bai toán trong thực tế, nhằm giải quyết được các vấn đề, nhu cuu của con người, với một lượng thông tin, dữ liệu khổng lồ, cun phải đưa ra những chiến lượng giải quyết tối ưu, thông mình để đạt hiệu quả hơn, vâ cy nên cun nghiên c`u, thiết lâ cp va cải thiện những chiến lược tìm kiếm với tri th`c bổ sung sử dụng các tri th`c cụ thể của bai toán
Trong báo cáo nay, nhlm sinh viên chqng em đj chọn ra một trong các giải thuâ ct tìm kiếm để mô ph|ng vao một bai toán thực tế đl la Cờ vây, một trò chơi rất quen thuộc với chqng ta Với mục tiêu đă ct la cl thể hiểu va vâ cn dụng được giải thuâ ct tìm kiếm tri th`c, va củng cố được kĩ năng lâ cp trình để tạo nên bản demo hoan chỉnh
Quá trình thực hiện báo cáo gă cp nhiều khl khăn vì ngôn ngữ lâ cp trình mới, kinh nghiệm thực tế còn hạn chế, em mong s{ nhâ cn được sự glp s của thuy cô để
đề tai nay hoan thiện hơn
Trang 5CHƯƠNG 1: GIỚI THIỆU VỀ CỜ VÂY V THUẬT TOÁN MINIMAX 1.1 Tổng quan về trò chơi Cờ Vây
1.1.1 Giới thiệu trò chơi
Cờ vây la một trò chơi dạng chiến lược tr•u tượng cho hai người chơi, trong đl mục tiêu la bao vây nhiều ljnh thổ hơn đối thủ Trò chơi được phát minh } Trung Hoa thời cổ đại vao hơn 2.500 năm trước, va được coi la trò chơi bảng lâu đời nhất còn được tiếp tục chơi cho đến ngay hôm nay
Mặc di các quy tắc chơi tương đối đơn giản, nhưng về mặt chiến thuật, cờ vây lại thiên biến vạn hla vô cing ph`c tạp, thậm chí độ ph`c tạp còn cao hơn cả cờ vua Theo tính toán của các nha khoa học, số ván cờ cl thể cl của cờ vua la nhiều hơn
so với số nguyên tử trong phun vũ trụ quan sát được, va } cờ vây thì nl thậm chí còn nhiều hơn Cờ vây cl cả một ban cờ lớn hơn với nhiều phạm vi để chơi hơn va các ván đấu kéo dai hơn, va, tính trung bình, cl rất nhiều lựa chọn thay thế để xem xét trong mỗi nước đi Giới hạn dưới về số lượng vị trí nước đi hợp lệ trên ban cờ trong cờ vây được ước tính la 2 x 10170
1.1.2 Các quy tắc của trò chơi
Các quân cờ trong cờ vây cl tên gọi khác la "quân cờ đá" (stone) Một kì thủ - người chơi cờ - cum quân cờ trắng va người còn lại cum quân cờ đen Các kì thủ lun lượt đặt các quân cờ trên các nqt giao còn trống ("nqt" hay "điểm nqt" - point) của một ban cờ với một lưới các dòng kẻ kích thước 19×19 (mỗi bề la 18 ô vuông
va 19 giao điểm - nqt) Người mới chơi thường chơi với các ban cờ kích thước nh| hơn như 9×9 va 13×13, va các bằng ch`ng khảo cổ học cho thấy trò chơi đj được chơi trong những thế kỷ trước trên ban cờ cl lưới 17×17
Mục tiêu của cờ vây như nghĩa tên gọi của nl la bao vây một tổng diện tích lớn hơn
so với đối thủ
Sau khi được đặt trên ban, quân cờ không thể di chuyển, nhưng một quân cờ s{ được loại b| kh|i ban cờ khi "bị bắt" Việc bắt quân xảy ra khi một hoặc một nhlm quân cờ bị bao vây b}i những quân cờ của đối thủ } tất cả các điểm lân cận gun kề Trò chơi s{ diễn tiến cho đến khi cả hai người chơi đều không muốn thực hiện tiếp nước đi nao nữa; trò chơi không cl điều kiện kết thqc nao khác ngoai điều nay Khi một ván đấu kết thqc, ljnh thổ được tính cing với những quân cờ bị bắt
Trang 6va komi (số điểm thêm vao tổng điểm của người chơi cum quân trắng để tạo một lợi thế bi đắp cho việc bắt đuu ván cờ sau người còn lại - cum quân đen) để xác định người chiến thắng Ván đấu cũng cl thể được kết thqc ngay lập t`c khi một bên chịu nhận thua
1.2 Một số khái niệm
1.2.1 Dạng trò chơi:
Các trò chơi cl dạng như cờ Vua, cờ Tướng, cờ Vây, cờ Caro,… la những trò chơi đối kháng, diễn ra giữa hai đấu thủ Nli chung, các trò chơi nay đều cl thể chuyển
về một dạng bai 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 nay như sau:
Cl hai đấu thủ, mỗi người chỉ đi một nước khi tới lượt
Các đối thủ đều biết mọi thông tin về tình trạng trận đấu
Trận đấu không kéo dai vô tận, phải diễn ra hai hoa, hoặc một bên thắng va bên kia thua
1.2.2 Cây trò chơi:
Các trạng thái ban cờ khác nhau trong quá trình chơi cl thể biểu diễn thanh một cây tìm kiếm va ta s{ tiến hanh tìm kiếm trên cây để tìm được nước đi tốt nhất Ở cây nay, các nqt của cây la các tình huống khác nhau của ban cờ, các nhánh nối s{ cho
ta biết t• một tình huống cờ thế nay chuyển sang tình huống cờ như thế khác thông qua một nước đi đơn nao đl Các nước đi nay diễn ra theo cặp do hai đấu thủ lun lượt tiến hanh Độ sâu của cây trò chơi la số tung của cây
1.2.3 Vét cạn:
Thuật toán vét cạn cl thể hiểu đơn giản la sinh ra hết tất cả mọi khả năng cl thể xảy ra trong trò chơi Sau đl tiến hanh lựa chọn đánh giá trên t•ng khá năng, t• đl chọn ra phương án tối ưu nhất Trong cờ vây, nếu bạn áp dụng thuật toán nay để tính toán nước đi, kết quả trả về s{ rất chính xác Nếu vậy thì việc cho máy tính chơi cờ vây chẳng cl gì gọi la khl khăn
Tuy nhiên, may mắn thay cách lam nay không thể thực hiện được do một hiện tượng gọi la bing nổ tổ hợp Ví dụ nếu một thế cờ trung bình với khả năng đi được
16 nước khác nhau (ta gọi hệ số nhánh con tại mỗi nqt la b = 16) Như vậy, sau một
Trang 7tung ta s{ cl 16 nqt con, mỗi nqt cl thể cl 16 nqt con nữa Tổng số nqt con tại độ sâu th` hai la 16*16 = 16^2 C` như vậy } độ sâu d s{ cl b^d nqt
Thử lam một phép toán nh|, nếu giả sử độ sâu của cây la 100 (hệ số nhánh 16 va
độ sâu 100 đều la những con số nh| hơn con số thường gặp trong các trò chơi cờ),
áp dụng thuật toán vét cạn, ta phải duyệt 16^100 nhánh hay xấp xải 10^120 nhánh – một con số lớn khủng khiếp
Qua phân tích trên ta thấy không thể áp dụng hoan toan thuật toán vét cạn vao trò chơi được Để tạo ra một thuật toán đánh cờ vua tối ưu cho máy tính, chqng ta phải xác định được chiến lược tìm kiếm trong trò chơi rồi dựa vao đl xây dựng nên những thuật toán tối ưu cho máy tính
1.2.4 Chiến lược tìm kiếm
Chiến lược tìm kiếm: Một chiến lược thường được cả người lwn máy ding la phân tích thế cờ chỉ sau một số nước đi nao đl của cả hai bên Sau khi “nhìn xa” xem ban cớ cl những khả năng biến đổi như thế nao sau một số nước, ta s{ đánh giá độ tốt xấu của các thế cờ nhận được Tiếp theo, ta s{ chọn nước đi s{ dwn tới một thế
cờ tốt nhất trong đl số đl cl cân nhắc đến cách đi của cả hai bên (thường chqng ta xem như cả hai người đều đưa ra những lựa chọn tối ưu) Với máy thế cờ nay được đánh giá tối hơn thế cờ kia nhờ so sánh điểm của thế đl do bộ lượng giá đáp trả lại Lượng Giá Các Ô: Mỗi ô cờ được đánh giá một số điểm, thể hiện giá trị tương đối của nl trong cấu trqc ban cờ Ví dụ: Ô Trống trị giá 0 điểm, Ô Cl Đá trị giá t• 1 đến 5 điểm tiy thuộc vao vị trí va tính chiến lược của nl
Tiy Biến Theo Thế Cờ: Giá trị của một ô không chỉ phản ánh trên bảng điểm ma còn phụ thuộc vao thế cờ Ví dụ, một ô cing hang với các đá của đối thủ cl thể cl giá trị cao hơn so với một ô nằm giữa ban cờ
Chiến Lược Đặt Đá va Ưu Thế Chiến Lược: Người chơi cl thể xem xét giữa việc đặt đá } các vị trí chiến lược quan trọng va việc bảo vệ những ô cl giá trị
Chiến Lược Tìm Kiếm Hữu Hạn: Trong cờ vây, người chơi thường xét trước một
số hữu hạn các nước đi M`c độ sâu của tìm kiếm phụ thuộc vao kỹ năng của người chơi, nhưng thường la t• 2-4 nước đi
Tư Duy Chiến Thuật: Tối ưu hla việc xét nước đi giqp người chơi đưa ra chiến thuật linh hoạt, cl thể chq trọng vao việc chiếm lấy vị trí chiến lược va kiểm soát khu vực trên ban cờ
Trang 8CHƯƠNG 2: GIỚI THIỆU VỀ THUẬT TOÁN MINIMAX
2.1 Lượng giá thế cờ :
Giả sử chqng ta cl một bộ phân tích thế cờ cl thể áp dụng tât cả các luật, các
phương pháp đánh cờ khác nhau vao t•ng thế cờ va chuyển đổi chqng thanh một con số đại diện ( cho điểm thế cờ) Mặt khác, ta giả sử con số đl la dương khi áp dụng cho thế cờ của một đấu thủ (được gọi la người chơi cực đại – maximizer), va
la âm khi áp dụng cho đấu thủ bên kia (được gọi la người chơi cực tiểu –
minimizer) Quá trình tính toán điểm cho thế cờ được gọi la quá trình lượng giá tĩnh (static evaluation) Ham thực hiện việc tính toán được gọi la một bộ lượng giá tĩnh va giá trị nhận được gọi la điểm lượng giá tĩnh
2.2 Thuật toán Minimax
Trong quá trình chơi, cả hai đấu thủ đều cố gắng đi như thế nao đl để đạt điểm tuyệt đối lớn nhất Người chơi cực đại s{ tìm những nước đi dwn đến điểm của mình cao nhất cl thể (hay chính la đẩy điểm của người chơi cực tiểu bớt âm hơn) Trái lại, người chơi cực tiểu cố đi để đạt tới vị trí ma điểm của mình nh| nhất cl thể
T• đl ta hình thanh tư tư}ng thuật toán Minmax như sau: bắt đuu } một nqt (một thế cờ), ta thực hiện tất cả các nước cl thể đi, thăm toan bộ các nqt con của nl trong cây trò chơi Sau khi đj thăm toan bộ các nqt, kiểm tra xem hiện tại la lượt chơi của đấu thủ nao
Nếu đang la lượt chơi của đấu thủ maximizer, ta xét toan bộ các nqt con của nl, chọn ra nqt con cl giá trị lớn nhất
Nếu đang la lượt chơi của đấu thủ minimizer, ta xét toan bộ các nqt con của nl, chọn ra nqt con cl giá trị nh| nhất
Trang 9Cai đặt thuật toán cl thể biểu diễn như mj giả dưới đây:
Ta cl thể thấy cách cai đặt của thuật toán Minmax khá tương tự với cách cai đặt đệ quy quay lui, kết hợp với quy hoạch động trên một đoạn cây t• đl chọn ra cách đi tối ưu nhất
Cải tiến Alpha – Beta la một cải tiến t• thuật toán Minmax nhằm tỉa bớt nhánh cây của cây trò chơi t• đl lam giảm số lượng nqt phải sinh va thao tác lượng giá,
do đl cl thể tăng độ sâu tìm kiếm a thuật toán tr} nên hiệu quả hơn.Ta dễ dang nhận thấy: khi đến một nqt, thuật toán s{ xét hết toan bộ các nqt con của cây trò chơi bất chấp nqt đl la tốt hay xấu Chính điều nay đj lam cho Minmax chạy chậm
đi rất nhiều lun T• đây, ta hình thanh nên một cải tiến mới Cải tiến Alpha – Beta.
Để đơn giản, xét một ví dụ: Các số liệu lượng giá đj được cho như hình Cây nay cl độ sâu bằng 2 va hệ số phân nhánh bằng 2 Lượt chơi đuu tiên s{ la lượt chơi của người chơi cực tiểu
Trang 10Ở tung đuu tiên, người chơi cực tiểu phải đi nước sao cho đạt tới giá trị lượng giá nh| nhất Tìm kiếm } nhánh con trái trước tiên Khi xuống đến nqt con trái } tung hai (cụ thể la nqt A) bây giờ đến lượt chơi của người chơi cực đại, người chơi cực đại s{ tìm cách đi đến nqt con cl giá trị lớn nhất cl thể Vậy nên anh ta s{ chọn nqt
cl giá trị 4
Quay ngược lại về nqt } tung th` nhất Giá trị 4 s{ tạm thời được chấp nhận la giá trị nh| nhất cl thể đạt T`c la khi đạt đến nqt nay, giá trị nh| nhất cl thể thu được chắc chắn <= 4 Hay khi đánh đến nqt nay, người chơi cực tiểu cl thể đưa người chơi cực đại đến trạng thái ma giá trị lượng giá luôn <= 4 (*) Ta lưu trữ lại Bây giờ xét đến nqt B Đây la lượt của người chơi cực đại, anh ta phải xét lun lượt hai nqt con trái va phải:
Xét nqt con phải, anh ta đạt được giá trị 8 a Khi người chơi cực tiểu đưa người chơi cực đại vao trạng thái nqt B, anh ta cl thể đánh đến trạng thái nqt cl giá trị lượng giá >= 8(**)
T• (*) va (**) ta nhận thấy không cun phải xét tiếp nhánh đi xuống nqt cl giá trị
2 nữa Vì người chơi cực tiểu cũng không đi vao nqt B (đi vao nqt B la một nước đi không tối ưu, tạo điều kiện chiến thắng cho người chơi cực đại) Như vậy ta tiến hanh cắt b| nhánh đi xuống nqt B
Trang 11T• ví dụ trên, đqc kết ra s tư}ng của cải tiến Alpha Beta áp dụng vao trò chơi như sau:
Mỗi khi xem xét một nqt bất kỳ, nên kiểm tra các thông tin đj biết về các nqt cha, ông của nl Rất cl thể do cl đuy đủ thông tin t• cha, ông nên không cun phải lam bất c` việc gì cho nqt nay Cũng vậy, nguyên tắc nay cũng giqp chỉnh sửa hoặc xác định chính xác giá trị tại nqt cha, ông nl Để lam được việc nay ta sử dụng các tham số alpha va beta để lưu lại các thông tin theo dõi cun thiết Thủ tục alpha_beta được bắt đuu tại nqt gốc với giá trị alpha = âm vô cing va beta = dương vô cing Thủ tục s{ tự gọi đệ quy chính nl với khoảng cách giữa các giá trị alpha va beta ngay cang hẹp hơn
D i
tiết kiệm được nhiều thời gian hơn, nhưng cải tiến Alpha Beta không chống được bing
nổ tổ hợp ma chỉ lam giảm tốc độ bing nổ
Trang 122.3 Hướng cải thiện việc tỉa nhánh của thuật toán AlphaBeta
Thuật toán AlphaBeta nli chung giqp chqng ta tiết kiệm nhiều thời gian
so với Minimax ma vwn đảm bảo kết quả tìm kiếm chính xác Tuy nhiên lượng tiết kiệm nay không ổn định - phụ thuộc vao số nqt ma nl cắt b| Trong trường hợp xấu nhất thuật toán không cắt được một nhánh nao va phải xét số nqt đqng bằng Minimax Ta cun đẩy mạnh việc cắt b| nhờ đẩy nhanh sự thu hẹp của cửa
sổ tìm kiếm alpha - beta Cửa sổ nay được thu hẹp một bước khi gặp một giá trị mới tốt hơn giá trị cũ Khi gặp giá trị tốt nhất thì cửa sổ nay thu hẹp nhất Do đl nếu cang sớm gặp giá trị tốt nhất thì cửa sổ cang chlng thu hẹp Như vậy phải lam sao cho các nqt } lá được sắp xếp theo trật tự t• cao xuống thấp Trật tự nay cang tốt bao nhiêu thì thuật toán chạy cang nhanh bấy nhiêu (các công th`c về
số nqt phải lượng giá trong điều kiện lí tư}ng } trên tính được với trật tự la tốt nhất)