You are on page 1of 10

TRNG I HC BCH KHOA H NI

Vin Cng ngh Thng tin v Truyn thng

BI TP LN MN HC
HNG TC T

ti:
Tc t ha game Gomoku
Sinh vin thc hin:
1. Nguyn Ngc Quang SHSV: 20092088
2. Nguyn Xun Qu

Gio vin hng dn: thy L Tn Hng


H Ni 12 - 2013

SHSV: 20092199

Mc lc

Li Ni u................................................................................................................... 3
I. Gii thiu v game Gomoku (Caro).................................................................................... 4
II. Thut ton MiniMax v Thut ton ct ta Alpha - Beta..........................................................4
1. Thut ton MiniMax................................................................................................... 4
2. p dng vo game Caro:............................................................................................. 4
3. Thut ton ct ta Alpha - Beta...................................................................................... 6
4. Hm nh gi........................................................................................................... 7
III. Hng tc t.............................................................................................................. 8
IV. Giao din chng trnh................................................................................................. 9

Li Ni u
Cc h thng tnh ton hin i ngy cng c tnh cht hng ngi dng.
th h my tnh u tin, s ngi c th s dng my tnh rt hn ch. H u l
chuyn gia v my tnh hoc lp trnh vin chuyn nghip, c trang b kin trc
c bit lm vic vi my tnh. Ngc li, yu cu vi my tnh ngy nay l
phc v ngi dng cng tt, th hin mt lot yu cu nh giao din thn thin
v trc gic, kh nng thch nghi vi yu cu ngi dng, cho php cung cp thng
tin c tnh c nhn ha vi tng i tng s dng.
xy dng cc h thng tnh ton tha mn cc c im v yu cu ni
trn mt s hng nghin cu v ng dng mi ca my tnh ra i, trong c
tc t v h a tc t ang tr thnh cng ngh ca tng lai gii quyt cc vn
nu trn.
Nhm em quyt nh chn ti Tc t ha game Gomoku minh ha
cho cng ngh tc t.

I. Gii thiu v game Gomoku (Caro)


Game gm c 2 ngi chi, mt ngi cm qun X, mt ngi cm qun O.
Hai ngi chi s ln lt a nh qun tng ng ca mnh trn mt bn c
MxN (thng th M = N).
Lut chi:
Qun X l qun c nh trc. Hai ngi chi c th nh vo bt k
no trn bn c min l cha c nh.
Tr chi kt thc khi mt trong hai ngi chi c 5 qun thng hng lin
tip nhau (ngang, dc hoc cho).
II. Thut ton MiniMax v Thut ton ct ta Alpha - Beta
1. Thut ton MiniMax
- C 2 ngi chi l MIN v MAX.
- Mt chin lc ti u l mt chui cc nc i gip a n trng thi ch
mong mun.
- Chin lc ca MAX b nh hng (ph thuc) vo cc nc i ca MIN
v ngc li.
- MAX cn chn mt chin lc gip cc i ha gi tr ca hm mc tiu
vi gi s l MIN i cc nc i ti u.
- Chin lc ny c xc nh bng vic xt cc gi tr MINIMAX i vi
mi nt trong cy biu din tr chi.
- MAX chn cc nc i tng ng vi gi tr MINIMAX cc i (MIN chn
cc nc i ng vi gi tr MINIMAX cc tiu).
2. p dng vo game Caro:
Ngi chi cm qun X ng vai tr nh MAX, ngi chi cm qun O
ng vai tr nh MIN. quyt nh nc i tip theo, ta xy dng mt th tc
quy gm 2 hm max_value() tm nc i tip theo cho qun X, min_value()
tm nc i tip theo cho qun O. gim thi gian ca gii thut quy, ta gii
hn su ca gii thut bng 3.
int max_value(state s, int dept){
4

if(terminal_test() || dept >= 4) return eval(s);


v=- ;
for(duyt tt c cc trng thi con s ca s){
v = max(v, min_value(s, dept + 1));
}
return v;
}
int min_value(state s, int dept){
if(terminal_test() || dept >= 4 ) return eval(s);
v=+ ;
for(duyt tt c cc trng thi con s ca s){
v = min(v, max_value(s, dept + 1));
}
return v;
}
Hm xc nh trng thi kt thc terminal_test():
Hm c nhim v xc nh xem tr chi c kt thc hay khng khi mt qun
c c nh thm vo. Hm hot ng nh sau:
- T v tr thm qun c, kim tra theo cc chiu ngang, dc, cho (v d kim
tra theo chiu ngang: gi s qun c nh vo l X, duyt theo hng bn
tri cho n khi gp qun O hoc tng th dng li, tip tc duyt theo
hng bn phi tng t xc nh s qun X lin tip nhau).
- Nu s qun X (hoc O) lin tip l 5 th tr li gi tr true, ngc li tr v
gi tr false.
5

