TÓM TẮT Cách mạng công nghiệp 4.0 (CMCN 4.0) đã , đang và sẽ diễn ra với tốc độ nhanh chóng. Tác động mạnh mẽ của nó làm thay đổi tất cả mọi mặt của đời sống xã hội con người, về cả vật chất lẫn tinh thần. Đây là thời điểm vô cùng thách thức và cũng đầy cơ hội cho đất nước và con người Việt Nam. Đặc biệt là ngành Khoa Học Và Kỹ Thuật Máy Tính, càng phải là ngọn cờ đi đầu để nghiên cứu và ứng dụng các thành tựu công nghệ của cuộc CMCN 4.0 vào đời sống trong mọi lĩnh vực của xã hội. Việc thành hay bại sẽ quyết định trực tiếp vào khả năng Việt Nam có thể sánh vai với các cường quốc Năm Châu hay không. Trí tuệ nhân tạo (AI) là một trong những lĩnh vực quan trọng nhất của cuộc CMCN 4.0. Con người đã có thể tạo ra được AI có khả năng đánh bại con người trong một số lĩnh vực. Một số ví dụ cụ thể là: • Ngày 06082018 đã đánh dấu một bước tiến lớn với ngành công nghệ AI của nhân loại, khi trí tuệ nhân tạo OpenAI của Elon Musk đã chính thức đánh bại, nói đúng hơn là “nghiền nát” 5 game thủ Dota 2 chuyên nghiệp gồm Fog, Merlini, Blitz, Capitalist và MoonMeander. • Ngày 2412019 Trí tuệ nhân tạo dựa trên DeepMind của Google được ra đời mang tên AlphaStar đã đánh bại 2 game thủ Starcraft II chuyên nghiệp TLO và MaNa với tỷ số cách biệt 101. Nhóm nảy sinh ý tưởng về việc áp dụng AI vào trong các game trí tuệ mang tính giải trí đang thịnh hành tại Việt Nam như: Cờ Tướng , Cờ Vua , Cờ Vây, Cờ Gánh… Sau khi xem xét kỹ lưỡng, nhóm quyết định chọn game Cờ Gánh làm đề tài nghiên cứu vì mức độ phổ biến, tính đơn giản của nó, dễ tiếp cận mọi người và đề tài nghiên cứu AI về game Cờ Gánh vẫn còn khá mới mẻ Nội dung báo cáo sẽ trình bày nghiên cứu các AI sử dụng giải thuật cơ bản đến các AI sử dụng những giải thuật nâng cao. Cụ thể là 2 loại AI: • MiniMax • Monte Carlo Tree Search Với mỗi loại AI sẽ có bảng đánh giá năng lực của từng loại. Và cuối cùng là tổng kết, so sánh, đánh giá cả 2. MỤC LỤC Phần 1 Tổng quan 7 Phát biểu vấn đề: 7 Mục tiêu đề tài nghiên cứu: 7 Phần 2 Cơ sở lý thuyết chung 8 1. Giới thiệu: 8 1.1. Board Game 8 1.2. Cờ Gánh 8 2. Luật chơi: 9 3. Lý thuyết: 11 3.1. Phân tích trò chơi 11 3.2. Không gian trạng thái của trò chơi 11 3.3. Hệ số phân nhánh 11 3.4. Mạng nơron nhân tạo (Neural Networks) 12 3.4.1. Mạng nơron nhân tạo (Neural Networks) là gì? 12 3.4.2. Một số kiểu Neural Networks 13 3.5. AI trong game Cờ Gánh 16 3.6. Mô hình thiết kế 16 3.7. Dòng điều khiển 17 Phần 3 Mô hình trí tuệ nhân tạo MiniMax 19 1. Cơ sở lý thuyết: 19 1.1. Hàm lượng giá 19 1.2. Hàm đánh giá tuyến tính có trọng số 20 1.3. Chọn các tham số 21 2. Hiện thực MiniMax: 21 Phần 4 Mô hình trí tuệ nhân tạo Monte Carlo Tree Search 26 1. Cơ sở lý thuyết: 26 1.1. Bước lựa chọn: 28 1.2. Bước mở rộng: 29 1.3. Bước mô phỏng: 30 1.4. Bước truyền ngược: 31 1.5. Lựa chọn bước di chuyển: 31 2. Hiện thực: 32 Phần 5: Thiết kế UI 34 1. Giao diện màn hình khởi động của Game: 34 2. Giao diện khi vào chơi Game: 35 3. Giao diện Setting Game: 36 Phần 6 Kiểm chứng và đánh giá giải thuật 37 Phần 7 Tổng kết 39 1. Đánh giá kết quả: 39 2. Đóng góp của luận văn: 39 3. Hướng phát triển: 39 3.1. Các cải tiến có thể được thêm vào MiniMax 40 3.2. Các cải tiến có thể được thêm vào MCTS 41 3.3. Một số hướng mở rộng trong tương lai: 42 DANH SÁCH HÌNH VẼ 43 DANH SÁCH BẢNG VÀ BIỂU ĐỒ 44 Tài liệu tham khảo 45 Phụ Chương 1: Giải thuật Minimax 47 Phụ Chương 2: Giải thuật MCTS 49
ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC PHÁT TRIỂN GAME CỜ GÁNH GVHD: Ths Vương Bá Thịnh TP HỒ CHÍ MÍNH, THÁNG 06/2019 LỜI CAM ĐOAN Nhóm báo cáo luận văn xin cam đoan rằng, ngoại trừ kết tham khảo từ cơng trình khác ghi rõ luận văn, nội dung trình bày luận văn chúng tơi thực chưa có nội dung nộp để lấy cấp trường khác TPHCM, ngày 12 tháng 04 năm 2019 LỜI CẢM ƠN Để hồn thành luận văn này, nhóm nghiên cứu phải trải qua trình đào tạo bản, kỹ lưỡng Thầy Cô Giảng Viên, Cán Bộ Khoa Khoa Học Kỹ Thuật Máy Tính, trường Đại Học Bách Khoa Thành Phố Hồ Chí Minh Hành trình trải qua suốt khóa học nhóm chúng em hành trình trải qua nhiều thử thách gian nan Đã có lúc Thầy Cô vô nghiêm khắc kỷ luật với hành vi sai trái thiếu hiểu biết chúng em Nhưng chúng em hiểu điều xuất phát từ quan tâm tình yêu thương Thầy Cơ Đây q vơ q báu để thành viên nhóm trưởng thành hơn, tích lũy nhiều kiến thức, kinh nghiệm cho đường tương lai Chúng em quên dẫn tận tình, động viên tình cảm ấm áp Thầy Cơ dành cho thành viên Cả nhóm khơng thể hồn thành khóa học khơng có điều Tất thành viên nhóm nghiên cứu chân thành cảm ơn quý Thầy Cơ dìu dắt chúng em suốt chặng đường vừa qua Nhóm nghiêm cứu vơ biết ơn Thầy Vương Bá Thịnh giảng dạy cho chúng em mơn có ý nghĩa quan trọng, làm tiền đề cho luận văn Trí tuệ nhận tạo Lập trình game Đồng thời Thầy người trực tiếp hướng dẫn nhóm hồn thành đề tài luận văn Cả nhóm xin hứa với q Thầy Cơ, sau trường chúng em công dân tử tế, có tri thức, có trình độ, vận dụng tất kiến thức tốt đẹp mà Thầy Cơ truyền dạy để góp phần xây dựng tổ quốc nói riêng giói nói chung ngày tốt đẹp Chúng em xin hứa! Nhóm nghiên cứu TĨM TẮT Cách mạng cơng nghiệp 4.0 (CMCN 4.0) , diễn với tốc độ nhanh chóng Tác động mạnh mẽ làm thay đổi tất mặt đời sống xã hội người, vật chất lẫn tinh thần Đây thời điểm vô thách thức đầy hội cho đất nước người Việt Nam Đặc biệt ngành Khoa Học Và Kỹ Thuật Máy Tính, phải cờ đầu để nghiên cứu ứng dụng thành tựu công nghệ CMCN 4.0 vào đời sống lĩnh vực xã hội Việc thành hay bại định trực tiếp vào khả Việt Nam sánh vai với cường quốc Năm Châu hay không Trí tuệ nhân tạo (AI) lĩnh vực quan trọng CMCN 4.0 Con người tạo AI có khả đánh bại người số lĩnh vực Một số ví dụ cụ thể là: • Ngày 06/08/2018 đánh dấu bước tiến lớn với ngành công nghệ AI nhân loại, trí tuệ nhân tạo OpenAI Elon Musk thức đánh bại, nói “nghiền nát” game thủ Dota chuyên nghiệp gồm Fog, Merlini, Blitz, Capitalist MoonMeander • Ngày 24/1/2019 Trí tuệ nhân tạo dựa DeepMind Google đời mang tên AlphaStar đánh bại game thủ Starcraft II chuyên nghiệp TLO MaNa với tỷ số cách biệt 10-1 Nhóm nảy sinh ý tưởng việc áp dụng AI vào game trí tuệ mang tính giải trí thịnh hành Việt Nam như: Cờ Tướng , Cờ Vua , Cờ Vây, Cờ Gánh… Sau xem xét kỹ lưỡng, nhóm định chọn game Cờ Gánh làm đề tài nghiên cứu mức độ phổ biến, tính đơn giản nó, dễ tiếp cận người đề tài nghiên cứu AI game Cờ Gánh mẻ Nội dung báo cáo trình bày nghiên cứu AI sử dụng giải thuật đến AI sử dụng giải thuật nâng cao Cụ thể loại AI: • MiniMax • Monte Carlo Tree Search Với loại AI có bảng đánh giá lực loại Và cuối tổng kết, so sánh, đánh giá MỤC LỤC Phần - Tổng quan Phát biểu vấn đề: Theo phát triển thời đại, nhu cầu người ngày nâng cao để phục vụ cho sống Game loại hình giải trí phổ biến thời điểm ngày phát triển đa dạng thể loại Trong Board game thể loại dễ tiếp cận với người, dễ chơi, phù hợp với lưới tuổi, nên chúng em chọn phát triển game Board game có tên là: Cờ gánh Cờ gánh trị chơi dân gian Việt Nam, ưa chuộng, hay thú vị Nó có lâu đời, với mong muốn, mang lại trò chơi, đơn giản, thú vị cải biến thêm chút luật chơi, dựa luật chơi có sẵn, nhóm mong trò chơi tạo hứng thú cho người chơi Mục tiêu đề tài nghiên cứu: Tạo AI hiểu luật chơi thi đấu cờ với người chơi Tìm cách thắng nhiều điểm Kèm theo AI phải: -Ln ln đánh theo luật trị chơi -Tìm cách hiệu dựa tiêu chí cho trước Phần - Cơ sở lý thuyết chung Giới thiệu: 1.1 Board Game Board Game bao gồm bề mặt chơi (board) chia thành lĩnh vực điền tập hợp phần tử di động Một cách phổ biến nhất, phần liên kết trực tiếp với người chơi, bề mặt chơi thể mơi trường vượt khỏi tầm kiểm sốt trực tiếp người chơi Người chơi điều động phần tử họ bề mặt chơi nỗ lực để nắm bắt phần người chơi khác, đạt mục tiêu, giành quyền kiểm soát lãnh thổ, có số mặt hàng có giá trị Mối quan tâm người chơi trị chơi phân tích mối quan hệ hình học phần 1.2 Cờ Gánh Bàn cờ bề mặt phẳng có 25 điểm nằm giao điểm lưới vuông nhân hình vẽ bên phải Các đường kẻ nằm ngang, thẳng đứng đường chéo, vẽ bàn cờ hình vẽ bên dưới, thể đường di chuyển phép quân cờ Tại xuất phát điểm, quân cờ hai người chơi bố trí điểm nằm rìa ngồi bàn cờ hình vẽ bên Bàn cờ gánh có 16 quân chia làm hai màu cho hai người chơi Trong bàn cờ này, phe màu xanh có quân phe màu đỏ có quân hình vẽ bên Mục tiêu người chơi ăn quân cờ đối phương Trận cờ kết thúc khi: + Một người chơi khơng cịn cờ bàn, người chiến thắng + Hoặc hai người đến lúc (thỏa số bước quy định ban đầu, ví dụ 200 bước mà chưa phân thắng thua) ta đếm số cờ lại bàn cờ, người chơi cịn nhiều cờ hơn, người chiến thắng Hình Hình ảnh bàn cờ gánh Luật chơi: Mỗi quân cờ di chuyển bước theo đường thẳng hay đường kẽ đến giao điểm trống Hình Mô tả cách di chuyển quân cờ Có hai cách để ăn quân cờ đối phương: Gánh: Khi quân cờ phe vào hai quân cờ phe kia, hai quân cờ hai bên ăn Trong Hình 3, quân cờ H di chuyển theo mũi tên xanh vào hai quân đỏ N Q Hai quân bị ăn Hình Hình ảnh cách Gánh để ăn hai quân cờ khác Nhảy qua đầu để ăn: Một quân cờ vị trí E, bay qua đầu quân cờ vị trí J, ăn quân cờ vị trí J Hình Hình ảnh cách Nhảy qua đầu quân cờ khác để ăn Lý thuyết: 3.1 Phân tích trị chơi Để biết mong đợi từ agent1, tốt có số nghiên cứu toán học Cờ Gánh thực trước phát triển AI để xác định thuộc tính hệ số phân nhánh kích thước khơng gian tìm kiếm, có nghĩa số lượng trạng thái trò chơi Các thuộc tính cho biết liệu giải hồn tồn trị chơi hay khơng có di chuyển agent mong đợi tìm kiếm trước di chuyển 3.2 Khơng gian trạng thái trò chơi Tổng số trạng thái khác trò chơi Cờ Gánh quan trọng, số đủ nhỏ, trị chơi giải cách tìm chiến lược chiến thắng định cho người chơi Để làm điều này, trước hết cần công thức mô tả số cách phần tử đặt bảng trị chơi Một game Cờ Gánh bắt đầu với 16 quân cờ bàn cờ 5x5 Vì đặt qn cờ lên 25 vị trí bàn cờ, quân thứ 24 vị trí cịn lại Tương tự với trạng thái bàn cờ có 15, 14… quân cờ Tiếp tục ta có kết là: 25!/9! + *25!/10! + *25!/11! + + *25!/24! = 25!/9! *(1 + */10 + */(10*11) + */(10*11*12)+ +*/(10*11*12* *24)) = (circa)1.5986532e+20 3.3 Hệ số phân nhánh Yếu tố phân nhánh quan trọng xác định số trạng thái mà agent phải xem xét để tìm cách di chuyển tốt cách duyệt qua trạng thái trị chơi agent: đối tượng chơi cờ cách thông minh Mặc dù thay đổi hệ số phân nhánh, riêng biệt cho trị chơi, thay đổi thuật tốn kiểm tra trị chơi Những thay đổi cho thuật tốn loại bỏ số trạng thái trước chúng kiểm tra Khi điều thực hiện, hệ số phân nhánh yếu tố để xác định nhánh trạng thái mà thuật tốn phải mở rộng để tìm bước di chuyển tốt nhất, trở nên nhỏ so với với hệ số phân nhánh trung bình Bằng cách phân loại trạng thái dẫn đến bước tốt có thể, thuật tốn sử dụng nhiều thời gian để xem trạng thái bước tốt nhất, theo cách làm giảm hệ số phân nhánh 3.4 Mạng nơron nhân tạo (Neural Networks) 3.4.1 Mạng nơron nhân tạo (Neural Networks) gì? Mạng nơron nhân tạo, Artificial Neural Network (ANN) mơ hình xử lý thơng tin theo cách thức xử lý thông tin hệ nơron sinh học Nó tạo nên từ số lượng lớn phần tử (nơron) kết nối với thông qua liên kết (trọng số liên kết) làm việc thể thống để giải vấn đề cụ thể Một mạng nơron nhân tạo cấu hình cho ứng dụng cụ thể (nhận dạng mẫu, phân loại liệu ) thông qua trình học từ tập mẫu huấn luyện Về chất học q trình hiệu chỉnh trọng số liên kết nơron Cấu trúc neural nhân tạo: Hình Cấu tạo Neural Các thành phần nơron nhân tạo bao gồm: • • • Tập đầu vào: Là tín hiệu vào (input signals) nơron, tín hiệu thường đưa vào dạng vector N chiều Tập liên kết: Mỗi liên kết thể trọng số liên kết – Synaptic weight Trọng số liên kết tín hiệu vào thứ j với nơron k thường kí hiệu wkj Thơng thường, trọng số khởi tạo cách ngẫu nhiên thời điểm khởi tạo mạng cập nhật liên tục trình học Bộ tổng (Summing function): Thường dùng để tính tổng tích đầu vào với trọng số liên kết 10 Phần - Tổng kết Đánh giá kết quả: Mục tiêu đề tài nghiên cứu đề hoàn thành Các agent tạo giải thuật có khả đánh cờ chiến thắng người chơi Đảm bảo yêu cầu đề ban đầu: • Ln ln đánh theo luật trị chơi • Tìm cách hiệu dựa tiêu chí cho trước Mặc dù có khả chiến thắng, agent cần cải thiện để nâng cao tỉ lệ chiến thắng Nhất agent Monte Carlo Tree Search với tiềm phát triển cao, agent Mini Max tiềm để cải thiện bị giới hạn Đóng góp luận văn: Vì lý người tiên phong nghiên cứu đề tài trí tuệ nhân tạo áp dụng cho trị chơi Cờ Gánh Việt Nam, nên nhóm cịn gặp nhiều khó khăn, bỡ ngỡ Như thiếu báo khoa học làm tài liệu tham khảo Phải tham khảo sản phẩm Game xuất chợ ứng dụng Ngồi mục tiêu luận văn, nhóm nghiên cứu cố gắng tìm tịi, giải vấn đề nêu đạt đóng góp sau: • Kiểm chứng đánh giá giải thuật mơi trường mơ thực nghiệm • Cải biến cách chơi, góp phần tạo thú vị, dễ tiếp cận cho người Hướng phát triển: Game trí tuệ nhân tạo có xu hướng phát triển mạnh mẽ tương lai Nhóm mong muốn đóng góp phần cơng sức tiếp tục phát triển đề tài luận văn theo hướng sau: 36 3.1 Các cải tiến thêm vào MiniMax Mặc dù MiniMax triển khai với kỹ thuật trên, có khía cạnh thuật tốn cải thiện Vì lý đó, số gợi ý cho cải tiến bổ sung thảo luận phần đây: Ngẫu nhiên Trong số tình huống, đặc biệt MiniMax sử dụng hàm lượng giá đơn giản để đánh giá game, số tất bước di chuyển kết thúc với giá trị lượng giá Trong tình này, ln chọn bước di chuyển số bước di chuyển có giá trị tiện ích Điều dẫn đến tình agent ln ln di chuyển sai Điều này cải thiện cách chọn bước di chuyển cách ngẫu nhiên, số bước chuyển có giá trị tiện ích cao Cũng sử dụng hàm xác suất để chọn bước di chuyển Giá trị lượng giá sử dụng dẫn khả lựa chọn di chuyển, nghĩa chọn bước di chuyển ngẫu nhiên số tất di chuyển có thể, di chuyển với giá trị tiện ích cao có hội chọn cao Tìm kiếm liên tục Tối ưu hóa tìm kiếm cách cải thiện thuật tốn tìm kiếm thủ tục MiniMax cách khác để tăng hiệu suất thủ tục Với cải thiện cho phép thủ tục lưu trò chơi lần di chuyển tiết kiệm thời gian tính tốn cách khơng phải tính tốn lại tồn lần di chuyển, điều kết hợp với duyệt sâu lặp lặp lại để giảm 30% chi phí Một thuật tốn tìm kiếm cần nhiều nhớ số lỗ hổng bị để theo dõi cấu trúc liệu nâng cao cần có để thực điều Nếu thực cách, việc cải thiện tiết kiệm thời gian, việc giảm thời gian tính tốn bị hạn chế 37 Dùng hash table Một cách khác để giảm hệ số phân nhánh đảm bảo hai trạng thái giống hệt không duyệt Điều đặt số yêu cầu việc triển khai MiniMax Trước hết, hai trạng thái trò chơi giống hệt phát hiện, phải ln trạng thái gần với nhất, khám phá Điều không cần thiết MiniMax sử dụng tìm kiếm duyệt sâu Ngồi ra, hai trạng thái tìm thấy cấp độ, số chúng nên duyệt Việc thực hash table để tránh duyệt trạng thái dẫn đến giảm đáng kể hệ số phân nhánh, chiều ngược lại nhớ sử dụng tăng cao Trong MiniMax, trạng thái xóa khỏi nhớ duyệt, tất trạng thái phải lưu giữ nhớ tìm thấy bước tốt Lập trình đa luồng Một cách hoàn toàn khác để cải thiện hiệu suất MiniMax giúp có thêm sức mạnh xử lý Vì hầu hết máy tính có nhiều xử lý, nên tăng hiệu suất cách tận dụng tất xử lý Việc triển khai MiniMax theo cách an toàn theo luồng làm phức tạp việc triển khai, nhược điểm đáng ý 3.2 Các cải tiến thêm vào MCTS Dù MCTS làm việc khơng cần đến tri thức đặc trưng trò chơi Tuy nhiên, tri thức cần thiết để cải tiến phương pháp học tăng cường, học tăng cường phần MCTS • Tìm kiếm lệch Thơng thường cơng thức UCB tìm số nước hợp lệ cách công bằng, nước hợp lệ cịn lại thường bỏ qua Tuy nhiên, ta thêm giá trị cộng thêm vào giá trị UCB nước để điều chỉnh nước thực tốt hay xấu dựa vào tri thức đặc trưng từ ván cờ Lúc giá trị UCB bị lệch so với công thức thông thường, việc tìm kiếm xác Theo cách đó, có nhiều cơng thức đưa ra, đề cập đến phần lý thuyết 38 • Giả lập lệch Trong giai đoạn giả lập, nước chọn ngẫu nhiên từ tập nước hợp lệ trạng thái ván cờ Tuy nhiên, để việc giả lập ngẫu nhiên hội tụ nhanh cần có định hướng tri thức đặc trưng từ ván cờ Lúc cần vai trị hàm lượng giá hành động, hàm xây dựng từ tri thức tốn chi phí việc xây dựng hàm lượng giá trạng thái 3.3 Một số hướng mở rộng tương lai: • Có thể chơi online , liên kết mạng xã hội để mời bạn bè chơi cùng, bảng xếp hạng top người chơi • Cải biến thêm cách chơi: biến qn cờ người khác thành qn cờ • Áp dụng Machine Learning để cải thiện thông minh AI Game 39 DANH SÁCH HÌNH VẼ 40 DANH SÁCH BẢNG VÀ BIỂU ĐỒ 41 Tài liệu tham khảo Pritchard, D.B 1994 "Chess itself is a simple game to learn but its resulting strategy is profound." The Encyclopedia of Chess Variants Games & Puzzles Publications p 84 ISBN 0-9524142-0-1 Madjidzadeh, Y 2003 Jiroft, The earliest oriental civilization Organization of the Ministry of Culture and Islamic Guidance, Tehran Piccione, Peter A July–August 1980 "In Search of the Meaning of Senet" (PDF) Archaeology: 55–58 Retrieved 2018-07-14 Jensen, Jennifer 2003 "Teaching Success Through Play: American Board and Table Games, 1840-1900" Magazine Antiques bnet Retrieved 2009-02-07 Fessenden, Tracy 2007 Culture and Redemption: Religion, the Secular, and American Literature Princeton University Press p 271 Retrieved 2009-02-07 Hofer, Margaret K 2003 The Games We Played: The Golden Age of Board & Table Games Princeton Architectural Press Retrieved 2009-02-07 Downey, Greg November 1999 "Information Networks and Urban Spaces: The Case of the Telegraph Messenger Boy" Antenna Mercurians Archived from the original on August 2008 Retrieved 2009-02-07 a b c a b Damian Gareth Walker November 2014 A Book of Historic Board Games Lulu.com p 13 ISBN 978-1-326-03480-1 Smith, Quintin October 2012 "The Board Game Golden Age" Archived from the original on June 2013 Retrieved 2013-05-10 10 Duffy, Owen "Board games' golden age: sociable, brilliant and driven by the internet" the Guardian 11 G Chaslot, S De Jong, J.-T Saito, J Uiterwijk 2006 "Monte-carlo tree search in production management problems", Proceedings of the 18th BeNeLux Conference on Artificial Intelligence Citeseer, pp 91-98 42 12 Coulom, R 2006 Efficient selectivity and backup op-erators in Monte-Carlo tree search In 5th InternationalConference on Computer and Games, 2006-05-29,72– 83 13 Robbins, H 1952 "Some aspects of the sequential design of experiments" Bulletin of the American Mathematical Society 58 (5): 527–535 doi:10.1090/S0002-9904-1952-09620-8 14 L Kocsis and C Szepesvari 2006 Bandit based monte-carlo planning In 15th EuropeanConference on Machine Learning (ECML), pages 282–293 15 Gelly, S.; Wang, Y.; Munos, R.; and Teytaud, O 2006.Modification of UCT with patterns in Monte-Carlo Go.Technical Report 6062, INRIA 16 P Auer, N Cesa-Bianchi, and P Fischer 2002 Finite time analysis of the multiarmedbandit problem Machine Learning, 47(2-3):235–256 17 Ikeda, K., Viennot, S 2013 “Efficiency of static knowledge bias in monte-carlo tree search”, In: Computers and Games 2013 43 Phụ Chương 1: Giải thuật Minimax protected int minimax(int playerTurn, ref int[][] upPlayerPos,ref int[][] downPlayerPos,ref List closeStack,int floor,int maxFloor) { int result; switch(gameComplete(upPlayerPos, downPlayerPos)){ case PlayerTurn.DOWNPOS: result = -1; break; case PlayerTurn.UPPOS: result = 1; break; default: result = 0; break; } if(result != 0) { return 18 * result * playerTurn;} if(floor > maxFloor) { if (playerTurn == 1) { Debug.Log("Player play!"); return functionA(upPlayerPos.Length, downPlayerPos.Length) * playerTurn; } else { Debug.Log("Player play!"); return functionB(upPlayerPos.Length, downPlayerPos.Length) * playerTurn; } return (upPlayerPos.Length - downPlayerPos.Length) * playerTurn; } floor += 1; int[] move = new int[]{}; var score = -18; var moves = simpleMoves(playerTurn, upPlayerPos, downPlayerPos); var movesArray = moves.Select(item => item.ToArray()).ToArray(); demStack++; bool checkExist = false; string computerEncode = string.Empty; string playerEncode = string.Empty; foreach (var item in movesArray) { int[][] upPlayerPosTemp = (int[][]) upPlayerPos.Select(i => i.ToArray()).ToArray(); 44 int[][] downPlayerPosTemp = (int[][]) downPlayerPos.Select(i => i.ToArray()).ToArray(); changeBoard(false, item, playerTurn,ref upPlayerPosTemp,ref downPlayerPosTemp); checkExist = false; computerEncode = Flatten(upPlayerPosTemp); playerEncode = Flatten(downPlayerPosTemp); // Debug.LogError(computerEncode + " " + playerEncode); foreach (var stackItem in closeStack) { if(computerEncode == stackItem[0] && playerEncode == stackItem[1]) { checkExist = true; break; } } if(checkExist) continue; else { closeStack.Add(new List () {computerEncode, playerEncode}); } var thisScore = -minimax(playerTurn * -1,ref upPlayerPosTemp,ref downPlayerPosTemp,ref closeStack,floor,maxFloor); if(thisScore > score) { score = thisScore; move = item; // Debug.LogError("Update Score!"); } } if(move.Length == 0) { return 0;} // Debug.LogError("end perfect!"); return score; } 45 Phụ Chương 2: Giải thuật MCTS public class TreeNode { static System.Random r = new System.Random(); static double epsilon = 1e-6; public int m_ScorePerKill = 10; public int m_PlayerScore = 0; static double Cp = 2*(1/Math.Sqrt(2)); public int nodePlayerTurn; public TreeNode[] children; public float nVisits, totValue; public int[][] nodeUpPlayerPos/* player 1*/, nodeDownPlayerPos/* player 2*/, moveDiagonalRightDown, moveDiagonalRightUp, moveDiagonalLeftDown, moveDiagonalLeftUp; public int[][][] totalWayToMove; public int[] mapSize = new int[2]{5,5};//(Y, X) public int[] lastMove = null; public int x = 0; public int y = 0; public TreeNode(int playerTurn, int[][] upPlayerPos, int[][] downPlayerPos) { nodePlayerTurn = playerTurn; nodeUpPlayerPos = upPlayerPos; nodeDownPlayerPos = downPlayerPos; } public PlayerTurn gameComplete(int[][] nodeUpPlayerPos, int[][] nodeDownPlayerPos) { if(nodeUpPlayerPos.Length ==0) { return PlayerTurn.DOWNPOS; } if(nodeDownPlayerPos.Length == 0) { return PlayerTurn.UPPOS; } return PlayerTurn.NULL; } public void selectAction() { LinkedList visited = new LinkedList(); TreeNode cur = this; visited.AddLast(this); while (!cur.isLeaf()) { cur = cur.select(); visited.AddLast(cur); } 46 if (cur.gameComplete(cur.nodeUpPlayerPos, cur.nodeDownPlayerPos) == PlayerTurn.NULL) // non-terminal state { cur.expand(); TreeNode newNode = cur.select(); if(newNode != null) { visited.AddLast(newNode); float value = rollOut(newNode); Debug.Log ("value" + value); foreach (TreeNode node in visited) { node.updateStats(value); } } else Debug.LogError ("select action selected a null node"); } else { float value = 0f; switch(cur.gameComplete(cur.nodeUpPlayerPos, cur.nodeDownPlayerPos)){ case PlayerTurn.UPPOS : // pc win value = 1.0f; break; case PlayerTurn.DOWNPOS : // player win value = 0.0f; break; default : /* keep playing */ //Debug.Log ("keep playing"); break; } foreach (TreeNode node in visited) { node.updateStats(value); } } } public void expand(/*int[][] upPlayerPos, int[][] downPlayerPos */) { Debug.Log("expand()"); TreeNode cure = this; var moves = simpleMoves(cure.nodePlayerTurn, cure.nodeUpPlayerPos, cure.nodeDownPlayerPos); int[][] am = moves.Select(item => item.ToArray()).ToArray(); Debug.LogWarning(showInfor(am)); 47 if (moves.Count > 0) { Debug.Log("moves.Count" + moves.Count); children = new TreeNode[moves.Count]; int[][][] tempUpposar = new int[moves.Count][][]; int[][][] tempDownposar = new int[moves.Count][][]; for (int i = 0; i < moves.Count; i++) { tempUpposar[i] = (int[][]) cure.nodeUpPlayerPos.Clone(); tempDownposar[i] = (int[][]) cure.nodeDownPlayerPos.Clone(); } for(int i=0; i < moves.Count; i++) { children[i] = new TreeNode(-cure.nodePlayerTurn, tempUpposar[i], tempDownposar[i]); changeBoard(true, am[i], -children[i].nodePlayerTurn,ref tempUpposar[i],ref tempDownposar[i]); children[i].lastMove = am[i]; } } } private TreeNode select() { Debug.Log("select()"); TreeNode cur = this; TreeNode selected = null; double bestValue = Double.MinValue; foreach (TreeNode c in cur.children) { double uctValue = c.totValue / (c.nVisits + epsilon ) + Cp * Math.Sqrt(2 * Math.Log(cur.nVisits + 1) / (c.nVisits + epsilon) ) + r.NextDouble() * epsilon; // Debug.Log("UCT value = " + uctValue); if (uctValue > bestValue) { selected = c; bestValue = uctValue; } } return selected; } public bool isLeaf() { //Debug.Log("isLeaf()"); TreeNode cur = this; return cur.children == null; } 48 public float rollOut(TreeNode tn) { Debug.Log("rollOut()"); TreeNode rollGS = new TreeNode(tn.nodePlayerTurn, tn.nodeUpPlayerPos, tn.nodeDownPlayerPos); bool stillPlaying = true; float rc = 0; int move; System.Random rr = new System.Random(); //Debug.Log ("Start rollout ."); var moves = simpleMoves(rollGS.nodePlayerTurn, rollGS.nodeUpPlayerPos, rollGS.nodeDownPlayerPos); int[][] am = moves.Select(item => item.ToArray()).ToArray(); move = rr.Next(moves.Count); while ((moves.Count > 0) && stillPlaying) { // make a random move changeBoard(true, am[move], rollGS.nodePlayerTurn,ref rollGS.nodeUpPlayerPos,ref rollGS.nodeDownPlayerPos); switch(gameComplete(rollGS.nodeUpPlayerPos, rollGS.nodeDownPlayerPos)){ case PlayerTurn.UPPOS : // pc win stillPlaying = false; rc = 1.0f; break; case PlayerTurn.DOWNPOS : // player win stillPlaying = false; rc = 0.0f; break; default : /* keep playing */ //Debug.Log ("keep playing"); var newmoves = rollGS.simpleMoves(-rollGS.nodePlayerTurn, rollGS.nodeUpPlayerPos, rollGS.nodeDownPlayerPos); am = newmoves.Select(item => item.ToArray()).ToArray(); move = rr.Next(newmoves.Count); rollGS.nodePlayerTurn = -rollGS.nodePlayerTurn; break; } } Debug.Log ("end of rollOut"); return rc; } public void updateStats(float value) { //Debug.Log("updateStats()"); nVisits++; totValue += value; } 49 public TreeNode bestChild() { TreeNode cur = this; float smallestScore = float.MinValue; TreeNode chosenNode = null; foreach (TreeNode child in cur.children) { if ((child.totValue / child.nVisits + epsilon) > smallestScore || (child.totValue / child.nVisits + epsilon) == smallestScore) { smallestScore = child.totValue / child.nVisits; chosenNode = child; } } return chosenNode; } 50 ... tưởng việc áp dụng AI vào game trí tuệ mang tính giải trí thịnh hành Việt Nam như: Cờ Tướng , Cờ Vua , Cờ Vây, Cờ Gánh? ?? Sau xem xét kỹ lưỡng, nhóm định chọn game Cờ Gánh làm đề tài nghiên cứu... dễ tiếp cận với người, dễ chơi, phù hợp với lưới tuổi, nên chúng em chọn phát triển game Board game có tên là: Cờ gánh Cờ gánh trò chơi dân gian Việt Nam, ưa chuộng, hay thú vị Nó có lâu đời, với... quan Phát biểu vấn đề: Theo phát triển thời đại, nhu cầu người ngày nâng cao để phục vụ cho sống Game loại hình giải trí phổ biến thời điểm ngày phát triển đa dạng thể loại Trong Board game thể