You are on page 1of 29

TRÍ TUỆ NHÂN TẠO

Tìm kiếm ñối kháng – Trò chơi


Nội dung trình bày
2

 Trò chơi
 Trò chơi ñối kháng và tìm kiếm
 Thuật toán MINIMAX
 Tỉa nhánh α-β
 Hàm lượng giá, Tìm kiếm cắt nhánh
Trò chơi
4

 Cờ vua
 1997, DeepBlue ñánh bại Gary Kasparov trong
một trận ñấu 6 ván
 Bí quyết:
 Tìm kiếm vét cạn với ñộ sâu cao nhất có thể
 Tính ñược 200.000.000 nước ñi mỗi giây so với 2 của
Kasparov
 (99.99% nước ñi ñược xem là ngu ngốc)
 Hàm lượng giá cực kỳ phức tạp
Trò chơi
4

 Cờ vua
 1997, DeepBlue ñánh bại Gary Kasparov trong
một trận ñấu 6 ván
 Bí quyết:
 Tìm kiếm vét cạn với ñộ sâu cao nhất có thể
 Tính ñược 200.000.000 nước ñi mỗi giây so với 2 của
Kasparov
 (99.99% nước ñi ñược xem là ngu ngốc)
 Hàm lượng giá cực kỳ phức tạp
Thuật toán MINIMAX
8

 Những người chơi là tối ưu


 MAX tối ña hóa hàm lợi ích
 MIN tối thiểu hóa hàm lợi ích

 Chiến lược của MAX phụ thuộc vào chiến lược


của MIN ở bước sau
 Giá trị MINIMAX-VALUE: tiện ích ở trạng thái
kết thúc tương ứng của ñường ñi, giả sử
những người chơi luôn tối ưu
Trò chơi ñối kháng và tìm kiếm
6

 Các thành phần:


 Tập trạng thái: tập “cấu hình” hợp lệ của trò chơi
 Trạng thái ban ñầu (initial state)
 Trạng thái kết thúc (terminal state), trạng thái ñích
 Hàm succs(s): các nước ñi hợp lệ
 Hàm lợi ích (utility function): ñánh giá trạng thái
kết thúc
 Hai người chơi: MAX vs. MIN
 Không tìm ñường ñi, tìm nước ñi “tốt nhất”.
 Nước ñi của MAX phụ thuộc vào nước ñi của
MIN và ngược lại.
Ví dụ cây tìm kiếm trò chơi - TicTacToe
7

MAX(x) Các nước ñi

X X X …
MIN(o) X
X X

XO X O … Các trạng thái


MAX(x)

… … …

XOX XOX XOX


KẾT THÚC OX OOX X
O XXO XOO
Lợi ích -1 0 +1
Thuật toán MINIMAX
8

 Những người chơi là tối ưu


 MAX tối ña hóa hàm lợi ích
 MIN tối thiểu hóa hàm lợi ích

 Chiến lược của MAX phụ thuộc vào chiến lược


của MIN ở bước sau
 Giá trị MINIMAX-VALUE: tiện ích ở trạng thái
kết thúc tương ứng của ñường ñi, giả sử
những người chơi luôn tối ưu
Giá trị MINIMAX
9

 MINIMAX-VALUE(n) =
 Utility(n) nếu n là trạng thái kết thúc
 max{MINIMAX-VALUE(s) | s∈succs(n)}

nếu n là một nút MAX


 min{MINIMAX-VALUE(s) | s∈succs(n)}

nếu n là một nút MIN


Giá trị MINIMAX (vd)
10

MAX A

MIN
B C D

3 12 8 2 4 6 14 5 2

Ở trạng thái kết thúc,


giá trị MINIMAX-
VALUE(n) = Utility(n)
Giá trị MINIMAX (vd)
11

MAX A

MIN
B 3 C 2 D 2

3 12 8 2 4 6 14 5 2

Tại mỗi trạng thái có thể, MIN luôn chọn ñường ñi


tối thiểu hóa giá trị tiện ích ở trạng thái kết thúc
Giá trị MINIMAX (vd)
12
ðến lượt mình, MAX tìm
MAX 3 cách tối ña hóa giá trị
A
MINIMAX

MIN
B 3 C 2 D 2

3 12 8 2 4 6 14 5 2

Và MAX chọn chiến lược


ñi ñến B ứng với giá trị
MINIMAX tối ña
Thuật toán MINIMAX
13
ðánh giá Thuật giải MINIMAX
14

 ðầy ñủ? Có (nếu cây tìm kiếm hữu hạn)


 Tối ưu? Có (với một ñối thủ tối ưu)
 ðộ phức tạp thời gian? O(bm)
 ðộ phức tạp không gian? O(bm) (tìm kiếm theo
chiều sâu)

 Với cờ vua, b ≈ 35, m ≈100 với một ván thông


thường  hoàn toàn không thể tìm ñược lời giải
tối ưu
Tỉa nhánh α-β
15

 Ta có thể làm gì ñể giảm số trạng thái phải


kiểm tra?
 Mẹo: ta có thể tính ñúng giá trị quyết ñịnh
minimax mà không cần duyệt mọi ñỉnh.
 Hãy xem xét chi tiết từng bước quá trình tính
giá trị minimax.
 Ghi nhớ: thuật toán MINIMAX duyệt theo chiều
sâu.
ðiều cần nắm
28

 Các thành phần trò chơi, MIN, MAX


 Thuật toán MINIMAX, thuật toán α-β
 ðánh giá của các thuật toán
 Hàm lượng giá
Thắc mắc
29
Tỉa nhánh α-β (vd)
18

[3; 14] A [3;3] A

[3;3] B [-∞;2] C [-∞;14] D [3;3] B [-∞;2] C [2;2] D

3 12 8 2 14 3 12 8 2 14 5 2
e) f)
Tỉa nhánh α-β (vd)
19

 Gọi x, y là lợi ích của các trạng thái không xét. Ta có:

MINIMAX-VALUE(gốc) = max(min(3,12,8),
min(2,x,y),min(14,5,2))
= max(3, min(2,x,y), 2)
= max(3, z, 2) với z <= 2
=3
 Giá trị MINIMAX tại gốc không phụ thuộc vào x và y.
ðánh giá α-β
20

 Tỉa nhánh không ảnh hưởng ñến kết quả cuối cùng

 Thứ tự các nước ñi tốt có thể cải thiện hiệu quả của tỉa
nhánh (trong ví dụ, hãy xem xét nhánh D)

 Với “thứ tự hoàn hảo”, ñộ phức tạp thời gian = O(bm/2)


(cho phép tìm với ñộ sâu gấp ñôi)
Thuật toán α-β
21
Thuật toán α-β (tt)
22
Nghĩ trước giới hạn và hàm lượng
23
giá
 Các trò chơi thường có ñộ sâu lớn (>35 ñối với
cờ vua)
 Trong thời gian thực, không thể ñi ñến trạng thái
kết thúc ñể ñánh giá một nước ñi -> nghĩ trước
một số bước giới hạn (ply)
 Cần một hàm lượng giá các trạng thái không kết
thúc thay cho hàm ñánh giá lợi ích của trạng
thái kết thúc.
 Hàm lượng giá là một heuristic.
Nghĩ trước giới hạn và hàm lượng
24
giá (tt)
Số bước nghĩ trước
25
Hàm lượng giá
26

 ðánh giá khả năng thành công của một nước ñi (thắng,
thua, hòa?)
 ðánh giá tuyến tính tổng các ñặc trưng có ñược của một
ñối thủ
Eval(s) = w1 f1(s) + w2 f2(s) + … + wn fn(s)
trong ñó: wi: trọng số gán cho quân thứ I
(ví dụ: hậu w=9, ngựa w= 3…)
fi: số quân còn lại

 MiniMaxCutoff giống hệt tìm kiếm MiniMaxValue trừ:


 Thay Terminal? bằng Cutoff?
 Thay Utility() bằng Eval()
Chương trình game
27
ðiều cần nắm
28

 Các thành phần trò chơi, MIN, MAX


 Thuật toán MINIMAX, thuật toán α-β
 ðánh giá của các thuật toán
 Hàm lượng giá
Thắc mắc
29