HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
Đồ án
Nhập môn trí tuệ nhân tạo
Đề tài: Không gian trạng thái là trò chơi cờ vua. Xây dựng
chương trình giải quyết bài toán theo phương pháp Minimax
Thầy giáo hướng dẫn: Ngô Hữu Phúc
Học viên: Nguyễn Trần Quyết
Lớp: Tin học 5A
Hà Nội, 3 - 2010
1
I. Lời nói đầu
Ngày này, việc nguyên cứu Trí tuệ nhân tạo và đưa nó vào
các ứng dụng thực tế đang ngày càng nhiều, và ngày càng chứng tỏ
được thế mạnh của mình trong các công việc đòi hỏi khả năng suy nghĩ
và tính toán giống như con người. Trong đó, vấn đề Tìm kiếm có đối
thủ đang được áp dụng rất rộng rãi trong các trò chơi đối kháng, tất
nhiên, tuân theo những tiêu chuẩn nhất định. Bản đồ án này được xây
dựng, cũng nằm một trong số đó. Áp dụng lí thuyết Trí tuệ nhân tạo,
kết hợp với các hàm đánh giá, từ đó xây dựng một chương trình cờ vua
mang tính chất minh họa thuật toán hơn là xây dựng một chương trình
có tính ứng dụng cao trong thực tế. Sau đây là cơ sở lý thuyết về không
gian trạng thái cờ vua theo phương pháp Minimax.
II. Cơ sở lí thuyết
Vấn đề chơi cờ có thể xem xét như vấn đề tìm kiếm trong
không gian trạng thái. Mỗi trạng thái là một tình thế (cách bố trí
các quân cờ trên bàn cờ).
- Trạng thái ban đầu là sự sắp xếp các quân cờ của hai
bên lúc bắt đầu chơi.
- Các toán tử là các nước đi hợp lệ.
- Các trạng thái kết thúc là các tình thế mà cuộc chơi
dừng, thường được xác định bởi một điều kiện dừng
nào đó.
- Một hàm kết cuộc ứng mỗi trạng thái kết thúc với một
giá trị nào đó.
Chiến lược tìm kiếm Minimax là chiến lược tìm kiếm theo độ
sâu. Quá trình chơi cờ là quá trình trắng và đen thay phiên nhau đưa ra
quyết định, thực hiện một trong số các nước đi hợp lệ. Trên cây trò
chơi, quá trình đó sẽ tạo ra đường đi từ gốc đến lá. Giả sử tới một thời
điểm nào đó, đường đi đã dẫn tới đỉnh u. Nếu u là đỉnh trắng (đen) thì
trắng (đen) cần chọn đi tới một trong các đỉnh đen (trắng) v là con của
u. Tại đỉnh đen (trắng) v mà trắng (đen) vừa chọn, đen (trắng) sẽ phải
2
chọn đi tới một trong các đỉnh trắng (đen) w là con của v. Quá trình
trên sẽ dừng lại khi đạt tới một đỉnh là lá của cây.
Giả sử trắng cần tìm nước đi tại đỉnh u. Nước đi tối ưu cho trắng
là nước đi dần tới đỉnh con của v là đỉnh tốt nhất(cho trắng) trong số
các đỉnh con của u. Ta cần giả thiết rằng, đến lượt đối thủ chọn nước đi
từ v, đen cũng sẽ chọn nước đi tốt nhất cho a ta. Như vậy, để chọn
nước đi tối ưu cho trắng tại đỉnh u, ta cần phải xác định giá trị các đỉnh
của trò chơi gốc u. Giá trị của các đỉnh lá là giá trị của hàm kết cuộc.
Đỉnh có giá trị càng lớn càng tốt cho trắng, đỉnh có giá trị càng nhỏ
càng tốt cho đen, Để xác định giá trị các đỉnh của cây trò chơi gốc u, ta
đi từ mức thấp nhất lên gốc u. Giả sử v là đỉnh trong của cây và giá trị
các đỉnh con của nó đã được xác định. Khi đó nếu v là đỉnh trắng thì
giá trị của nó được xác định là giá trị lớn nhất trong các giá trị của các
đỉnh con. Còn nếu v là đỉnh đen thì giá trị nhỏ nhất trong các giá trị của
các đỉnh con.
Để cài đặt kĩ thuật Minimax, việc gán giá trị cho các đỉnh
được thực hiện bởi các hàm đệ quy Maxval và Minval. Hàm
MaxVal xác định giá trị cho các đỉnh trắng, hàm MinVal xác
định giá trị cho các đỉnh đen.
function MaxVal(u);
3
begin
if u lµ ®Ønh kÕt thóc then MaxVal(u)
←
f(u)
else MaxVal(u)
←
max{MinVal(v) | v lµ ®Ønh con cña u}
end;
function MinVal(u);
begin
if u lµ ®Ønh kÕt thóc then MinVal(u)
←
f(u)
else MinVal(u)
←
min{MaxVal(v) | v lµ ®Ønh con cña u}
end;
Trong các hàm đệ quy trên, f(u) là giá trị của hàm kết cuộc tại đỉnh kết
thúc u. Sau đây là thủ tục chọn nước đi cho trắng tại đỉnh u. Trong thủ tục
Minimax(u,v) v là biến lưu lại trạng thái mà trắng đã chọn đi tới từ u
procedure Minimax(u, v);
begin
val
←
-
∞
;
for mçi w lµ ®Ønh con cña u do
if val <= MinVal(w) then
{val
←
MinVal(w); v
←
w}
end;
4
III. Trò chơi Cờ Vua
Chương trình được xây dựng dựa trên cơ sở lí thuyết vừa nêu
trên. Với độ sâu được xét tới là 2.
Giao diện chương trình:
Màn hình đăng nhập người chơi
Màn hình đăng nhập người chơi yêu cầu người chơi nhập tên
trước khi bắt đầu trò chơi.
5
Màn hình chơi chính
Màn hình chơi chính giúp cho người chơi có thể chơi trực tiếp với
máy tính. Chương trình cho phép người chơi có thể bắt đầu một ván cờ mới,
hay hoãn lại các nước đi.
6
Màn hình hiển thị chi tiết nước cờ
Màn hình chi tiết hiển thị chi tiết các nước cờ đã chơi, tên người
chơi cũng như thời gian chơi.
Một chương trình chơi cờ được đánh giá dựa trên tiêu chí mức
độ thông minh của các nước đi. Điều này phụ thuộc phần lớn vào hàm
đánh giá được cài đặt trong trò chơi. Từ đó có thể thấy mức độ quan
trọng của hàm đánh giá trong bất cứ một chương trình chơi cờ nào.
Không nằm ngoài ý kiến đó, chương trình cũng xây dựng hàm đánh giá
riêng, với mục đích phản ảnh rõ nhất cục diện bàn cờ cũng như đưa ra
được lựa chọn tốt nhất ứng với trạng thái cụ thể.
Hàm đánh giá của chương trình được xây dựng dựa trên các yếu
tố về các giai đoạn của ván cờ, giá trị các quân cờ và vị trí của chúng
(vị trí trung tâm). Cụ thể:
7
Hàm tính giá trị của từng quân cờ:
For i = 0 To 7
For j = 0 To 7
If mangdanhgia.Vitri(i, j) > 0 Then
tgiatri(mangdanhgia.Vitri, i, j,
mangdanhgia.Vitri(i, j))
End If
Next
Next
Vị trí trung tâm:
For i = 0 To 7
For j = 0 To 7
If 3 <= i And i <= 4 And 3 <= j And j <= 4 And
mangdanhgia.Vitri(i, j) > 0 Then
eval += 200
ElseIf 2 <= i And i <= 5 And 2 <= j And j <= 5 And
mangdanhgia.Vitri(i, j) > 0 Then
eval += 100
End If
Hàm MinVal: tính giá trị nhỏ nhất
Public Sub Minval(ByVal u As Trangthai, ByVal a As Integer, ByVal b As
Integer)
Dim i, j As Integer
If u.cls = 2 Then
Heristis(u)
min = u.Eval
Else
For i = 0 To 7
For j = 0 To 7
If u.Vitri(i, j) > 0 Then
Duyet(u, i, j, u.Vitri(i, j))
End If
Next
Next
For i = 1 To chiso
If Mangduyet(i).Father = u.Name Then
Maxval(Mangduyet(i), a, b)
End If
Next
min = b
End If
End Sub
Hàm MaxVal: tính giá trị lớn nhất
Public Sub Maxval(ByVal u As Trangthai, ByVal a As Integer, ByVal b As
Integer)
Dim i, j As Integer
8
If u.cls = 2 Then
Heristis(u)
max = u.Eval
Else
For i = 0 To 7
For j = 0 To 7
If u.Vitri(i, j) > 0 Then
Duyet(u, i, j, u.Vitri(i, j))
End If
Next
Next
For i = 1 To chiso
If Mangduyet(i).Father = u.Name Then
Minval(Mangduyet(i), a, b)
End If
Next
max = a
End If
End Sub
Hàm Minimax: Áp dụng giải thuật Minimax vào chương trình
Public Sub Minimax(ByVal u As Trangthai, ByVal v As Trangthai)
Dim a, b, i, j As Integer
a = -100
b = 100
For i = 0 To 7
For j = 0 To 7
If u.Vitri(i, j) > 0 Then
Duyet(u, i, j, u.Vitri(i, j))
End If
Next
Next
For i = 1 To chiso
If Mangduyet(i).Father = u.Name Then
Minval(Mangduyet(i), a, b)
If a <= min Then
a = min
ketqua = Mangduyet(i)
End If
End If
Next
End Sub
IV. Những mặt hạn chế của đề tài:
Về mặt lý thuyết, chiến lược Minimax cho phép ta tìm được
nước đi tối ưu cho trắng. Song nó không thực tế, chúng ta sẽ không đủ
9
thời gian để tính được nước đi tối ưu. Bởi vì thuật toán Minimax đòi
hỏi chúng ta phải xem xét toàn bộ các đỉnh của cây trò chơi. Trong các
trò chơi hay, cây trò chơi là cực lớn. Chẳng hạn đối với cờ vua, chỉ tính
đến độ sâu 40, thì cây trò chơi đã có khoảng 10
120
đỉnh!
Chất lượng của chương trình phụ thuộc vào hàm đánh giá, để
xây dựng được hàm đánh giá thông minh thì ta cần phải xét toàn bộ các
yếu tố cần thiết. Ở đây hàm đánh giá của chương trình còn chưa chặt
chẽ nên cần phải phân tích rõ hơn về hàm đánh giá để máy có thể đánh
thông minh hơn.
V. Kết luận:
Khuôn khổ của đồ án này chỉ giới hạn trong việc xây dựng
không gian trạng thái trò chơi Cờ Vua, chưa thể thành một trò chơi để
người đấu trí với máy được. Nếu muốn áp dụng thực tế và phát triển đồ
án hơn thì sẽ cần nhiều thời gian và quá trình nghiên cứu tìm tòi hơn.
Sau khi kết thúc môn học này, em mong thầy có thể giúp đỡ em để em
hoàn thành chương trình một cách hoàn thiện hơn.
10