You are on page 1of 6

Giải thuật Minimax

Đối với game cờ tướng thì chúng ta sẽ sử dụng thuật toán


minimax để dễ dàng xét duyệt hơn. Thuật toán minimax
này thuộc nhóm duyệt theo chiều sâu (depth first search).
Thuật toán này được chia ra thành 2 người chơi được gọi
là Max và Min. Người chơi Max sẽ là người giữa node
gốc và lần lượt sẽ duyệt qua các node con theo chiều sâu
nhất định đến khi nào nó đã duyệt hết tất cả các node hoặc
là tìm đến đường đi mà đạt được Max.
Nếu nói một cách rõ ràng hơn thì người Max lúc này sẽ
nhiệm vụ là tìm ra nước đi sao cho điểm số của mình có
là điểm cao nhất, còn nhiệm vụ của MIN là tìm nước đi để
cực tiểu hoá điểm số của MAX.
Thuật toán này hoạt động khá hiệu quả, nhưng có một
điểm yếu là nó sẽ vét cạn toàn bộ các trường hợp để tìm
ra đường đi tối ưu nhất. Vì vậy, với giá trị độ sâu càng lớn
thì thuật toán chạy càng chậm.
Code:
Giải thích: Hàm minimax với sẽ tìm giá trị của người
Max và người Min. Với người Max thì ta sẽ duyệt để tìm
ra số điểm lớn cho nó và ngược lại là người Min thì ta sẽ
duyệt để tìm số điểm nhỏ hơn. Đối với Max thì số điểm
càng lớn thì càng có lợi cho nó và ngược lại với Min là số
điểm càng nhỏ thì càng có lợi cho Min.
Giải thích: Nói đơn giản thì hàm minimaxRoot này là
được tạo ra dùng để tìm nước đi thích hợp và có lợi nhất
cho máy (AI).

Giải thích thuật toán:


Lấy ví dụ:
 Có thể dễ dàng mô tả hoạt động của thuật toán minimax bằng cách
sử dụng một ví dụ. Dưới đây chúng tôi đã lấy một ví dụ về Game
Tree đại diện cho trò chơi hai người chơi.
 Trong ví dụ này, có hai người chơi, một người được gọi là Maximizer
và người khác được gọi là Minimizer.
 Maximizer sẽ cố gắng đạt được số điểm Tối đa có thể, và Minimizer
sẽ cố gắng đạt được số điểm tối thiểu có thể.
 Thuật toán này áp dụng DFS, vì vậy trong Game Tree này, chúng ta
phải đi hết các lá để đến được các nút đầu cuối.
 Tại nút đầu cuối, các giá trị đầu cuối được đưa ra vì vậy chúng tôi sẽ
so sánh các giá trị đó và điều chỉnh lại cây cho đến khi trạng thái ban
đầu xảy ra. Sau đây là các bước chính liên quan đến việc giải quyết
Game Tree hai người chơi:

Trong bước đầu tiên, thuật toán tạo ra Game Tree và áp dụng hàm tiện ích để
nhận các giá trị và các trạng thái kết thúc. 

Trong mô hình cây trong ảnh minh họa, hãy lấy A là trạng thái bắt đầu của
Tree. Giả sử bộ tối đa hóa thực hiện lượt đi đầu tiên có giá trị ban đầu trong
trường hợp xấu nhất = – 9999 và minimizer sẽ thực hiện lượt tiếp theo có giá
trị ban đầu trong trường hợp xấu nhất = + 9999.

Bây giờ, đầu tiên chúng ta tìm giá trị tiện ích cho Maximizer, giá trị ban đầu
của nó là -∞, vì vậy chúng ta sẽ so sánh từng giá trị ở trạng thái đầu cuối với
giá trị ban đầu của Maximizer và xác định các giá trị nút cao hơn. Nó sẽ tìm
thấy mức tối đa trong số tất cả.

Đối với nút D max (-1, – -∞) => max (-1,4) = 4


Đối với nút E max (2, -∞) => max (2, 6) = 6

Đối với nút F max (-3, -∞) => max (-3, -5) = -3

Đối với nút G max (0, -∞) = max (0, 7) = 7

Trong bước tiếp theo, đến lượt trình thu nhỏ, vì vậy nó sẽ so sánh giá trị tất
cả các nút với + ∞ và sẽ tìm giá trị nút lớp thứ 3.

Đối với nút B = min (4,6) = 4

Đối với nút C = min (-3, 7) = -3


Bây giờ đến lượt Maximizer, nó sẽ lại chọn giá trị lớn nhất của tất cả các nút
và tìm giá trị lớn nhất cho nút gốc. Trong Game Tree này, chỉ có 4 lớp, do đó
chúng tôi truy cập ngay đến nút gốc, nhưng trong trò chơi thực, sẽ có nhiều
hơn 4 lớp.

Đối với nút A max (4, -3) = 4

Đó là toàn bộ quy trình làm việc của trò chơi minimax hai người chơi.

You might also like