1. Trang chủ
  2. » Công Nghệ Thông Tin

Doing Dogem In 2 Hours

16 44 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 16
Dung lượng 14,18 KB

Nội dung

Ngày nay, Trí tuệ nhân tạo đã và đang được ứng dụng nhiều vào thực tiễn. Trí tuệ nhân tạo đã chứng tỏ được thế mạnh của mình trong các công việc đòi hỏi khả năng suy nghĩ và tính toán tương tự như con người, trong đó, vấn đề tìm kiếm có đối thủ đang được áp dụng rất rộng rãi trong các trò chơi đối kháng. Xuất phát từ những vấn đề nêu trên, bài tập lớn “Phương pháp tìm kiếm có đối thủ. Mô tả cây trò chơi cho bài toán Dodgem. Sử dụng chiến lược cắt tỉa Alpha-Beta. Từ một trạng thái, hãy mô tả bằng chương trình cắt tỉa Beta trong phân tích độ sâu là 5” nhằm mục đích làm rõ hơn phương pháp tìm kiếm có đối thủ, mô tả cây trò chơi cho bài toán Dodgem và sử dụng chiến lược cắt tỉa Alpha- Beta để xây dựng chương trình minh họa. Những phần trình bày chính trong bài tập lớn này bao gồm: CHƯƠNG I. BÀI TOÁN TRÒ CHƠI DODGEM CHƯƠNG II. XÂY DỰNG CHƯƠNG TRÌNH

