Tải bản đầy đủ (.doc) (24 trang)

Báo cáo đồ án giải thuật cắt tỉa alpha beta phương pháp và minh họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (329.53 KB, 24 trang )

BÁO CÁO ĐỒ ÁN
MÔN TRÍ TUỆ NHÂN TẠO

Đề bài:
Giải thuật cắt tỉa Alpha-Beta.Phương pháp và minh họa.


Hà nội tháng 4-2008
Các vấn đề sẽ trình bày
I: Tỡm hiu v gii thut ct ta Alpha-Beta.
I.1:Cây trò chơi.
I.2:Chiến lợc vét cạn.
I.3:Chiến lợc MiniMax.
I.4:Thuật toán cắt tỉa Alpha-Beta.
I.5: Đánh gía thuật toán Alpha-Beta.
I.6: Hớng cải tiến thuật toán AlphaBeta.
II: ng dụng thuật toán cắt tỉa AlphaBeta cài đặt chơng trình
chơi cờ vua.
II.1: Sơ đồ các lớp cơ bản của chơng trình.
II.2:Các chức năng chính của chơng trình:
III.3: Hng phỏt trin ca chng trỡnh
I: Tỡm hiu v gii thut ct ta Alpha-Beta:
Gii thut ct ta Alpha Beta l mt gii thut tỡm kim cú i
th. Mt vớ d minh ha cho thut toỏn ct ta Alpha Beta rừ nht
m ta cú th thy l cỏc chng trỡnh chi c. Vấn đề chơi cờ có
thể xem nh vấn đề tìm kiếm nớc đi, tại mỗi lần đến lợt mình, ngời
chơi phải tìm trong số rất nhiều nớc đi hợp lệ (tuân theo đúng luật
đi), một nớc đi tốt nhất sao cho qua một dãy nớc đi đã thực hiện,
anh ta giành phần thắng. Tuy nhiên vấn đề tìm kiếm ở đây sẽ rất
phức tạp , bởi vì ở đây có đối thủ, ngời chơi không biết đợc đối thủ
của mình sẽ đi nớc nào trong tơng lai. Sau đây chúng ta sẽ phát


