Bài giảng Trí tuệ nhân tạo: Bài 8 Trò chơi đối kháng không xác định cung cấp cho người học những kiến thức như: Khái niệm không xác định; Lượng giá Minimax; Thuật toán Alpha-Beta; Các biến thể và phát triển; Rủi ro và thực tế. Mời các bạn cùng tham khảo!
TRÍ TUỆ NHÂN TẠO Bài 8: Trị chơi đối kháng không xác định Nội dung Khái niệm khơng xác định Lượng giá Minimax Thuật tốn Alpha-Beta Các biến thể phát triển Rủi ro thực tế Trương Xuân Nam - Khoa CNTT Phần Khái niệm không xác định TRƯƠNG XUÂN NAM Phân loại trị chơi Thơng tin rõ ràng Hai phía Trò chơi tổng quát Chơi theo lượt Chơi tự Thơng tin mờ Nhiều phía Trương Xn Nam - Khoa CNTT Phân loại chiến lược chơi Số hình trạng ít: Tính trạng thái thắngthua Số hình trạng nhiều – KHƠNG tách thành trị chơi con: Khơng tính tốn (do q nhiều), Số hình trạng nhiều – sử dụng máy tính để tính tách thành trị tốn bước chơi con: Tính trạng thái thắng thua đồ thị tổng Trương Xuân Nam - Khoa CNTT Khái niệm khơng xác định Trị chơi đối kháng: Hai người chơi Quyền lợi đối lập (zero-sum game) Trị chơi khơng xác định: Số hình trạng q nhiều, khơng thể tính tốn kết cục thắngthua Khơng có định nghĩa rõ ràng việc thắng-thua Trương Xuân Nam - Khoa CNTT Phần Lượng giá Minimax TRƯƠNG XUÂN NAM Chiến lược chung Sử dụng cơng suất máy tính mơ diễn biến có trị chơi Giới hạn chiều sâu để tránh bùng nổ tổ hợp Đưa đánh giá (tương đối) cho hình trạng “cuối” Xây dựng chiến lược để “ép” đối phương vào hình trạng cuối có lợi cho máy tính Trương Xuân Nam - Khoa CNTT Lượng giá Minimax Gọi trạng thái trò chơi S Hàm E(S) trả số điểm đánh giá lợi bên trước so với bên sau S Diến biến trận đấu: Ở lượt đầu tiên: người thứ cố gắng chọn nước có E(S) lớn (max) Ở lượt thứ hai: người thứ hai cố gắng chọn nước để E(S) nhỏ (min) … Trương Xuân Nam - Khoa CNTT Lượng giá Minimax Chiến lược chung: Tối thiếu hóa lựa chọn tốt đối phương (mini-max) Trương Xuân Nam - Khoa CNTT 10 10 Hoạt động alpha-beta Trương Xuân Nam - Khoa CNTT 17 Hoạt động alpha-beta Trương Xuân Nam - Khoa CNTT 18 Thuật toán Alpha-Beta chuẩn Thuật tốn hiệu chỉnh ngắn gọn sau function alphabeta(state, depth, α, β) if depth=0 return EVALUTE (state) if state as TERMINAL return EVALUTE (state) for s in SUCCESSORS (state) α = max(α, -alphabeta(s, depth-1, -β, -α)) if β ≤ α break return α function α-β(state) return an action V = alphabeta(state, depth, -∞, +∞) return action ứng với giá trị V Trương Xuân Nam - Khoa CNTT 19 Đánh giá Alpha-Beta Thuật toán Minimax địi hỏi phải xét tồn trị chơi (giới hạn độ sâu d): bd Thuật toán Alpha-Beta: Trường hợp tốt nhất: bd/2 Trường hợp trung bình: b3d/4 Trường hợp = Minimax Kết thuật toán Trương Xuân Nam - Khoa CNTT 20 Đánh giá Alpha-Beta Alpha-Beta tăng trung bình 33% độ sâu tính tốn xét thời gian tìm kiếm Nếu máy tính sử dụng Minimax tính trước nửa nước (fly) dùng Alpha-Beta tính trước 12 nửa nước Chú ý: minimax cờ Vua độ sâu tính tốn khoảng 7.5 nghìn tỉ hình trạng Trương Xuân Nam - Khoa CNTT 21 Phần Các biến thể phát triển TRƯƠNG XUÂN NAM 22 Các biến thể phát triển Tuy đạt hiệu ấn tượng alpha-beta chưa đủ, người ta đưa ý tưởng phát triển: 1) 2) 3) 4) Tìm nước tối ưu sớm Thăm dị loại bỏ nước yếu Thu hẹp miền tìm kiếm Sử dụng lại thơng tin có Trương Xuân Nam - Khoa CNTT 23 Các biến thể phát triển NegaScout: Sử dụng cửa sổ thăm dò hẹp để thăm dò Iterative deepening search: Tìm kiếm với độ sâu tăng dần từ 1, 2, 3, Aspiration windows: Thay tìm kiếm cửa sổ đầy đủ, ta tìm cửa sổ hẹp hơn, VD: Độ sâu ta tính nước tối ưu 120, độ sâu ta cần tìm cửa sổ [90,150] Trương Xuân Nam - Khoa CNTT 24 Các biến thể phát triển Hashtable (transposition table): Lưu lại trạng thái tính cũ để khỏi tính lại (có lợi thứ tự quân khác bàn cờ) Late move reductions: Thu hẹp độ sâu tìm kiếm ứng viên nhẹ kí Nullmove reductions: Thu hẹp độ sâu tìm kiếm sau thực nước chấp Trương Xuân Nam - Khoa CNTT 25 Thứ tự phát sinh nước Việc xem xét nước hợp lý giúp nhanh chóng tìm kết tốt, qua giảm thiểu số trạng thái cần tính tốn Một vài ưu tiên thực phát sinh nước (cờ Vua): Main variation: nước tốt biết Nullmove: không đi, chấp nước đối phương Killer moves: duyệt trước nước ứng viên best-move (thường ứng viên nặng kí nhất) History heuristic: ưu tiên số nước tốt lần tìm kiếm trước Một dạng killer-moves, lưu lại nước killer-moves gặp (không quan trọng độ sâu) Killer heuristic: nước ăn quân, thử ăn quân giá trị cao trước, ăn quân giá trị thấp sau Nước thông thường Trương Xuân Nam - Khoa CNTT 26 NegaScout function negascout(state, depth, α, β) if depth=0 return EVALUTE(state) if state as TERMINAL return EVALUTE(state) b = β for s in SUCCESSORS(state) α = max(α, -negascout(s, depth-1, -b, -α)) if β ≤ α return α if b ≤ α α = -negascout(s, depth-1, -b, -α) if β ≤ α return α b = α + return α Trương Xuân Nam - Khoa CNTT 27 Phần Rủi ro thực tế TRƯƠNG XUÂN NAM 28 Rủi ro Hiệu ứng đường giăng (horizon effect): Do định trước độ sâu tìm kiếm máy nhìn thấy hình trạng điểm cao quân sau Cách giải (phần nào) hiệu ứng đường giăng: Cách tính tốn giá trị “lợi thế” cách cẩn thận Quiescence search: tiếp tục tìm kiếm sâu cho hình trạng “nóng”, chẳng hạn: • Đổi qn • Chiếu tướng Trương Xuân Nam - Khoa CNTT 29 Chương trình chơi cờ Xây dựng cách đánh giá trạng thái bàn cờ (cho điểm hình trạng) Sức mạnh quân Vị trí đứng quân Sự liên kết nhóm qn Sự an tồn Tướng … Đánh giá trạng thái bàn cờ cần có tri thức chuyên gia cờ Hoặc sử dụng thuật tốn học máy để tự tìm cách đánh giá phù hợp (đây cách Google Alpha thực hiện) Trương Xuân Nam - Khoa CNTT 30 Chương trình chơi cờ Tìm kiếm: Alpha-Beta biến thể Phát sinh nước trạng thái Cẩm nang khai cuộc: cho phép nhanh chóng chọn nước nghiên cứu từ trước tốt Chương trình trọng tài: giúp nhanh chóng kiểm tra xem phiên cải tiến sau có hiệu khơng Trương Xn Nam - Khoa CNTT 31 ... nước tệ (từ m-1 trở xuống) Trương Xuân Nam - Khoa CNTT 16 Hoạt động alpha-beta Trương Xuân Nam - Khoa CNTT 17 Hoạt động alpha-beta Trương Xuân Nam - Khoa CNTT 18 Thuật toán Alpha-Beta chuẩn Thuật... action ứng với giá trị V Trương Xuân Nam - Khoa CNTT 11 Phần Thuật toán Alpha-Beta TRƯƠNG XUÂN NAM 12 Thuật toán Alpha-Beta (1/3) Trương Xuân Nam - Khoa CNTT 13 Thuật toán Alpha-Beta (2/3) state... max(α, -negascout(s, depth-1, -b, -? ?)) if β ≤ α return α if b ≤ α α = -negascout(s, depth-1, -b, -? ?) if β ≤ α return α b = α + return α Trương Xuân Nam - Khoa CNTT 27 Phần Rủi ro thực tế TRƯƠNG XUÂN