3. Thut ton ct ta Alpha - Beta


Trong chin lc Minimax vi su hn ch th s nh ca cy tr chi
phi xt vn cn rt ln vi h>=3. Khi nh gi nh u ti su h, thut ton
Minimax i hi phi nh gi tt c cc nh ca cy gc u vi su h. Tuy
nhin, phng php ct ta alpha - beta cho php ct b nhng nhnh khng cn
thit cho vic nh gi nh u. Phng php ny lm gim bt s nh phi xt m
khng nh hng n kt qu nh gi nh u. tng: Gi s ti thi im hin
ti ang nh Trng a, nh a c anh em l v c nh gi. Gi s cha ca
nh a l b, b c anh em l u c nh gi, v cha ca b l c nh hnh sau:

max

min

max

Khi ta c gi tr nh Trng c t nht l gi tr ca u, gi tr ca nh en b nhiu


nht l gi tr ca v. Do , nu eval(u) > eval(v) ta khng cn i xung nh
gi nh a na m vn khng nh hng n nh gi nh c. Hay ni cch khc, ta
c th ct b cy con gc a. Lp lun tng t cho trng hp a l nh en,
trng hp ny nu eval(u)<eval(v) ta cng ct b cy con gc a. ci t k
thut ny, i vi cc nh nm trn ng i t gc ti nh hin thi, ta s dng
tham s ghi li gi tr ln nht trong cc gi tr ca cc nh con nh gi
ca mt nh Trng, tham s ghi li gi tr nh nht trong cc gi tr ca cc
nh con nh gi ca mt nh en.
int max_value(state s, int dept, int alpha, int beta){
if(terminal_test() || dept >= 4) return eval(s);

v=- ;
for(duyt tt c cc trng thi con s ca s){
v = max(v, min_value(s, dept + 1, alpha, beta));
}
if(v > beta) return v;
alpha = max(alpha, v);
return v;
}
int min_value(state s, int dept, int alpha, int beta){
if(terminal_test() || dept >= 4 ) return eval(s);
v=+ ;
for(duyt tt c cc trng thi con s ca s){
v = min(v, max_value(s, dept + 1, alpha, beta));
}
if(v < alpha) return v;
beta = min(beta, v);
return v;
}
4. Hm nh gi
Hm nh gi l mt hm quan trng trong vic xy dng tr chi c caro.
Hm ny gip cho im trng thi ca bn c t xy dng cy tr chi. Vic
xy dng hm lng gi hp l, chnh xc s gip cho h thng c nh gi chnh
xc v trng thi bn c a ra nc i thng minh hn.

Trong game caro, tnh im cho trng thi bn c ta a ra cc tiu ch


sau:
- Trong trng hp chc chn thng, im cng s l Integer.MAX_VALUE
i vi X v - Integer.MAX_VALUE i vi O.
- Trong trng hp c nc 3, im cng s l +300 i vi X v -600 i vi
O
- Trong trng hp c nc 4, im cng s l +600 i vi X v -900 i vi
O
III. Hng tc t
Trong khi chi, nu ch auto, game s t ng thay i kh ph
hp vi trnh ngi chi gip game hp dn hn.
C th, game s da vo 2 thng s: s vn thng ca ngi chi v thi
gian suy ngh mt nc trung bnh ca ngi chi.
Hm tr v su cn thit ca thut ton MiniMax:
private void getMinimaxDepth() {
int depth1 = 0;
if (numRounds >= 1) {
float ratio1 = (float)numWins/(float)numRounds;
if (ratio1 <= 0.3) depth1 = 1;
else if (ratio1 >= 0.7) depth1 = 3;
else depth1 = 2;
}
int depth2 = 0;
if (numMoves > 0) {
int ratio2 = (int)(time/numMoves/1000);
if (ratio2 < 10) depth2 = 1;
8

else if (ratio2 > 20) depth2 = 3;


else depth2 = 2;
}
setMinimaxDepth((int)(depth1*0.8 + depth2*0.2));
}

su tnh theo s vn thng ca ngi chi s c trng s 0.8, su tnh


theo thi gian suy ngh mt nc trung bnh ca ngi chi s c trng s 0.2 (do
s vn thng phn nh chnh xc hn trnh ca ngi chi).

IV. Giao din chng trnh

10

You might also like