biểu chính xác hơn vấn đề tìm kiếm này.
Vấn đề chơi cờ có thể xem 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ế (sự bố trí các quân của hai
bên 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 cuộc 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 số điều kiện dừng nào đó.
Một hàm kết cuộc (payoff function) ứng mỗi trạng thái
kết thúc với một giá trị nào đó. Chẳng hạn nh cờ vua, mỗi
trạng thái kết thúc chỉ có thể là thắng, hoặc thua (đối với
Trắng) hoặc hòa. Do đó, ta có thễ xác định hàm kết cuộc là
hàm nhận giá trị 1 tại các trạng thái kết thúc là thắng (đối với
Trắng), -1 tại các trạng thái kết thúc là thua (đối với Trắng)
và 0 tại các trạng thái kết thúc hòa. Trong một số trò chơi
khác, chẳng hạn trò chơi tính điểm, hàm kết cuộc có thể nhận
giá trị nguyên trong khoảng [-k, k] với k là một số nguyên d-
ơng nào đó.
Nh vậy vấn đề của Trắng là, tìm một dãy nớc đi sao cho xen kẽ với
các nớc đi của Đen tạo thành một đờng đi từ trạng thái ban đầu tới
trạng thái kết thúc là thắng cho Trắng.
Để thuận lợi cho việc nghiên cứu các chiến lợc chọn nớc đi, ta biểu
diễn không gian trạng thái trên dới dạng cây trò chơi.
I.1:Cây trò chơi.
Cây trò chơi đợc xây dựng nh sau. Gốc của cây ứng với trạng thái
ban đầu. Ta sẽ gọi đỉnh ứng với trạng thái mà Trắng (Đen) đa ra n-
ớc đi là đỉnh Trắng (Đen). Nếu một đỉnh là Trắng (Đen) ứng với
trạng thái u, thì các đỉnh con của nó là tất cả các đỉnh biểu diễn
trạng thái v, v nhận đợc từ u do Trắng (Đen) thực hiện nớc đi hợp lệ

nào đó. Do đó, trên cùng một mức của cây các đỉnh đều là Trắng
hoặc đều là Đen, các lá của cây ứng với các trạng thái kết thúc. Độ
sâu của cây trò chơi là số tầng của cây(chính là độ sâu d của cây).
Thuật ngữ nớc đi chỉ bao gồm một lần đi của một đối thủ hoặc
một lần đi phản ứng lại của đối thủ bên kia. Nói cách khác nớc đi ở
đây thực chất chỉ là nửa nớc theo cách hiểu của làng cờ.
Ví dụ: Xét trò chơi Dodgen (đợc tạo ra bởi Colin Vout). Có hai
quân Trắng và hai quân Đen, ban đầu đợc xếp vào bàn cờ 3*3
(Hình vẽ). Quân Đen có thể đi tới ô trống ở bên phải, ở trên hoặc ở
dới. Quân Trắng có thể đi tới trống ở bên trái, bên phải, ở trên.
Quân Đen nếu ở cột ngoài cùng bên phải có thể đi ra khỏi bàn cờ,
quân Trắng nếu ở hàng trên cùng có thể đi ra khỏi bàn cờ. Ai đa hai
quân của mình ra khỏi bàn cờ trớc sẽ thắng, hoặc tạo ra tình thế bắt
đối phơng không đi đợc cũng sẽ thắng.
Giả sử Đen đi trớc, ta có cây trò chơi đợc biểu diễn nh hình trên.
I.2:Chiến lợc vét cạn:
Dùng thuật toán vét cạn để tìm kiếm trên cây trò chơi dờng nh là
một ý tởng đơn giản. Ta chỉ cần chọn nhánh cây dẫn đến nớc thắng
để đi quân là đảm bảo thắng lợi. Nếu mà đúng nh vậy thì các loại
cờ sẻ trở thành một cho chơi vô cùng buồn tẻ. Rất tiếc rằng vấn đề
này không thể thực hiện nổi do sự bùng nổ tổ hợp. Ví dụ nếu từ
một thế cờ trung bình có khả năng đi đợc 16 nớc (gọi hệ số nhánh
con tại mỗi nút là 16). Nh vậy một tầng sẻ có 16 nút con và 16 nút
con này lại có 16 nút con nữa. Tổng số nút con ở độ sâu thứ 2 sẽ là
16*16=b
2
. Cứ nh vậy ở độ sâu d sẽ có b
d
nút.
Nếu giả sử độ sâu của cây là 100(hệ số nhánh là 16 và độ sâu là

100 đều là những con số nhỏ hơn con số thờng gặp trong trò chơi)
thì khi đó số nhánh phải duyệt đã lên đến 16
100
.Đây là một con số
lớn khủng khiếp. Để hình dung con số đó lớn nh thế nào , ta giả sử
tất các nguyên tử trong vũ trụ đều trở thành máy tính để tính nớc đi
với tốc độ một giây tính đợc 10
10
(10 tỷ) nớc đi, và nếu chúng hoạt
động cật lực từ thời vụ nổ cho đến nay(theo một số lý thuyết thì thế
giới của chúng ta đợc hình thành sau một vụ nổ gọi là vụ nổ lớn
bigbang, trớc đây cở 15 tỷ năm) thì đến bây giờ mới có thể đi đợc
nớc đi đầu tiên. Nh vậy áp dụng thuật toán vét cạn với các trò chơi
cờ là điều không thể.
I.3:Chiến l ợc MiniMax:
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 tới 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 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 anh 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 cây trò chơi gốc u. Giá trị của các đỉnh lá (ứng với các

trạng thái kết thúc) 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ị của nó là giá trị nhỏ
nhất trong các giá trị của các đỉnh con.
Ví dụ: Xét cây trò chơi trong hình 4.3, gốc a là đỉnh Trắng. Giá trị
của các đỉnh là số ghi cạnh mỗi đỉnh. Đỉnh i là Trắng, nên giá trị
của nó là max(3,-2) = 3, đỉnh d là đỉnh Đen, nên giá trị của nó là
min(2, 3, 4) = 2.
Việc gán giá trị cho các đỉnh đợc thực hiện bởi các hàm đệ qui
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);
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 lu 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;
Thủ tục chọn nớc đi nh trên gọi là chiến lợc Minimax, bởi vì Trắng
đã chọ đợc nớc đi dẫn tới đỉnh con có giá trị là max của các giá trị
các đỉnh con, và Đen đáp lại bằng nớc đi tới đỉnh có giá trị là min
của các giá trị các đỉnh con.
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 có đủ thời
gian để tính đợc nớc đi tối u. Bởi vì thuật toán Minimax đòi hỏi 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 kỳ 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! Nếu cây có
độ cao m, và tại mỗi đỉnh có b nớc đi thì độ phức tạp về thời gian
của thuật toán Minimax là O(b
m
).
Để có thể tìm ra nhanh nớc đi tốt (không phải là tối u) thay cho
việc sử dụng hàm kết cuộc và xem xét tất cả các khả năng dẫn tới
các trạng thái kết thúc, chúng ta sẽ sử dụng hàm đánh giá và chỉ
xem xét một bộ phận của cây trò chơi.
Toàn bộ ý tởng của thuật toán này là dựa trên việc chuyển đổi mỗi
thế cờ thành một con số để đánh giá. Rất tiếc là con số này thờng
không tốt và không đủ để đánh giá hết mọi điều. Mặt khác, thuật
toán này có thể rất tốn kém(chạy chậm)do việc sinh các nớc đi và l-
ợng giá rất tốn thời gian tinh toán, do vậy độ sâu của cây trò chơi
cũng bị hạn chế nhiều. Ta cần có thêm những cải tiến để cải thiện
tình hình này.
I.4:Thuật toán cắt tỉa Alpha-Beta:
Trong chiến lợc tìm kiếm Minimax, để tìm kiếm nớc đi tốt cho
Trắng tại trạng thái u, cho dù ta hạn chế không gian tìm kiếm trong
phạm vi cây trò chơi gốc u với độ cao h, thì số đỉnh của cây trò
chơi này cũng còn rất lớn với h 3. Chẳng hạn, trong cờ vua, nhân
tố nhánh trong cây trò chơi trung bình khoảng 35, thời gian đòi hỏi
phải đa ra nớc đi là 150 giây, với thời gian này trên máy tính thông
thờng chơng trình của bạn chỉ có thể xem xét các đỉnh trong độ sâu
3 hoặc 4. Một ngời chơi cờ trình độ trung bình cũng có thể tính trớc
đợc 5, 6 nớc hoặc hơn nữa, và do đó chơng trình của bạn mới đạt

