You are on page 1of 22

Vit chng trnh chi c Caro Lot bi vit ny s hng dn bn phn tch, thit k, v vit chng trnh chi

tr chi Caro bng ngn ng C++


1. Gii thiu - Tr chi i khng (two-agent,conflicting game (?)) : Gm 2 ngi chi, i th ny s tm cch dnh chin thng trc i th kia trong mt s hu hn nc i, mi nc i uc to ra da t 1 trng thi bt k ca trn u. Nu sau 1 s gii hn nc i, nu cha ai dnh chin thng th xem nh ho. Ngoi ra, thng tin v trn u l hon ton bit uc (perfect information) i vi c 2 i th. - C Car (hay cn gi l Gomoku ) cng l 1 loi tr chi i khng, trong mi i th trong mi lt i ca mnh s chn 1 trng cn li trn bn c (k sn cc li ) sao cho to thnh n con lin tip chin thng ... Nu n = 3 th n c 1 tn khc l Tic Tac Toe , nu b sung thm lut cho n th c th i tn l Penta,Pentix (c n qun) ... Ngoi ra, c lut thi u m ngi ta chng minh uc ngi i truc bao gi cung c thut ton thng (thng tin ny ng tin cy khng th em hng chc ... ch bit l em c c qua ti liu ny ...h h h... ), do hn ch thun li ca ngi i trc, ngi ta t ra "lut rng" sau ( lut ny s s dng cho qu trnh pht trin chng trnh ) : + Bn c c kch thc tu NxN, chn n = 16; + Qun c u tin phi nh chnh gia li bn c. + Nu tn ti ng 5 con lin tip trn 1 hng l thng (cho,ngang,dc). [*] + Nu ht ch i th 2 bn ho. + V 1 s lut khc, nhng on gin, em dp sch ... [*] : Lut ny ng l l gt hn nh sau : ng 5 con v khng b chn hai u ... nhng em dnh cho cc bc ci tin ... 2. Thut ng Anh Vit - tin cho cc bc c sau ny, em xin gii thiu 1 s thut ng c bn sau, d nhin m ny l em t dch hoc xem ti liu nn khng trnh uc sai st hoc cha chnh xc ... mong cc bc thng cm v gp ... (1) Gii thiu v khng gian tm kim nc i : - Nh cc bc bit, trong tr chi Caro, c sau mi nc c, mi i th s chn ra t nhng trng (empty - not occupied) i, do , sau 1 mi nc i th s trng cn li s gim. Nh vy, vic tm nc i tip theo cho trng thi c sn ch l vic tm kim nhng trng cn li, ng thi, khng gian tm kim s thu hp theo s nc i to ... Em ni n iu ny l sau ny ci tin thm vic gia tng su tnh ton cho chng trnh nhng nc c tn ... Nh vy, chn 1 nc i k tip t 1 trng thi bn c c sn, ta phi tm kim nc i ... - Khng gian chn nc i t mi trng thi ban u l hu hn, nhng khng gian tm kim (searching space) 1 nc i dn n chin thng l ... hu hn lun (?..h..?..h..?..h... ) ... nhng r rng s lng phn t ca hai khng gian ny uc so snh ging nh ht ct v sa mc ( hoc nh tp s t nhin l v hn m uc, tp s hu t cng v hn m uc nhng m s lng phn t ca Q so vi ca N l 1 tri 1 vc ...) ... Do ta khng th vt sch khng gian tm kim nc i ny ( nu lm uc iu ny th lm g cn nhng gii c na ... v ch cn hc thuc th c l xong ...) m ta phi gii hn khng gian tm kim ... - Mt khng gian tm kim c th hin thc theo dng 1 ci cy a phn bnh thng nh trong Data Struct nh nghia, lc ny n uc gi l cy tm kim, cy tr chi ...( Searching Tree,Game Tree), mi nt (Node) cng mc ca cy ny th hin mt la chn cc nc i c sn, mc (Ply)

ny s th hin cho vic nh gi khong cch t nt gc n nhng nt con ny ... Nu s nt mi mc cng nhiu, tc l c nhiu kh nng chn la 1 nc i t 1 trng thi trc, do phn nhnh ( Branching factor) ca cy ny cng ln ... - Da vo ci cy tr chi nh ngha trn, vic tm kim nc i l chn 1 nt trn cy ( mc 1) sao cho nc l tt ( tt y uc hiu l do mnh nh gi thui, v 1 nc i ny l tt hn nc i kia th ph thuc trnh , kh nng ca ngi chi c ...), theo thng thng khi chi, mt nc i tt hay khng l ph thuc vo kh nng dnh chin thng l cao hay thp sau khi nc i ny uc "made" (tc l "i"), do , mun chn 1 nc i tt th nu ch da vo th c hin ti l cha , m phi bit thng tin ca nhng th c sau khi chn nc ny i ... V d nh khi chi tr Car, cc bc li chn mt nc i vo 1 no chn ung 3 h hai u ca i th (Opponent, Enemy) v cc bc bit l nu khng i nuc ny th s thua 2 na nc i tip theo, tc l trng thi thua cn cha bit uc nu ngay sau khi chn i 1 khc i xut pht trng thi ny. Khi nim su cung ny sinh t y, on gin th su (Depth) l kh nng "nhn thy trc" (looking ahead) 1 nc i tt sau mt lot nc i xut pht t hin ti , v d nh nu t trng thi ny, cc bc nhn bit uc l sau 6 con na l mnh s thng (tc l mi bn i 3 con), khi su tnh ton ca cc bc l >= 6 [not 3], v d ny cung cha chnh xc lm, nhng 1 v d khc th ny nh : trng thi hin ti, cc bc chn i 1 nuc i "tt" theo s tnh ton ca mnh, cc bc d on l sau 4 con na l mnh vn cha thua, nhng thc t sau 3 nuc na (mi bn i 3 con) th cc bc b thua (..hi hi hi... ), khi , r rng "thua" l trng thi m cc bc khng h nhn thy khi chn nc i tt trn, tc l su tnh ton ca cc bc trong trng hp ny chnh xc l 3, cung gi l su ln nht (Max Depth) m cc bc c th t uc khi tm kim ...Nh vy, Max depth th hin kh nng & trnh ca ngi chi c, cc bc chi cng hay th gi tr ny cng ln ( r rng 1 thng su max 6 chi vi 1 thng su max 8 th thng (6) khng bao gi n uc thng (8), hin nhin ...)... Khi Max Depth = 0 ==> No thinking ahead - Li ni vit chng trnh cho my tnh chi c ... tc l my tnh phi t tm nc i khi mnh a vo 1 trng thi bn c bt k, do khng gian tm kim l qu ln (coi nh l v hn) nn mnh ch gii hn cho my tnh chi tm kim n 1 su no m thi (cch hin thc ny ging nh mnh chi c thui ...), l su tm kim ln nht ... th hin kh nng ca chng trnh, chng ta s c gng nng cao gi tr ny bng cch ci t thm cc tri thc c cho n (Heuristic, Knowledge ...), tc l sau khi chy chng trnh, my tnh phi bit chn ra 1 nc tt trong mt m cc trng cn li sao cho s cha b thua sau 1 lot nc i (= MAXDEPTH [not MAXDEPTH*2]) k tip ... - Mt s thut ng [*] : Game Tree : cy tr chi. Searching Tree : Cy tm kim Ply : mc ca cy (Level) Depth : su (max Ply) Iterative Deepening : Tm kim su dn Quiescence depth : su tnh Branching factor : phn nhnh Parent Node : nt cha Children Node : nt con Leave Node : nt l Max Node : nt nc i ca i th hin ti Min Node : nt nc i ca i th va mi i Evaluation : S lng gi Evaluate : Lng gi Static/Dynamic Evaluate : Lng gi tinh/ng Lazy Evaluation : Lng gi li Extension Knowledge - Extension Heuristic : Tri thc b sung Upperbound : Chn trn

