CHƯƠNG 2: TÌM HIỂU VÀ LỰA CHỌN PHƯƠNG PHÁP
1.1. Thuật toán tìm kiếm nước đi
1.1.2. Kỹ thuật Alpha-Beta Pruning
Alpha-Beta Pruning là một phiên bản sửa đổi của thuật toán minimax. Nó là một kỹ thuật tối ưu hóa cho thuật toán minimax.
Như chúng ta đã thấy trong thuật toán tìm kiếm minimax rằng số lượng trạng thái trò chơi mà nó phải kiểm tra là cấp số nhân theo chiều sâu của cây. Vì chúng ta không thể loại bỏ số mũ, nhưng chúng ta có thể cắt nó thành một nửa. Do đó, có một kỹ thuật mà không cần kiểm tra từng nút của cây trò chơi, chúng ta có thể tính ra quyết định minimax chính xác và kỹ thuật này được gọi là cắt tỉa. Điều này liên quan đến hai tham số ngưỡng Alpha và beta để mở rộng trong tương lai, vì vậy nó được gọi là Alpha-Beta Pruning. Nó còn được gọi là Thuật toán Alpha- Beta.
1.1.2.2. Cách tối ưu thuật toán Minimax bằng cắt tỉa Alpha-Beta a) Chiến lược cắt tỉa
Nút Max có một giá trị alpha (lớn hơn hoặc bằng alpha – luôn tăng), nút min có một giá trị beta (nhỏ hơn hoặc bằng beta – luôn giảm).
Khi chưa có alpha và beta xác định thì thực hiện tìm kiếm sâu (depth-first) để xác định được alpha, beta, và truyền ngược lên các nút cha.
Một số sách và tài liệu có đề cập với việc cắt tỉa alpha và cắt tỉa beta, ở đây tôi cũng sẽ nói về việc đó và dùng một cách khác đó là dùng các khoảng trong toán học. Hãy nhìn cây trò chơi phía dưới để hình dung cách để cắt tỉa.
Chắc hẳn những bạn đang đọc bài này sẽ đều thắc mắc vấn đề tại sao chúng ta có thể cắt bỏ toàn bộ những nút con của C trên cây trò chơi trên.
Hình 2.1.Ví dụ về cây trò chơi
Đầu tiên là xét cây từ trái sang phải ta sẽ thấy S là Max, theo chiến lược đưa ra vậy chúng ta sẽ có giá trị alpha ≥ 10 tại S.
Tiếp theo, ở C ở đây là nút Min (trạng thái trò chơi dành cho Max) tức là sẽ lấy giá trị nhỏ nhất của các nút con ở dưới. Nếu như vậy thì giá trị chúng ta phải lấy là beta ≤ 3.
Sau khi xác định được alpha và beta, chúng ta có thể dễ dàng xác định việc có cắt tỉa hay không. Ở nút S (Max), giá trị alpha luôn ≥ 10 (luôn tăng) nhưng ở C (Min) thì giá trị luôn luôn ≤ 3 (luôn giảm), nên việc xét các con còn lại ở C là không cần thiết.
Nếu nói theo khoảng thì hiện tại chúng ta chỉ nhận khoảng ≥ 10 tại nút gốc S, vậy thì đâu cần bận tâm đến việc khoảng ≤ 3 tại nút C.
Hình 2.2.Ví dụ với một cây trò chơi trung bình
Ở đây chúng ta cũng xét từ trái qua phải bắt đầu từ nút gốc và nút con bên trái sẽ được ưu tiên duyệt trước. Duyệt nguyên cây này sẽ khá dài dòng nhưng để bạn hiểu tôi sẽ viết ra các bước sau.
Xét duyệt từ trên gốc xuống sâu (vì ban đầu chưa hề tồn tại giá trị alpha hay beta của các nút). Nút đầu tiên ta duyệt là E sẽ gặp giá trị 2 (alpha ≥ 2), khi đó ở trên chưa có giá trị beta để ta có thể so sánh nên sẽ bắt đầu duyệt con tiếp theo của nút E đó và ở đây ta sẽ chọn cho alpha = 3 (Max).
Lưu ý là chúng ta luôn luôn duyệt từ trái sang phải và phải lần lượt từng nhánh một, sau đó sang nhánh tiếp theo cùng gốc. Vậy nên tiếp theo chúng ta sẽ đưa giá trị alpha này lên nút B (Min) và nút B – beta ≤ 3, sau đó nút F sẽ được duyệt, và ta phải tìm alpha của F. Khi duyệt con đầu tiên mang giá trị 5 vậy alpha của F – alpha ≥ 5.
Tại B – beta ≤ 3 và tại F – alpha ≥ 5. Như vậy chúng ta không cần xem xét các nút con còn lại của F vì cái ta cần ở đây chỉ là khoảng ≤ 3 nên ta cắt toàn bộ các con còn lại.
Sau khi duyệt toàn bộ các con của B thì tại B – beta = 3,tại nút A – alpha ≥ 3.
1.1.2.3. Hiệu quả của Alpha-Beta Pruning trong giảm số lượng trạng thái cần tính toán
a) Cơ chế hoạt động của Alpha-Beta Pruning:
Trong một cây tìm kiếm, mỗi nút đại diện cho một trạng thái của trò chơi, với các lá của cây là các kết quả cuối cùng của trò chơi (thắng, thua, hòa). Giải thuật Minimax sẽ đánh giá tất cả các trạng thái trong cây tìm kiếm để xác định nước đi tốt nhất.
Alpha là giá trị tốt nhất mà người chơi "maximizer" (người chơi cố gắng tối đa hóa điểm số) có thể đạt được từ bất kỳ trạng thái nào trong nhánh con của nút hiện tại.
Beta là giá trị tốt nhất mà người chơi " minimizer" (người chơi cố gắng tối thiểu hóa điểm số) có thể đạt được từ bất kỳ trạng thái nào trong nhánh con của nút hiện tại.
Alpha-Beta Pruning tiến hành so sánh giá trị của các nút trong cây tìm kiếm và
"cắt tỉa" (prune) các nhánh không cần thiết khi phát hiện ra rằng không có khả năng nào trong nhánh đó dẫn đến một kết quả tốt hơn so với các nhánh đã xét.
b) Hiệu quả trong việc giảm số lượng trạng thái cần tính toán:
Giảm số lượng nhánh duyệt: Alpha-Beta Pruning giúp loại bỏ những nhánh trong cây tìm kiếm mà không cần phải đánh giá hết tất cả các trạng thái. Thay vì phải duyệt toàn bộ cây tìm kiếm theo cách thông thường của giải thuật minimax, Alpha-Beta Pruning chỉ đánh giá các nhánh cần thiết, từ đó giả
m đáng kể số lượng trạng thái phải tính toán.
Lý thuyết hiệu quả: Trong trường hợp lý tưởng (với việc chọn lựa nước đi theo cách tối ưu), Alpha-Beta Pruning có thể giảm số lượng trạng thái cần duyệt đến có thể chỉ còn một nửa so với minimax thông thường. Điều này có nghĩa là cây tìm kiếm có thể được giảm thiểu tới O(b^(d/2)) so với O(b^d) trong trường hợp minimax thông thường, với b là độ sâu của cây và d là số lượng nhánh.
Ứng dụng trong thực tế: Mặc dù Alpha-Beta có thể giảm đáng kể số lượng trạng thái duyệt, hiệu quả thực tế phụ thuộc vào việc lựa chọn đúng thứ tự duyệt các nhánh. Nếu chúng ta chọn được nhánh tốt nhất đầu tiên (hoặc sớm nhất), Alpha-Beta Pruning sẽ cắt tỉa được nhiều nhánh hơn, giúp tối ưu hóa quá trình tìm kiếm.
c) Ví dụ:
Giả sử bạn có một cây tìm kiếm với độ sâu là 4 và mỗi nút có 3 nhánh. Với Minimax thông thường, số lượng trạng thái cần duyệt là:
34= 81 trạng thái
Nếu sử dụng Alpha-Beta Pruning với điều kiện lý tưởng (tối ưu thứ tự duyệt)số lượng trạng thái có thể giảm xuống còn:
(34
2) = 40.5 trạng thái ≈ 41 trạng thái
Điều này có nghĩa là bạn chỉ cần duyệt gần một nửa số trạng thái so với Minimax thông thường.
d) Tóm tắt:
Alpha-Beta Pruning có thể giảm số lượng trạng thái cần tính toán rất nhiều so với phương pháp Minimax thông thường.
Lý thuyết cho thấy hiệu quả giảm có thể lên tới O(b^(d/2)), tương đương với việc cắt giảm gần một nửa số nhánh cần duyệt.
Tuy nhiên, hiệu quả thực tế còn phụ thuộc vào thứ tự duyệt các nhánh. Nếu các nhánh được duyệt theo cách tối ưu, Alpha-Beta có thể cắt bỏ một lượng lớn nhánh không cần thiết, giúp giảm đáng kể chi phí tính toán.
Trong các ứng dụng trò chơi chiến lược, Alpha-Beta Pruning rất quan trọng để làm cho việc tìm kiếm nước đi tối ưu trở nên khả thi trong các trò chơi có không gian trạng thái rất lớn.