trình độ ngời mới tập chơi!
Khi đánh giá đỉnh u tới độ sâu h, một thuật toán Minimax đòi hỏi
ta phải đánh giá tất cả các đỉnh của cây gốc u tới độ sâu h. Song ta
có thể giảm bớt số đỉnh cần phải dánh giá mà vẫn không ảnh hởng
gì đến sự đánh giá đỉnh u. Phơng pháp cắt cụt alpha-beta cho phép
ta cắt bỏ các nhánh không cần thiết cho sự đánh giá đỉnh u.
T tởng của kỹ thuật cắt cụt alpha-beta là nh sau: Nhớ lại rằng,
chiến lợc tìm kiếm Minimax là chiến lợc tìm kiếm theo độ sâu. Giả
sử trong quá trính tìm kiếm ta đi xuống đỉnh a là đỉnh Trắng, đỉnh a
có ngời anh em v đã đợc đánh giá. Giả sử cha của đỉnh a là b và b
có ngời anh em u dã đợc đánh giá, và giả sử cha của b là c. Khi đó
ta có giá trị đỉnh c (đỉnh Trắng) ít nhất là giá trị của u, giá trị của
đỉnh b (đỉnh Đen) nhiều nhất là giá trị v. Do đó, nếu eval(u) >
eval(v), ta không cần đi xuống để đánh giá đỉnh a nữa mà vẫn
không ảnh hởng gì dến đánh giá đỉnh c. Hay nói cách khác ta có
thể cắt bỏ cây con gốc a. Lập luận tơng tự cho trờng hợp a là đỉnh
Đen, trong trờng hợp này nếu eval(u) < eval(v) ta cũng có thể cắt
bỏ cây con gốc a.
Để cài đặt kỹ thuật cắt cụt alpha-beta, đối với các đỉnh nằm trên đ-
ờng đi từ gốc tới đỉnh hiện thời, ta sử dụng tham số để ghi lại giá
trị lớn nhất trong các giá trị của các đỉnh con đã đánh giá của một
đỉnh Trắng, còn tham số ghi lại giá trị nhỏ nhất trong các đỉnh
con đã đánh giá của một đỉnh Đen. Giá trị của và sẽ đợc cập
nhật trong quá trình tìm kiếm. và đợc sử dụng nh các biến địa
phơng trong các hàm MaxVal(u, , ) (hàm xác định giá trị của
đỉnh Trắng u) và Minval(u, , ) (hàm xác định giá trị của đỉnh
Đen u).
Hai tham số của thủ tục này (theo các đặt tên truyền thống )đợc gọi
là alpha beta và dùng để theo dõi các triển vọng. Chúng cho biết
các giá trị nằm ngoài khoảng [alpha, beta] là các điểm thật sự tồi