Lowerbound : Chn di Make Move : Unh 1 nc i chn NULL-Move : nc i trng Move Ordering : Sp xp ni nc i Move Generation : Sinh nuc i Capture : "p" Generation Move : Nc i Dangerous Gen-Move : Nuc i nguy him (e do) Winning thread : Nhnh dn n thng Straight four : 4 con b chn 1 u (XOOOO*, * l trng) Opened three : ung 3 m 2 u (**OOO**,X*OOO**...) Broken three : ung 3 gy khng b chn 2 u (*OO*O*) Winning line : ung thng (v d : Straight four,Open three,Broken three..) Tranpositon Table : Bng truyn Hash Table : Bng bm Offense/Defense - Offensive/Defensive - Aggressive Attack : Cc ch chin u ca chng trnh Prune, Pruning, Cut Off,...: Ct nhnh Horizontal Effect : Hiu ng ung chn tri,ung ngang Back Tracking : Quay lui tm ti Opening Books : M Book-Database Search by MinMax/AlphaBeta/NegaScout/MTD(f)/PVS Algorithms : Cc thut ton tm kim [*] : Nhng thut ng trn c 1 m gii thiu, m cn li s uc gii thiu nhng bi k tip ... 3. Vit mt chng trnh Game Gomoku nh th no a. Mc tiu : - Vit 1 chng trnh m my c kh nng "bit chi" c car (tc l bit unh ng lut ...h h..) ... - Chng trnh t nht phi nh thng nhng ngi hng bit nh c car (bit uc ung thng...), ngoi ra phi cho nhng cao th ngi phi "e ngi" v chng trnh c tnh ngi (c suy nghi ng hong) - Cc kh nng cn li ca chng trnh l ca cc bc ... (dz d : c th ci t my "unh" dzi my, "unh" nhau trn mng, "unh" multiplayer : 1 ngi chi vi 2 my b nhau ... hi hi hi ...) b. Khi ng [*] : - Chn cu trc d liu thch hp lu trng thi 1 ca bn c (lu thng tin ca tng ) - Chn CTDL thch hp lu trng thi 1 bn c : Board (dz dz mng 1 chiu c, 2 chiu, danh sch lin kt, cy, chui ...) - Chn phng php nh gi 1 nc i ny l tt hn nc i kia nhu th no cho on gin v hiu qu (Evaluation) - Chn thut ton thch hp tm kim nc i ...(No thinking ahead, Simple Breadth First Search, Simple Depth First Search, MinMax, AlphaBeta, NegaScout, MTD(f), PVS ...) - Chn cc phng php ci tin nng cao kh nng choi c (Heuristic : Opening books, Iterative Deepening, Lazy Evaluation, Knowledge Base, Static/Dynamic Evaluation, Winning Threads,Best score, Best move, Deep thought, Quiescence Depth, Transition Table, Hash Table, Score Table ...) - Chn 1 loi ngn ng lp trnh hin thc (C,C++,C#,Pascal,Object Pascal,Basic,Java...) - Ti u ho cc chn la trn thnh 1 th thng nht ... c. Phn tch thit k gii thut ... d. Hin thc chng trnh ... e. Dy cho chng trnh ( Machine Learning): bng tay, bng mng neural ...

f. Xch g i : t chc mt cuc thi nho nh gia cc chng trnh [*] : Ghi ch : - Em s trnh by phn a,b,c,d,e. Cn fn f dnh cho Admin v cc bc Mod nu uc ... - Chng trnh c bn s dng Alpha Beta tm kim, cc k thut cn li s ni s wa... - Cc k thut phn ci tin nng cao chng trnh c, em s ch trnh by mt s, mt s cn li em s trnh by k thut, tng thui !(do em khng bit hoc em nhng li cho nhng bc khc Post ln tho lun ...). - Em s dng C/C++ for DOS (WIN-Console) gii wuyt vn ... - phn e), do trnh c hn nn em s luyn cho chng trnh bng tay, cn dng mng Neural th dnh ti TTNT nhiu w m em cha c bit r, i khi no em hiu th s "ma m" ...hic,hic...

Vit chng trnh tr chi Caro - Phn 2 Tip theo phn 1, phn 2 ny s i vo chi tit cch thit k cc lp c bn ca chng trnh chi Caro.
1. PHN TCH VN - Nh cp bi trc, tin cho vic testing, designing, improvement v optimizing em s s dng C++ for DOS hin thc, trnh bin dch c th l MS VC++ 6.0. Chng trnh s hin thc trn nhiu lp ... cc bc c th "tha k" vit cho mt s chng trnh c khc nh : C vua(Chess or King Chess),c tng(Chinese Chess)... ni chung vic thit k ny l sao cho rt hng i tng. - S c th c nhng cu hi nh t ra : + Q1: Ti sao li l C++? ==> A: n gin l v y l ngn ng lp trnh m em thnh tho nht (trong s nhng ngn ng m em bit ...hic...) v c l y cng l ngn ng "i chng" nht (v hu nh ai cng hc n nh l vic to ra cho mnh ci nn hc tip nhng ngn ng khc ... t nht l sau khi bit Pascal!). + Q2: Ti sao li l Object Orient? ==> A: V tin cho s pht trin sau ny, chng trnh s c pht trin mt cch thoi mi v c th "inherit" t cc lp c bn... Cc bc no nu cha wen dzi lp trnh hng i tng th cng hng seo ... c t t m hc ... h h h ... + Q3: Ti sao C++ for DOS ? ==> A: C l cu hi ny hi kh tr li, nhng m s d dng nhn ra mt iu l "Tt g hn tt nc sn" hay l c th hn l khi ci "rut" ca n khng ra g ri th ci v b ngoi ca n nh th no th cng ch c xp vo hng "lng" thui ch khng c hng "fly" na! Em ni iu ny l v 2 l do, th nht l hin nay c nhiu chng trnh nh khng ra g (hic, ni hi tc l "bo nh cc c.. mo!") th m lo lm giao din ny n tm lum,t la ... khng ra ci g c!...ci th hai l ci chng trnh Gomoku ny ca em thit k ra chc nh cng khng hn ai, do vi ci rut nh dzy ri th lm ci v cho p lm chi, rng ch m cc bc ci tin cho n unh nh "tru" th lc hy lo lm my th ru ria cho n m Package-Release ... Tuy nhin ... h h... v 1 l do khc l ci giao din trn Windows i lc lm em v c th l cc bc bi ri... nhng em ha s c gng khi ht lot bi ny s c ci source for Win vi y "strength

power like a buffalo" cho cc bc!... Ni nh nhe : em hay tht ha lm...h h... - Kt thc cho vn ny l mt li "nh to tm s" : hic ... trong qu trnh phn tch v thit k sau ny( m c l l ngay di y), c th nhng class m em a ra l cha hp l vi tn ch "thit k hng i tng", khi , nu cc bc gp th em s c gng xem xt v sa i ... hi vng l cc bc khng "refuse" n ... No, ni 1 cu ting Anh chi : "thanh kj ... du"!... 2. THIT K MT CHNG TRNH GOMOKU TNG QUT - Bi gi l i vo phn phn tch-thit k chng trnh sao cho n dzui dzui 1 t, em s c gng trnh by "chi cht" ... ln !... "chi tit" cch thit k tng lp, c th m ngun cha ti u nhng chc l chy rm rm .. h h ...vic ti u s lm sau khi chng trnh hon chnh ... - Chng trnh s c thit k da trn cc lp, c bn l cc lp nh sau : CBaseSearching, CAlphaBeta, CCell, CNode, CBoard, CGomokuInterface, CGomoku ... Ci ny th do qu n gin nn hng cn Hierarchy chart ... * Gii thch : - Lp CBaseSearching: y l lp tch ly cc tnh nng cho mt c ch searching for moves ( tm kim nc i)... y l 1 base class cho nn cha y cc tnh nng p ng cho cng vic trn, hu ht cc member l virtual cho con chu ca n t do "ma my", tuy nhin nu l con chu ca n th t nhiu g cng c y cc phng thc tng tc vi bn b v ng nghip ca n. Cc lp con chu ny c th tha k n to ra cc kh nng (ability) tm kim theo cc thut ton khc nhau... v d cc bc c th thy mt lot cc con chu ca thng ny nh l CNoThinkingAhead, CExhaustiveSearch, CMinMax, CMTDf, CAlphaBeta, CNagaScout ... - CAlphaBeta: nh ni trn, lp ny k tha t lp CBaseSearching c nhim v l tm kim nc i cho chng trnh theo thut ton tm kim c in l Alpha-Beta Prunning... V chng trnh ny l phin bn "bo" nht nn n ch c kh nng tm kim bng Alpha-Beta, phn cn li l ca cc bc. Nu sau ny mun ci tin th cc bc c vic k tha t CBaseSearching v thm mt s c trng cho ci searching algorith ca cc bc (nh em gi trn ...). - Lp CCell l phn hin thc cho cu trc ca 1 ca bn c, c th bao gm cc thng tin nh im ca mnh v i phng (Score of Friend and Enemy), trng thi ca (Status of cell), trong c Car th trng thi ny s l EMPTY,HUM,COM,HEDGE (tc l rng, hoc b chim, hoc l vng "b giu", k thut Hedge s c ni n khi hin thc ...). V 1 cu hi t ra l ti sao li chn cch thit k ny ? cng l ph hp vi t tng "OO" tc l Object Orient, sau ny l cc bc chuyn wa vit c tng hay c vua th n gin l thay i thng tin ca 1 thnh nhng trng khc ph hp vi chnh chng trnh c nh l SCORES,CAPTURE: (HAS_BEEN_CAPTURE, OCCUPIED), STATUS:(EMPTY,ANY_PIECES_OF_HUM or COM or MAN...) ri xi li nhng lp ny. - CNode: lp ny rt ng quan tm v n chnh l ci "ct li" trong vic tm kim nc i, mt Node chnh l 1 node trong cy tm kim ( Game-Tree, Searching Tree), do mt Node cng l 1 nc i cho nn thng tin ca Node s cha CCell, v th CNode c nn k tha t CCell hay khng ...? Cu tr li theo em l khng ( m hng bit gii thch ti sao, h h ...) m nn thm 1 trng "CCell cell;" trong phn member attribute ca CNode ... Cch thit k ny s to nn tnh linh ng cho ci node, v n cng khng nht thit phi l mt dng nc i c th m n gin ch l mt "node" trong ci cy tm kim vi cc property khc nhau... Ni th ni vy ch nu k tha t CCell th cng hp l ...Ch s nh gi ca cc bc cho vn ny ... - Bi gi l lp CBoard, mt lp kh wen thuc nu thit k cc tr chi trn Board (nh : cc loi