Với mục tiêu giúp bạn xây dựng trò chơi Dodgem, sau q trình tìm tòi, tơi xin dịch trích dẫn từ tài liệu đọc qua, nhằm tóm lược lại cách đọng nhất, giúp bạn tiết kiệm thời gian, công sức qua trình làm trò chơi Dodgem, tơi xin giới thiệu tài liệu với tiêu đề: Doing Dogem In Hours Mục lục: Chương I: Giới Thiệu Dodgem Game Chương II: Hàm đánh giá thuật toán Chương III: Xây dựng thuật toán cho Dodgem Game Chương IV: Dodgem Game References Nội dung Chương I: Giới thiệu Dodgem Game Dodgem game, chess game giống cờ caro, cờ tướng, Mỗi game có người chơi Trong đó, người gọi Max, người lại gọi Min Hai người thay phiên đưa nước theo quy luật Trò chơi Dodgen (được tạo Colin Vout) Có hai quân Trắng hai quân Đen, ban đầu xếp vào bàn cờ 3*3 (Hình vẽ) Quân Đen tới trống bên phải, Quân Trắng tới trống bên trái, bên phải, Quân Đen cột ngồi bên phải khỏi bàn cờ, quân Trắng hàng khỏi bàn cờ Ai đưa hai quân m.nh khỏi bàn cờ trước thắng, tạo t.nh bắt đối phương không thắng Vấn đề đặt là: lựa chọn nước tối ưu dành cho Doing Dodgem In Hours Trang Chương II: Hàm đánh giá thuật tốn Trong trò chơi Dodgem game có thuật toán sử dụng như: Minimax, Negamax, AlphaBeta Trong lần giới thiệu xin giới thiệu thuật tốn Minimax AlphaBeta, bạn đọc tìm hiểu thêm thuật tốn Negamax website:http://www.hamedahmadi.com/gametree/#minimax Các bạn theo dõi hình bên Như để tìm nước tối ưu dành cho quân Đen, ta phải duyệt hết qua tất đường có nó, ta tạo trò chơi Như vậy, câu hỏi đặt ta lựa chọn nước thích hợp (dành cho người chơi computer) Câu trả lời ta cần phải xây dựng hàm đánh sau: Ngoài ra, quân trắng cản trực tiếp quân đen, cộng thêm 40 điểm cho quân trắng, cản gián tiếp cộng 30 điểm, Tương tự cho quân đen, quân Đen cản trực tiếp quân Trắng thêm -40 điểm, cản gián tiếp thêm -30 điểm Doing Dodgem In Hours Trang Ví dụ, tính giá trị bàn cờ cho hình vẽ bên Trong bàn cờ đầu, ta có giá trị sau: Quân đen: -10 + = -10, Quân trắng: + 10 = 15, xét trạng thái khác, ta thấy quân đen vừa bị cản trực tiếp, vừa bị cản gián tiếp, Quân trắng thêm 70 điểm, Vậy KQ cuối là: -10 + 15 +70 = 75, tương tự, cho hình số Chương III: Xây dựng thuật toán cho Dodgem Game Như nói trên, lần giới thiệu này, tơi xin giới thiệu đến bạn thuật toán Minimax AlphaBeta *Thuật toán Minimax: Nguyên lý: Nước tối ưu dành cho v, nước duyệt qua tất đỉnh u, đỉnh tốt số đỉnh v Như vậy, vận dụng quy tắc trên, ta tìm hiểu hình bên dưới, Doing Dodgem In Hours Trang Với Blue (Quân Trắng), ta chọn Max(các children), Red (Quân Đen), ta tìm Min(các children) Từ hình vẽ trên, ta xây dựng thủ tục đệ quy, gồm hàm, BlueValue() đại diện cho Quân trắng, nhằm tìm nước tối ưu cho ( Max(children)), ngược lại, RedValue() đại diện cho quân đen, tìm Miin(Children) cho int BlueValue(Board b, int depth) { if ((GameOver(b) or depth>MaxDepth) return Analysis(b) int max = -infinity for each legal move m in board b { copy b to c make move m in board c int x = RedValue(c, depth+1) if (x>max) max = x } return max } int RedValue(Board b, int depth) { if ((GameOver(b) or depth>MaxDepth) return Analysis(b) int = infinity for each legal move m in board b { copy b to c make move m in board c int x = BlueValue(c, depth+1) if (x eval(v), ta khơng cần xuống để đánh giá đỉnh a mà khơng ảnh hưởng dến đánh giá đỉnh c Hay nói cách khác ta cắt bỏ gốc a Lập luận tương tự cho trường hợp a đỉnh Đen, trường hợp eval(u) < eval(v) ta cắt bỏ gốc a Cụ thể hơn, ta có hình bên Doing Dodgem In Hours Trang Trong khi, ta cố tìm giá trị cho A, Chúng ta xuống B, tìm giá trị là Min(6,9) Sau đó, ta qua C Từ đó, tính E là Max(4,-2) Do đó, C nhỏ hơn,Ngay lúc ta biết giá trị C MaxDepth) return Analysis(b) int max = -infinity for each legal move m in board b { copy b to c make move m in board c int x = RedValue(c, depth+1, alpha, beta) if (x>max) max = x if (x>alpha) alpha = x if (alpha>=beta) return alpha } return max } int RedValue(Board b, int depth, int alpha, int beta) { if ((GameOver(b) or depth>MaxDepth) return Analysis(b) int = infinity for each legal move m in board b { copy b to c make move m in board c int x = BlueValue(c, depth+1, alpha, beta) if (x= beta thay alpha>beta, điều làm tăng tốc độ cho chương trình Các hàm khởi tạo giá trị ban đầu sau: depth=0; alpha=-infinity, beta=infinity Như vậy, tùy vào quân Trắng hay quân Đen mà bạn gọi hàm BlueValue() trước RedValue() trước thông qua hàm AlphaBeta() sau: Void Alpha_Beta(u, v) { Alpha = - infinity; Beta = infinity; For Mỗi đỉnh w u { If(val MaxDepth) return Analysis(b) int = infinity for each legal move m in board b { copy b to c make move m in board c int x = BlueValue(c,... Trắng u) Minval(u, a, b) (hàm xác định giá trị đỉnh Đen u) int BlueValue(Board b, int depth, int alpha, int beta) { if ((GameOver(b) or depth>MaxDepth) return Analysis(b) int max = -infinity for... Miin(Children) cho int BlueValue(Board b, int depth) { if ((GameOver(b) or depth>MaxDepth) return Analysis(b) int max = -infinity for each legal move m in board b { copy b to c make move m in

Ngày đăng: 17/09/2019, 23:43

w