và không cần phải xem xét nữa. Khoảng [alpha,beta] còn đợc gọi là
cửa sổ alpha, beta. Trong ngữ cảnh của các trò chơi nguyên tắc
alpha-beta nói rằng, mỗi khi xem xét một nút bất kì, nên kiểm tra
các thông tin đã biết về các nút cha, ông của nó. Rất có thể do có
đủ thông tin từ cha, ông nên không cần phải làm bất cứ việc gì nữa
cho nút này. Cũng vậy,nguyên tắc này cũng giúp chỉnh sửa hoặc
xác định chính xác giá trị tại nút cha, ông của nó. Nh trên nói, một
cách để tiện theo dõi quá trình tính toán là dùng các tham số alpha
và beta để ghi lại các thông tin theo dõi cần thiết. Thủ tục
AlphaBeta đợc bắt đầu tại nút gốc với giá trị của alpha là âm vô
cùng và beta là dơng vô cùng. Thủ tục sẽ tự gọi đệ qui chính nó
với khoảng cách giữa các giá trị alpha và beta ngày càng hẹp hơn.
function MaxVal(u,

,

);
begin
if u là lá của cây hạn chế hoặc u là đỉnh kết thúc
then MaxVal
ơ
eval(u)
else
{
for mỗi đỉnh v là con của u do
{


ơ
max[


, MinVal(v,

,

)];
// Cắt bỏ các cây con từ các đỉnh v còn lại
if





then exit
};
MaxVal
ơ


;
}
end;

function MinVal(u,

,

);
begin
if u là lá của cây hạn chế hoặc u là đỉnh kết thúc

then MinVal
ơ
eval(u)
else
{ for mỗi đỉnh v là con của u do
{


ơ
min[

, MaxVal(v,

,

)];
// Cắt bỏ các cây con từ các đỉnh v còn lại
if





then exit
};
MinVal
ơ


;}

end;
Thuật toán tìm nớc đi cho Trắng sử dụng kỹ thuật cắt cụt alpha-
beta, đợc cài đặt bởi thủ tục Alpha_beta(u,v), trong đó v là tham
biến ghi lại đỉnh mà Trắng cần đi tới từ u.
procedure Alpha_beta(u,v);
begin


ơ
-

;


ơ


;
for mỗi đỉnh w là con của u do
if



MinVal(w,

,

) then
{



ơ
MinVal(w,

,

);
v
ơ
w;}
end;
T phỏt biu trờn ta s xõy dng hm AlphaBeta bng ngụn ng
ta Pascal. Hm ny s cú dng khai bỏo nh di, trong ú depth
l sõu tỡm kim, INFINITY l giỏ tr vụ cựng, thut toỏn tớnh
toỏn da trờn th c hin ti pos l cỏc bin ton cc:
function AlphaBeta(alpha, beta, depth): integer;
begin
if (depth = 0) then
AlphaBeta := Eval { Tớnh giỏ tr th c pos }
Else
begin
best := -INFINITY;
Gen; { Sinh ra mi nc i t v trớ pos }
while (cũn ly c mt nc i m) and (best < beta) do
begin
if best > alpha then alpha := best;
thc hin nc i m;
value := -AlphaBeta(-beta, -alpha, depth-1);
b thc hin nc i m;
if value > best then best := value;

end;
AlphaBeta := best;
end;
end;
Li gi th tc AlphaBeta u tiờn vi sõu tỡm kim 4 v th c
hin ti pos cú dng nh sau:
AlphaBeta(-INFINITY, +INFINITY, 4);
So với thuật toán MiniMax thì thuật toán AlphaBeta đã đa thêm hai
biến alpha, beta làm hai mức ngỡng. Ta thấy cứ mỗi khi
best>=beta thì thuật toán không thực hiện tiếp vòng lặp, có nghĩa
là nó không chịu mở rộng tiếp những nhánh còn lại nữa. Các nhánh
đó đã bị cắt bỏ và do đó sẽ tiết kiệm đợc thời gian. Việc cắt bỏ này
hoàn toàn an toàn với những lý do ta đã xét ở trên. Ta thấy rằng
mỗi lần hàm này đợc gọi thì chỉ có tham số beta đợc dùng để so
sánh cắt bỏ, còn tham số alpha không đợc dùng. Tuy nhiên khi áp
dụng thuật toán này cho cây con thì ta đã hoán vị hai giá trị alpha,
beta cho nhau và đảo cả dấu. Do đó alpha sẽ có tác dụng cho độ
sâu sau, rồi độ sâu sau nữa lại đến lợt beta Nói cách khác, một giá
trị chỉ luôn ảnh hởng đến ngời chơi cực đại , còn giá trị kia luôn
ảnh hởng đến ngời chơi cực tiểu. Chúng là các ngỡng của họ (ng-
ỡng giữa các nớc đi chấp nhận và không chấp nhận). Những nớc đi
quan tâm phải nằm lọt giữa hai giá trị này. Dần dần khoảng cách
giữa hai giá trị alpha-beta càng ngày càng thu hẹp và dẫn đến các
nhánh cây có gía trị nằm ngoài khoảng này nhanh chóng bị cắt bỏ.
Ví dụ. Xét cây trò chơi gốc u (đỉnh Trắng) giới hạn bởi độ cao h =3
Số ghi cạnh các lá là giá trị của hàm đánh giá. áp dụng chiến lợc
Minimax và kỹ thuật cắt cụt, ta xác định đợc nớc đi tốt nhất cho
Trắng tại u, đó là nớc đi dẫn tới đỉnh v có giá trị 10. Cạnh mỗi đỉnh
ta cũng cho giá trị của cặp tham số (, ). Khi gọi các hàm
MaxVal và MinVal để xác định giá trị của đỉnh đó. Các nhánh bị

cắt bỏ đợc chỉ ra trong hình trên.
I.5: Đánh gía thuật toán Alpha-Beta:
Trong điều kiện lý tởng thuật toán AlphaBeta chỉ phải xét số nút
theo công thức:
-2*b
d/2
-1 với d chẵn
- b
(d+1)/2
+b
d/2
-1 với d lẻ.
Với b=40 và d =4 ta có số nút phải xét là 2x40
2
- 1 = 3199. Nh vậy
trong điều kiện lý tởng thì số nút phải xét nhờ AlphaBeta(chỉ
khoảng 3 nghìn nút) ít hơn thuật toán Minimax (hơn 2,5 triệu nút)
là 2560000/3199 khoảng 800 lần. Còn với b=40 và d=5 ta có số nút
phải là 40
3
+40
5/2
-1=74118. Số nút phải xét nhờ AlphaBeta ít hơn
thuật toán Minimax(hơn 102 triệu nút) là 102400000/74118 =1382
lần.
Dới đây là bảng so sánh số nút phải xét giữa hai thuật toán
Minimax và AlphaBeta.
Ta có nhận xét sau:
Số lần tăng số nút khi tăng độ sâu của Minimax luôn là hệ số phân
nhánh b, trong trờng hợp này là 40. Số lần tăng của AlphaBeta ít

