cài đặt thuật toán a game 15-puzzle

13 895 0
  • Loading ...
    Loading ...
    Loading ...

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

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 18/12/2014, 10:16

TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT KHOA CÔNG NGHÊ THÔNG TIN TRÍ TUỆ NHÂN TẠO ĐỀ TÀI : CÀI ĐẶT THUẬT TOÁN A* GAME 15-PUZZLE GVHD :Ts.Lê Văn Hưng Nhóm sinh viên: 1.Vũ Đại Nghĩa 2.Vũ Văn Hải Hà Nội 12/2011 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng Mục Lục Mục Lục 2 LỜI NÓI ĐẦU 3 CHƯƠNG I: GIỚI THIỆU VỀ TRÒ CHƠI 15-PUZZLE 4 1. TỔNG QUAN VỀ TRÒ CHƠI 15-PUZZLE 4 CHƯƠNG II: THUẬT TOÁN TÌM KIẾM A* 4 1. MÔ TẢ THUẬT TOÁN 4 2. ÁP DỤNG MÔ HÌNH VÀO BÀI TOÁN 5 CHƯƠNG III: CHƯƠNG TRÌNH 9 1. 15-PUZZLE CHƠI VỚI SỐ 9 2. 15-PUZZLE CHƠI VỚI ẢNH 9 3. 15-PUZZLE ÁP DỤNG THUẬT TOÁN 9 3.1. MÃ HÓA BÀN CỜ THÀNH SỐ KIỂU INT64 BIT 9 3.2. BIỂU DIỄN TRẠNG THÁI 9 3.3. THUẬT TOÁN IDS-A* 11 4. CHƯƠNG TRÌNH 13 Trang 2 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng LỜI NÓI ĐẦU Hiện nay ở Việt Nam cũng như trên toàn thế giới, nhu cầu chơi game đã là một nhu cầu không thể thiếu của mỗi người, ở các lứa tuổi ngành nghề khác nhau. Vì thế đã có rất nhiều thể loại game khác nhau ra đời. Game hành động, game chiến đấu…. và tất nhiên là không thể thiếu các game trí tuệ. Puzzle là một thể loại game trí tuệ, Puzzle bao gồm rất nhiều các biến thể qua nhiều năm phát triển. 15-Puzzle là một trong những biến thể của game Puzzle. Vậy để hiểu rõ một trò chơi được cài đặt ra sao, cách thức chơi thế nào, và cách sử dụng trí tuệ nhân tạo để tạo ra một trò chơi. Do đó, em đã tìm hiểu và lựa chọn đề tài xây dựng game 15-Puzzle. Trang 3 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng CHƯƠNG I: GIỚI THIỆU VỀ TRÒ CHƠI 15-PUZZLE 1. TỔNG QUAN VỀ TRÒ CHƠI 15-PUZZLE - Puzzle là một trò chơi điều khiển các khối trượt. Các khối trượt là những con số hoặc hình ảnh sao cho kết quả được dạy số được sắp xếp tăng hoặc giảm dần, hoặc các hình được ghép lại từ các miếng nhỏ thành hình ban đầu. Trò chơi này được Sam Loyd nghĩ ra từ năm 1878. CHƯƠNG II: THUẬT TOÁN TÌM KIẾM A* 1. MÔ TẢ THUẬT TOÁN - Thuật toán tìm kiếm A* được mô tả qua thủ tục sau: Procedure A * Begin Đặt trạng thái đầu vào ds L; While true do Begin If ds L rỗng then Begin Thông báo thất bại; Kết thúc; End; u <- trạng thái đầu; If u ≡ đích then Begin Thông báo thành công; Kết thúc; End; Trang 4 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng For mỗi v kề u do Begin g(v) = g(u) + k(v,u); f(v) = g(v) + h(u); Đặt v vào ds L sao cho L tăng dần theo hàm f; father(v) <-u; end; end; end; 2. ÁP DỤNG MÔ HÌNH VÀO BÀI TOÁN Trạng thái ban đầu: > Trạng thái đích Đặt trạng thái đầu vào danh sách L: Xét u <- # đích Ta liệt kê các trạng thái v là trạng thái con của trạng thái đang xét ở trên: Trang 1 2 3 4 5 6 7 9 D 0 A B 8 E F C 1 2 3 4 5 6 7 9 D 8 A B C E F 0 1 2 3 4 5 6 7 9 D 0 A B 8 E F C 5 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng v: Các giá trị 0 và 1 ở trên chính là các hàm đánh giá f(v) được tính bằng cách đếm số ô lệch so với vị trí đích của ô vừa mới di chuyển Tiếp theo ta đặt v vào danh sách L sao cho danh sách L tăng dần theo f(v) đã được tính ở trên L: Tiếp đến ta xét trạng thái đầu tiên có f(v) nhỏ nhất trong danh sách L Trang 11 2 3 0 5 6 7 9 D 4 A B 8 E F C 01 2 3 4 5 6 7 9 D 8 A B 0 E F C 11 2 3 4 5 6 0 9 D 7 A B 8 E F C 01 2 3 4 5 6 7 9 D 8 A B 0 E F C 11 2 3 0 5 6 7 9 D 4 A B 8 E F C 11 2 3 4 5 6 0 9 D 7 A B 8 E F C 6 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng Xét u <- # đích Tiếp tục liệt kê các trạng thái con của trạng thái vừa xét ở trên v: Các giá trị f(v) được tính như trên hình vẽ, tiếp theo đưa các v vào danh sách L và lại sắp xếp theo thứ tự tăng dần của hàm f(v) L: Xét u <- ≡ Đích -> Tìm kiếm thành công với đường đi 8C. Trang 1 2 3 4 5 6 7 9 D 8 A B 0 E F C 01 2 3 4 5 6 7 9 D 8 A B C E F 0 11 2 3 4 5 6 7 9 D 8 A 0 B E F C 01 2 3 4 5 6 7 9 D 8 A B C E F 0 11 2 3 4 5 6 7 9 D 8 A 0 B E F C 1 2 3 4 5 6 7 9 D 8 A B C E F 0 7 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng Cứ như vậy, áp dụng thuật toán tìm kiếm IDS-A* mô hình bài toán 15-Puzzle bắt đầu từ trạng thái đầu sẽ tìm ra trạng thái đích như hình dưới: Trang 1 2 3 4 5 6 7 9 D 8 A B C E F 0 8 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng CHƯƠNG III: CHƯƠNG TRÌNH 1. 15-PUZZLE CHƠI VỚI SỐ 2. 15-PUZZLE CHƠI VỚI ẢNH 3. 15-PUZZLE ÁP DỤNG THUẬT TOÁN 3.1. MÃ HÓA BÀN CỜ THÀNH SỐ KIỂU INT64 BIT - Bàn cờ 16 ô sẽ được mã hóa thành một dãy số có độ dài 64bít. Khởi tạo: public Int64 board; 3.2. BIỂU DIỄN TRẠNG THÁI - Trạng thái ban đầu của chương trình sẽ được sinh ra dưới dạng các chữ số từ 0-9 và từ A-F sử dụng hệ hex: Hình 7 - Tương ứng với mỗi kí tự trong ô text mà bàn cờ sẽ mã hóa thành các vị trí có giá trị tương ứng trên bàn cờ bằng thuật toán sau: public void setValue(ref Int64 board, int index, int value) { board |= (Int64)value << index * 4; } Trang 9 Công nghệ phần mềm GVHD: Ts. Lê Văn Hưng State initialState; // Khởi tạo trạng thái ban đầu initialState.board = 0; // trạng thái ban đầu =0 for (int i=0; i < 16; ++i) { if (initialBoard[i] <= '9') setValue(ref initialState.board, i, initialBoard[i] - '0'); else setValue(ref initialState.board, i, initialBoard[i] - 'A' + 10); } - Tương ứng với trạng thái bắt đầu ở hình 7 ta hiển thị trạng thái bắt đầu trên chương trình như sau: Trang 10 [...]... idas_search(string initialBoard) { //khoi tao ban co State initialState; initialState.board = 0; for (int i=0; i < 16; ++i) { if (initialBoard[i] > 2) - targetRow) < Math.Abs((lastState.emptyPos & 0x3) - targetCol) + Math.Abs((lastState.emptyPos >> 2) - targetRow)) { ++newState.score; } Trang... 8 3.3 THUẬT TOÁN IDS -A* - Trong chương trình, thuật toán được xây dựng trên một hàm: bool dfs_search(ref State state, int maxScore, ref Stack result) { const string digits = "0123456789ABCDEF"; if (state.score > maxScore) return false; if (state.board == 0x0FEDCBA987654321L) { result.Push('\0'); return true; } State newState = new State(); if ((state.emptyPos & 0x3) != 0) //co the dich trai {... { if (makeMove(ref newState, ref state, maxScore, state.emptyPos - 1)) { result.Push(digits[newState.lastMoved]); if (dfs_search(ref newState, maxScore, ref result)) return true; result.Pop(); } } if ((state.emptyPos & 0x3) != 3) // co the dich phai { if (makeMove(ref newState, ref state, maxScore, state.emptyPos + 1)) { result.Push(digits[newState.lastMoved]); if (dfs_search(ref newState, maxScore,... quả được lưu vào stack mang tên result Stack result = new Stack(); int maxScore = 0; while (!dfs_search(ref initialState, maxScore, ref result)) ++maxScore; return getContent(result); } - Trong thuật toán trên các bước khi thực hiện sẽ gọi tới những hàm liên quan khác trong chương trình gồm có các hàm dịch bít, hàm kiểm tra các trạng thái c a bài toán 4 CHƯƠNG TRÌNH Trang 13 ... Trang 11 Công nghệ phần mềm GVHD: Ts Lê Văn Hưng result.Pop(); } } if ((state.emptyPos >> 2) != 0) // co the dich len { if (makeMove(ref newState, ref state, maxScore, state.emptyPos - 4)) { result.Push(digits[newState.lastMoved]); if (dfs_search(ref newState, maxScore, ref result)) return true; result.Pop(); } } if ((state.emptyPos >> 2) != 3) //co the dich xuong { if (makeMove(ref newState, ref state, . '9') setValue(ref initialState.board, i, initialBoard[i] - '0'); else setValue(ref initialState.board, i, initialBoard[i] - &apos ;A& apos; + 10); } initialState.emptyPos = (char)initialBoard.IndexOf('0'); . String idas_search(string initialBoard) { //khoi tao ban co State initialState; initialState.board = 0; for (int i=0; i < 16; ++i) { if (initialBoard[i] <= '9') setValue(ref. initialState.board, i, initialBoard[i] - '0'); else setValue(ref initialState.board, i, initialBoard[i] - &apos ;A& apos; + 10); } - Tương ứng với trạng thái bắt đầu ở hình 7 ta hiển
- Xem thêm -

Xem thêm: cài đặt thuật toán a game 15-puzzle, cài đặt thuật toán a game 15-puzzle, cài đặt thuật toán a game 15-puzzle, CHƯƠNG II: THUẬT TOÁN TÌM KIẾM A*, ÁP DỤNG MÔ HÌNH VÀO BÀI TOÁN, 15-PUZZLE ÁP DỤNG THUẬT TOÁN