Báo cáo Bài tập lớn trí tuệ nhân tạo :Không gian trạng thái được mô tả là trò chơi cờ tướng. Hãy xây dựng chương trình giải quyết bài toán theo phương pháp cắt tỉa alpha-beta

5 4.7K 98
Báo cáo Bài tập lớn trí tuệ nhân tạo :Không gian trạng thái được mô tả là trò chơi cờ tướng. Hãy xây dựng chương trình giải quyết bài toán theo phương pháp cắt tỉa alpha-beta

Đang tải... (xem toàn văn)

Thông tin tài liệu

Báo cáo môn Trí tuệ nhân tạo Sinh viên: Đỗ Tuấn Sơn. Lớp: Tin5A. Giáo viên hướng dẫn: Ngô Hữu Phúc. Đề tài:Không gian trạng thái được tả trò chơi cờ tướng. Hãy xây dựng chương trình giải quyết bài toán theo phương pháp cắt tỉa alpha-beta. Để tả không gian trạng thái của 1, ta sử dụng 3 mảng răng cưa: private int[][] giatri = new int[150][]; private int[][] cha = new int[150][]; private int[][] con = new int[150][]; Mảng giatri[][] để chứa các giá trị của từng node, mảng cha[][] để xác định giá trị cha của từng node, mảng con để xác định node đó của cây hay đỉnh kết thúc. Thuật toán cắt tỉa Alpha-Beta: Ý tưởng này được gọi nguyên tắc Alpha-Beta do nó dùng trong thủ tụcAlphaBeta Hai tham số của thủ tục này (theo các đặt tên truyền thống) được gọi alpha và beta và dùng để theo dõi các triển vọng - chúng cho biết các giá trị nằm ngoài khoảng [alpha, beta] các điểm "thật sự tồi" và không cần phải xem xét nữa. Khoảng [alpha, beta] còn được gọi cửa sổ alpha, beta. Trong ngữ cảnh của các trò chơi, nguyên tắc Alpha-Beta nói rằng, mỗi khi xem xét một nút bất kì, nên kiểm tra các thông tin đã biết về các nút cha, ông của nó. Rất thể do đủ thông tin từ cha, ông nên không cần phải làm bất cứ việc gì nữa cho nút này. Cũng vậy, nguyên tắc này cũng giúp chỉnh sửa hoặc xác định chính xác giá trị tại nút cha, ông nó. Như trên nói, một cách để tiện theo dõi quá trình tính toán dùng các tham số alpha và beta để ghi lại các thông tin theo dõi cần thiết. Thủ tục AlphaBeta được bắt đầu tại nút gốc với giá trị của alpha -vôcùng và beta +vôcùng. Thủ tục sẽ tự gọi đệ quy chính nó với khoảng cách giữa các giá trị alpha và beta ngày càng hẹp hơn. -Đánh giá độ phức tạp của thuật toán Alpha-Beta: Trong trường hợp điều kiện lý tưởng, thuật toán Alpha-Beta chỉ cần xét số nút: +Số d chẵn: +Số d lẻ: b số nút, d độ sâu. Phương pháp alpha-beta: -Giả sử quá trình tìm kiếm đi xuống đỉnh Trắng a, đỉnh a đỉnh cùng cấp v đã xét. -Giả sử đỉnh a cha b, b đỉnh cùng cấp u đã xét; cha của b c. -Khi đó, giá của c ít nhất u, giá của b nhiều nhất v. -Nếu eval(u)> eval(v) (nếu trường hợp min-max-min thì eval(u)<eval(v)), ta không cần đi xuống đỉnh a nữa mà không ảnh hưởng tới giá của c. -Lập luận tương tự cho đỉnh a Đen, với đánh giá eval(u)<eval(v). Cắt tỉa gốc a nếu eval(u)>eval(v) Thuật toán cắt tỉa Alpha-Beta: private int AlphaBeta(int[][] gt, int[][] ch, Point vitri, int buoc, int val, int hang) //Thu+Hq0-t to+AOE-n c+Hq8-t c+HuU-t alpha-beta { if (con[vitri.X][vitri.Y] == 0) return gt[vitri.X][vitri.Y]; int count = 0; int max = int.MinValue; int min = int.MaxValue; if (vitri.X % 2 == 1) { for (int i = 0; i < gt[vitri.X + 1].Length; i++) { if (ch[vitri.X + 1][i] == vitri.Y) { if (buoc > 1) { if (count > 0) { if (min > gt[vitri.X + 1][i - 1]) min = gt[vitri.X + 1][i - 1]; gt[vitri.X + 1][i] = AlphaBeta(gt, ch, new Point(vitri.X + 1, i), buoc - 1, min, hang); } else { gt[vitri.X + 1][i] = AlphaBeta(gt, ch, new Point(vitri.X + 1, i), buoc - 1, int.MinValue, hang); } } count++; if (val <= gt[vitri.X + 1][i]) { return val; } else { if (max < gt[vitri.X + 1][i]) { max = gt[vitri.X + 1][i]; if (vitri.X == hang) { cot = i; } } } } } return max; } else { for (int i = 0; i < gt[vitri.X + 1].Length; i++) { if (ch[vitri.X + 1][i] == vitri.Y) { if (buoc > 1) { if (count > 0) { if (max < gt[vitri.X + 1][i - 1]) max = gt[vitri.X + 1][i - 1]; gt[vitri.X + 1][i] = AlphaBeta(gt, ch, new Point(vitri.X + 1, i), buoc - 1, max, hang); } else { gt[vitri.X + 1][i] = AlphaBeta(gt, ch, new Point(vitri.X + 1, i), buoc - 1, int.MaxValue, hang); } } count++; if (val >= gt[vitri.X + 1][i]) { return val; } else { if (min > gt[vitri.X + 1][i]) { min = gt[vitri.X + 1][i]; if (vitri.X == hang) { cot = i; } } } } } return min; } } Thiết kế chương trình: Nút Newgame để chơi lại từ đầu. Nút Caidatdulieu để thiết lập database cho máy. Nút Close đóng chương trình.

Ngày đăng: 12/03/2014, 19:50

Từ khóa liên quan

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

Tài liệu liên quan