1. Trang chủ
  2. » Luận Văn - Báo Cáo

(LUẬN văn THẠC sĩ) tìm hiểu về chiến lược tìm kiếm trong các trò chơi đối kháng và ứng dụng vào trò chơi 2048

62 3 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 62
Dung lượng 2,87 MB

Nội dung

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ LƢU MINH ĐỨC TÌM HIỂU VỀ CHIẾN LƢỢC TÌM KIẾM TRONG CÁC TRÕ CHƠI ĐỐI KHÁNG VÀ ỨNG DỤNG VÀO TRÕ CHƠI 2048 LUẬN VĂN THẠC SỸ NGÀNH CÔNG NGHỆ THÔNG TIN HÀ NỘI - 2014 TIEU LUAN MOI download : skknchat@gmail.com ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CƠNG NGHỆ LƢU MINH ĐỨC TÌM HIỂU VỀ CHIẾN LƢỢC TÌM KIẾM TRONG CÁC TRÕ CHƠI ĐỐI KHÁNG VÀ ỨNG DỤNG VÀO TRÕ CHƠI 2048 Ngành: Công nghệ thông tin Chuyên ngành: Hệ thống thông tin Mã Số: 60480104 LUẬN VĂN THẠC SỸ NGÀNH CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: TS LÊ NGUYÊN KHÔI HÀ NỘI - 2014 TIEU LUAN MOI download : skknchat@gmail.com LờI CAM ĐOAN Tơi xin cam đoan luận văn “Tìm hiểu chiến lược tìm kiếm trị chơi đối kháng ứng dụng vào trị chơi 2048" cơng trình nghiên cứu riêng tơi Các số liệu, kết trình bày luận văn hồn tồn trung thực Tơi trích dẫn đầy đủ tài liệu tham khảo, cơng trình nghiên cứu liên quan Ngoại trừ tài liệu tham khảo này, luận văn hoàn tồn cơng việc riêng tơi Luận văn hồn thành thời gian tơi học viên Khoa Công nghệ Thông tin, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội Hà Nội, ngày 24 tháng 10 năm 2014 Học viên Lƣu Minh Đức TIEU LUAN MOI download : skknchat@gmail.com LờI CảM ƠN Lời đầu tiên, tơi xin gửi lời cảm ơn lịng biết ơn sâu sắc tới thầy hướng dẫn TS Lê Ngun Khơi tận tình hướng dẫn tơi suốt q trình thực luận văn tốt nghiệp Tơi chân thành cảm ơn thầy, cô tạo cho điều kiện thuận lợi để học tập nghiên cứu trường Đại học Công Nghệ Tôi xin gửi lời cảm ơn tới bạn lớp cao học K18 ủng hộ, khuyến khích tơi suốt q trình học tập trường Cuối cùng, tơi muốn gửi lời cảm ơn vô hạn tới gia đình bạn bè, người thân u ln bên cạnh động viên tơi suốt q trình thực luận văn tốt nghiệp Tôi xin chân thành cảm ơn! Hà Nội, ngày 24 tháng 10 năm 2014 Học viên Lƣu Minh Đức TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 MỤC LỤC LỜI NÓI ĐẦU CHƢƠNG 1: TỔNG QUAN VỀ LÝ THUYẾT TRÕ CHƠI 1.1 Giới thiệu lý thuyết trò chơi 1.1.1 Giới thiệu 1.1.2 John Nash thuyết cân 1.2 Bài tốn tìm kiếm khơng gian tìm kiếm 1.2.1 Bài tốn tìm kiếm 1.2.2 Khơng gian tìm kiếm 10 1.2.3 Các kỹ thuật tìm kiếm 14 1.2.4 Trò chơi đối kháng 24 CHƢƠNG 2: THUẬT TỐN TÌM KIẾM MINIMAX 25 2.1 Thuật toán Minimax .25 2.1.1 Giới thiệu 25 2.1.2 Một số khái niệm trò chơi đối kháng .25 2.1.3 Ý tưởng thuật toán 26 2.1.4 Thuật toán Minmax với độ sâu định trước 29 2.1.5 Thủ tục Minimax .30 2.1.6 Đánh giá thuật toán Minimax 31 2.2 Thuật toán cải tiến Minimax Alpha-beta 32 2.2.1 Ý tưởng thuật toán 33 2.2.2 Giải thuật Minmax Alpha-beta 34 CHƢƠNG 3: ÁP DỤNG VÀO TRÕ CHƠI 2048 38 3.1 Phân tích toán 38 3.1.1 Giới thiệu trò chơi 2048 38 3.1.2 Áp dụng Minimax Alpha-beta vào trò chơi 2048 39 3.1.3 Cách tính trọng số nút 42 3.2 Cài đặt chương trình .44 3.2.1 Môi trường phát triển công nghệ sử dụng 44 3.2.2 Giao diện chương trình .44 3.2.3 Chi tiết cài đặt 45 3.2.4 Thống kê kết .46 3.2.5 Quan sát trình chơi tự động số kinh nghiệm thu 48 KẾT LUẬN 53 TÀI LIỆU THAM KHẢO 54 PHỤ LỤC 55 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 DANH MỤC HÌNH VẼ Hình 1.1: Ví dụ đồ thị trạng thái 11 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 tìm kiếm minh hoạ giải thuật DFS 18 Hình 1.4 Đánh giá trạng thái u 20 Hình 1.5: Ví dụ biểu diễn trị chơi caro 22 Hình 1.6: Cây tìm kiếm bùng nổ tổ hợp[1] 23 Hình 2.1: Cây tìm kiếm tính đƣợc trọng số 28 Hình 2.2: Cây tìm kiếm đƣợc tính trọng số tất nút 28 Hình 2.3: Minh hoạ tìm kiếm với giải thuật Minimax 30 Hình 2.4: Một phần trò chơi với ý tƣởng cắt nhánh alpha 33 Hình 2.5: Minh hoạ ý tƣởng cắt nhánh theo alpha 34 Hình 3.1: ví dụ trạng thái trị chơi trạng thái chiến thắng 39 Hình 3.2: Mơ hình tốn tổng qt 40 Hình 3.3: Ví dụ cách di chuyển tính điểm trạng thái 41 Hình 3.4(a): Trạng thái có độ mịn tối ƣu 42 Hình 3.4(b): Trạng thái có tính đơn điệu tốt 43 Hình 3.5: giao diện chƣơng trình 44 Hình 3.5(b): giao diện cấu hình cho việc chơi tự động 45 Hình 3.5(a): giao diện cài đặt cho trị chơi 45 Hình 3.6: Sơ đồ khối trình chơi tự động 46 Hình 3.7: Màn hình hiển thị kết trình chạy thử nghiệm 47 Hình 3.8(a): Màn hình hiển thị trạng thái kết việc chọn cách di chuyển xây dựng tảng số hàng dƣới 48 Hình 3.8(b): Màn hình hiển thị trạng thái kết việc chọn cách di chuyển để cố gắng cân số 49 Hình 3.8(c): Màn hình hiển thị trạng thái kết việc chọn cách chơi giảm số lần di chuyển trống 50 Hình 3.8(d): Màn hình hiển thị trạng thái kết việc chọn cách chơi xây dựng tảng nhỏ 51 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 LỜI NÓI ĐẦU Trong năm gần với phát triển không ngừng thiết bị di động theo phát triển nhu cầu giải trí thiết bị di động bùng nổ cách mạnh mẽ Một lĩnh vực phát triển mãnh liệt giới số trò chơi thiết bị di động Từ năm 2000 đến năm 2012 thị trường trò chơi thiết bị di động tăng trưởng 955% từ 20 triệu người chơi đến 211 triệu người Năm 2014 chứng kiến đời trò chơi thú vị tảng di động trị chơi 2048 Đây trị chơi địi hỏi trí tuệ cộng với may mắn thu hút nhiều triệu người khắp giới tham gia Tuy nhiên trị chơi khó người dành chiến thắng trị chơi Xuất phát từ điểm trên, luận văn đưa ý tưởng cho máy thay người tự chơi trò chơi dể dành chiến thắng Tơi đưa ý tưởng trị chơi đối kháng để vận dụng vào trò chơi 2048 Luận văn tập trung tìm hiểu trị chơi đối kháng chiến thuật trò chơi đối kháng, qua áp dụng vào trị chơi 2048 Kết cuối luận văn xây dựng lại trò chơi 2048 cho máy tự động chơi (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 CHƢƠNG 1: TỔNG QUAN VỀ LÝ THUYẾT TRÕ CHƠI 1.1 Giới thiệu lý thuyết trò chơi 1.1.1 Giới thiệu Lý thuyết trò chơi nhánh tốn học sử dụng mơ hình để nghiên cứu tình chiến thuật, đối thủ cố gắng làm tối đa kết đạt cho Trong thời đại công nghệ thông tin phát triển mạnh Lý thuyết trị chơi thu hút nhiều ý nhà khoa học máy tính ứng dụng Trí tuệ nhân tạo điều khiển học[1]… Một số tài liệu ghi lại lý thuyết trị chơi xuất lần vào năm 1713 vào thời điểm tác giả đưa lời giải chiến thuật hỗn hợp Minimax cho trị đánh người Leher Tuy nhiên Lý thuyết trò chơi thực tồn ngành John von Neumann xuất loạt báo năm 1828 John von Neumann người hình thức hóa Lý thuyết trị chơi thời ký trước chiến tranh lạnh, chủ yếu áp dụng chiến lược quân sự, tiếng khái niệm đảm bảo phá hủy lẫn nhau[7][8][9] Hiện Lý thuyết trò chơi sử dụng rộng rãi nhiều ngành khác : Kinh tế kinh doanh, sinh học, trị học, triết học, khoa học máy tính logic, viễn thơng, số trị chơi truyền hình … Với phát triển ngành công nghệ thông tin Lý thuyết trị chơi đóng vai trị quan trọng, đặc biệt logic khoa học máy tính Một số lý thuyết logic có sở ngữ nghĩa trị chơi Thêm vào khoa học gia máy tính sử dụng trị chơi để mơ tính tốn tương tác với Trong Lý thuyết trò chơi nhân loại nghiên cứu nhiều thuật toán hay để ứng dụng vào trị chơi ví dụ như: thiết kế trị chơi Nim; thiết kế kiểu trị chơi có nhân, có tính đối xứng; thuật tốn liên quan đến chiến lược tìm (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 kiếm… Luận văn đề cập đến thuật tốn tìm kiếm MinMax thuật toán cắt tỉa Alpha-Beta việc xây dựng chương trình trị chơi 2048 1.1.2 John Nash thuyết cân Cân Nash: khái niệm Lý thuyết trò chơi, John Nash đưa với mơ hình trị chơi với n đối thủ Cân Nash xác định chiến lược tối ưu cho trị chơi chưa có điều kiện tối ưu xác định trước Nội dung khái niệm cân Nash là: Nếu tồn tập hợp chiến lược cho trò chơi với đặc tính khơng đối thủ hưởng lợi cách thay đổi chiến lược đối thủ khác khơng thay đổi, tập hợp chiến lược phần thu nhận tương ứng tạo nên cân Nash Nói cách khác, cân Nash đạt thay đổi cách đơn phương số đối thủ làm cho người thu lợi mức có với chiến lược Khái niệm áp dụng cho trò chơi gồm từ hai đối thủ trở lên Nash tất khái niệm khác giải pháp trò chơi đưa trước có cân Nash[9] Vì mối quan hệ giá trị cực đại giá trị cực tiểu thiết lập, định nghĩa giá trị cân trò chơi Một cặp chiến lược (p’,q’) gọi cân p’ tương xứng tốt với q’ ngược lại q’ tương xứng tốt với p’ , nghĩa là: M( p,q’)  M( p’,q’)  M( p’,q)[7][9] Một ví dụ đơn giản: trò chơi gồm hai đối thủ chọn song song số từ đến 10 Người chọn số lớn thua phải trả tiền cho người Trò chơi có cân Nash nhất: hai đối thủ chọn số Bất kỳ lựa chọn khác (mà lựa chọn đối thủ kia) làm đối thủ thua Một trị chơi có nhiều khơng có cân Nash Nash chứng minh cho phép chiến lược hỗn hợp (mixed strategies) tức (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 đối thủ chọn ngẫu nhiên chiến lược dựa vào khả ấn định trước, trò chơi với n đối thủ đối thủ chọn giới hạn cho trước nhiều chiến lược có cân Nash chiến lược hỗn hợp Ví dụ với Song đề Tù nhân (Prisoner’s dilemma) Song đề minh hoạ mâu thuẫn hành vi cá nhân có lực suy đốn lợi ích việc hợp tác Vấn đề mấu chốt đối thủ cố gắng tối đa hố lợi ích mà khơng quan tâm tới lợi ích người khác, tức đối thủ có tính ích kỷ Song đề tù nhân có cân Nash đối thủ không tôn trọng giao ước Tuy nhiên sai rõ ràng không hai hợp tác Chiến lược hợp tác không bền đối thủ làm tốt cách không tôn trọng giao ước đối thủ hợp tác[9] Lý thuyết kinh tế đấu giá áp dụng lớn cân Nash lý thuyết trò chơi Trước kia, nhà kinh tế thường phân tích thị trường thơng qua cung cầu hàng hố mà khơng trọng tới quy luật “trị chơi” làm cho hình thức đấu giá trở nên khác biệt với với hình thức thị trường khác (thị trường chứng khoán, siêu thị…) Ngày nghiên cứu đấu giá thường dựa cân Nash quy luật đấu giá P Ordeshook Giáo sư trị học, Học viện công nghệ California, tác giả “Lý thuyết trị chơi lý thuyết trị” viết: “Khái niệm cân Nash có lẽ ý tưởng quan trọng lý thuyết trị chơi khơng hợp tác… dù việc phân tích chiến lược ứng viên / bầu cử, phân tích nguyên nhân chiến tranh, …, hay hành động nhóm quyền lợi, dự báo kiện thu lại việc tìm kiếm mơ tả trạng thái cân Đơn giản hơn, chiến lược cân dự đoán người”[7][9] Trong kỷ 19, nhà khoa học khác sử dụng lý thuyết cân Maxwell, Walrus, Gibbs Đầu kỷ 20, cân kinh tế hoá học sử dụng van der Waals, Onnes, Keynes trước Nash sử dụng Nhiều (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 Sơ đồ khối biểu diễn trình tìm kiếm tương ứng với function bên phải Bắt đầu Khởi tạo trạng thái ban đầu với ô chứa số i ni t Wi t hGr i d: ( M2Gr i d * ) gr i d; Tính bước di chuyển (Sử dụng Minimax) ( M2Vec t or * ) bes t Mov e; Tạo trạng thái sử dụng cách vừa tìm Kiểm tra kết thúc ( xuất sô 2048) ( v oi d) mov eToDi r ec t i on: ( M2Di r ec t i on) di r ec t i on No ( BOOL) i s Wi nni ngBoar d Yes Kết thúc Hình 3.6: Sơ đồ khối trình chơi tự động 3.2.4 Thống kê kết Chương trình thực Simulator Xcode 5.1.1 Chạy máy MACBOOK 2012 sử dụng chip Core i7 2.6GHz thu kết sau: Rằng buộc đầu vào: - Với bước sinh ngẫu nhiên số với tỉ lệ, số 2: chiếm 90% số chiếm 10% - Sử dụng độ sâu tìm kiếm (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 46 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 Kết thu đƣợc: Hình 3.7: Màn hình hiển thị kết trình chạy thử nghiệm Độ sâu Mục tiêu 2048 4096 2048 4096 Số lần chạy Tổng thời gian 50 40 30 10 Thời gian trung bình 93.5’ 3h43’ 2h41’ 1h37’ 1.876’ 5.575’ 5.3’ 9.7’ Tỉ lệ chiến thắng 67% 11% 98% 70% Thời gian bảng bao gồm thời gian cho q trình đồ hoạ trị chơi, hiệu ứng vẽ di chuyển trạng thái trò chơi từ trạng thái (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 47 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 ban đầu đến trạng thái kết thúc (dành chiến thắng thất bại) Chính khơng thời gian tính tốn giải thuật Minimax alpha-beta mà gồm thời gian việc đồ hoạ cho trò chơi 3.2.5 Quan sát trình chơi tự động số kinh nghiệm thu đƣợc Trong trình máy tự động chơi, ta quan sát định di chuyển tối ưu độ sâu định trước Trong bước tính tốn tối ưu trạng thái trị chơi 2048 thường biến đổi theo số quy luật có điểm chung định Từ ta đúc kết lại số kinh nghiệm cho người chơi để khả dành chiến thắng người chơi cao Dưới số kinh nghiệm quan sát trình cho máy chơi tự động Di chuyển theo hƣớng định sẵn Hình 3.8(a): Màn hình hiển thị trạng thái kết việc chọn cách di chuyển xây dựng tảng số hàng Người chơi cố gắng di chuyển bảng số theo ba hướng nhấ t đinh ̣ ví dụ: trái, phải xuống Nếu theo ba hướng này, người chơi xây dựng nề n tảng khá tố t phía sau ngư ời chơi chút thời gian với mô ̣t vài chuyể n đô ̣ng đôi cùng mô ̣t chuỗi dây chuyề n kế t nố i sẽ giúp những số gô ̣p la ̣i với thì mô ̣t số có giá tri ̣lớn Hãy ưu tiên di chuyển theo ba (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 48 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 hướng định trước lặp lại chiến thuật để liên kết số giống la ̣i với Khi định rõ chiến lược chơi cho việc di chuyển theo ba hướng định phải hạn chế tối đa việc di chuyển theo hướng thứ tư Di chuyển theo hướng thứ tư làm lợi rời rạc hoá số có giá trị cao mà người chơi nhiều công để tạo số vị trí thuận lợi có khả hợp với Cố gắng cân giá trị số bảng Hình 3.8(b): Màn hình hiển thị trạng thái kết việc chọn cách di chuyển để cố gắng cân số Đây là mô ̣t chiế n lươ ̣c tố t ngư ời chơi cân bằ ng đươ ̣c sự tăng trưởng của các số , ván chơi không có sự chênh lê ̣ch quá nhiề u giữa các số lớn nhấ t và nhỏ nhấ t Hãy cố gắng để nhận số trả về cao nhấ t ta ̣i mo ̣i thời điể m , theo sau đó là mô ̣t số lươ ̣ng số nhỏ xuấ t hiê ̣n theo că ̣p sẵn sàng kết hợp với mo ̣i thời điể m Nế u người chơi trì tính cân trị chơi, người chơi có nhiều hội để dành chiến thắng Rõ ràng việc cân giá trị số tảng giúp việc hợp (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 49 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 dễ dàng Nếu chơi, người chơi không tạo cân mà để giả trị số khác biệt rời rạc khả thua lớn Giảm số lần di chuyển khơng có hợp Hình 3.8(c): Màn hình hiển thị trạng thái kết việc chọn cách chơi giảm số lần di chuyển trống Mô ̣t bước di chuyể n trố ng ở có thể hiể u là bước di chuyể n mà không gô ̣p số Người chơi cần cố gắ ng giảm bớt những di chuyể n thế này vì mỗi lầ n ngư ời chơi di chuyể n sẽ phát sinh mô ̣t số ở nhữn g vi ̣trí ngẫu nhiên Khi người chơi không thể gô ̣p đươ ̣c những sớ thì đừng nên làm phát sinh thêm nhiều Trong trình di chuyển khơng có hợp điểm số khơng tang, thuật tốn chạy tự động tự loại bỏ cách di chuyển Xây dựng tảng cân (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 50 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 Hình 3.8(d): Màn hình hiển thị trạng thái kết việc chọn cách chơi xây dựng tảng nhỏ Người chơi nhận số lượng số phát sinh nhiều sau mỗi lầ n di chủ n mơ ̣t thời gian dài , ưu tiên kết hợp số lại với cân chúng mức ban đầu Sẽ dễ dàng cho bước ta xây dựng cách chơi để hợp tảng nhỏ Di chuyển toàn bảng số Hình 3.8(e): Màn hình minh hoạ cho chiến lược di chuyển toàn bảng số Khi người chơi di chuyể n ở bấ t cứ hướng nào , số mới cũng sẽ đươ ̣c phát sinh Chúng khơng hồn tồn số giống Nhưng ý tưởng ở thử kết hợp nhiều hình vng bước di chuyển (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 51 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 cố gắ ng tố i đa hóa không gian trố ng có thể Khi có nhiề u khoảng trớ ng , người chơi có nhiều hướng lựa chọn để di chuyển (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 52 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 KẾT LUẬN Với mục tiêu đề luận văn tìm hiểu nghiên cứu thuật tốn tìm kiếm đối kháng Minimax, cải tiến ứng dụng trị chơi 2048, kết luận đạt luận văn tóm tắt sau:  Đã tìm hiểu tổng quan lý thuyết trị chơi phương pháp tìm kiếm Minimax alpha-beta trị chơi đối kháng  Đưa mơ hình tốn học áp dụng vào trò chơi 2048  Xây dựng lại trò chơi 2048 tảng iOS quan trọng áp dụng lý thuyết tìm hiểu thuật toán Minimax alpha-beta để xây dựng chức cho máy tự động chơi  Xây dựng chức dẫn người chơi cho trò chơi 2048 Chức chất việc để máy chạy thuật toán Minimax alpha-beta với trạng thái đầu vào trạng thái bảng mà người chơi cần máy nước (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 53 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TÀI LIỆU THAM KHẢO Tiếng Việt Nguyễn Thị Lệ (2009) Giải thuật tìm kiếm Minimax ứng dụng trị chơi có tổng khơng, ĐHKHTN-ĐHQGHN Phạm Thị Anh Lê, Phạm Thọ Hồn (2011) Trí tuệ nhân tạo Artificial intelligence, Khoa CNTT trường ĐHSP Hà nội Đỗ 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 Nguyễn Đức Nghĩa - Nguyễn Tơ Thành (1997), Tốn rời rạc, NXB Giáo dục Đ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 Đ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 Fudenberg, Drew and Jean Tirole: Game Theory, MIT Press, 1991 Poundstone, William Prisoner's Dilemma: John von Neumann, Game Theory and the Puzzle of the Bomb Nash, John (1950) "Equilibrium points in n-person games" Proceedings of the National Academy of Sciences 10 Jessica Billings (2008), The Minimax Algorithm, CS 330 11 Michael A Goodrich (2007), Proof of the Minimax Theorem 12 Heylighen (1993), Zero sum games – Principia Cybernetica Web (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 54 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 PHỤ LỤC Chi tiết cài đặt số lớp quan trọng chương trình Lớp M2GlobalState:  Một số thuộc tính đáng ý: @property (nonatomic, readonly) NSInteger dimension; @property (nonatomic, readonly) NSInteger winningLevel; @property (nonatomic, readonly) NSInteger tileSize; @property (nonatomic, readonly) NSInteger borderWidth; @property (nonatomic, readonly) NSInteger cornerRadius; @property (nonatomic, readonly) NSInteger horizontalOffset; @property (nonatomic, readonly) NSInteger verticalOffset; @property (nonatomic, readonly) NSTimeInterval animationDuration; @property (nonatomic, readonly) NSTimeInterval searchTimeOut; @property (nonatomic, readonly) NSTimeInterval maxSearchDepth;  Ý nghĩa : @property (nonatomic, readonly) NSInteger dimension: Chương trình xây dựng trị chơi 2048 hỗ trợ kích thước bảng chơi 3x3 4x4 5x5 Thuộc tính lưu trữ kích thước bảng chơi @property (nonatomic, readonly) NSInteger winningLevel: Lưu trữ mốc dành chiến thẳng trò chơi, mặc định 2048 nhiên giá trị tuỳ biến theo người dùng @property (nonatomic, readonly) NSInteger tileSize: Kích thước hiển thị hình iPhone @property (nonatomic, readonly) NSTimeInterval animationDuration: Thuộc tính liên quan đến trình hiển thị UI cho người chơi người chơi thực nước có hiệu ứng di chuyển title @property (nonatomic, readonly) NSTimeInterval searchTimeOut: Thuộc tính quan trọng lien quan đến thuật toán Minimax alpha-beta cài đặt cho máy tự chơi Thuộc tính giới hạn thời gian tìm kiếm tối đa cho nước @property (nonatomic, readonly) NSTimeInterval maxSearchDepth: Thuộc tính lưu trữ độ sâu giải thuật Minimax alpha-beta mà người dùng muốn tìm kiếm Độ sâu thay đổi hình cài đặt trị chơi Lớp M2AI :  Một số phƣơng thức đáng ý : (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 55 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 - (instancetype)initWithGrid:(M2Grid *)grid; - (M2Vector *)bestMove; -(id)initWithMove:(M2Vector*)bestMove score:(double)score positions:(NSInteger)positions cutoffs:(NSInteger)cutoffs; - (M2AIResult *)searchWithPlayerTurn:(BOOL)playerTurn depth:(NSInteger)depth alpha:(double)alpha beta:(double)beta positions:(NSInteger)positions cutoffs:(NSInteger)cutoffs; - (BOOL)isWinningBoard; - (BOOL)isGameOver; - (M2Grid *)gridAfterMoveInDirection:(M2Vector *)direction;  Ý nghĩa phƣơng thức trên: - (instancetype)initWithGrid:(M2Grid *)grid: Khởi tạo đầu vào cho lớp AI trạng thái trò chơi 2048 - (M2Vector *)bestMove: Phương thức cho trả kết nước tốt cho trạng thái đầu vào phương thức bên - (id)initWithMove:(M2Vector *)bestMove score:(double)score positions:(NSInteger)positions cutoffs:(NSInteger)cutoffs: Khởi tạo đầu vào cho lớp AI để tính tốn nước tốt cho trạng thái mà biết giá trị tốt trạng thái đạt thời điểm xét (score) vị trí tốt (positions) nhánh cắt bỏ (cutoffs) - (M2AIResult *)searchWithPlayerTurn:(BOOL)playerTurn depth:(NSInteger)depth alpha:(double)alpha beta:(double)beta positions:(NSInteger)positions cutoffs:(NSInteger)cutoffs: Hàm thuật tốn Minimax alpha-beta: o playerTurn: Thể người chơi Min hay Max o depth: Độ sâu xét trình tìm kiếm o alpha: hệ số alpha thuật toán Minimax alpha-beta o beta: Hệ số beta thuật toán Minimax alpha-beta o cutoffs: Đánh dấu nhánh cắt bỏ trình tìm kiếm - (BOOL)isWinningBoard: Kiếm tra trạng thái xem trạng thái chiến thắng hay chưa - (BOOL)isGameOver: Trả YES khơng cịn nước di chuyển trạng thái (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 56 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 - (M2Grid *)gridAfterMoveInDirection:(M2Vector *)direction: Trả trạng thái trò chơi 2048 di chuyển trạng thái phép di chuyển direction Class M2GameManager:  Các phƣơng thức đáng ý: - (void)startNewSessionWithScene:(M2Scene *)scene; - (void)moveToDirection:(M2Direction)direction; - (void)showHint; - (void)autoRun;  Ý nghĩa: - (void)startNewSessionWithScene:(M2Scene *)scene: Tạo trò chơi - (void)moveToDirection:(M2Direction)direction: Hiển thị trạng thái thay đổi cách di chuyển người dùng lựa chọn - (void)showHint: Gọi đến AI tính tốn theo Minimax alpha-beta để đưa nước tối ưu hiển thị dẫn người chơi theo cách tối ưu máy tìm - (void)autoRun: Hàm cho máy tự động chơi trò chơi 2048 Chi tiết cài đặt số hàm quan trọng chƣơng trình - (M2Vector *)bestMove { // Khai báo kết tối ưu tìm M2AIResult *newBest; // Khởi tạo thời gian bắt đầu tìm kiếm _startTime = [NSDate date]; @autoreleasepool { M2AIResult *result; // Tính tốn từ độ sâu for (NSInteger depth = 0; depth GSTATE.searchTimeOut) break; result = [self searchWithPlayerTurn:YES depth:depth alpha:-1000000 beta:1000000 positions:0 cutoffs:0]; if (result && (!newBest || result.score >= newBest.score)) { (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 57 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 newBest = result; } } } return newBest.move; Hàm Minimax alpha-beta - (M2AIResult *)searchWithPlayerTurn:(BOOL)playerTurn depth:(NSInteger)depth alpha:(double)alpha beta:(double)beta positions:(NSInteger)positions cutoffs:(NSInteger)cutoffs { if (ABS([_startTime timeIntervalSinceNow]) > GSTATE.searchTimeOut) return nil; double bestScore; M2Vector *bestMove; M2AIResult *result; if (playerTurn) { // Nếu người chơi MAX bestScore = alpha; for (M2Vector *direction in M2Vectors) { if ([self.grid isMovableInDirection:direction]) { M2Grid *movedGrid = [self.grid gridAfterMoveInDirection:direction]; positions++; if ([movedGrid isWinningBoard]) { return [[M2AIResult alloc] initWithMove:direction score:10000 positions:positions cutoffs:cutoffs]; } if (depth == 0) { result = [[M2AIResult alloc] initWithMove:direction score:movedGrid.heuristicValue positions:0 cutoffs:0]; } else { M2AI *newAI = [[M2AI alloc] initWithGrid:movedGrid]; newAI.startTime = _startTime; result = [newAI searchWithPlayerTurn:NO depth:depth - alpha:bestScore beta:beta positions:positions cutoffs:cutoffs]; if (result.score >= 9900) result.score ; positions = result.positions; cutoffs = result.cutoffs; } if (!result) return nil; if (result.score > bestScore) { bestScore = result.score; bestMove = direction; } // Cắt tỉa beta (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 58 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 if (bestScore > beta) { cutoffs++; return [[M2AIResult alloc] initWithMove:bestMove score:beta positions:positions cutoffs:cutoffs]; } } } } else { // Nếu người chơi MIN bestScore = beta; NSArray *availableCells = [self.grid availableCells]; NSMutableDictionary *score1 = [NSMutableDictionary dictionary]; NSMutableDictionary *score2 = [NSMutableDictionary dictionary]; NSDictionary *scores = @{@1: score1, @2: score2}; for (NSNumber *level in @[@1, @2]) { for (M2Cell *availableCell in availableCells) { [self.grid insertDummyTileAtPosition:availableCell.position withLevel:level.integerValue]; NSMutableDictionary *subscore = scores[level]; subscore[availableCell] = @(-self.grid.smoothness + self.grid.dimension * self.grid.dimension - (availableCells.count - 1)); [self.grid removeTileAtPosition:availableCell.position]; } } NSMutableArray *candidates = [NSMutableArray array]; double maxScore = MAX([[[scores[@1] allValues] valueForKeyPath:@"@max.self"] doubleValue], [[[scores[@2] allValues] valueForKeyPath:@"@max.self"] doubleValue]); for (NSNumber *level in scores) { for (M2Cell *cell in scores[level]) { double score = [scores[level][cell] doubleValue]; if (ABS(score - maxScore) < 0.00001) { [candidates addObject:@{@"cell": cell, @"level": level}]; } } } for (NSDictionary *candidateInfo in candidates) { M2Grid *newGrid = [self.grid copy]; M2Position candidatePosition = [(M2Cell *)candidateInfo[@"cell"] position]; [newGrid insertDummyTileAtPosition:candidatePosition withLevel:[candidateInfo[@"level"] integerValue]]; positions++; M2AI *newAI = [[M2AI alloc] initWithGrid:newGrid]; (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 TIEU LUAN MOI download : skknchat@gmail.com 59 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048 (LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048(LUAN.van.THAC.si).tim.hieu.ve.chien.luoc.tim.kiem.trong.cac.tro.choi.doi.khang.va.ung.dung.vao.tro.choi.2048

Ngày đăng: 17/12/2023, 02:06

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN