Bài tập lớn Trí tuệ nhân tạo: Lập trình game sokoban

22 29 0
Bài tập lớn Trí tuệ nhân tạo: Lập trình game sokoban

Đ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í tuệ nhân tạo hay trí thông minh nhân tạo (Artificial Intelligence – viết tắt là AI) là một ngành thuộc lĩnh vực khoa học máy tính (Computer science). Là trí tuệ do con người lập trình tạo nên với mục tiêu giúp máy tính có thể tự động hóa các hành vi thông minh như con người. Cụ thể, trí tuệ nhân tạo giúp máy tính có được những trí tuệ của con người như: biết suy nghĩ và lập luận để giải quyết vấn đề, biết giao tiếp do hiểu ngôn ngữ, tiếng nói, biết học và tự thích nghi, … Công nghệ AI tạo ra máy móc và hệ thống thông minh thông qua việc sử dụng mô hình máy tính, kỹ thuật và công nghệ liên quan, giúp thực hiện các công việc yêu cầu trí thông minh của con người. Nhìn chung, đây là một ngành học rất rộng, bao gồm các yếu tố tâm lý học, khoa học máy tính và kỹ thuật. Một số ví dụ phổ biến về AI có thể kể đến ô tô tự lái, phần mềm dịch thuật tự động, trợ lý ảo trên điện thoại hay đối thủ ảo khi chơi trò chơi trên điện thoại.

