Một số thuật toán trong trò chơi đối kháng và xây dựng game cờ caro

58 2.1K 3
Một số thuật toán trong trò chơi đối kháng và xây dựng game cờ caro

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN **************** NGUYỄN THỊ MAI MỘT SỐ THUẬT TOÁN TRONG TRÒ CHƠI ĐỐI KHÁNG VÀ XÂY DỰNG GAME CỜ CARO KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC Chuyên ngành: Tin học HÀ NỘI – 2013 TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN **************** NGUYỄN THỊ MAI MỘT SỐ THUẬT TOÁN TRONG TRÒ CHƠI ĐỐI KHÁNG VÀ XÂY DỰNG GAME CỜ CARO KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC Chuyên ngành: Tin học Người hướng dẫn khoa học TH.S LƯU THỊ BÍCH HƯƠNG HÀ NỘI – 2013 LỜI CẢM ƠN Trong suốt trình học tập làm khóa luận, em nhận giúp đỡ, tạo điều kiện thầy, cô giáo khoa Công nghệ thông tin Bên cạnh giúp đỡ nhiều người thân, bạn bè để em có kết ngày hôm Trước hết em xin tỏ lòng kính trọng cảm ơn cô giáo Th.S Lưu Thị Bích Hương, cô tận tình bảo, hướng dẫn cho em hoàn thành khóa luận Xin cảm ơn thầy, cô giáo khoa Công nghệ thông tin – trường Đại học sư phạm Hà Nội 2, bạn lớp K35 – Tin học tận tình giúp đỡ, giới thiệu tài liệu, sách tham khảo để khóa luận hoàn thành hạn Cuối lòng biết ơn đến quan tâm, chăm sóc tạo điều kiện gia đình để tập trung vào việc học tập hoàn thành khóa luận Do thời gian thực không nhiều nên khóa luận không tránh khỏi thiếu sót Rất mong nhận đóng góp thầy cô giáo bạn để khóa luận hoàn thiện Xin chân thành cảm ơn! Hà Nội, tháng năm 2013 Sinh viên NGUYỄN THỊ MAI -1- LỜI CAM ĐOAN Tên em là: NGUYỄN THỊ MAI Sinh viên lớp: K35 – Tin học, khoa Công nghệ thông tin, trường Đại học sư phạm Hà Nội Em xin cam đoan: Đề tài: “Một số thuật toán trò chơi đối kháng xây dựng game cờ caro” nghiên cứu riêng em, hướng dẫn cô giáo Th.S Lưu Thị Bích Hương Khóa luận hoàn toàn không chép tác giả khác Nếu sai em xin hoàn toàn chịu trách nhiệm Hà Nội, tháng năm 2013 Người cam đoan NGUYỄN THỊ MAI -2- MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC HÌNH VẼ MỞ ĐẦU CHƯƠNG 1: TỔNG QUAN VỀ CÁC VẤN ĐỀ TÌM KIẾM 1.1 Bài toán tìm kiếm không gian trạng thái 1.1.1.Bài toán tìm kiếm 1.1.2.Không gian tìm kiếm 11 1.2 Các kỹ thuật tìm kiếm 15 1.2.1.Tìm kiếm thông tin 15 1.2.2.Tìm kiếm có thông tin 18 1.2.3.Tìm kiếm đối kháng 19 CHƯƠNG 2: THUẬT TOÁN TÌM KIẾM MINIMAX VÀ ALPHA – BETA 24 2.1 Thuật toán Minimax 24 2.1.1.Ý tưởng 24 2.1.2.Thuật toán 29 2.1.3.Áp dụng thuật toán Minimax đến độ sâu lớp cố định Kuretoer 35 2.1.4.Đánh giá 37 2.2 Thuật toán Alpha - beta 38 2.2.1.Ý tưởng 38 2.2.2.Thuật toán 39 2.2.3.Đánh giá 42 2.3 So sánh hai thuật toán 46 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG 48 3.1 Phát biểu toán 48 3.2 Giải toán 48 -3- 3.2.1.Thuật toán sinh nước 48 3.2.2.Hàm lượng giá cờ 51 3.3 Cài đặt chương trình 53 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 54 TÀI LIỆU THAM KHẢO 56 -4- DANH MỤC HÌNH VẼ Hình 1.1: Mô hình chung vấn đề-bài toán 12 Hình 1.2: Trạng thái ban đầu trạng thái kết thúc toán số 14 Hình 1.3: Cây trò chơi 21 Hình 1.4: Cây tìm kiếm bùng nổ tổ hợp 22 Hình 2.1: Một phần trò chơi trò chơi Tic-tac-toe 26 Hình 2.2: Không gian trạng thái trò chơi Nim 28 Hình 2.3: Minh họa chiến lược chơi cờ người lẫn máy 30 Hình 2.4: Minimax không gian trạng thái giả 36 Hình 2.5: Minimax hai lớp áp dụng vào nước mở đầu trò chơi Tic-tac-toe 36 Hình 2.6: Không gian trạng thái trò chơi Nim 39 Hình 2.7: Minh họa giải thuật Alpha-beta 40 Hình 2.8: Một trò chơi có độ sâu hệ số nhánh 44 Hình 2.9: Khảo sát bùng nổ tổ hợp 47 -5- MỞ ĐẦU Lí chọn đề tài Lý thuyết trò chơi thường coi nhánh toán học ứng dụng kinh tế học ứng dụng nhằm nghiên cứu tình bên tham gia trò chơi áp dụng chiến lược định nhằm tối ưu hóa kết nhận Ban đầu lý thuyết trò chơi phát triển công cụ để nghiên cứu hành vi kinh tế học, ngày lý thuyết sử dụng nhiều ngành khoa học Sinh học, Triết học, Chính trị học… Đặc biệt lý thuyết trò chơi thu hút ý nhà Khoa học máy tính ứng dụng Trí tuệ nhân tạo Điều khiển học Trí tuệ nhân tạo vận dụng lý thuyết trò chơi để nghiên cứu trò chơi đối kháng thiết kế chương trình chơi cờ Người Máy tính Do bùng nổ tổ hợp lớn trò chơi mà người máy (và không bao giờ) tìm kiếm vét cạn (hết khả năng) Do phương pháp tìm kiếm tìm kiếm đến độ sâu giới hạn chọn nước dẫn đến cờ có lợi cho Do phải tính khả chống trả đối phương nên không dùng thuật toán tìm kiếm thông thường mà phải dùng thuật toán tìm kiếm riêng cho trò chơi, thuật toán Alpha - Beta Nhiều tình thực tế đặc biệt lĩnh vực Kinh tế, Chính trị nhìn nhận trò chơi đối kháng Do việc nghiên cứu chiến lược tìm kiếm nước cho dạng trò chơi mang lại ý nghĩa thực tiễn định Xuất phát từ tính thực tiễn thiết thực em xin chọn đề tài: “Một số thuật toán trò chơi đối kháng xây dựng game cờ caro” -6- Mục đích nghiên cứu Mục đích nghiên cứu đề tài tìm hiểu hai thuật toán Minimax Alpha – beta, áp dụng thuật toán Alpha – beta để xây dựng game caro người máy tính Nhiệm vụ - Nghiên cứu vấn đề tìm kiếm - Nghiên cứu tìm hiểu thuật toán Minimax thuật toán cải tiến Alpha - beta - Tìm hiều ngôn ngữ lập trình Java để tiến hành cài đặt game cờ caro - Xây dựng game cờ caro Phương pháp nghiên cứu a Phương pháp nghiên cứu lý luận Nghiên cứu qua việc đọc sách, báo tài liệu liên quan nhằm xây dựng sở lý thuyết đề tài biện pháp cần thiết để giải vấn đề đề tài b Phương pháp chuyên gia Tham khảo ý kiến chuyên gia để thiết kế chương trình phù hợp với yêu cầu thực tiễn Nội dung xử lý nhanh đáp ứng yêu cầu ngày cao người sử dụng c Phương pháp thực nghiệm Thông qua quan sát thực tế, yêu cầu sở, lý luận nghiên cứu kết đạt qua phương pháp Phạm vi nghiên cứu Khóa luận tập trung nghiên cứu hai thuật toán trò chơi đối kháng: thuật toán Minimax thuật toán Alpha – beta Đồng thời tìm hiểu ngôn ngữ lập trình Java để xây dựng chương trình minh họa lĩnh vực trò chơi đối kháng game cờ caro -7- Giả thuyết khoa học Nếu đề tài “Một số thuật toán trò chơi đối kháng xây dựng game cờ caro” nghiên cứu góp phần làm sáng tỏ lý thuyết trò chơi đối kháng tạo sở để phát triển trò chơi khác Cấu trúc khóa luận Ngoài phần mở đầu phần kết luận, khóa luận tổ chức sau: - Chương trình bày cách tổng quan vấn đề tìm kiếm: toán tìm kiếm, biểu diễn vấn đề không gian trạng thái kỹ thuật tìm kiếm - Chương trình bày thuật toán tìm kiếm Minimax thuật toán cải tiến Alpha-beta áp dụng cho trò chơi đối kháng Mỗi thuật toán trình bày gồm nội dung: ý tưởng, thủ tục thực thuật toán đánh giá, so sánh hai thuật toán - Chương trình bày ứng dụng thuật toán tìm kiếm Alpha - beta áp dụng cho game cờ caro -8- So với thuật toán Minimax thuật toán AlphaBeta đưa thêm hai biến alpha, beta làm hai mức ngưỡng Ta thấy best >= beta thuật toán không thực tiếp vòng lặp, có nghĩa không chịu mở rộng tiếp nhánh lại Các nhánh bị cắt bỏ ta tiết kiệm thời gian Việc cắt bỏ hoàn toàn an toàn với lí ta xét Ta thấy lần hàm gọi có tham số beta dùng để so sánh cắt bỏ, tham số alpha không dùng Tuy nhiên áp dụng thuật toán cho ta hoán vị hai giá trị alpha, beta cho (và đảo dấu), alpha có tác dụng độ sâu sau, độ sâu sau lại đến lượt beta Nói cách khác, giá trị ảnh hưởng đến người chơi cực đại, giá trị lại ảnh hưởng đến người chơi cực tiểu Chúng ngưỡng nước chấp nhận không chấp nhận Những nước cần quan tâm phải nằm lọt hai giá trị Dần dần khoảng cách hai giá trị alpha beta ngày thu hẹp dẫn đến nhánh có giá trị nằm khoảng nhanh chóng bị cắt bỏ: miền “tồi tệ” (cắt bỏ) miền “tồi tệ” (cắt bỏ) Miền xem xét alphaa beta Alpha, beta giống hai lưỡi dao dùng để cắt bỏ lớp vỏ dầy Hai lưỡi dao thu hẹp Lượng cắt bỏ phụ thuộc vào tốc độ thu hẹp, thu hẹp nhanh cắt bỏ nhiều 2.2.3 Đánh giá Hiệu việc cắt nhánh Alpha-beta phụ thuộc nhiều vào thứ tự nước thực Nếu nước thực có thứ tự ngẫu nhiên tổng số nút thực khoảng O(b3d/4) Với b độ rộng (hệ số phân nhánh trung bình con), d độ sâu - 42 - Trong điều kiện lí tưởng, thuật toán Alpha-beta phải xét số nút theo công thức: d 2 b -1 b d 1 với d chẵn d + b -1 với d lẻ Như vậy, trường hợp tốt thuật toán Alpha-beta cần thực khoảng O(bd/2) nút để chọn nước tốt nhất, thay O(bd) Hệ số phân nhánh hiệu trở thành b thay b thuật toán Minimax Thuật toán Alpha-beta nói chung giúp tiết kiệm nhiều thời gian so với Minimax mà đảm bảo kết tìm kiếm xác Tuy nhiên lượng tiết kiệm không ổn định - phụ thuộc vào số nút mà cắt bỏ Trong trường hợp xấu thuật toán không cắt nhánh phải xét số nút thuật toán Minimax Cần phải đẩy mạnh việc cắt bỏ nhờ đẩy nhanh thu hẹp cửa sổ tìm kiếm Alpha-beta Cửa sổ thu hẹp bước gặp giá trị tốt giá trị cũ Khi gặp giá trị tốt cửa sổ thu hẹp Do sớm gặp giá trị tốt cửa sổ chóng thu hẹp Như phải cho nút xếp theo trật tự từ cao xuống thấp Trật tự tốt thuật toán chạy nhanh nhiêu (các công thức số nút phải lượng giá điều kiện lí tưởng tính với trật tự tốt nhất) - 43 - Ví dụ xét xem thuật toán Alpha-beta hoạt động trò chơi sau:  16  31 = 39 8 = 15 8 =8   18  10 20  12  = 22  25 = 14  27 Kết tìm kiếm nước  23 = 30  33  35  29 =3 37  38 1 2 16 4 11 13 17 19 21 24 26 28 32 34 36 Hình 2.8: Một trò chơi có độ sâu hệ số nhánh Số hình chữ nhật cho biết thứ tự đưa kết luận Chú ý có tất 16 đánh giá tĩnh thực (các nút đen) 27 không dùng thuật toán Alpha-beta Nhánh tốt cho người chơi cực đại nhánh Các thứ tự kết luận (các số bên trái) đưa sau: 1-2: Tìm kiếm xuống theo nhánh trái Ở giá trị tĩnh thu Giá trị người chơi cực đại phép chọn ba giá trị nhánh đảm bảo kết thu Điều lưu ý bước ghi lại 3-5: Để chắn điểm cao 8, người chơi cực đại phải xét hai cờ lại thu giá trị Do đến kết luận xác điểm cao đạt 6: Leo lên tầng Đây nước người chơi cực tiểu Không hi vọng đối thủ cho người chơi cực đại nhiều điểm nên tạm kết luận mức đạt nhiều điểm - 44 - 7-8: Để xem người chơi cực tiểu lựa chọn tốt (và tồi tệ cho người chơi cực đại) phải xem xét hai nước lại Nước lại dẫn đến giá trị lượng giá tĩnh > Như nhánh tồi tệ cho người chơi cực tiểu Đến việc cắt bỏ thực người chơi cực đại với tới điểm có sẵn lựa chọn thấp cho đối thủ (là 8) Điều dẫn đến không cần thiết phải xét hai nút lại - đằng nhánh đủ tồi tệ người chơi cực tiểu không chọn để 9-14: Người chơi cực tiểu cần phải khảo sát tiếp lựa chọn cuối Cách làm tương tự phần Ở phải lượng giá ba nút kết luận cuối đưa người chơi cực đại giỏi đạt điểm 15: Như nhờ việc khảo sát nhánh bên phải người chơi cực tiểu thấy chọn theo nhánh người chơi cực đại có điểm thay cho 16: Bây kết luận mức Mức người chơi cực đại Anh ta thấy chọn theo nhánh trái điểm Như chắn điểm Để xem liệu đạt điểm cao hay không cần phải xem xét hai nhánh lại 17-30: Tương tự phần trên, kết luận nhánh mang lại cho người chơi cực đại điểm 31: Cũng tương tự kết luận 16, kết luận khả quan người chơi cực đại cầm điểm cao 32-38: Kết luận nhanh bên phải cho "thu hoạch" nhiều điểm - điểm số thuật toán không xem xét trường hợp lại Do tiết kiệm nút không cần phải lượng giá sinh nước cho hai trường hợp 39: Kết luận cuối điểm cao mà người chơi cực đại thu điểm nhờ chọn theo nhánh - 45 - 2.3 So sánh hai thuật toán Dưới bảng so sánh số nút phải xét hai thuật toán Minimax Alpha-beta Minimax Độ sâu AlphaBeta Số lần Số nút tăng 40 1600 Số nút Tỉ lệ số nút Số lần Minimax/Alpha- tăng beta 40 40 79 1.9 20 64000 40 1852 23.2 34 2560000 40 3199 1.7 800 102400000 40 74118 23.2 1381 4096000000 40 127999 1.7 32000 163840000000 40 2964770 23.2 55262 6553600000000 40 5120000 1.7 1280000 Với b = 40 d = ta có số nút phải xét 2x402 - = 3199 Như điều kiện lí tưởng số nút phải xét nhờ Alpha-beta (chỉ khoảng nghìn nút) thuật toán Minimax (hơn 2,5 triệu nút) 2560000/ 3199 khoảng 800 lần Còn với b = 40 d = có số nút phải xét 403 + 40(5/2) - = 64000+10119-1 = 74118 Số nút phải xét nhờ Alpha-beta thuật toán Minimax (hơn 102 triệu nút) 102400000/74118 = 1382 lần Nhận xét: - Số lần tăng số nút tăng độ sâu Minimax hệ số phân nhánh b, trường hợp 40 Số lần tăng Alpha-beta nhiều: cỡ 1.7 lần tăng từ d lẻ sang d chẵn 23.2 lần từ d chẵn sang lẻ, trung bình tăng khoảng lần tăng d - Số nút Alpha-beta tăng chậm nhiều lần so với Minimax Tỉ số nút phải xét hai giải thuật cao d lớn - 46 - Công thức tính số nút cho thấy số nút phải xét dùng Alpha-beta nhiều so với Minimax hàm số mũ dẫn tới bùng nổ tổ hợp Thuật toán Alpha-beta hoàn toàn không chống bùng nổ tổ hợp mà làm giảm tốc độ bùng nổ tổ hợp Tuy thực tế số nút phải xét (lượng giá) thường nhiều điều kiện lí tưởng đủ để tiết kiệm nhiều thời gian Trong khoảng thời gian, thuật toán Alpha-beta tìm đến độ sâu gấp hai lần độ sâu tìm kiếm Minimax Hình sau đồ thị so sánh hai thuật toán Hình 2.9: Khảo sát bùng nổ tổ hợp Thuật toán Alpha-beta làm giảm bùng nổ tổ hợp không chống Hệ số phân nhánh đồ thị 40 Tóm lại bùng nổ tổ hợp lớn trò chơi mà hai người chơi (và không bao giờ) tìm kiếm vét cạn (hết khả năng) Do phương pháp tìm kiếm tìm kiếm đến độ sâu giới hạn chọn nước dẫn đến cờ có lợi cho Do phải tính khả chống trả đối phương nên ta không dùng thuật toán tìm kiếm thông thường Phải dùng thuật toán tìm kiếm riêng cho trò chơi Đó thuật toán Minimax cải tiến thuật toán Alpha-beta Tuy hai thuật toán không tránh bùng nổ tổ hợp thuật toán Alpha-beta làm chậm bùng nổ tổ hợp nên dùng nhiều trò chơi cờ - 47 - CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG 3.1 Phát biểu toán Bài toán game cờ caro phát biểu sau: Xây dựng bàn cờ có kẻ ô vuông với kích thước 20x20, có quân cờ ký hiệu X, O Người chơi máy đánh quân cờ, người thắng người quân cờ kiểu (trên hàng ngang, hàng dọc, hàng chéo) Hai bên hòa bàn cờ hết chỗ đánh mà chưa phân thắng bại 3.2 Giải toán 3.2.1 Thuật toán sinh nước Thuật toán sinh nước ảnh hưởng nhiều đến độ phức tạp toán Nếu nước sinh nhiều độ phân nhánh trò chơi lớn độ phức tạp lớn Hai cách tiếp cận việc sinh nước đi: cách sinh nước đơn giản, sinh nước nhờ cho điểm ô a Cách sinh nước đơn giản Một ý tưởng sinh nước đơn giản game caro là: đánh vào ô trống Nhưng ô trống có nhiều khả dẫn tới cờ tốt, mà ô mà cạnh có quân cờ có nhiều khả đưa ta đến tốt Chính ta chọn ô trống mà cạnh có cờ để sinh nước - 48 - Ưu điểm: đơn giản, dễ cài đặt Nhược điểm: độ phân nhánh tìm kiếm lớn không gian tìm kiếm lớn hạn chế độ sâu tìm kiếm b Sinh nước nhờ cho điểm ô Nhằm hạn chế nhược điểm cách thứ nhất, nghĩ đến thuật toán cho điểm ô cờ qua sinh nước từ số ô có điểm cao Thuật toán cho điểm ô:  Ý tưởng chung: - Xét phương dọc, ngang, chéo - Trên phương xét tổ hợp ô liên tiếp chứa ô cần cho điểm - Với tổ hợp dược vào trạng thái tổ hợp + lượt (đến lượt người hay máy) + mảng công phòng thủ để tính điểm cho ô Cộng dồn điểm lại để điểm cuối  Giới thiệu chi tiết cách cho điểm ô tổ hợp ô liên tiếp - Giới thiệu mảng tấn, mảng công phòng thủ: Mảng công C = {0, 2, 28, 256, 2308}; Mảng thủ: T = {0, 1, 9, 85, 769}; - Nếu ô liên tiếp chứa lộn xộn ô phát triển thành nước chiến thắng - Nếu ô chứa X O ta xét trường hợp sau: - 49 - Bước 1: Xem xét công hay thủ Nếu ô chứa X && đến lượt X công Nếu ô chứa O && đến lượt O công Nếu ô chứa X && đến lượt O thủ Nếu ô chứa O && đến lượt X thủ Bước 2: đếm số lượng quân ô Bước 3: cho điểm ô nhờ giúp đỡ mảng công, mảng thủ Ví dụ: có tổ hợp ô hình vẽ: Lượt: X Bước 1: công Bước 2: số quân: Bước 3: cong ta dựa vào mảng công C = {0, 2, 28, 256, 2308} Số quân nên ta lấy C[1] = điểm ô trống Kết quả: Cũng tương tự với phòng thủ Sinh nước Khi cho điểm ô ta lấy số ô có điểm cao để sinh nước theo ô Đánh giá: - Ưu điểm: giảm độ phân nhánh tìm kiếm - Nhược điểm: tốn nhiều tài nguyên cho việc sinh nước - 50 - 3.2.2 Hàm lượng giá cờ Hàm lượng giá tính công thức: Tính Score nhờ bảng tập luật đây: Thế cờ liền liền không chặn đầu liền bị chặn đầu Score Demo Desciption Chiến 20000 thắng Cực kì 2000 nguy hiểm 490 Nguy hiểm 450 Nguy hiểm liền nhu không bị chặn đầu liền bị chặn đầu liền không bị chặn Bình 100 thường Bình 50 thường - 51 - Ví dụ: Cho cờ hình dưới: Xét O có trường hợp trùng với tập luật: 100 điểm 50 điểm Tổng: O 150 điểm Xét X có trường hợp trùng với luật: 450 điểm Tổng: X 450 điểm - 52 - 3.3 Cài đặt chương trình Giao diện chương trình: New máy trước New người trước Open Save - 53 - Undo Đồng hồ đếm ngươc KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Sau thời thực hiện, với nỗ lực thân hướng dẫn tận tình cô giáo Th.S Lưu Thị Bích Hương, em hoàn thành khóa luận xây dựng chương trình thử nghiệm thành công ngôn ngữ lập trình Java, Netbeans IDE 6.8 Dưới số kết mà em thu được: Đạt được: - Đã tìm hiểu cách tổng quan vấn đề tìm kiếm có phát biểu toán tìm kiếm giới thiệu kỹ thuật tìm kiếm tìm kiếm thông tin, tìm kiếm có thông tin tìm kiếm đối kháng - Đã tìm hiểu thuật toán tìm kiếm Minimax thuật toán Alpha-beta trò chơi đối kháng - Xây dựng chương trình đáp ứng chức game cờ caro người máy tính Trong đó, thuật toán cài đặt cho việc suy nghĩ máy tính Cụ thể chương trình xây dựng chức năng: máy trước, người trước, âm thanh,… Khuyết điểm: - Chưa cài đặt thuật toán sinh nước nhờ cho điểm ô trình bày mục 3.2.1 - Chưa có chế cho máy rút kinh nghiệm sau lần thất bại Hướng phát triển: - Trong thời gian tới em hy vọng toán phát triển hoàn chỉnh có giao diện đẹp mắt nhằm đáp ứng yêu cầu trò chơi giải trí Đồng thời toán phát triển với phương hướng tối ưu hóa hơn: cài đặt thuật toán - 54 - sinh nước nhờ cho điểm ô (mục 3.2.1), có chế cho máy rút kinh nghiệm sau lần thất bại - Chương trình game cờ caro tạo sở để phát triển trò chơi nói chung trò chơi đối kháng nói riêng Đặc biệt người nghĩ đến việc triển khai nghiên cứu ứng dụng kết lĩnh vực khác xã hội lĩnh vực kinh tế - 55 - TÀI LIỆU THAM KHẢO Tiếng việt [1] Nguyễn Đình Hóa (2004), Cấu trúc liệu Thuật giải, NXB ĐHQGHN [2] Đỗ Xuân Lôi (1998), Cấu trúc liệu giải thuật, NXB Khoa học kỹ thuật, Hà Nội [3] Nguyễn Đức Nghĩa - Nguyễn Tô Thành (1997), Toán rời rạc, NXB Giáo dục [4] Nguyễn Thanh Thủy (2007), Trí tuệ nhân tạo: Các phương pháp giải vấn đề kỹ thuật xử lý tri thức, NXB Khoa học kỹ thuật [5] Đỗ Trung Tuấn (1997), Trí tuệ nhân tạo, NXB Giáo dục [6] Đinh Mạnh Tường (2001), Cấu trúc liệu & Thuật toán, NXB Khoa học kĩ thuật, Hà nội [7] Đinh Mạnh Tường (2002), Trí tuệ nhân tạo, NXB Khoa học kỹ thuật, Hà Nội Tiếng anh [8] Jessica Billings (2008), The Minimax Algorithm, CS 330 [9] Jeroen W.T.Carolus (2006), Alpha-beta with Sibling Prediction Pruning in Chess, Faculteitder Natuurwetenschappen, Wiskundeen Informatica Universty of Amsterdam Netherlands [10] Michael A Goodrich (2007), Proof of the Minimax Theorem [11] Heylighen (1993), Zero sum games – Principia Cybernetica Web [12] R D Luce and H Raiffa (1957), Games and Decisions, John Wiley, New York [13] George Luger (2002), Artificial Intelligence: Structures and Strategies for Complex Problem Solving, Addison-Wesley Publisher - 56 - [...]... người chơi trong các trò chơi đối kháng Chơi cờ có thể xem như vấn đề tìm kiếm trong không gian trạng thái - 19 - a Trò chơi đối kháng Trong các trò chơi đấu trí như các trò chơi cờ Vua, cờ Tướng, cờ vây, cờ caro (go-moku), có một cây trò chơi bao gồm tất cả các nước đi có thể của cả hai đấu thủ và các cấu hình bàn cờ là kết quả của các nước đi đó Có thể tìm kiếm trên cây này để có được một chiến lược chơi. .. MIN) Thuật toán Alpha-beta là một cải tiến của thuật toán Minimax nhằm tỉa bớt nhánh của cây trò chơi, làm giảm số lượng nút phải sinh và lượng giá, do đó có thể tăng độ sâu của cây tìm kiếm - 23 - CHƯƠNG 2 THUẬT TOÁN TÌM KIẾM MINIMAX VÀ ALPHA – BETA 2.1 Thuật toán Minimax Xét một trò chơi đối kháng trong đó hai người thay phiên nhau đi nước của mình như cờ vua, cờ tướng, cờ carô, Trò chơi có một trạng... bài toán có một số giải thuật tìm kiếm thích hợp để giải quyết Chẳng hạn thuật toán Dijkstra, thuật toán Kruskal, giải thuật láng giềng gần nhất và giải thuật Prim Các thuật toán này có thể được coi là các mở rộng của các thuật toán tìm kiếm trên cây: tìm kiếm theo chiều sâu, tìm kiếm theo chiều rộng - 17 - Thuật toán Dijkstra là một thuật toán giải quyết bài toán đường đi ngắn nhất nguồn đơn trong một. .. việc tính toán trong một thời gian hạn định Các thuật toán được dử dụng trong trò chơi đối kháng: thuật toán Minimax, và thuật toán Alpha – beta Thuật toán Minimax là thuật toán giúp tìm ra nước đi tốt nhất, bằng cách đi ngược từ cuối trò chơi trở về đầu Tại mỗi bước, nó sẽ ước định rằng người MAX đang cố gắng tối đa hóa cơ hội thắng của MAX khi đến phiên MAX, còn ở nước đi kế tiếp thì người chơi MIN... cạnh mang trọng số âm Thuật toán này có thể tính toán tất cả các đường đi ngắn nhất từ một đỉnh xuất phát cho trước tới mọi đỉnh khác mà không làm tăng thời gian chạy Thuật toán Kruskal là thuật toán xây dựng cây bao trùm ngắn nhất bằng cách chọn thêm dần các cung vào cây Thuật toán Prim là thuật toán nhằm xây dựng cây bao trùm ngắn nhất Tư tưởng của thuật giải Prim là chọn đưa dần vào cây T các đỉnh... phát biểu bài toán tìm kiếm khác nhau Trong phần này xem xét một số phát biểu của bài toán tìm kiếm như sau: Trong lý thuyết tính toán, một bài toán tìm kiếm là một loại bài toán tính toán được biểu diễn bởi một quan hệ nhị phân Nếu R là một quan hệ nhị phân sao cho field(R)  Γ+ và T là một máy Turing, thì T tính hàm như sau: - Nếu mỗi x có một số giá trị y thỏa mãn R(x,y) thì T truy nhập vào với đầu... 14 - 1.2 Các kỹ thuật tìm kiếm cơ bản Có nhiều kỹ thuật tìm kiếm khác nhau để giải quyết các bài toán tìm kiếm Tuy nhiên với mỗi bài toán tùy theo đặc điểm, cách tổ chức dữ liệu có thể lựa chọn và áp dụng kỹ thuật phù hợp và hiệu quả Một số kỹ thuật tìm kiếm cơ bản: Tìm kiếm không có thông tin, tìm kiếm có thông tin và tìm kiếm đối kháng Trong đó, tập trung vào kỹ thuật tìm kiếm đối kháng để làm cơ... hòa, hoặc một bên thắng và bên kia thua b Cây trò chơi Các trạng thái bàn cờ khác nhau (hay còn gọi là một thế cờ, tình huống cờ) trong quá trình chơi có thể biểu diễn thành một cây tìm kiếm (được gọi là cây trò chơi - Hình 1.3) và tiến hành tìm kiếm trên cây để tìm được nước đi tốt nhất Cây trò chơi có các nút là các tình huống khác nhau của bàn cờ, các nhánh nối giữa các nút sẽ cho biết từ một tình... lược chơi hiệu quả Các trò chơi này còn gọi là các trò chơi đối kháng, diễn ra giữa hai đấu thủ Nói chung, các trò chơi đó đều có thể chuyển về một dạng bài 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ủ Trong trò chơi này phải tính đến mọi nước đi mà đối thủ có thể sử dụng Đặc điểm của các trò chơi trên như sau: - Có hai đấu thủ, mỗi người chỉ đi một nước khi tới lượt -... như nhau 2.1.1 Ý tưởng Hai đối thủ trong một trò chơi được gọi là MIN và MAX MAX đại diện cho đối thủ quyết giành thắng lợi hay cố gắng tối đa hóa ưu thế của mình Ngược lại MIN là đối thủ cố gắng tối thiểu hóa điểm số của MAX Giả thiết MIN cũng dùng cùng những thông tin như MAX Một trò chơi như vậy có thể được biểu diễn bởi một cây trò chơi Mỗi một nút của cây biểu diễn cho một trạng thái Nút gốc biểu ... hai thuật toán trò chơi đối kháng: thuật toán Minimax thuật toán Alpha – beta Đồng thời tìm hiểu ngôn ngữ lập trình Java để xây dựng chương trình minh họa lĩnh vực trò chơi đối kháng game cờ caro. .. thuyết khoa học Nếu đề tài Một số thuật toán trò chơi đối kháng xây dựng game cờ caro nghiên cứu góp phần làm sáng tỏ lý thuyết trò chơi đối kháng tạo sở để phát triển trò chơi khác Cấu trúc khóa... tính toán thời gian hạn định Các thuật toán dử dụng trò chơi đối kháng: thuật toán Minimax, thuật toán Alpha – beta Thuật toán Minimax thuật toán giúp tìm nước tốt nhất, cách ngược từ cuối trò chơi

Ngày đăng: 08/11/2015, 20:02

Từ khóa liên quan

Mục lục

  • LỜI CẢM ƠN

  • LỜI CAM ĐOAN

  • MỤC LỤC

  • DANH MỤC HÌNH VẼ 5

  • DANH MỤC HÌNH VẼ

  • MỞ ĐẦU

  • CHƯƠNG 1

  • TỔNG QUAN VỀ CÁC VẤN ĐỀ TÌM KIẾM

    • 1.1. Bài toán tìm kiếm và không gian trạng thái

      • 1.1.1. Bài toán tìm kiếm

      • 1.1.2. Không gian tìm kiếm

  • Hình 1.1: Mô hình chung của các vấn đề - bài toán.

  • Hình 1.2: Trạng thái ban đầu và trạng thái kết thúc của bài toán 8 số.

    • 1.2. Các kỹ thuật tìm kiếm cơ bản

      • 1.2.1. Tìm kiếm không có thông tin

      • 1.2.2. Tìm kiếm có thông tin

      • 1.2.3. Tìm kiếm đối kháng

  • Hình 1.3: Cây trò chơi.

  • Hình 1.4: Cây tìm kiếm và sự bùng nổ tổ hợp.

  • CHƯƠNG 2

  • THUẬT TOÁN TÌM KIẾM MINIMAX VÀ ALPHA – BETA

    • 2.1. Thuật toán Minimax

      • Xét một trò chơi đối kháng trong đó hai người thay phiên nhau đi nước của mình như cờ vua, cờ tướng, cờ carô,... Trò chơi có một trạng thái bắt đầu và mỗi nước đi sẽ biến đổi trạng thái hiện hành thành một trạng thái mới. Trò chơi sẽ kết thúc theo một quy định nào đó, theo đó thì cuộc chơi sẽ dẫn đến một trạng thái phản ánh có một người thắng cuộc hoặc một trạng thái mà cả hai đấu thủ không thể phát triển được nước đi của mình, ta gọi nó là trạng thái hòa cờ. Tìm cách phân tích xem từ một trạng thái nào đó sẽ dẫn đến đấu thủ nào sẽ thắng với điều kiện cả hai đấu thủ đều có trình độ như nhau.

      • 2.1.1. Ý tưởng

  • Hình 2.1: Một phần cây trò chơi trong trò chơi Tic-tac-toe.

  • Hình 2.2: Không gian trạng thái của trò chơi Nim.

    • 2.1.2. Thuật toán

    • Cả hai đấu thủ đều cố gắng đi như thế nào đó để đạt được điểm tuyệt đối lớn nhất. Người chơi cực đại (MAX) sẽ tìm những nước đi dẫn đến điểm của mình trở nên lớn hơn (hay cao nhất có thể được) hay điểm của đối thủ bớt âm hơn (nhỏ hơn về giá trị tuyệt đối). Đấu thủ còn lại người chơi cực tiểu (MIN), lại ra sức phản kháng để dẫn tới điểm âm của mình âm hơn hay điểm dương của đối thủ nhỏ đi (Hình 2.3).

  • Hình 2.3: Minh họa chiến lược chơi cờ của người lẫn máy.

    • 2.1.3. Áp dụng thuật toán Minimax đến độ sâu lớp cố định Kuretoer

    • Trong các cây trò chơi được tìm kiếm bằng mức hay lớp (ply), MAX và MIN luân phiên nhau chọn các nước đi. Mỗi nước đi của một đối thủ sẽ xác định một lớp mới trên cây. Các chương trình trò chơi nói chung đều dự tính trước một độ sâu lớp cố định (thường được xác định bằng các giới hạn về không gian hoặc thời gian của máy tính). Các trạng thái trên mức đó được đánh giá theo các heuristic và các giá trị này sẽ được truyền ngược lên bằng thủ tục Minimax, sau đó thuật toán tìm kiếm sẽ dùng các giá trị vừa nhận được để chọn lựa một nước trong số các nước đi kế tiếp. Bằng cách tối đa hóa cho các cha mẹ MAX và tối thiểu hóa cho các cha mẹ MIN, những giá trị này đi lùi theo đồ thị đến con của trạng thái hiện hành. Sau đó trạng thái hiện hành dùng chúng để tiến hành lựa chọn trong các con của nó.

  • Hình 2.4: Minimax đối với không gian trạng thái giả

  • Hình 2.5: Minimax hai lớp áp dụng vào nước đi mở đầu trò chơi Tic-tac-toe.

    • 2.2. Thuật toán Alpha - beta

      • 2.2.1. Ý tưởng

  • Hình 2.6: Thuật toán Alpha-beta cắt tỉa nhánh

    • Bây giờ, lại giả sử nút tiếp theo được lượng giá và cho kết quả là 1. Nếu đi vào nhánh này thì đối phương sẽ đảm bảo làm điểm của người chơi cực đại không thể vượt quá được giá trị 1 dù là các lượng giá của các nút khác cho kết quả như thế nào đi nữa. Do đó đến đây, nước đi tốt nhất là chọn nước đi bên trái với đảm bảo là ít nhất đạt được 2 điểm. Và do đó, hoàn toàn không cần thiết phải lượng giá nút còn lại.

    • 2.2.2. Thuật toán

    • 2.2.3. Đánh giá

  • Hình 2.8: Một cây trò chơi có độ sâu 3 và hệ số nhánh 3.

    • 2.3. So sánh hai thuật toán

  • Hình 2.9: Khảo sát sự bùng nổ tổ hợp.

  • CHƯƠNG 3

  • XÂY DỰNG CHƯƠNG TRÌNH ỨNG DỤNG

    • 3.1. Phát biểu bài toán

    • 3.2. Giải quyết bài toán

      • 3.2.1. Thuật toán sinh nước đi

      • Thuật toán sinh nước đi ảnh hưởng rất nhiều đến độ phức tạp của bài toán. Nếu nước sinh ra càng nhiều thì độ phân nhánh của cây trò chơi càng lớn và độ phức tạp càng lớn.

      • Hai cách tiếp cận trong việc sinh nước đi: cách sinh nước đi đơn giản, sinh nước đi nhờ cho điểm từng ô.

      • a. Cách sinh nước đi đơn giản

      • Một ý tưởng sinh nước đi đơn giản trong game caro là: đánh vào ô bất kì còn trống. Nhưng không phải ô trống nào cũng có nhiều khả năng dẫn tới một thế cờ tốt, mà chỉ những ô mà cạnh nó có ít nhất 1 quân cờ mới có nhiều khả năng đưa ta đến một thế cơ tốt.

      • Chính vì vậy ta chọn những ô trống mà cạnh nó đã có ít nhất 1 con cờ để sinh ra nước đi mới.

      • 

      • Ưu điểm: đơn giản, dễ cài đặt.

      • Nhược điểm: độ phân nhánh của cây tìm kiếm vẫn lớn thì không gian tìm kiếm lớn vì vậy sẽ hạn chế độ sâu tìm kiếm.

      • b. Sinh nước đi nhờ cho điểm từng ô

      • Nhằm hạn chế được nhược điểm của cách thứ nhất, nghĩ đến một thuật toán cho điểm từng ô cờ qua đó chỉ sinh nước đi từ một số ô có điểm cao.

      • Thuật toán cho điểm từng ô:

      •  Ý tưởng chung:

      • - Xét phương dọc, ngang, chéo.

      • - Trên mỗi phương xét các tổ hợp 5 ô liên tiếp chứa ô cần cho điểm.

      • - Với mỗi tổ hợp dược vào trạng thái của tổ hợp đó + lượt đi (đến lượt ai người hay máy) + 2 mảng tấn công và phòng thủ để tính điểm cho 5 ô. Cộng dồn các điểm này lại để được điểm cuối cùng.

      •  Giới thiệu chi tiết cách cho điểm các ô trong tổ hợp 5 ô liên tiếp

      • - Giới thiệu mảng tấn, mảng công phòng thủ:

      • Mảng công C = {0, 2, 28, 256, 2308};

      • Mảng thủ: T = {0, 1, 9, 85, 769};

      • - Nếu 5 ô liên tiếp chứa lộn xộn thì 5 ô này không thể phát triển thành một nước chiến thắng được.

      • - Nếu 5 ô chỉ chứa X hoặc O thì ta xét trường hợp sau:

      • Bước 1: Xem xét ở thế công hay thủ.

      • Nếu 5 ô chỉ chứa X && đến lượt X thì tấn công.

      • Nếu 5 ô chỉ chứa O && đến lượt O thì tấn công.

      • Nếu 5 ô chỉ chứa X && đến lượt O thì thế thủ.

      • Nếu 5 ô chỉ chứa O && đến lượt X thì thế thủ.

      • Bước 2: đếm số lượng quân trong 5 ô.

      • Bước 3: cho điểm từng ô nhờ sự giúp đỡ của mảng công, mảng thủ.

      • Lượt: X

      • Bước 1: đang ở thế công.

      • Bước 2: số quân: 1.

      • Bước 3: vì đang ở thế cong ta dựa vào mảng công C = {0, 2, 28, 256, 2308}. Số quân bằng 1 nên ta lấy C[1] = 2 để cho điểm các ô trống. Kết quả:

      • 

      • Cũng tương tự với thế phòng thủ.

      • Sinh nước đi.

      • Khi đã cho điểm được các ô ta sẽ chỉ lấy ra 1 số ô có điểm cao nhất để sinh nước đi theo các ô này.

      • Đánh giá:

      • - Ưu điểm: giảm độ phân nhánh của cây tìm kiếm.

      • - Nhược điểm: tốn nhiều tài nguyên cho việc sinh nước đi.

      • 3.2.2. Hàm lượng giá thế cờ

      • Hàm lượng giá được tính bằng công thức:

      • 

      • Tính Score nhờ bảng tập luật dưới đây:

      • Ví dụ: Cho một thế cờ như hình dưới:

      • 

      • Xét O có 2 trường hợp trùng với tập luật:

      •  100 điểm

      •  50 điểm

      • Tổng: O được 150 điểm.

      • Xét X có 1 trường hợp trùng với luật:

      •  450 điểm

      • Tổng: X được 450 điểm

      • 

    • 3.3. Cài đặt chương trình

    • Giao diện chính của chương trình:

    • 

  • KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

  • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan