Khái quát về giải thuật MiniMax• Là một giải thuật tìm kiếm được bắt nguồn từ trò chơi tổng bằng không.. • Áp dụng trong các thể loại game đối kháng 1-1 như tic-tac-toe, cờ tướng,… • Giả
Trang 1BÁO CÁO BÀI TẬP LỚN
TRÍ TUỆ NHÂN TẠO
GIẢNG VIÊN: PHẠM VĂN HẢI
Đề tài:
NGHIÊN CỨU VÀ CẶT ĐẶT GIẢI THUẬT TÌM KIẾM MINMAX– CẮT TỈA ALPHA BETA VÀO GAME CỜ TƯỚNG
Nhóm 18:
1 Phạm Toàn Thắng 20102749
2 Nguyễn Viết Hiện 20101536
3 Nguyễn Đình Tài 20102117
4 Tô Đông Hoàng 20081074
5 Đỗ Đức Huy20081125
Trang 2Nôi dung chính
1 Khái quát về giải thuật MiniMax
2 Khái quát về giải thuật Alpha Beta
3 Xây dựng game cờ tướng
4 Kết luận
2
Trang 31.1 Khái quát về giải thuật MiniMax
• Là một giải thuật tìm kiếm được bắt nguồn từ trò chơi tổng bằng không.
• Áp dụng trong các thể loại game đối kháng 1-1 như tic-tac-toe, cờ tướng,…
• Giải thuật Minimax giúp tìm ra nước đi tốt nhất, bằng cách đi ngược từ cuối trò chơi
trở về đầu Tại mỗi bước, nó sẽ ước định rằng người A đang cố gắng tối đa hóa cơ
hội thắng của A khi đến phiên anh ta, còn ở nước đi kế tiếp thì người chơi B cố gắng
để tổi thiểu hóa cơ hội thắng của người A (nghĩa là tối đa hóa cơ hội thắng của B).
3
Trang 4Minmax hoạt động như thế nào???
4
Trang 51.2 Cách xây dựng giải thuật MiniMax
• Public int MinMax (int pos, int depth){
if depth = 0 then
return Eval (pos); //Trả về giá trị thế cờ pos
else{
best = -INFINITY;
Gen (pos); //Sinh ra mọi nước đi từ thế cờ pos
while (còn lấy được một nước đi m)
{
pos = Tính thế cờ mới nhờ đi m;
value = -MinMax (pos, depth - 1);
if (value > best) best = value;
}
return best;
}
}
5
Trang 6• Nếu hệ số nhánh trung bình của cây là b và ta thực hiện tìm kiếm đến
độ sâu d thì số nút phải lượng giá ở đáy cây như ta đã biết là bd Đây
chính là số đo độ phức tạp của thuật toán Nếu b = 40, d = 4 (các con số
thường gặp trong trò chơi cờ) thì số nút phải lượng giá là 404 = 2560000
(trên 2 triệu rưỡi nút) Còn với b = 40, d = 5 thì số nút phải lượng giá sẽ
tăng 40 lần nữa thành 405 = 102400000 (trên 102 triệu nút)
1.2 Đánh giá giải thuật MiniMax
6
Trang 7• Thủ tục AlphaBeta là một cải tiến thuật toán Minimax
nhằm tỉa bớt nhánh của cây tìm kiếm, làm giảm số lượng
nút phải sinh và lượng giá, do đó có thể tăng độ sâu của
cây tìm kiếm Giả sử hình 3 là một thế cờ mà hai nút đầu
tiên đã được lượng giá Nếu thực hiện thủ tục Minimax
đối với các nút đó sẽ cho thấy người chơi cực đại đã
được đảm bảo nếu đi nước bên trái sẽ được ít nhất là 2
điểm dù là các lượng giá của các nút khác cho kết quả
như thế nào đi nữa
2 1 Khái quát về giải thuật AlphaBeta
7
Trang 8• int AlphaBeta(int alpha, itn beta, int depth){
if depth == 0
return Eval { Tính giá trị thế cờ pos }
else{
best = -INFINITY;
Gen; { Sinh ra mọi nước đi từ vị trí pos }
while (còn lấy được một nước đi m) and (best < beta) do
{
if best > alpha then alpha := best;
thực hiện nước đi m;
value := -AlphaBeta(-beta, -alpha, depth-1);
bỏ thực hiện nước đi m;
if value > best then best := value;
}
AlphaBeta := best;
end;
end;
1.2 Cách xây dựng giải thuật AlphaBeta
8
Trang 91.2 Đánh giá và so sánh AlphaBeta với MiniMax
Độ sâu
Tỉ lệ số nút Minimax / AlphaBeta
9
Trang 10Ví dụ về cắt tỉa
10
Trang 113 Xây dựng trò chơi Cờ tướng áp dụng thuật toán Minmax và AlphaBeta
• Eval() : Phương thức lượng giá
• Xây dựng 2 phương thức tìm
kiếm MinMax và AlphaBeta
11
Trang 12• Phương thức Val() đánh giá thế cờ hiện tại.
Để đánh giá “điểm” của 1 thế cờ rất không đơn giản, nếu muốn có sự biến hóa không lường, mềm mại như con người, thì phải dựa vào nhiều tiêu chi khác nhau
để đánh giá, như ví trí quân cờ, cách kết hợp các quân cờ để vừa công, vừa thủ…
- 1 Tiêu chí đơn giản được đặt ra đó là “có gì ăn nấy” và cố gắng ăn được quân cờ nhiều điểm của địch
- Phương pháp là sẽ lấy tổng giá trị các quân cờ hiện có của bên mình trừ đi tổng giá trị các quân cờ hiện có của đối phương Do đó, một thế cờ này hơn thế cờ kia ở chỗ nó còn nhiều quân bên mình hơn, nhiều quân giá trị cao hơn cũng
như có bắt được nhiều quân và quân giá trị cao của đối phương hơn không
12
3 Xây dựng trò chơi Cờ tướng áp dụng thuật toán Minmax và AlphaBeta
Trang 13Xây dựng hàm lượng giá Val()
• Các quân cờ được gán cho một số điểm nhất định.
13
Quân cờ Kí hiệu Điểm Tốt PAWN 10 (20 nếu đã qua sông)
Trang 14private int Eval() { int sum = 0;
for (int i = 0; i < BOARD_SIZE; ++i) {
if (color[i] == side) { sum += pointtable[piece[i]][color[i]-1][i];
} else if (color[i] == xside) { sum -= pointtable[piece[i]][color[i]-1][i];
}
} ++evalcount;
return sum + Bonous();
}
14
Xây dựng hàm lượng giá Val()
Trang 154 Kết luận.
• Đồ án mới chỉ dừng lại ở mức độ tiếp cận, chưa thể nghiên cứu sâu hơn, và tối ưu thuật toán hơn
• Giao diện chương trình chỉ phục vụ cho học tập nên không thân thiện với người dung
• Cần xây dựng được hàm lượng giá tốt hơn, để có thể tạo ra những
nước đi mang tính nghệ thuật trong Cờ Tướng.
15