c, puzzle, brick-game, destroy-ship (bn tu) ... v ngay nh nhng tr chi mang tnh "chin thut trn tng li" trn my super ln vi tnh nh Mc chin k, Heroes... cng c th thit k nh zdy, ch khc ci Board ny n cha nhng i tng "animate" ch hng phi n gin l nhng con s 0,1 nh ca em m thui!!!). Thy em xo c li hi hng ?...h h... ni cho vui vy thi ch ci CBoard ny n s cha mng cc CCell, kch thc mng chnh l kch thc bn c ... dz dz ta s khai bo "CCell board[BOARD_SIZE];", dzi BOARD_SIZE l kch thc ca bn c car = 16x16 chng hn. Ngoi ra, lp ny s c thm nhng member variables khc nh thng tin v trng thi tr chi ( nfGameState = GAMEOVER, COMPUTER_WIN, COMPUTER_LOSE, RESIGN, HUMAN_WIN, HUMAN_LOSE ...) v v trng thi ca lt i (nfMoveState = HUM, COM, MAN, STOP...) v v ... th nu thch ...h h... - Nh vy lp m nhim cho vic giao tip bn ngoi l CGomokuInterface, v for DOS do ch n gin l x l cc cng vic : user control (keyboard/mouse), load/write file, link between 2 programs ... ngoi ra update cc nc i c hai bn ln mn hnh, thm vi th lng nhng na cho nhiu, cho p dz dz thng tin v trn u : time ellapse, searching status, some information about last move, thinking status, display some features of the program, for example : version, program's name, programmer's name, current level ... v c bit l nhng cu gy "shock" cho i th nh : "H! nh dzy sao n tui ni, chn n!","H...h, thua ri ng i!","Thy ng thua cha?" ... v "Cn 20 nc na l thua nhe!" ...hic, shock thit, em cng b shock lun ... em s n a ra cu : "Hic, tha cho em i, em sp thua ri!" th w lm!!!... H h ... ni chung l ci lp ny l lp console in/out ... nu sau ny bng n wa ch ho th ch cn thit k nhng hm ny cho ch ho, cn nu bng ln Windows th cng n gin l cho n con tr "CDC *pDC" l n lm tut ... - Lp tip theo l CGomoku: Hic, y l lp "be" nht trong cc lp, c nhim v "gi"(pack) tt c cc "b" (other classes) trn vo, ng thi ch a ra 1 public method cho ngi s dng l 'RunGomoku()' m thui, ni nh vy th bc no hiu c chc cng ... hiu, cn bc no cha hiu th em ni tip : l trong lp ny s thit k lm sao cho my "em b" cng nhau chung sng dzui dz m khng "unh nhau" (conflict) nh my ci hardware ca my em ... ngoi ra n phi p ng tt c g cn thit nh : Initialize, Game-Message-Loop, Ending... mt v d n gin l n s x l cho user chn level, th t i (move order), unh na hng (continue) ? Ct khi chng trnh ngay lp tc hng (quit immediately)? Xin thua unh vn mi hng (resign)? Chn my unh dzi my coi chi hng (demo)? Chn 2 chng trnh unh dzi nhau hng (tournament: giao tip qua file) ?... Ni chung l th ... - qun, c 1 lp na em mun thit k thm l : CEvaluate : lp lng gi, nhng suy ngh hng i tng ca em cn non nt, khng bit wng vo my lp kia ra sao, nu bc no tng vit ri th share cho em mt cht experience ... thc s l em cha bit, nu m c th kh hay nha : ta c th c nhiu lp lng gi vi tha h cch la chn (v d : Lazy evaluate, Static evaluate, Dynamic evaluate, Heuristic evaluate vi cc k thut nh Best score, Best move first, Random-best move ...). Ni thit, tng th em ...y nhng cch hin thc th em ... ic .. h h ... tht s l mong cc bc tng vit hoc ang vit m c tng tt gip ... - Nh vy, vi lot phn tch k thut thit k trn th c g bn ci na hng dzy? Cc bc reply in this topic hoc mail n em theo a ch boy4is@hotmail.com (a ch boy4is@fptnet.com.vn ba trc em a th ba ni nhn hng c na, ci ny l do server FPT n li ta la... chn w...!...). C bc no tham gia vit code th em rt hoan nghnh, hy gip em vi ... v nu tt s c bi v c tng, c vua, c ... bt c c g m cc bc a lut (rule) cho n ... hic ...xo !... ... - Hic, hi trc gii thiu cc thut ng m wn gii thiu lun cc qui c, bi gi, tin cho sau ny th ... gii thiu lun cui bi ny chc cng cha qu mun : + Cc Identifier trong chng trnh l cc t ting "N" (c gng nh dzy).