hơn nhiều: chỉ cỡ 1.7 lần khi tăng từ d lẻ sang d chẵn và 23.2 lần
khi d chẵn sang lẻ- trung bình chỉ tăng khoảng 6 lần khi tăng d.
Số nút của AlphaBeta tăng chậm hơn rất nhiều lần so với Minimax.
Tỉ số nút phải xét giữa hai thuật toán này càng cao khi d càng lớn.
Qua công thức tính số nút cho ta thấy số nút phải xét khi dùng
AlphaBeta ít hơn nhiều so với MiniMax nhng vẫn là hàm số mũ và
vẫn dẫn tới bùng nổ tổ hợp. Thuật toán alphabeta hoàn toàn không
chống đợc sự bùng nổ tổ hợp mà chỉ làm giảm tốc độ bùng nổ.Tuy
nhiên trong thực tế số nút phải xét(lợng giá) thờng nhiều hơn trong
điều kiện lý tởng nhng nó vẫn đủ để tiết kiệm khá nhiều thời gian.
Trong cùng một khoảng thời gian thuật toán AlphaBeta có thể tìm
đến độ sâu gấp hai lần thuật toán Minimax. Ta có đồ thị so sánh
giữa hai thuật toán:
I.6: Hớng cải tiến thuật toán AlphaBeta:
Thuật toán AlphaBeta đã giúp chúng ta tiết kiệm nhiều thời gian so
với Minimax mà vẫn đảm bảo kết quả tìm kiếm chính xác. Tuy
nhiên lợng tiết kiệm này không ổn định-phụ thuộc vào số nút mà
nó cắt bỏ. Trong trờng hợp xấu nhất thuật toán không cắt đợc một
nhánh nào và phải xét số nút đúng bằng Minimax. Ta cần đẩy
mạnh việc cắt bỏ nhờ đẩy mạnh sự thu hẹp của cửa sổ tìm kiếm
alpha-beta. Cửa sổ naỳ đợc thu hẹp một bớc khi gặp một giá trị mới
tốt hơn giá trị cũ. Khi gặp giá trị tốt nhất thì cửa sổ này thu hẹp
nhất. Do đó nếu càng sớm gặp giá trị tốt nhất thì cửa sổ càng nhanh
chóng thu hẹp nhất. Nh vậy thì phải làm sao cho các nút ở lá đợc
sắp xếp theo trật tự từ cao xuống thấp. Trật tự này càng tốt bao
nhiêu thì thuật toán càng nhanh bấy nhiêu.
II: ứng dụng thuật toán cắt tỉa AlphaBeta cài đặt chơng trình
chơi cờ vua:
II.1:Sơ đồ các lớp cơ bản của chơng trình.
Lớp Square : là lớp thể hiện một ô cờ trên một bàn cơ.

-Các thuộc tính mà ta cần quan tâm đên nó là:
Màu sắc của ô cờ đó
Ô cờ đó nằm ở cột thứ bao nhiêu
Ô cờ đó nằm ở hàng thứ bao nhiêu
Quân cờ nằm trên ô cờ đó
Game
Game
Player
Player
Squares
PlayerWhite
PlayerWhite
Square
Moves
Move
Pieces
Board
Board
PlayerBlack
PlayerBlack
Piece
Piece
Pieces
PieceBishop
PieceBishop
PieceKnight
PieceKnight
PieceQueen
PieceQueen
PieceKing

PieceKing
PiecePawn
PiecePawn
PieceRook
PieceRook
Số thứ tự của ô cờ đó đợc lu trong mảng các ô cờ
-Các phơng thức:
Phơng thức xem ô cờ đó đợc phòng thủ bởi những quân cờ nào
Phơng thức trả về điểm phòng thủ của ô cờ đó
Phơng thức trả về danh sách những quân cờ có thể tấn công ô cờ đó
Lớp Squares: là lớp để lu danh sách các ô cờ
Bao gồm các thao tác nh:
Thêm một ô cờ vào danh sách các ô cờ
Loại bỏ một ô cờ khỏi danh sách các ô cờ
Chèn thêm một ô cờ vào một vị tri bất kì trong danh sách các ô cờ
Lấy vị trí của một ô cờ trong dánh sách các ô cờ
Lấy một ô cờ trong danh sách các ô cờ theo vị trí
Lớp Board: lớp này dùng để tổ chức và lu các ô cờ trên bàn cờ
Bàn cờ đợc tổ chức thành một ma trận các ô cờ kích thớc [8*16]
Các thao tác trên lớp:
Trả về ô cờ trên bàn cờ theo số thứ tự
Trả về ô cờ trên bàn cờ theo cột và hàng
Trả về thứ tự của ô cờ đó khi biết hàng và cột
Trả về quân cờ nằm trên một ô cờ nào đó
Lớp Move: Lớp này dùng để định nghĩa cho các kiêu đi. Các kiều di chuyển
của các quân cờ.
Bao gồm các thao tác:
Kiểu của nớc đi đó
Quân cờ thực hiện trong nớc đi đó
Ô cờ bắt đầu