BÁO CÁO BÀI TẬP LỚN HỌC PHẦN “TRÍ TUỆ NHÂN TẠO” Đề tài: LẬP TRÌNH GAME SOKOBAN GVHD: Sinh viên thực hiện: Hải Phòng, tháng 12 năm 2022 MỤC LỤC LỜI MỞ ĐẦU .3 CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI Tên đề tài Lựa chọn đề tài Công việc cần thực 4 Yêu cầu Tài liệu tham khảo .5 CHƯƠNG 2: CƠ SỞ LÍ THUYẾT .6 Tìm hiểu Trí tuệ nhân tạo .6 Giới thiệu ngôn ngữ lập trình Python CHƯƠNG 3: PHÂN TÍCH ĐỀ TÀI 11 Kiến thức chuẩn bị 11 Phương pháp giải toán .11 Lập trình game Sokoban 14 CHƯƠNG 4: KẾT LUẬN 22 Kết đạt 22 Những điều chưa làm .22 LỜI MỞ ĐẦU Với phát triển ngày mạnh mẽ, ngành Cơng nghệ thơng tin đóng vai trò ngày quan trọng, đặc biệt đời sống xã hội đại Những ứng dụng góp phần nâng cao chất lượng học tập, giải trí, cơng việc,… cách dễ dàng, hiệu Trong thời đại cơng nghệ 4.0, trí tuệ nhân tạo ngày ứng dụng, phổ biến lĩnh vực sống Mặc dù John McCarthy, nhà khoa học máy tính người Mỹ nhắc đến lần vào năm 1950, ngày thuật ngữ trí tuệ nhân tạo “ơng lớn” làng công nghệ biết, hiểu, hiểu hiểu phát triển rộng rãi Chúng bao gồm Google, Apple, Facebook, Microsoft, IBM… Sokoban giới thiệu lần vào năm 1982 Think Rabbit, cơng ty trị chơi máy tính thị trấn Takarazuka, Nhật Bản Trị chơi phát minh Hiroyuki Imabayashi Các phiên châu Âu xuất Spectrum Holobyte (1984 Apple II E) Một trò chơi tương đối yêu thích khơng giới trẻ mà phù hợp với trung niên, trị chơi giả trí phổ biến rộng rãi quốc gia có Việt Nam Sau toàn đề tài chúng em tìm hiểu xây dựng Nếu có thiếu sót tập chúng em xin mong nhận dạy góp ý thầy cô giáo Cuối em xin cảm ơn bảo thầy cô bạn Em xin chân thành cảm ơn! CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI Tên đề tài - Đề tài tập lớn: Lập trình game Sokoban Lựa chọn đề tài - Trí tuệ nhân tạo có bước phát triển to lớn lĩnh vực đời sống xã hội Trong đó, khơng thể khơng nói tới Trị chơi Trí tuệ- lĩnh vực ngày trọng phát triển cơng ty lập trình game - Trị chơi “Sokoban” đời vào năm 1981 Hiroyuki Imabayashi mắt lần đầu vào tháng 12 năm 1982 Đây game giải đố giúp người nâng cao khả tư chơi với máy, mang lại tính giải trí sau làm việc Trong báo cáo, chúng em sâu vào giải thích chế lập trình cách thức hoạt động game Cơng việc cần thực - Tìm hiểu Trí tuệ nhân tạo - Tìm hiểu thuật tốn A* - Sử dụng cơng cụ Pycharm - Tìm hiểu trị chơi Sokoban - Làm báo cáo tập lớn - Bảo vệ tập lớn Yêu cầu - Kết làm tập lớn: Báo cáo tập lớn - Báo cáo tập lớn phải trình bày theo mẫu quy định (kèm theo), báo cáo kết xuất thành tệp định dạng Word nộp qua Google Drive - Hạn nộp báo cáo tập lớn: Trong tuần 15 Tài liệu tham khảo - Giới thiệu Sokoban: https://vi.wikipedia.org/wiki/Sokoban - Video tham khảo: https://youtu.be/ev6XPeJ6mnw CHƯƠNG 2: CƠ SỞ LÍ THUYẾT Tìm hiểu Trí tuệ nhân tạo Trí tuệ nhân tạo hay trí thơng minh nhân tạo (Artificial Intelligence – viết tắt AI) ngành thuộc lĩnh vực khoa học máy tính (Computer science) Là trí tuệ người lập trình tạo nên với mục tiêu giúp máy tính tự động hóa hành vi thơng minh người Cụ thể, trí tuệ nhân tạo giúp máy tính có trí tuệ người như: biết suy nghĩ lập luận để giải vấn đề, biết giao tiếp hiểu ngơn ngữ, tiếng nói, biết học tự thích nghi, … Cơng nghệ AI tạo máy móc hệ thống thơng minh thơng qua việc sử dụng mơ hình máy tính, kỹ thuật cơng nghệ liên quan, giúp thực cơng việc u cầu trí thơng minh người Nhìn chung, ngành học rộng, bao gồm yếu tố tâm lý học, khoa học máy tính kỹ thuật Một số ví dụ phổ biến AI kể đến tô tự lái, phần mềm dịch thuật tự động, trợ lý ảo điện thoại hay đối thủ ảo chơi trị chơi điện thoại Tìm hiểu Sokoban Sokoban tạo vào năm 1981 Hiroyuki Imabayashi bắt đầu thưong mại lần đầu vào tháng 12 năm 1982 Thinking Rabbit, công ty phần mềm có trụ sở Takarazuka, Nhật Bản Năm 1988, Sokoban Spectrum HoloByte xuất Mỹ cho dòng Commodore 64, IBM-PC, Unix, Commodore Amiga Apple II với tên gọi Soko-Ban Sokoban thành công vang dội Nhật Bản bán 400.000 vào thời điểm Spectrum HoloByte nhập vào Hoa Kỳ Sokoban nghiên cứu Lý thuyết độ phức tạp tính tốn Bài tốn giải trị chơi Sokoban puzzles lúc đầu chứng minh NPkhó Sau nhiều nghiên cứu, toán cho cực khó so với tốn NP khác; PSPACE-đầy đủ Điều có lợi cho nghiên cứu trí tuệ nhân tạo (AI) giải tốn Sokoban xem việc tự động lập kế hoạch yêu cầu robot tự hoạt động Sokoban khó giải khơng hệ số rẽ nhánh lớn, mà cịn độ sâu tìm kiếm Một số loại chơi mở rộng vô hạn, với bước lặp tăng trưởng theo cấp số nhân cho bước đẩy kéo Người chơi có kinh nghiệm dựa chủ yếu vào kỹ thuật tìm kiếm thường nhanh chóng loại lượng lớn nước thừa hay nước sai lầm việc phát quy luật đích phụ, giảm lượng tìm kiếm cách đáng kể Giới thiệu ngơn ngữ lập trình Python a Định nghĩa nguồn gốc Python Python ngơn ngữ lập trình bậc cao cho mục đích lập trình đa năng, Python thiết kế với ưu điểm mạnh dễ đọc, dễ học dễ nhớ Python ngơn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người học lập trình ngơn ngữ lập trình dễ học; dùng rộng rãi phát triển trí tuệ nhân tạo Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu Python hoàn toàn tạo kiểu động dùng chế cấp phát nhớ tự động; tương tự Perl, Ruby, Scheme, Smalltalk, Tcl Python ngơn ngữ lập trình có từ lâu, thiết kế bắt đầu vào cuối năm 1980 Rossum muốn sử dụng ngôn ngữ thông dịch có cú pháp dễ hiểu để truy cập vào hệ thống Amoeba Sau đó, ơng định ơng định tạo ngôn ngữ mở rộng ngôn ngữ phát hành lần vào tháng năm 1991 b Tính Python - Ngôn ngữ nhập môn: Python hướng đến đơn giản dễ hiểu.Vì cấu trúc rõ ràng, cho phép viết mã lệnh với số lần gõ phím tối thiểu Cũng vậy, ngơn ngữ lý tưởng cho viết bắt đầu học lập trình - Mã nguồn mở hồn tồn miễn phí cho người học/người dùng: Đây điểm khác biệt so với nhiều ngơn ngữ lập trình bậc cao Python cho phép sử dụng miễn phí tất phần mềm chương trình viết ra.Khi biết Python gì, bạn không ngạc nhiên mã nguồn mở sở hữu cộng đồng đông đảo Điểm thuận lợi thắc mắc hỗ trợ, liên tục cập nhật cải thiện - Python tương thích đa tảng: Ngơn ngữ dễ dàng tương thích với nhiều hệ điều hành Windows, MacOS, Linux Thậm chí, việc di chuyển qua lại tảng không khó khăn - Nổi bật với khả nhúng mở rộng: Để tạo ứng dụng phức tạp, Python kết hợp nhiều ngơn ngữ lập trình khác - Tự động chuyển đổi phần code: Khi dùng Python, bạn lo đến vấn đề quản lý nhớ, dọn dẹp liệu,… Python tự động chuyển code sang ngôn ngữ máy tính tương thích giúp hệ thống hiểu - Thư viện lớn: Ngay bắt đầu tìm hiểu Python gì, bạn biết đến đặc điểm Nhờ số lượng thư viên khổng lồ, ngôn ngữ đáp ứng nhu cầu lập trình khác - Hướng đối tượng: Dù đơn giản hóa cho người học Python giữ chất hướng đối tượng Các vấn đề giải cách trực quan, dễ hiểu c Nhược điểm Python: - Tốc độ thực thi chậm: Python ngơn ngữ thơng dịch, có nghĩa hoạt động với trình thơng dịch, khơng phải với trình biên dịch Do đó, thực thi tương đối châm C, C++, Java nhiều ngôn ngữ khác - Tiêu thụ nhớ lớn: Các cấu trúc Python địi hỏi nhiều khơng gian nhớ Ngơn ngữ khơng thích hợp để sử dụng cho phát triển điều kiện nhớ hạn chế - Khơng thích hợp cho phát triển trị chơi thiết bị di động: Python chủ yếu sử dụng phát triển máy tính để bàn web phía máy chủ Nó khơng coi lí tưởng để phát triển ứng dụng di động phát triển trò chơi tiêu tốn nhiều nhớ tốc độ xử lí chậm so với ngơn ngữ lập trình khác - Phát lỗi mã: Vì Python thực thi thơng qua trình thơng dịch thay trình biên dịch, nên khơng thể phát lỗi q trình biên dịch điều khơng tốt cho nhà phát triển - Quyền truy cập sở liệu: Python coi không an tồn cao có nguy bảo mật Có số hạn chế sử dụng Python để truy cập sở liệu So với công nghệ phổ biến khác JDBC ODBC, lớp truy cập sở liệu Python phát triển sơ khai - Hạn chế thiết kế: Một vấn đề quan trọng Python hạn chế thiết kế - Khó kiểm tra: Vì ngơn ngữ dựa trình thơng dịch, khó để chạy kiểm tra mã viết Python Tất lỗi xuất thời gian chạy, điều khiến việc kiểm tra đoạn mã viết Python khó khăn 10 CHƯƠNG 3: PHÂN TÍCH ĐỀ TÀI Kiến thức chuẩn bị - Có kiến thức ngôn ngữ Python - Biết sử dụng công cụ lập trình Pycharm - Có hiểu biết định trị chơi Sokoban, tìm tịi, khám phá, có sáng tạo - Cần có kiến thức thuật tốn trí tuệ nhân tạo: A*… Mơ tả tốn o Sokoban trị chơi thuộc thể loại giải đố, có người di chuyển, thùng hàng đích đến( chấm đỏ) Người di chuyển phải đẩy số thùng hàng( khối vuông) vượt qua chướng ngại vật để đến đích cho sẵn Mỗi thao tác di chuyển thùng hàng lần, kéo, đẩy dãy hay nhiều khối Nếu có tồn thùng hàng bị kẹt góc tường, trò chơi thua, ngược lại thùng hàng đẩy tới đích chiến thắng trị chơi o Trị chơi thiết kế với có hai chế độ người chơi AI AI dựa thuật tốn A* lập trình sẵn để đẩy thùng hàng tới đích Với chế độ người chơi, người chơi phải tự dựa tính tốn thân để di chuyển vị trí thùng hàng tới đích Vì khơng có nút quay lại nên người chơi cần cân nhắc kĩ bước để tránh phạm sai lầm khiến trò chơi kết thúc Phương pháp giải toán o Lên ý tưởng 11 - Giải thuật sử dụng: A*, giải thuật heuristic sử dụng hàm lượng giá hàng đợi ưu tiên để tính tốn nước ngắn dẫn đến trạng thái mục tiêu đến trạng thái mục tiêu Một số hàm tính tốn, kiểm tra nước di chuyển, kiểm tra vị trí thùng hàng… o Các cấu trúc liệu Thuộc tính Kiểu Chức Board String[] Ma trận lưu map trạng thái State_parent State Trạng thái cha trạng thái Cost Int Giá trị phụ dùng để tính hàm lượng giá Heuristic Float Giá trị lượng giá trạng thái Check_ points Int[ ( ,)] Danh sách vị trí điểm đến Phương thức Kiểu Chức Get_ line( seft) String[ ] Hàm quay lui từ trạng thái mục tiêu tìm đến trạng thái để sinh đường Compute_ heuristic( seft) float Hàm tính tốn khoảng cách từ tất box đến tất checkpoint map 12 o Thuật toán A* - Trong toán này, chúng em xây dựng hàm g số bước mà người chơi kể từ trạng thái khởi đầu hàm h tổng khoảng cách nhỏ từ hộp đến đích Khi đó, hàm chi phí là: f= g+ h - Bước lựa chọn dựa vào hàm chi phí này, trạng thái có giá trị hàm thấp ưu tiên lựa chọn để duyệt trước Nếu có nhiều trạng thái có chi phí thấp thứ tự ưu tiên dựa vào thứ tự đến Priority queue sớm - Mỗi lần tính hàm h khoảng thời gian O( n3 ¿ ( n số hộp) Do đó, thời gian để thực bước di chuyển từ trạng thái O( n3 ¿ o Một số giải pháp đề xuất để tối ưu hóa lời giải - Ta kiểm tra trạng thái thùng hàng: Nếu có hộp bị kẹt góc ta loại bỏ trường hợp Loại bỏ tất thùng hàng di chuyển Sinh bước hợp lí giành cho người chơi 13 Lập trình game Sokoban a Các hàm function hỗ trợ - Hàm đệ quy get_line để quay lại trạng thái trạng thái mục tiêu: - Tính tốn hàm Heuristic sử dụng cho thuật toán A*: - Cho phép bảng lưu trữ hàng ưu tiên: - Ta có hàm check_win: kiểm tra xem bảng có mục tiêu hay không, trả True điểm kiểm tra bao phủ hộp: 14 - Hàm get_next_pos kiểm tra danh sách vị trí mà người chơi di chuyển từ vị trí tại: di chuyển hướng di chuyển chỗ trống target( đích cần đẩy thùng), 15 - Hàm is_board_exist kiểm tra trạng thái state có nằm danh sách hay khơng: - Hàm is_board_can_not_win kiểm tra xem có hộp nằm góc khơng Trả True hộp nằm góc tường, khơng thể thắng 16 - Hàm is_all_boxes_stuck hàm kiểm tra tất hộp ma trận có bị kẹt góc hay khơng b Cài đặt thuật tốn A* - Các thư viện cần cài đặt: - Time() trả số giây tính từ epoch: - Kiểm tra với hàm check_win, trạng thái ban đầu đạt mục tiêu khơng có điểm kiểm tra, ta trả kết “Found win”: - Ta khởi tạo trạng thái bắt đầu: 17 - Nếu hàng đợi không trống, ta tìm kiếm trạng thái nhận vị trí người chơi: - Lấy vị trí danh sách mà người chơi di chuyển đến với list_can_move Ta dùng for tạo trạng thái từ danh sách di chuyển Tạo bảng new_board: bảng chưa có danh sách trước bỏ qua trạng thái; có nhiều hộp bị kèm góc ta bỏ qua trạng thái; tất hộp bị kẹt, bỏ qua trạng thái - Tạo trạng thái với new_state Kiểm tra xem trạng thái có mục tiêu hay khơng Nếu trả kết “Found win” - Thêm trạng thái vào hàng ưu tiên danh sách chuyển: 18 - Tính thời gian kết thúc Nếu thời gian kết thúc( end_time- start_time lớn time_out- tức thời gian chơi quy định ) ta kết thúc chương trình - Nếu khơng tìm thấy giải pháp ta trả kết “Not Found” kết thúc chương trình c Cài đặt chế độ người chơi - Cài đặt số thư viện cần thiết để chạy chương trình: 19 - Trước tiên, ta kiểm tra thùng hàng, vị trí ma trận trả “Found win”: - Tạo trạng thái: - Ta sử dụng while để kiểm tra hàng đợi queue, thiết lập trạng thái: - Cài đặt trạng thái di chuyển lên trên, xuống dưới, qua trái, qua phải người chơi: 20

Ngày đăng: 12/12/2023, 22:11

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

Tài liệu liên quan