+ Cc tn bin s c t theo tiu chun "hungry" (i...rt...) tc l hng phi hon ton HUNGARY nh my b gi Windows Programmers ni, m s lc bt cn li nh : kiu nguyn th c ch 'n' trc (i khi hng c nhe!), kiu c cu trc th s ... hng c g trc, kiu bool th c ch 'b' trc, ngoi ra c 1 kiu "i" ring em l nhng bin m xi nh mt ci "c" s c ch 'f' trc (flag # not a function), wn,kiu pointer s c ch 'p' trc nhe ... Xi ton ch thng (long-hand,normal) cho cc bin ch c 1 "t" (word), cn nu nhiu t (tc l loi "term") th s dng Vit Hoa Ch u (title case). + Cc tn lp th theo my ng : c ch 'C' (class) trc ... nhng m Struct th hng c t 'tag' u u nhe (v y l chun "hungry" m!)... + Cc tn hm th theo kiu Title-Case nh ni trn. + Cc tn hng th ...OK...theo tiu chun ISO 9000..0... l UPPERCASE ALL + Ngoi ra, trong chng trnh s c th c nhng bin t tn rt "ng", dz d 'fee'&'ffe'... m ch mt mnh em hiu ... h h ... cc bc c ngha g ? H h ..., n gin thui : "Flag-EnemyEncounter" & "Flag-Friend-Encounter" v nu gp trng th sao nh?...Flag-Empty-Encounter == 'fee' ? ==> h h, khi s l 'fbe' == "Flag Blank Encounter" ... nhng bin dng ny ni khi "ng hng" (encounter) l mt qun c ca i phng (Enemy == Opponent) hay qun ta (Friend == Ally) hay 1 trng (Blank == Empty) th s bt c ln ri x l mt cng vic g ... Xin li, cn nhiu lm ... nhng r rng trc vi nhau nh vy th s d dng hn ... h h... + Cn g na hng nh ... chc ht ri ... - Hy d ... cn li c m bi chc t t w ... my ba ni phi n thi gia hc k hng thui hc li "ph ru" ! Em post ln bi ny trong khi ngy mt,kia,ka... phi thi lin tc ri ... ni vy l my bc thng cm vi em, SV m !!...Ti v em s lu qu ri m hng ni nng g th cc bc "refuse" n lun nn em phi post ln !... Hi vng sau khi thi gia k xong thy "sung sung" ch l m thi "t le" th ...hic... Thi th mun bit chng trnh tip din nh th no ... xem hi sau s r ... (********************* H hi phn gii ***********************) Next : B3 : Phn tch & Thit k chng trnh Gomoku - Phn : Thit k "s" cc lp chy c! (ch unh hng c ...) PS : tin cho bi ti , cc bc c th vit 1 chng trnh Car da trn nhng tng ban u trn c cha ?...

Vit chng trnh chi Caro - Phn 3


- Trong phn ny, hin thc cho nhng g phn tch trn, em s trnh by 1 chng trnh c th ... test th bng cch nh di ch "HUM VS HUM". - Xin nhc li l v cn trong giai on th nghim nn chng trnh ca chng ta cha tht s hon thnh, ch c nhng phng thc c bn nht v giao din (very simple) v cch thc chi mi c xy dng, cn nhng vn trng tm (tc l my chi c ...) s c trnh by tip v nhng vn ny mi ng i su vo ... - V phn xy dng cho ci v cho chng trnh Gomoku ny l n gin nn em ch s qua thi, nu bc no tht s lp trnh thnh tho C/C++ ri th ci source ny i vi bc ch l "m bo nho" thui ... nhng v y l bi vit Tutorial dnh cho nhng bc "tp tnh" nn em s c gng trnh by tht c ng, r rng d vn ny l nh ... - tin cho vic phn tch vn , mi cc bc down chng trnh phn download bn di, xin ni li vi cc bc ln na, v y l chng trnh rt n gin nn cn mt s chc nng cha c include, ngoi ra giao din rt n gin (thm ch rt "th" ...) nhng em hi vng l cc bc hng ch ci ( cho em cn cht "g " m lm tip nhng bi mi na ch ... h h ...). Khi cc bc down v nh down 2 ci : conio.zip (file th vin console) v gomoku.zip (file unh gomoku) ...

- Em xin trnh by 1 cht v ci chng trnh ny : + Chng trnh vit trn nn DOS vi trnh bin dch VC++ 6.0 + Bao gm cc file hin thc cc lp : CBaseSearching, CAlphaBeta, CBoard, CNode, CGomoku, CGomokuInterface ... v 1 s file cho cc thnh phn khc ... Mt nh l em dp ci lp CCell sang mt bn v sau mt hi suy ngm, em thy n khng cn thit, nu khng c n cng khng lm mt tnh "Orient Object" ca chng trnh, mt khc n lm ri rm hn (bi v n gin l mnh ch cn coi 1 cell l mt bin int m thi ... phn cn li l do 1 node lu tr ...). + Lp CBaseSearching gm c 1 s thnh vin tiu biu nh Quiescence() (tm kim yn tnh bng cch dng AlphaBeta algorith), m_nFixDepth ( su c nh), m_nQuietDepth ( su tnh), Eval() (lng gi nc i ...). Ngoi ra, trong qu trnh pht trin s c th ny sinh thm nhiu hm (bin) thnh vin khc (v d hin thc cho phn NULL-move, Hash Table, Transition Table ...). + Lp CAlphaBeta k tha public t CBaseSearching c nhng hm thnh vin tiu biu nh AlphaBeta() (tm kim nc i vi thut ton AlphaBeta), Search() (call AlphaBeta()), Eval() (hm lng gi c th cho Gomoku). Lp ny cng c th thay i trong qu trnh pht trin chng trnh. + Lp CNode n gin ch c 2 hm to, 2 bin thnh vin nState (trng thi ca trn bn c : HUM,COM,EMPTY...), nMove (th t trn bn c)... Sau ny khi xy dng nhng hm lng gi th s thm vo nhng phng thc, bin mi ... + Lp CBoard : y l lp c kh nhiu phng thc nhm tng tc vi ci Gomoku Board nh : Gen() (sinh nhng nc i bnh thng), GenDanger() (sinh nhng nc i nguy him nh ng 3 m, ng 4 ... dng trong Quiescence() ), MakeMove() (th nc i), Restore() (phc hi li trng thi c ca Board sau khi backtracking), LegalMove() (xem th mt nc i c l hp l hay khng ... tc l kim tra cn trng hay khng ...), SortMoveGen() (sp xp ni cc nc i hp l hi vng trong qu trnh search th AlphaBeta c th ct nhnh nhanh hn), CheckFiveInRow() (xem 5 con trn 1 hng ngang,cho hay dc cha ...). Ngoi ra c 1 s bin thnh vin l : nMoveState (lt ca ngi i nc hin ti), nHistStack (lu li cc nc i th backtracking), nMoveStack (lu li cc nc i sinh ra bi hm Gen() hay GenDanger() ), nTopMoveStack (nh ca nMoveStack cha s lng ti a cc nc i sinh n 1 su no ...), nTopHistStack (nh ca nHistStack lu li s nc i th : make move). Bin nMask l dng lm mt n cho vic sinh v kim tra cc nc i trng nhau nhanh hn ... + Lp CGomokuInterface l n gin, v y ch l lp m nhim vic nhp xut ra console nn cc hm v bin thit k l cho tin cng vic ny. hm GetMessage() : tuy cha lm xong nhng tng l da trn im s t c v trng thi ca bn c sau khi computer search convert nhng ch s ny (lu ti bin nMessageIndex) thnh nhng reference-index c th cho vic in ra nhng messages gy shock cho i th !! H h, ci ny sau ny s tnh ... + Lp CGomoku th cng n gin, ch yu l lin kt cc lp trn li to thnh 1 chng trnh hon chnh, chy c ... Phng thc RunGomku() s cho lm 1 vng lp : "Khi u --> nh nhau --> Kt thc vn c --> Thot hay unh na th lp li", trong vng lp "nh nhau" th mi bn i mt nc, nu c ngi lp c "Five in a row" th s qua bc "Kt thc vn c". Lp ny cng coi nh l cha hon chnh v cha c y chc nng nh Opening Book, Load/Save from file (Serialize() ) ... ri s include sau ... - Xong ri, bi gi l F7 ==> Ctrl F5 ==> Enjoin it !!! qun, khi bin dch nh gi ci file console

library vo th mc gc ca n nhe !! ( Ci ny th cc bc phi dch consoleIO sang lib trc .. n s to 2 file : RConIO.lib (Release), DConIO.lib (Debug)...).

Vit chng trnh chi Caro - Phn 4


BI 4 : 1. Gii thiu cc k thut: - n lc ny th cc bc c chng trnh Gomoku trong tay ri, "mun chm mun git th tu " ... hic ... do cng n lc bn n nhng k thut khc trng tm hn trong ci chng trnh car ny !! Cc k thut ny s c trnh by bao gm : Sinh nc i (Generate moves), Lng gi (Evaluate, Evaluation), Tm kim nc i (Search game tree), B sung tri thc c (Heuristic), Lp nc i c sn (Book Opening, Book database), Luyn chng trnh ( Machine learning)... Mi k thut trn li c nhng k thut "con con" na nh sau : + Generate moves : full generation, increasing generation, decrescent generation, complete generation, selective generation ... + Evaluate : static, dynamic, some technics ... + Search game tree for move : Minimax/AlphaBeta/MTD(f)/NagaScout pruning, Quiescence , Ordering moves, Interative Deepening, Hash table, NULL-Move, Endgame Database ... + Heuristic : Evaluate, Winning lines, Offensive/Defensive mode, Winning threads, Related cell ... + Book opening : save book-format, read book, organize database ... + Machine learning : by handle ( modify score-table )... + Bi u tin ca cc lot k thut ny s l SINH NC I v cch t chc cu trc d liu sao cho hiu qu v tc ... 2. K thut sinh nc i: * Mt s cu hi : Q1 : Sinh nc i l g ? A1 : - Sinh nc i (generate moves) y l 1 giai on trong qu trnh tm kim nc i, tc l t trng thi hin ti, mnh mun tm kim mt nc i hp l cho lt ca ngi chi hin ti ==> khi phi lm (tc l "sinh") tt c cc nc i c th c, sau mnh s chn mt nc i tt nht (phi nh gi n ...) trong s nhng nc . Q2 : Ti sao phi sinh nc i ? A2 : - Thng tin cho qu trnh tm kim nc i ch n gin ch l ci board vi nhng trng hay b chim (ca c 2 bn) m thi! Nu khng c sn thng tin nhng nc i hp l th vic tm kim n gin ch l chn i 1 trng ri unh 1 con c ... R rng vic lm ny s dn n vic tm kim v cng phc tp v mnh s khng bit 1 trng search qua hay cha ==> do c th ri vo 1 vng lp tm kim v hn ... V d c th l gi s mnh ang trong 1 m cung, bc u tin l chn 1 con ng khng b tng chn ri i vo, nu ng ng ct th s quay li tm ng khc, th nhng nu sau khi quay li, mnh li khng bit l tng vo con ng trn v th l i vo tip v ... Cch gii quyt cho trng hp ny l trc khi chn 1 trong nhng con ng i th mnh s nh du tt c con ng theo th t ... v ln ny bc vo con ng th 1, nu khng thot ra c th quay li v chn ng th 2 ... ==> Ni chung phi sinh nc i c th duyt chnh xc v y ... * Phn tch cc k thut : [a] Full generation : sinh y cc nc i - tng : T trng thi hin ti, kim tra xem cn bao nhiu nc i hp l c th c th ct tt c vo stack ... - Phn tch : + M gi nh sau :

for (i = 0; i < BOARD_SIZE;i++) if (IsLegalMove(i)) // kim tra xem (Board[i] == EMPTY) if (IsNotInGenMove(i)) // kim tra xem c trong danh sch cha... StoreGenMove(i) // ct vo stack ... + Trong cc loi board-game th k thut ny ch ng dng khi vic sinh nc i t trng thi c sn l n gin, ngoi ra vic nh gi nc i ny l hay hn nc i khc phi lm tht chnh xc v nu khng s kh thy c nc i no l tt hn nc kia trong hng ng nc i sinh. Mt s ti liu nc ngoi phn tch v vn ny c ni rng : "Nu bn c th kim tra mi nc i kh nhanh th khng c vn g cho vic sinh ton b cc nc i c th c ... bi v bn s chn c nc i tht s tt v vic sinh nc i v tm kim nn c lm cng nhanh cng tt!", quan im ny theo em l ng m khng ng, ng l v "...vic sinh nc i v tm kim nn c lm cng nhanh cng tt!..." v lun tm c 1 nc i tt nht ... nhng khng ng l ch "... khng c vn g cho vic sinh ton b cc nc i c th c ..." bi v Gomoku l tr chi c phn nhnh rt cao (tc l s cch chn nc i ng vi 1 trng thi c sn), khng nhng vy, trong tr Gomoku th rt nhiu nc i nu khng c quan h vi nhng nc c sn th s d tha v khng c chn ... V mt im khc so vi nhng board-game khc l vic sinh nc i trong Gomoku l kh nhanh v rt d ... Do tm li l k thut ny nu ng dng trong GomokuGame s b ph sn ... Em trnh by ra y l dnh cho nhng bc vit cc loi c khc tham kho ... bi v, v d trong c tng, i khi mt nc i hi ng ngn nh ln "chut"(tt,cht : pawn) cng c th chng li mt bn thua trng thy ... [b] Increasing generation : Sinh dn cc nc i ... - tng : T trng thi ban u, sinh 1 vi nc i "nhy cm" (c trin vng a n chin thng), kim tra xem nhng nc i ny sau mt vi su k tip xem c tht s l "cm" cha ? Nu cha th tip tc sinh nhng nc i khc ri kim tra tip ... - Phn tch : + M gi nh sau : * Search : Generate move-gen (step 0) for (i = 0;i < BOARD_SIZE;i++) if (IsLegalMove(i)) if (IsHasOutlook(i)) // c trin vng ... if (IsNotInGenMove(i)) StoreGenMove(i) * Make a move in stack ... * Increase depth and repeat until deep enough ==> Cut off ?? ==> Ohh, no... * Tr li bc 0 + K thut ny kh hay, nht l khi mnh mun tnh su vo nhng nc "tt" (theo quan im ca mnh) mong ch search-algorithm ct nhnh sm trc khi mnh tip tc sinh thm nhng nc lng nhng khc ... Tuy nhin, nu 1 trng thi no , nc i tt khng nm trong s nhng nc i c trin vng th mnh vn phi tip tc sinh ... cch ci t s tr nn phc tp. R rng cch ny ch nn s dng i ph trong trng hp b gii hn thi gian, tc l mnh s la 1 nc i tt nht trong s " dnh", nu thi gian khng generate && search tip th mnh s "moi" n ra m unh "" ... Mt nhc im khc l cha chc tm thy mt nc i tt nht nh k thut u tin (v n l ct nhnh 1 nc i m tng rng l tt nht, hin tng ny cng c th gi l "cc i cc b") ... [c] Decrescent generation : Sinh nc i gim dn - tng : Cch ny c qua tng chng nh ngc li vi cch trn nhng thc s l c s khc bit rt ln ! Ni chung l chn mt thang o ban u nh gi tnh s li hi ca cc nc i hin ti cn sinh ... Sau ln lt gim thang o v sinh nc i cho n khi no cha t nht 1 nc i trong stack th break ... nu cha th s tip tc sinh tip ... - Phn tch : + M gi nh sau : * ExistAtLeastOneMoveGen = FALSE;

* for (mark = HIGHEST;;--mark) // i t mc nh gi cao nht gim dn for ( i = 0;i < BOARD_SIZE;i--) if (IsLegalMove(i)) if (ValueIt(i) == WORTH) // nu tht s c gi tr if (IsNotInGenMove(i)) StoreGenMove(i) ExistAtLeastOneMoveGen = TRUE; if (ExistAtLeastOenMoveGen) break; // else continue; + R rng cch ny lun tm ra nc i a vo move-stack t th hin s ng n ca n ... K thut ny kh ph bin trong cc chng trnh c (t nht l trong s nhng chng trnh m em bit !!) bi v n s ln lt chn la nhng nc i t tt n xu nht da trn thang o l gi tr ca mark v n bo m s sinh & chn ra nhng nc tt nht c th t trng thi hin ti a vo stack. Ni l vy nhng r rng iu ny c hin thc c hay khng l cn nh vo hm ValueIt() na! Nu hm ny lm nhanh v chnh xc th s em hiu qu cao ... cch thit k hm ny cng tng t nh hm IsHasOutlook() trn nhng cn rng v chnh xc hn tc l phi tnh thm nhng nc c xem l "outlook" i vi i th na, bi v nhng nc c th tht s c gi tr (do nu ta nh vo nc s chim v tr "chin lc" ca i phng, tc l chn trc nhng "ng m" ca i th ...v i khi vic lm ny l ng gi hn vic nh 1 ng 5 (thuc loi c trin vng ca ta) m i th d dng chn ph !!). K thut ny tht s rt hay nu n "thiu vng" c nhng nhc im sau, l vic thit k hm ValueIt() tht s l rt kh, bi v mnh khng th lp trnh chnh xc cho my bit c nc no l c gi tr, y ch l gn ng m thui, hic ... vi li khi thit k xong ri m bng n vo ci hm search nc i ca mnh th chc sinh ra c 1 nc i phi mt hng ng micr giy qu (l qu ln so vi chu k clock ca CPU ri !!!)... Do phi cn nhc ... [d] Complete Generation : Sinh tt c cc nc i - tng : S dng stack lu tt c nc i ca trng thi bt u seach, sau vic tm kim nc i s khng cn sinh thm ln no na ... Tc l ch cn sinh 1 ln v ct ngay vo movestack, sau ny khi ly ra s kim tra xem n c cn l 1 legal move hay khng (tc l ny b nh cha ...) ri analyze n... - Phn tch : + M gi cho chng trnh th tng t nh k thut Full generation + Cch ny s khng tn thi gian sinh nc i trong qu trnh search, khng tn nhiu b nh lu cc bin nc i theo tng su nhng tn nhiu thi gian cho vic phn tch v chn la nc i. C nhng c im trn th dng nh n tin b hn Full generation nhiu !... tuy nhin l trong trng hp khng km thm vic lng gi nc i cng vi vic sinh nc i (m ci ny li hay xi)... bi v vic tm kim chn lc nc i l phi da trn ch s nh gi no, ch s c tnh ra sao v khi no, u ... Ni chung y cng l k thut ch ng dng cho tng trng hp v tng tr chi c th !!... [e] Selective generation : Sinh nc i c chn lc - tng : Dng mt hm chn la nh gi nhng nc i no l t nhng tiu chun t ra th mi a vo stack, r rng hm chn la ny l rt rng, v d : ch sinh nhng trong vng bn knh 1,2 so vi nhng nh, ch sinh nhng m c th gy nn nhng ng e do, ch sinh nhng nm trong khu vc "nng", ch sinh nhng m c th chn c ng hin ti ... ni chung l rt nhiu tiu chun ... k thut ny th tng qut hn nhng k thut sinh c chn lc trn. - Phn tch : + M gi nh sau : while (ExistMoveGenSatisfiesTheCriteria()) if (IsNotInGenMove(GetGenMove()) StoreGenMove(GetGenMove()) + Thy m gi kh n gin nhng tht ra l phc tp v cng, ngay t vic thit k nhng hm o tiu chun kh ri, hung chi l t hp ca tt c hm li ... tuy nhin cch ny s mang li

hiu qu kh cao da trn qui lut b tr (v d nu search nhanh th mnh sinh ra nhiu move-gen v nh gi chng s s, search chm th a ra t move-gen nhng mi nc i u qua bc chn lc k cng, ch cn "mc" 1 nc i ra l c ngay mt nc i kh tt ri! ). Ngoi ra nu phi hp cch ny vi nhng k thut trn th cng tuyt, v d n gin l mnh ch sinh nhng nc i trong vng bn knh 2 so vi nhng i v la nhng nc i tho thang o no ( nu ang mode offensive th s sinh nhng nc gy ra ng e do cn ngc li ang mode defensive th lm nhng nc c trin vng ca i phng m unh... ), khi , s lng nhng nc i tho cc tiu chun trn s khng nhiu (tc l fn nhnh thp) m cht lng ca nc i s c nng cao (do ton la nhng nc i c quan h vi nhng nc i unh + bo m nu khi attack th i th chn ti bi cn khi ang defend th i th ngi khc rng v hng cn nc no pht trin ng ...), khi ta cn c th gia tng su (c nh ln tnh) ln thm vi nc, nn nh rng vic gia tng su lm cho chng trnh s c tnh ngi hn v unh hay nh "tru", cc bc th ngh nu ang nh vi 1 chng trnh c m n a ra thng bo l 'cn hai ba chc nc na l nh ngi s thua' th c b shock hng ch, em th cha thy chng trnh no nh vy c, h h !!!. Hic, v s li hi ca k thut ny, chng trnh Gomoku ca em s tin trin theo hng ny v phi hp thm mt s k thut khc trn. >> Nh vy l xong phn Generate-move technics ** * Phn tch xong cc k thut, em cng xin gii thiu li 1 vi thut ng hoc tn hm em ch ra v xi trong qu trnh sinh nc i cho cc bc tin theo di : + Generate move : sinh nc i. + Gen/GenDanger : cc hm sinh nc i bnh thng hay e do. + Move-Gen : nc i c sinh. + Increasing/Decrescent generation (Increment/Decrement) : S gia tng hay gim bt trong qu trnh sinh nc i. + Offensive/Defensive move : Nc i tn cng hay phng th ... + Aggressive/Offensive/Defensive mode : cc ch tn cng hng h hay phng th cht... + Complete/Selective generation : Sinh ton b nc i hay l sinh nhng nc i c chn la. + Forward pruning : nhng nc i c xem nh l 1 s ct nhnh trc khi search. + Store Generated Move : ct nc i c sinh vo stack + Is Not In Generated moves : cha c trong mng (stack) lu cc nc i sinh... 3. Vit m cho hm sinh nc i: - S nc i cn sinh trong mi bc i l rt nhiu ( = Tng s trn bn c - S i) nhng ch c 1 t trong s l c lin quan vi nhng i trc v c kh nng gy e do ==> l nhng k cn nhng nh ... y c th sinh tt c nhng nc i trong vng bn knh 1,2 so vi trung tm ... V d hnh sau cho thy nhng lin quan cn sinh trong vng bn knh l 1,2 i vi qun 'O' trung tm : -*-*-*--------***---***--**0**--*O*---***---***--*-*-*------R=2 R=1 p dng phng php ny v sinh tt c cc nc i cho mi c qun chim, vi cch sinh nc i hn ch ny th s gim rt nhiu chi ph cho vic tm kim nc i (v mi ln duyt su mi th ch cn la ra mt s nh hn nhiu so vi s trng cn li) ==> dng n tng thm su. - Vic sinh nc i theo kiu ny c th ring trong 1 hm hoc cc bc c th ci tin bng cch

va lng gi va sinh nc i (s ni r trong phn lng gi), chng trnh em th ring trong hm PushMoveGen(). - Sinh nc i ph thuc nhiu vo CTDL lu bn c : mng 1 chiu, mng 2 chiu, danh sch ..., mi cch lu th s c cch sinh nc i khc nhau, c u v khuyt ring, em th chn cch dng mng 1 chiu lu bn c nn cch sinh nc i cng d dng hn nh sau : + Kch thc bn c cn lu : BOARD_SIZE = EXSIZE*EXSIZE = (SIZE+2)*(SIZE+2) + Lu Board : int board[BOARD_SIZE]; + Lu mng mt n : int nMask[BOARD_SIZE]; => Nh vy t v tr 'nMove' trn bn c, c th nhy n 8 v tr xung quanh bng cch s dng mng DIRECTION m rng nh sau (gi s qun X ang th nMove trn board)

const int EXDIRECTION[9] = {EXSIZE,EXSIZE-1,1,EXSIZE+1,-EXSIZE,-EXSIZE+1,-1,-EXSIZE-1,0}; - - - - - - - nMove + EXDIRECTION[3] - - - - - - - ==> Truy cp n s 3 - - 7 4 5 - - nMove + EXDIRECTION[4] - - 6 X 2 9 - ==> Truy cp n s 4 - - 1 0 3 - - nMove + EXDIRECTION[3]+EXDIRECTION[3] - - - - - 8 - ==> Truy cp n s 8 - - - - - - - nMove + EXDIRECTION[3]+EXDIRECTION[5] => Truy cp n s 9 => T y mnh ci tin vic truy cp n nhng trong vng bn knh 2 so vi trung tm nh sau : const int EXDIRECTION[17] = // 8 xung quanh (bn knh = 1) {EXSIZE,EXSIZE-1,1,EXSIZE+1,-EXSIZE,-EXSIZE+1,-1,-EXSIZE-1, // 8 tip xung quanh (bn knh = 2) 2*EXSIZE,2*EXSIZE-2,2,2*EXSIZE+2,-2*EXSIZE,-2*EXSIZE+2,-2,-2*EXSIZE-2, // nh du kt thc s hng m rng 0}; Chng trnh em th ch c truy cp n 8 (R = 1) xung quanh thui, do dng mng EXDIRECTION[9] trn ... C nhiu bc cho chng trnh mnh tnh lun R = 2 nn chng trnh tnh nhiu hn m nh hng hay lm, mt bng chng l chng trnh thng bn em nh 'ht xy' m ch cn tnh 8 xung quanh thui, bc no thch th sc vi chng trnh ca mnh (hoc l vi cc bc) th xin mi download bn di, chng trnh ny thng bn em vit lu ri nhng hin gi vn cha thy i th (h h, trong nc v mt ng ca nc ngoi) (chy trn DOS v tic l hng c source v Hard disk ca n phi 'fo mt u b' ri!). - y dng mng kch thc BOARD_SIZE = EXSIZE*EXSIZE ch khng dng mng BOARD_SIZE = SIZE*SIZE l v gim bt vic kim tra cc nc i vt ra ngoi bn c (bng cch ni rng board thm 1 cho mi bin), dng mng nMask l kim tra mt nc vt bin hay cha, hoc l nc nm trong danh sch sinh nc i hay cha ... Nu bc no tng c qua PC World vit v chng trnh VSCCP th s thy cch ci t ca chng trnh em l tng t theo cu trc , em vit hm sinh nc i PushMoveGen(CNode &move) ti su nPly cho trung tm move (CNode) nh sau :

0 int i; 1 char Step; 2 const int *pDirect = EXDIRECTION; 3 while((Step = *pDirect++) != 0) 4{ 5 i = move.nMove + Step; 6 if (!nMask[i]) 7 { 8 nMask[i] = 1; 9 MoveStack[nTopMoveStack[nPly]] = i; 10 nTopMoveStack[nPly]++; 0 } 0}

==> Dng 2 v 5 : Nu khng s dng mng EXDIRECTION th s kh m truy cp n v tr ca nhng xung quanh (TopLeft,TopRight,Bottom,Top,BottomRight,BottomLeft,Left,Right) ==> Dng 5 v 6 : Nu khng s dng mng kch thc EXSIZE*EXSIZE th c l phi thm dng kim tra vt bin hay cha, nu khng s truy cp "ln tim" ... ==> Dng 6 : Nu khng s dng mng nMask (= 0 nu l trng cha sinh, = 1 nu l c hoc l vt bin) th chc cng phi dng 1 hm tm kim tuyn tnh xem nc i i = move.nMove + Step c trong danh sch hay cha ... ==> My dng kia l cp nht nc i trong MoveStack thui (mang tn l MoveStack nhng n ci t trn mng hon ton !) - Nu ci t cho vic sinh cc nc i c tho mn cc iu kin no khng th thay dng 6 tng t nh sau : if (!nMask[i]&&IsSatisfyAnyCriteria(i)) { ... } Tc l kim tra thm mt s tiu chun 'chn lc' nc i m mnh ngh ... gim thiu s lng nc i ... V d sau ny chng ta s ci t IsSatisfyAnyCriteria() l ch sinh nhng nc nguy him tht s nh ng 3,ng 4... trong qu trnh tm kim su yn tnh. - By gi sinh nc i cho tt c th c th n gin nh sau : for (int i = 0;i < nTopHistStack;i++) PushMoveGen(HistStack[i].nMove); Trong nTopHistStack l s qun c nh, HistStack l mng CNode lu tt c v tr theo th t nh ... Sau ny mun thm mc Undo th c mng ny ri lm cng d, mun RePlay li th cng ch cn 'tua' li theo th t lu trong mng History ny ri !... - Cn g ng ni trong phn ny na khng nh ?? Thui th em qua phn mi : EVALUATE

EVALUTE nh th no? 1. Bc no chi C c nga th tnh nc i nh th no ? 2. Bc no chi C tng th bc s tnh 1 nc i cho mnh l nh th no ? 3. Bc no chi Caro th tnh nc i nh th no ? Cu 1 : Khi tr li ... Cu 2 : Mi bc tr li ... Cu 3 : Xin bc 'se' em cht kinh nghim ca bc no ... - Thui th cho em ni, c g sai cc bc sa :D ... C tng mun tnh nc i hay th trc ht phi am hiu lut c t bit c gi tr ca cc qun c, theo em, gi tr qun c trong c tng l phi xt hng u ... tip theo l th c , nh li rng : nu hng c qun c c ng (tc l gi tr cng cao) th liu c th c tt hay khng v nu c nhiu qun c 'xn' hn i th th c hi chin thng s cng cao, tuy nhin vic nh gi ny l ng (dynamic) v i khi v tng hng b 'cp' th 2 xe cng phi hi sinh, cn v th c, tc l chin thut trong c tng th phi ni l phc tp v cng, nht l v mnh phi vit cho my ch my n hng t hc t kinh nghim qua trn mc nh mnh c (d nhin nu c ci my hc qua trn mc th cng ch 1 phn thui, u ng dng c nhiu, theo em th DeepBlue nu vc i nh vi ng khc ch khng phi l Kasparow th c l n cng tht bi ch bi v kinh nghim m n hc c l ca ngi ta dy ch i ph vi ng Kasparow thui...), do thng mnh ch ci khai cuc cho n v n gin l c book khi s nc i cha nhiu, cn khi bc qua trung cuc ri th ch ci vi ci th c n gin cng vi ci hm lng gi 'cht' ca qun c v 1 s heuristics m thui !(Em cng mun share 1 vi kinh nghim v ci th c lc trung cuc cho c tng lm nhng thui lc khc ...). - Ni vy l cc bc thy vic phn tch lng gi da th c l v vng i vi cc loi c phc tp khc ... nhng i vi c Caro th iu ny l hon ton n gin !!! Th c ca Caro ch l 2 ng e do giao nhau m thi, tc l ri vo 1 trong 3 cu hnh sau : + Hai ng 4 [1] + Mt ng 4 v mt ng 3 rng 2 u [2] + Hai ng 3 rng 2 u [3] v 'Ht', khng cn dng no na v v d c bc ni ng 4 rng 2 u th ch l bc tip theo ca [2] hoc [3] m thui. Nh vy cc bc ch cn nhn bit khi no th tn ti cc ng trn l c ri ! Nhng nhn bit cc ng trn xy ra lc no li l 1 chuyn khc v lm sao t c cu hnh trn nhanh nht (t nht l phi nhanh hn i th) li l 1 chuyn khc na ... nhng ni chung, ci ngun gc nhn bit chnh l lm sao nhn bit hon ton trng thi ca 1 trn bn c v d nh n c dng l ng 4 e do hay ng 3 rng 2 u hay l ng 4 b chn 2 u khng cn nguy him, hay l ng 4 rng 2 u (tt thng), hay l ... V ... v em tht s tm ra 1 cch tnh ton ch ra tt c trng thi !!! Cc bc hy ch xem nh !!! He he he ... +Ghi ch cc k hiu : : trng ang xt * : K hiu ch trng khc O : Qun c |...| : Cu hnh nhn c trong khong ny... = : 'cht' i vi qun O, tc l b qun X chim hoc l bin ca bn c, tc l khng ng quan tm na i vi qun O ( v dng) +Sau y l vi trong s tt c th c m chng trnh s nhn bit c : |====OOO=|0 ; Cha qun s (5 con) m b 'trit sn' ri ! |==*OOOOO|0 ; Nhiu qu ... chen chc nhau 6 con th lm sao m n ! |===O**OO|0 ; Khng th no nh c ng 5 con thng ...

|==OO**OO|0 ; ... nn loi ra khi qu trnh lng gi ! |===*OO==|0 ; Cu hnh 'trit sn' (0) ==> Nhng cu hnh v ch, nh vo ch tn qun !! |==*OOOO*|1 |==*OOOO=|1 |==O*OOOO|1 ; C kh nng thng nu kim tra thm ... |===*OOOO|1 ; ... iu kin l bn phi nht cn rng (1) ==> y l nhng cu hnh tt thng cho qun O |*O**OOO*|2 ; G v trng ... |O***OOO*|2 ; ... ang xt ... |=O**OOO*|2 ; ... l thng sch !! (2) ==> y l nhng cu hnh tt thng cho qun O nu n lt qun O i |O*O*O*OO|3 |***OO*O*|3 |===OOO*=|3 |=***OOO=|3 |=**OO*O*|3 |=OOO****|3 (3) ==> y l nhng ng 4 nguy him khi qun O nh vo trng ang xt |=**O*O**|4 |=**OO***|4 |**O*O***|4 |=****OO*|4 |==**OO*=|4 (4) ==> y l nhng ng 3 rng 2 u khi qun O nh vo trng ang xt ==> Chin thng cho qun O ch l s tm kim 1 t hp chp 2 (ti thiu) ca nhng ng trn, d nhin l c xt thm 1 vi yu t nh : khi ta ta nh vo ny th s c 2 ng 3 m i th c ng 4 ri th c khng m unh dz!! Thi th hn cc bc bi 5 : BC VO K THUT LNG GI vo mt ngy p tri gn y nht !!

Vit chng trnh chi Caro - Phn cui


1. Ci t CTDL lu cu hnh ca bn c: * tng : - u tin xt 1 trng trn bn c, khi , gi s ta ch kim tra trn phng nm ngang (cc phng khc tng t) bao gm n lin tip bn tri v n lin tip bn phi ca n (tc l xt trn 1 hng ngang c chiu di 2n+1 lin tip, khi ta c th thy c vi iu sau tm gn li vn : + Ta phi xem xt trng ny trn 2 phng din : i vi qun ta hay i vi qun ca i th, do lc ny th cch lm cho mi bn l tng t nhau ==> chn qun ta (qun O). + Vic xt n bn tri hay bn phi th cch lm cng tng t nhau (cng xut pht t v tr trng ang xt nhng ch khc nhau v hng), do gi s ch xt mt bn (tri). + Vi qui c : + n = 4 v ang kta cho qun O + Du X,O : b chim bi qun X,O + Du * : trng trn bn c + Du # : bin ca bn c + Du ? : trng ang xt th cu hnh ca n c th nh sau : <> Khng c no ng ta quan tm na : V d : Xt 1 cu hnh trn bn c : *{/color}*OOOX{/color}?OOO** : Khi ta kim tra t phi sang tri (bt u t du '?'), gp ngay qun X k tip => do lc ny d 3 k tip u cha qun O nhng i vi trng ang xt th n chng c tch s g => Tc l bn tri khng cn no ng c quan tm. iu ny cng xy ra khi trng ang xt l nm k bin hoc l bn tri ca n cha >= 5 con (ng 5 con mi c n). <> Ch c 1 cn quan tm. V d : Xt cc cu hnh sau : 1) #*?OO** v 2) **OOX*?** v 3) OXO?OO** : Khi (1) v (2) ch cn 1 trng k tip bn tri, (3) ch cn 1 qun c 'O' k tip bn tri => Tc l cn ng 1 cn quan tm ... <> Ch cn 2 cn quan tm V d : Xt : 1) OX*O?**O* v 2) #**?OO** v 3) OXO*?O** ... <> C 3 cn quan tm V d : Xt : 1) #OOO?O** v 2) *XOO*?*O* v 3) OX*O*?O** ... <> C 4 cn quan tm V d : Xt : 1) #****?*** v 2) XOOOO?* v 3) #OO*O?** v 4) XO*O*?** ... ==>> Nh vy cn quan tm l nhng trng hoc l nhng ca qun ta m cha c s 'che chn' (l sao nh :p ) ca qun i th ... - V by gi, r rng mun lng gi 1 th c th mnh phi bit lm sao nh gi tng trng ngon lnh nh th no, ri la nhng ngon ngon xch ra unh ...Tc l lm sao phi lu li s 'quan tm&nh gi' ny bng CTDL ng hong, d truy cp n, d thay i, d ... xi m ng d ... s ... h h h ... Beng, beng, beng ! V sau y l cch ca em : + Xem xt cc cu hnh c th c ca 1 bn (tri hay phi) ch c th l : /**** Xt n = 4 ****/ const char StTable[31][5] = { "####", // Hng cn no ng quan tm ! "*###","O###", // ! Cn 1 n !! "**##","*O##","O*##","OO##", // ! 2 ln !! "***#","**O#","*O*#","*OO#","O**#","O*O#","OO*#","OOO#", // ! 3 ! "****","***O","**O*","**OO","*O**","*O*O","*OO*","*OOO", //Ch! Ti 4 !

"O***","O**O","O*O*","O*OO","OO**","OO*O","OOO*","OOOO"}; * Phn tch 1 vi cc mu : Hy xt t tri sang phi : <> StTable[0] ("####") : Khng c no ng quan tm v n b chim bi qun caa i th hoc l nm k cnh caa board. <> StTable[1] ("*###") : Ch cn 1 trng k tip, cn li khng ng quan tm. <> StTable[2] ("OO##") : 2 k tip (trn hng ang xt, v d bn tri) l qun ta, ngoi ra khng cn no ng quan tm <> StTable[30]("OOOO") : C 4 qun c bn ta lin tip => Tuyt vi ! <> ... ==> Ta nh ngha theo kiu ny l rt trc quan, th hin cc cu hnh c th c vi 4 lin tip trn bn c, mi phn t ca 1 mng StTable l 1 chui c chiu di khng i v bng 4 ... Nhng mng ny ch c ngha trnh by trn mn hnh m thi, nu khng, cch ci t theo CTDL ny s rt kh x l ==> ci tin : ch lu con s ch v tr ca tng cu hnh m thi, v d nu c s 3 (bt u t 0) => l cu hnh "*###", c s 30 => "OOOO" ... => cn 1 bin kiu int thui !... => t tn i l "Cfg Bn tri/phi" ... + !...Mi c 2 pha, mi pha l 1 con s c ngha t 0..30 nh trn => Do ta c : typedef struct CELL_PATTERN { int nBackward; /* nBackward = 0..30 <== Left side */ int nForward; /* nForward = 0..30 <== Right side */ } PATTERN_TYPE,*PPATTERN_TYPE; typedef PATTERN_TYPE PatternType; + M qun, mi li cn c xt trn 4 phng na ch : (-)ngang(horizontal),(|)dc(vertical), (\)cho chnh(main diagonal) v (/)cho ph(sub diagonal) ==> Phi lu n 4 ci nh vy cho mi ... V cui cng l cho c 2 bn : qun ta v qun ch => Thm 2 a na nh ==> V em c (cc bc cng c :D ...) : PatternType LinePattern[2][BOARD_SIZE*4];// member of CBoard class - Nh vy xt trn 1 phng th ta s c t hp 31x31 cu hnh c th c cho 1 ! V d : + Cp (0,29) biu th cho cu hnh 9 lin tip nh sau : "####OOO*"; + Cp (5,27)= "##*OOO**"; + (0,30) = "####OOOO"; + (1,13) = "###*OO*#"; + (10,26) = "#OO*O*OO"; + (12,29) = "#O*OOOO*"; ... trong vung () biu th cho trng ang xt (tc l y chang du '?' trnh by trn) ... *Code : Mt on chng trnh nh quan st tt c cc cu hnh ny : // Xut ra file : Out.txt tt c cu hnh cn xem :

#include <fstream.h> const char StTable[31][5] = { "####", "*###","O###", "**##","*O##","O*##","OO##", "***#","**O#","*O*#","*OO#","O**#","O*O#","OO*#","OOO#", "****","***O","**O*","**OO","*O**","*O*O","*OO*","*OOO", "O***","O**O","O*O*","O*OO","OO**","OO*O","OOO*","OOOO"}; void main() { ofstream out_all("Out.txt"); for (int i = 0;i < 31;i++) { for (int j = 0;j < 31;j++) { out_all << "(" << i << "," << j << ")" << "\t: |"; for (int k = 3;k >= 0;k--) out_all << StTable[i][k] << flush; out_all << char(0x19) << flush; out_all << StTable[j] << "|" << endl; } } } // end Ghi ch : Hng phi em vit ci on ny ra l xem chi m thi u ! S c vic lm vi n sau ny : nh gi th no l "ho ho ..." mt cch trc quan da trn s chn la ca mnh ..., v l do ny, c th xem cu hnh (a,b) v (b,a) l 1 (ch thay i v tr thi) sau ny d lm hn ... V d n in ci rt ra tng t nh vy : (5,29) : |##*OOOO*|1 (11,27) : |#**OOO**|2 (19,27) : |**O*OO**|3 (11,19) : |#**O*O**|4 (7,23) : |#***O***|5 => Cc s 1,2,3,4,5 l em thm vo nh gi s tt xu ca th c k tip nu qun O nh vo v tr vung ang xt ... => T vit 1 chng trnh c & x l li file ny th ta s c 1 c s d liu lu c s tt xu ca tng th c ... 2. Lm vic vi CTDL ny: - Vic truy xut n th chc d ri, v ch cn bit nForward V nBackward l bit ngay n ang c dng (configuration) nh th no, sau tu theo dng ny m lng gi ... Do mc tiu kh khn t ra l phi cp nht cc cu hnh ca cc sau mi nc i ca c 2 bn sao cho cu hnh ny n phn nh ng & chnh xc cu hnh tht s ca tng trng trn bn c...vic lm ny cng phi nhanh v n s nm trong phn gi qui. Em a ra cch ci t nh sau : + Khai bo 1 mng lu cc bin i t cu hnh ny sang cu hnh khc sau khi mt trng b thay i trng thi (tc l thnh qun ta hay qun i th), mng ny s c nhim v chuyn t 1 cu hnh c sn sang 1 cu hnh mi (d nhin n vn s nm trong tp 0..30) sau khi nh 1 qun c ... + By gi gi s ta xt trn 1 hng ngang 9 , th 5 ( chnh gia) l trng ang xt), 4 bn tri (t 1 n 4) v 4 bn phi (t 6 n 9) tng ng l 1 cp cu hnh (trong s t hp 31 cu hnh trn) s c dng sau. <> V tr ang xt l trng th 5 (hnh vung)

V tr :123456789 Mng a[i] : x x x x x x x x Trong x l 1 trng thi cha bit(nm trong tp : {O,X,#,*}) nhng khng quan trng v ta ch quan tm cc cu hnh di dng cc con s m thi! (R rng l vy v 4 ch x bn tri vung l thnh phn nBackward, 4 ch x bn phi l nForward, c nBackward & nForward u l 1 con s thuc 0..30 nm trong cu trc PATTERN ni trn). ==> nh 1 qun c vo v tr trng ang xt ==> Cp nht li cu hnh bn c : <> Cp nht cho 4 pha bn tri ca ang xt bng cch chy 1 vng lp 4 ln, bt u t v tr s 4 (k bn tri vung), gim dn, nu gp 1 trng th ta s cp nht li mi cu hnh ca pha bn phi n (tc l cp nht li thnh phn nForward ca trng ), nu gp qun ta th chy tip (hng lm g c), nu gp qun i th hoc bt u ng bin th break. <> Cp nht li 4 bn phi ca ang xt th tng t v ngc li ... ==> By gi cu hi t ra l ti sao ch l vng lp 1->4 (tht ra l 0->3) l cp nht li ton b cu hnh ca bn c sau nc i vo trng hnh vung s 5 ??? Tht ra l vic thay i trng s 5 th ch lm thay i ng 8 trng trn hng ngang m k cn n, bao gm 4 bn tri v 4 bn phi, v r rng l cu hnh bn tri (nBackward) ca s 9 th c th ph thuc vo gi tr s 5 nhng nhng >= 10 th khng cn ph thuc na (nh li l em ang xt vi n = 4 thi nh!) + Vic cp nht li 1 cu hnh tht s l rt n gin nh sau : <> Lp sn 1 bng UpdateFriendPattern (cp nht mu cho qun ta). <> Lp sn 1 bng UpdateEnemyPattern (cp nht mu cho quan i th). <> Tra bng chuyn cu hnh tng ng vi ang xt. + Thit k bng cp nht mu nh sau : (C th khi em post ln ci bng ny s ln xn rt kh c, cc bc chu kh copy n ra file *.txt th mi d thy ... cn nu khng nh my bc mod sa dm...) /************************ UPDATE FRIEND PATTERN ********************/ N Form-1 Form-2 Form-3 Form-4 Form-5 Lookup-Table ---------------------------------------------------------------------------------------------0 "####" const const const const {0,0,0,0} 1 "*###" "O###" const const const {2,1,1,1} 2 "O###" const const const const {2,2,2,2} 3 "**##" "O*##" "*O##" const const {5,4,3,3} 4 "*O##" "OO##" const const const {6,4,4,4} 5 "O*##" const "OO##" const const {0,6,5,5} 6 "OO##" const const const const {6,6,6,6} 7 "***#" "O**#" "*O*#" "**O#" const {11,9,8,7} 8 "**O#" "O*O#" "*OO#" const const {12,10,8,8} 9 "*O*#" "OO*#" const "*OO#" const {13,9,10,9} 10 "*OO#" "OOO#" const const const {14,10,10,10} 11 "O**#" const "OO*#" "O*O#" const {11,13,12,11} 12 "O*O#" const "OOO#" const const {12,14,12,12} 13 "OO*#" const const "OOO#" const {13,13,14,13} 14 "OOO#" const const const const {14,14,14,14} 15 "****" "O***" "*O**" "**O*" "***O" {23,19,17,16} 16 "***O" "O**O" "*O*O" "**OO" const {24,20,18,16} 17 "**O*" "O*O*" "*OO*" const "**OO" {25,21,17,18} 18 "**OO" "O*OO" "*OOO" const const {26,22,18,18} 19 "*O**" "OO**" const "*OO*" "*O*O" {27,19,21,20} 20 "*O*O" "OO*O" const "*OOO" const {28,20,22,20} 21 "*OO*" "OOO*" const const "*OOO" {29,21,21,22} 22 "*OOO" "OOOO" const const const {30,22,22,22}

23 24 25 26 27 28 29 30

"O***" "O**O" "O*O*" "O*OO" "OO**" "OO*O" "OOO*" "OOOO"

const const const const const const const const

"OO**" "O*O*" "O**O" {23,27,25,24} "OO*O" "O*OO" const {24,28,26,24} "OOO*" const "O*OO" {25,29,25,26} "OOOO" const const {26,30,26,26} const "OOO*" "OO*O" {27,27,29,28} const "OOOO" const {28,28,30,28} const const "OOOO" {29,29,29,30} const const const {30,30,30,30}

/*********************** UPDATE ENEMY PATTERN **********************/ N Form-1 Form-2 Form-3 Form-4 Form-5 Lookup-Table ----------------------------------------------------------------------------------------------0 "####" const const const const {0,0,0,0} 1 "*###" "####" const const const {0,1,1,1} 2 "O###" const const const const {2,2,2,2} 3 "**##" "####" "*###" const const {0,1,3,3} 4 "*O##" "####" const const const {0,4,4,4} 5 "O*##" const "O###" const const {5,2,5,5} 6 "OO##" const const const const {6,6,6,6} 7 "***#" "####" "*###" "**##" const {0,1,3,7} 8 "**O#" "####" "*###" const const {0,1,8,8} 9 "*O*#" "####" const "*O##" const {0,9,4,9} 10 "*OO#" "####" const const const {0,10,10,10} 11 "O**#" const "O###" "O*##" const {11,2,5,11} 12 "O*O#" const "O###" const const {12,2,12,12} 13 "OO*#" const const "OO##" const {13,13,6,13} 14 "OOO#" const const const const {14,14,14,14} 15 "****" "####" "*###" "**##" "***#" {0,1,3,7} 16 "***O" "####" "*###" "**##" const {0,1,3,16} 17 "**O*" "####" "*###" const "**O#" {0,1,17,8} 18 "**OO" "####" "*###" const const {0,1,18,18} 19 "*O**" "####" const "*O##" "*O*#" {0,19,4,9} 20 "*O*O" "####" const "*O##" const {0,20,4,20} 21 "*OO*" "####" const const "*OO#" {0,21,21,10} 22 "*OOO" "####" const const const {0,22,22,22} 23 "O***" const "O###" "O*##" "O**#" {23,2,5,11} 24 "O**O" const "O###" "O*##" const {24,2,5,24} 25 "O*O*" const "O###" const "O*O#" {25,2,25,12} 26 "O*OO" const "O###" const const {26,2,26,26} 27 "OO**" const const "OO##" "OO*#" {27,27,6,13} 28 "OO*O" const const "OO##" const {28,28,6,28} 29 "OOO*" const const const "OOO#" {29,29,29,14} 30 "OOOO" const const const const {30,30,30,30} /*************************************

You might also like