Ô cờ kết thúc
Quân cờ bị băt trong nớc đi đó
Danh sách các nớc đi tiếp theo
Điểm số của nớc đi
Thời gian của nớc đi
Tạo ra một nớc đi
Quay lui lại một nớc đi
So sánh điểm số của 2 nớc đi
Lớp Moves: lớp này là danh sách các nớc đi của 2 bên
Bao gồm các thao tác:
Thêm một nớc đi mới
Xóa bỏ một nớc đi
Xắp sếp lại danh sách các nớc đi theo điểm số
Trả về một nứớc đi theo vị trí
Trả về nớc đi cuối
Trả về nớc đi áp cuối
Lớp IPieceTop: đây là một lớp giao diện định nghĩa toàn bộ các thông số
trạng thái của quân cờ nh:
Tên của quân cờ đó
Giá trị cơ bản của quân cờ đó
Giá trị của quân cờ đó
Giá trị vị trí của quân cờ đó
Quân cờ đó có thể ăn đợc không
Định nghĩa cách thức đi của quân cờ đó
Các lớp: PiecePawn , PieceBishop, PieceRook, PieceKnight,PieceQueen,
PieceKing là các lớp kế thừa từ lớp IpieceTop. Nó sẽ định nghĩa lại một
cách chi tiết cụ thể cho từng quân cờ một.

Lớp Piece: Lớp này cho ta biết tên, mã , trạng thái,điểm số, số lần di
chuyển của các quân cờ.

Thực hiện các thao tác:
Thực hiện so sánh điểm số của 2 quân cờ
Thực hiện tạo ra một danh sách các nớc đi có thể ứng với quân cờ đó
Trờng hợp lên đời , hạ đời cho quân tốt
Lớp Pieces: lớp này là lớp chứa danh sách các quân cờ
Thực hiện các thao tác:
Thêm một quân cờ
Chèn một quân cờ vào một vị trí
Xóa một quân cờ
Trả về vị trí của một quân cờ
Trả về quân cờ theo vị trí
Sắp xếp các quân cờ theo điểm số
Lớp Player: đây là lớp quan trọng nhất của chơng trình. Lớp này
sẻ cho biết màu màu sắc của quân cờ mà ngời chơi chọn, đối tợng
chơi, và trạng thái của ngời chơi.Bao gồm tập hợp các quân cờ,tập
hợp các quân cờ mà nó đã băt đợc của đối phơng, tập hợp các quân
tốt. Tổng số nớc đi, nớc đi hiện thời, nớc đi tốt nhất, hàm đánh giá
các nớc đi, độ sâu tìm kiếm, vị trí tìm kiếm , thời gian tìm kiếm n-
ớc đi, Đồng thời ở lớp này ta sẻ thực hiện thuật toáncắt tỉa
AlphaBeta.
Mấu chốt của chơng trình là định nghĩa đợc các nớc đi của các
quân cờ, và xác định đợc hàm đánh giá một thế cờ.
-Định nghĩa các nớc đi tơng ứng với từng quân cờ.
Với cách tổ chức bàn cờ là một ma trận Square[8*16]
Hàng của một ô:= Index/16;
Cột của một ô:=Index%16;
Với cách tổ chức bàn cờ nh vậy thì ta sẻ định nghĩa nớc đi cho các
quân cờ.
Pawn: Cộng với các offset có giá trị là:15,16,17,-15,-16,-17.
Bishop: Cộng với các offset có giá trị là:15, 17,-15 ,-17.

Rook: Cộng với các offset có giá trị là:1,-1.(Sẻ xét riêng trờng hợp
nhập thành)
Knight: Cộng với các offset có giá trị là:33,31,18,14, -33,-31,-18,-
14.
Queen: Cộng với các offset có giá trị là :1,15,16,17,-1,-15,-16,-17.
King: Cộng với các offset có giá trị là :1,15,16,17,-1,-15,-16,-17.
Với t tởng là ta sẻ cộng chỉ số của quân cờ đó(Index) với các offset
tơng ứng.Nếu tồn tại ô cờ với chỉ số mới và ô cờ đó có thể không
có quâncờ hoặc là có quân cờ của đối phơng thì ta có thể đi đến ô
cờ mới đó. Sau đó lại cộng tiếp offset cho đến khi không tồn tại ô
cờ đó hoặc ô cờ đó chứa quân cờ của mình mới thôi.
Xây dựng hàm đánh giá một thế cờ:
Mỗi một quân cờ ta đều gán cho nó một giá trị, và ứng với mỗi một
ô trên bàn cờ ứng với quân cờ đó lại có các giá trị khác nhau. Thêm
vào đó ta sẽ xây dựng các hàm đánh giá độ tơng quan giữa các
quân cờ. Gồm:
Đánh gía xem quânc ờ đó có khả năng bị quân tôt tấn công
không.
Xây dựng một hàm phòng thủ cho các quâncờ. Xem quân cờ đó
đợc phòng thủ bởi những quân nào. Tức là quân nào ở bên mình mà
có thể đi đợc đến ô của nó. Sau đó ta xây dựng điểm phòng thủ ứng
với từng quân cờ.
Pawn: 60
Bishop và Knight: 45
Rook: 30
Queen và King: 20
Nh vậy điểm số của một quân cờ sẽ là bằng: Giá trị của quân cờ
cộng với điểm vị trí của nó. Và điểm của một thế cờ bằng tổng
điểm của tất cả các quân cờ đang tồn tại trên bàn.
Giá trị của các quân cờ:

Tên quân cờ Basic Value Value
King 15 10000
Queen 9 9750
Rook 5 5000
Knight 3 3250
Bishop 3 3250
Pawn 1 850
Lớp Game: Lớp Game là lớp dùng để thể hiện các chức năng của
chơng trình . Nó sẻ xác định đối tợng chơi, tổng số nớc đi, danh
sách các nớc đã đi ở cả hai bên, danh sách các nớc đi quay lại ,
danh sách các nớc đi đã đợc phân tích trớc khi chọn ra nớc đi tối u
nhất. Nó có các chức năng nh mở một ván game mới, tải vào một
chơng trình game đang chơi dở, lu lại một ván game đang chơi dở,
thực hiện các chức năng Undo, Redo,Pause, Resume.
Giao diện của chơng trình:
II.2:C¸c chøc n¨ng chÝnh cña ch¬ng tr×nh:
-Chơi với đối thủ là máy vi tính.
-Đồ họa cho bàn cờ.
-Tạo ra những điểm sáng di chuyển hợp lệ trên bàn cờ khi click
vào một con cờ.
-Đồng hồ bấm giờ thời gian thực.
-Thể hiện tất cả các nước cờ đã di chuyển kể cả của máy và của
người chơi.
-Có thể quay lại hoặc tiến lên các bước di chuyển trước đó
-Có thể tải lại hoặc lưu lại các ván cờ đang chơi dở.
-Có thể chơi lại các ván cờ mà bạn đã lưu.
-Thấy được thời gian thực mà máy tính suy nghĩ.
-Thấy được cây phân tích các ô của tất cả các nước di chuyển được
máy tính xem xét.
II.3: Hướng cải tiến và phát triển chương trình:

-Tuy hàm đánh giá các thế cờ được xây dựng khá chi tiết xong
trong một số thế cờ cụ thể nó vẫn không tỏ ra thực sự tối ưu. Chính
vì vậy việc dạy cho chương trình học là một việc làm hết sức cần
thiết. Sau khi đã hoàn thiện các hàm đánh giá em sẽ xây dựng lại
các bảng trạng thái để lưu lại tình trạng các ván cờ mà người chơi
đã thắng máy . Từ đó tìm ra các nước cờ tối ưu hơn.
-Việc thiết lập độ sâu của chương trình chưa có do đó không thể
phân loại được cấp độ của người chơi. Tiến tới em sẽ xây dựng
game theo các Level mà tiêu chuẩn của các Level này chính là độ
sâu tìm kiếm.
-Chương trình vẫn chỉ hạn chế đánh được trên máy tính để bàn.
Tiến tới em có thể xây dựng chương trình có thể đánh trên mạng
lan. Bằng cách tạo ra các tiến trình va luồng để cập nhật lại các
nước đi.

×