Bao Cao Bai Tap Lon Tri Tue Nhan Tao

download Bao Cao Bai Tap Lon Tri Tue Nhan Tao

of 20

Transcript of Bao Cao Bai Tap Lon Tri Tue Nhan Tao

TRNG I HC BCH KHOA H NI VIN CNG NGH THNG TIN V TRUYN THNG

N MN HCTR TU NHN TO TI: XY DNG PHN MM CHI C HEXXAGON

GING VIN HNG DN: TS. Nguyn Nht Quang NHM SINH VIN: 1. Nguyn Th Hng Giang 2. Nguyn Hng Hi 3. Nguyn Xun Tip 4. Tray Youheng

SHSV 20070910 20071008 20072913 20073938

Thng 11/2010

-2-

MC LCCHNG I. GII THIU V M T BI TON...................................... 4 I. ti ....................................................................................................... 4 II. M t bi ton......................................................................................... 4 CHNG II. PHNG PHP GII QUYT BI TON ......................... 6 I. Game tree (cy biu din tr chi) ........................................................ 6 II. Thut ton Minimax ............................................................................. 7 III. Thut ton AlphabetaPrunning .......................................................... 7 CHNG III. CHC NNG V CCH S DNG H THNG ........... 11 CHNG IV. CC VN GP PHI V HNG GII QUYT .... 15 I. Giao din chng trnh ....................................................................... 15 II. Thut ton AI ...................................................................................... 15 III. Mt s li pht sinh khi chy chng trnh ..................................... 16 IV. Hng pht trin ca bi ton .......................................................... 16 CHNG V. KT QU ................................................................................. 17 CHNG VI. CNG NGH V THUT TON S DNG ................... 18 I. Ngn ng lp trnh Java ...................................................................... 18 II. Lp trnh hng i tng trong Java ............................................... 18 III. Game engine JGame ........................................................................... 19 Ti liu tham kho............................................................................................ 20

-3-

CHNG I. GII THU V M T BI TONI. TIXy dng phn mm chi c Hexxagon. V c Hexxagon Hexxagon l mt bin th ca Ataxx, c chi trn bn c hnh lc gic thay v hnh vung ca Ataxx. Bn chnh thc c vit bi Argo Games vo nm 1992. Nm 1993 n c pht hnh di dng PC Game bi cng ty Software Creations, lut chi vn c gi nh ca Ataxx. Hin nay n c pht trin v cp nht trn web bi Neave. http://www.neave.com/games/hexxagon/

II. M T BI TON1. Mc ch: To ra mt tr chi i khng gia hai i th my tnh v con ngi. 2. Yu cu: a ra thut ton gip gii quyt bi ton t ra: Sao cho kh nng my tnh thng l ln nht. Hon thin chng trnh, ng thi ti u ho thut ton a ra sao cho chng trnh lm vic hiu qu. Khc phc li pht sinh trong qu trnh gii quyt bi ton. 3. Cch thc chi: Ban u mi bn c 3 qun khc mu c b tr xen k ti su nh ca bn c hnh lc gic. My s c i nc u tin, sau thay phin nhau i cc nc. mi ln i nu di chuyn trong 1 qun s c nhn i, nu di chuyn 2 qun s thc hin nhy m ko nhn i. Sau khi i tt c qun ca i phng bn cnh m cch 1 s bin thnh qun cng mu vi n. -4-

mi nc i tc t my lun chn nc i tt nht c th l n c nhiu qun ca i phng nht v cc nc i tip theo i phng n c t qun nht ca n nht. Khi bn c y bn no c nhiu qun trn bn c hn th thng hoc khi mt bn no khng cn nc i th cc trng cn li trn bn c s thuc v i phng, tr chi kt thc v so snh s qun hai bn tm ngi thng.

-5-

CHNG II. PHNG PHP GII QUYT BI TONy l mt ch tri i khng hai tc t, thut gii hiu qu gii quyt bi ton l cc thut gii tm kim thng minh Minimax/Maximin. Vi yu cu l mt PC game nn thut ton cn phi c thi gian thc hin trong khong thi gian chp nhn c i vi gamer, nhng vi bn c ny khi su ca cy tm kim l 5 th s lng nt cn xt c th ln n 3-4 triu nt, thi gian chy ca my tnh c th ln n hng pht. Vy nn c kt qu hiu qu hn th ci t thut ton ci tin AlphaBetaPrunning l iu bt buc. Chi tit v phng php:

I. GAME TREE (CY BIU DIN TR CHI)Xem xt vn thc hin mt chng trnh my tnh chi mt tr chi. n gin ho, chng ta ch xem xt tr chi vi hai thuc tnh sau: Tr chi i khng vi hai ngi chi. Ch c mt ngi thng duy nht, cn ngi chi cn li l ngi thua, khng c bt c s hp tc no gia hai ngi chi. Cc loi tr chi ny thng c cc bn c c in, nh c caro (tic tac toe), c vua (chess), c tng (checkers), Vi loi tr chi ny, chng ta c th m hnh ho chng bng cch s dng cy biu din tr chi (game tree).

Trn y l mt phn cy biu din tr chi ca tr c caro (tic tac toe). Mi nt i din cho mt trng thi ca bn c v cc con ca mi nt l cc trng thi hp l khi thc hin nc i tip theo. im tng trng thi, chng ta s gn cho mi trng thi l thun li vi ngi chi th nht mt s dng (cng dng th cng thun li). Tng t, chng ta s gn cho mi trng thi -6-

l thun li i vi ngi chi th hai mt s m (cng m th cng thun li). Trong th d ny, ngi chi th nht nh du X, cn ngi chi th hai nh du O, v ch vi ba im (-1, 0, +1), chng ta s c +1 cho chin thng ca X, -1 cho chin thng ca O, v 0 nu khng ai thng (ho). Lu y, cc im mu xanh ch c th c gn cho trng thi hin ti. tnh im cho cc v tr khc, chng ta phi quan st cc trng thi nt con ca n, v chng ta s s dng thut ton di y:

II. THUT TON MINIMAXBy gi, chng ta c mt cch din t tr chi trong chng trnh ca chng ta, lm th no c th tnh ton c nc i ti u? Gi nh rng i th lun c th tnh ton c nc i nh chng ta, v i th s lun chn nc i ti u nht. (Tng phn vi iu ny, v d nh, ngi chi u tin s to ra mt ci by vi hy vng rng i th s mc by v ginh c chin thng mt cch nhanh chng. Tuy nhin, nu i th khng mc by, ngi chi ny s nhn thy rng v tr ca mnh hin ang b gim st). Mt thut ton tnh ton nc i tt nht l thut ton Minimax:minimax(player, board) if(game over in current board position) return winner children = all legal moves for player from this board if(max's turn) return maximal score of calling minimax on all the children else (min's turn) return minimal score of calling minimax on all the children

Thut ton ny s din ra trong bao lu? Vi cc tr chi phc tp nh C vua hay C vy th tm kim li gii n khi kt thc tr chi s phi tr mt gi rt t v thi gian. Trn thc t, nu lm nh vy i vi C vua, trong thi gian phn tch mt nc i c l mt tri v tri t cng khng cn tn ti. Tuy nhin, c mt cch ti u ho cho thut ton n gin trn tit kim rt nhiu vic tm kim v cho php chng ta tng ti a su tm kim. Thut ton ti u ho a trn Minimax l AlphaBetaPrunning.

III. THUT TON AlphaBetaPrunningVi cc tr chi c i khng nh trn, tng v c bn c th hin nh sau: gi s n lt chng ta i nc c ca mnh v chng ta tnh c nc i A cho chng ta mt li th ln. By gi chng ta tnh n mt nc i B v thy rng nc i p tr u tin ca i th chng ta on trc i th c th p chng ta v th ho! Vy th chng ta cn g phi xt n nc i B ny na, bi thi im ny ta bit rng nu ta i nc B th kt qu tt nht m ta t c ch l mt nc i ho cho c hai v chng ta li bit nc i A s cho ta li th hn nu chng ta i nc . -7-

hnh thc ho tng, chng ta s theo di hai con s, alpha v beta cho mi nc i m chng ta phn tch. Alpha s l gi tr ca nc i tt nht c th m chng ta i c chng ta tnh ton xa nht c th (tc l s nc i ca hai bn xa nht m ta tnh c). Beta l gi tr ca nc i tt nht c th ca i th m chng ta tnh c xa nht c th. Nu mt lc no alpha >= beta th nc i tt nht ca i th c th p chng ta vo th ti hn l nc i tt nht ca chng ta lc , do ta khng cn phi phn tch xa hn nc i na. iu kin ct ta cng c p dng tng t nu chng ta l ngi chi v tr min, nhng thay v tm nc i li cho alpha th ta tm nc i li cho beta. Sau y l thut ton thc hin alpha beta ct ta.( http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html)//AlphaBetaPrunning Algorithm alpha-beta(player, board, alpha, beta) if(game over in current board position) return winner children = all legal moves for player from this board if(max's turn) for each child score = alpha-beta(other player,child,alpha,beta) if score > alpha then alpha = score (we have found a better best move) if alpha >= beta then return alpha (cut off) return alpha (this is our best move) else (min's turn) for each child score = alpha-beta(other player,child,alpha,beta) if score < beta then beta = score (opponent has found a better worse move) if alpha >= beta then return beta (cut off) return beta (this is the opponent's best move)

Da trn thut ton ny nhm em thc hin thut ton trn bn c ca mnh nh sau:

-8-

public int alphaBetaPrunning(GameBoard currentBoard, int depth, int alpha, int beta, boolean returnBestMove) { if (currentBoard.isEndGame() || depth == 0) { return evaluate(currentBoard); } ArrayList validMoves = currentBoard .getAllValidMoves(currentBoard.getCurrentPlayer()); if (returnBestMove) { prunned = 0; call = 0; this.bMove = null; if (validMoves.size() > 0) { this.bMove = validMoves.get(0); } } if (call >= 1000000){ return evaluate(currentBoard); } if (currentBoard.getCurrentPlayer() == Piece.COMPUTER) { for (int i = 0; i < validMoves.size(); i++) { GameBoard copy = currentBoard.copyBoard(); Move move = validMoves.get(i); copy.move(move.getPFrom(), move.getPTo()); copy.setCurrentPlayer(Piece.HUMAN); call++; int score = alphaBetaPrunning(copy, depth - 1, alpha, beta, false); if (score > alpha) { alpha = score; if (returnBestMove) { this.bMove = move; } } if (alpha >= beta) { prunned++; return alpha; } } return alpha; } else { for (int i = 0; i < validMoves.size(); i++) { GameBoard copy = currentBoard.copyBoard(); Move move = validMoves.get(i); copy.move(move.getPFrom(), move.getPTo()); copy.setCurrentPlayer(Piece.COMPUTER); call++; int score = alphaBetaPrunning(copy, depth - 1, alpha, beta, false); copy.setCurrentPlayer(Piece.HUMAN);

-9-

if (score < beta) { beta = score; } if (alpha >= beta) { prunned++; return beta; } } return beta; } }

Hm alphaBetaPrunning tr v 1 gi tr l s nguyn, c 5 tham s u vo: currentBoard: Trng thi hin ti ca bn c. su tm kim: (int depth) c chn = 3. Gi tr alpha: (int alpha) gi tr ca nc i tt nht i vi my. Gi tr beta: (int beta) gi tr ca nc i tt nht i vi ngi. Boolean returnBestMove: dng chn khng cho cc ln gi alphabetaPrunning ghi gi tr bestMove, nn ln gi u tin gi tr ca n l true nhng trong cc ln gi quy, gi tr ca n l false Vi trng thi bn c hin ti copy ra 1 bn c khc, ly ra 1 mng bao gm tt c cc nc i hp l i vi ngi chi hin ti, vi tng nc i thc hin di chuyn n trn bn c copy, cp nht trng thi mi ca bn c, nh gi gi tr ca bn c mi bng cch gi hm alphaBetaPrunning vi su gim i 1. Nu l nc i ca my, n s lun chn gi tr ng vi alphaBetaPrunning l ln nht, ngc li ngi s chn ng vi gi tr nh nht. Kim tra nu alpha >= beta th nhnh tm kim c ct i. Hm nh gi trng thi bn c (int evaluate(board)) tr li gi tr ca bn c i vi mt ngi chi (ngi hoc my):S qun c a my * S qun c a my - S ng i * S qun c a ng i qun c a

- 10 -

CHNG III. CHC NNG V CCH S DNG H THNGCi t v chy chng trnh Yu cu: My tnh ci t sn J2SE 1.4 tr ln Chy trc tip bng file Hexxagon.jar trong th mc AIHexxagon\Hexxagon\src\dist Game hexxagon c giao din kh n gin.Bn c gm cc c mu tm Mi mt c l mt hnh lc gic (hexagon) Hai gc trn th hin s qun c ang c ca mi bn. Gc di bn tri th hin vic tr chut ca ngi chi, thng bo n lt i ca ngi chi hay ca my tnh. Gc pha di bn phi ca mn hnh c hin th thng tin (ch yu dng cho vic debug vic click tm v tr qun c) To con tr (screen) V tr ca con tr trn bn c (index) Thi gian (timer) vo chi ta nhn phm cch (space)

- 11 -

Khi bt u tr chiMi bn (my ngi) s c ba qun c c b tr sole i xng nh hnh di. My c qun c mu caro trng- Ngi c qun c mu xanh Trn cng bn tri hin th s qun c ca ngi chi (You) Trn cng bn phi hin th s qun c ca my (Com) My c i trc (do yu cu chi vi chng trnh chi c khc)

Cch chi i qun c no ta kch chut vo qun c , khi trn bn c s hin th cc c c vin (c php i): Vin mu xanh: Nu i vo cc c c vin mu xanh th qun c s c nhn i, tc ngoi qun c v tr c c, ta c thm mt qun c v tr c mi i (S lng cc qun c ca ta tng thm 1).

- 12 -

Vin mu vng: Nu i vo cc c c vin mu vng th qun c s c di chuyn ti c (s lng cc qun c ca ta vn c gi nguyn).

Vi mi nc i, tt c cc qun c ca i phng nm ngay cnh nc i s b n, tc s chuyn mu v bin thnh qun c ca mnh.

Game over!Lt i ca ngi v my xen k nhau, c th ta i ht bn c. Khi cc c kn hoc mt bn khng th i na do b i phng vy kn th tr chi kt thc. Khi bn no c s qun c chim a s (nhiu hn i phng) th ginh chin thng.

- 13 -

V gii thut c su tm kim ln nn bn rt kh c th thng c my . V y l kt cc

- 14 -

CHNG IV. CC VN GP PHI V HNG GII QUYTI. GIAO DIN CHNG TRNHKh khn: V cha c kinh nghim lp trnh tr chi do lc u nhm em cha tm ra c hng gii quyt tt nht cho vic thit k giao din: la chn gia dng th vin c sn ca Java l JGame cho tr chi 2D hay chn 1 th vin khc nh LWJGL c h tr OpenAL v OpenGL c th d dng thit k giao din tr chi Hng gii quyt: Nu s dng cc th vin c h tr openGL th vic tm hiu v vit code s mt rt nhiu thi gian. Sau khi cng nhau tm hiu nhm em thy c rng th vin JGame ca Java c rt nhiu tin ch to ra c 1 giao din tt v cng khng qu phc tp trong lp trnh. Vic lm ch c Jgame ch mt 4-5 ngy lm vic lin tc, t c tutorial n document ca Jgame.

II. THUT TON AIKh khn: 1. Thut ton AI c coi l phn quan trng nht ca n, tuy nhin v mi c lm quen vi thut ton ny, do lc u khi tm hiu lp trnh vi mt thut ton n gin v d hiu nhm gp nhiu kh khn. 2. Vn b nh khi cy tm kim qu su, lc u c nhm khng s dng su gii hn nn va chy chng trnh gy li StackOverflow. 3. Cc phng thc move hay getAllvalidMoves hot ng khng chnh xc gy ra kt qu hin th cng nh kt qu ca cc nc i khng chnh xc. C khi qun ca my tnh n c qun ca ngi chi nhng trn bn c cng nh trong b nh lu tr bn c khng th hin iu ny. 4. Phng thc evaluate hot ng khng c hiu qu khi nh gi bn c i vi mi nc i ca ngi chi nn thnh thong cn c nhng nc i bng mt thng c th nhn xt l cha c tt (thy r khi depth = 4 v cho hai bn u l my chi c vi nhau). Hng gii quyt: 1. Sau khi c c thut ton trnh by kh trong sng v d hiu ti http://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html chng em quyt nh dng thut ton ny ci t cho chng trnh ca mnh. - 15 -

2. Bn Giang xut vic dng su gii hn, mi ln gi quy tip theo sau gim i 1, n khi su ca cy tm kim bng 0 th thut ton tr v gi tr ca bn c i vi ngi chi tng ng. 3. Do s dng sai tham chiu i tng trong Java nn c khi n nc i ca my th hm move li thc hin mt nc i trn bn c c copy ra khi thc hin thut ton alphabetaPrunning do con tr lu trong bestMove tr n cc qun c trong cc bn c copy ny. Nhm bn bc v a ra phng n: s dng v tr c lu sn trong tng qun c ch khng s dng con tr n cc qun c khi thc hin phng thc move, li ny c khc phc hon ton. 4. Ban u nhm s dng hm evaluate c gi tr tr v l:s s s qun c a my * 10 - s qun c a my * s qun c a ng i qun c a ng i qun c a ng i *

sau th thay i thnhqun c a my - s

th thy vi su depth = 3 th hm evaluate mi cho kt qu thng vi s qun n c cao hn, nhng vi depth = 2 th kt qu vn nh hm evalute c

III. LI V HN CH CA CHNG TRNHHin ti khi chy chng trnh vn cha pht hin li. Hn ch: Phn ho biu din bn c cha c d theo di cho lm do ko th hin r rng nc i ca my nn ngi chi kh on bit my i nh th no. Gii quyt: Vit thm phn hin th nh du qun i ca my

IV. HNG PHT TRIN CA BI TON 1. V thut ton AI s dng.o c th ct ta c nhiu nhnh tm kim hn cn phi b sung cch thc sp xp cc nc i tip theo c th ca mt nc i no sao cho d dng nhn c alpha >= beta.

2. V giao din chng trnh.o Vit thm cc thnh phn th hin s di chuyn ca cc qun c ging nh trong tr chi ca Neave. o Ci tin ho, c th l ci t trn openGL hnh nh c p hn, thit k li hnh dng qun c

3. V cc chc nng chng trnh.o Vit thm menu chn kh cho tr chi. o Thm chc nng chn ch chi Ngi - Ngi, My - My

- 16 -

CHNG V. KT QUChng trnh hot ng kh tt, khng gp li trong qu trnh s dng, my tnh kh thng minh, nu ai mi chi c ny th ch c th chi vi su tm kim bng 1, chi vi kh cao hn ( su tm kim t 3 tr ln) v thng c my l mt iu kh kh khn. Khi cho chng trnh ny chi vi cc chng trnh trn web khc n u c th d dng thng cc chng trnh trn web . Chng trnh hot ng thnh cng

- 17 -

CHNG VI. CNG NGH V THUT TON S DNGI. NGN NG LP TRNH JAVAJava l ngn ng thun hng i tng c pht trin bi Sun Microsystems vo nm 1991 nh l mt d n nghin cu hp tc ni b vi tn m l Green. Sun chnh thc cng b Java trong mt hi ngh cng nghip vo nn 1995. Java thu ht c s ch ca cng ng kinh doanh bi s cun ht n k l ca World Wide Web. Java by gi c s dng pht trin cc ng dng doanh nghip quy m ln, tng cng cc chc nng ca cc web server, cung cp cc ng dng cho cc thit b ca khch hng v rt nhiu mc ch khc.

II. NETBEANNetbeans l g ?

Netbeans l mt d n m ngun thnh cng vi qui m s dng rng ln, mt cng ng ang pht trin mnh v c gn 100 (v vn cn tng) i tc trn ton th gii. Cng ty Sun Microsystems khi u cho d n m ngun m ny vo thng 6 nm 2000 v vn tip tc l ngi ti tr chnh cho d n. Vo thi im hin ti ang c 2 sn phm: Netbeans IDE v Netbeans Platforms. The NetBeans IDEl mi trng pht trin mt cng c dnh cho lp trnh vin vit, bin dch, g li (debug) v trin khai (deploy) chng trnh. Chung trnh c vit bng Java nhng c th h tr bt k ngn ng lp trnh no. C mt s lng rt ln cc module cho php m rng Netbeans IDE. Netbeans IDE l mt sn phm min ph v khng c gii hn no trong vic s dng n. Bn cnh cn c NetBeans Platform; mt tp hp module v cc thnh phn m rng c s dng nh mt nn tng chung cho vic to cc ng dng desktop ln. Cc i tc ISV (independent software vendor - Cc nh cung cp phn mm c lp) cung cp cc plug-in d dng tch hp vo Platform v cng c th c s dng pht trin cc cng c v gii php ca ring h. C hai sn phm u l m ngun m v min ph cho mc ch thng mi v phi thng mi. M ngun c cung cp v cho php s dng li di giy php CDDL (Common Development and Distribution License) . - 18 -

III. GAME ENGINE JGame

Khi qut game engineV c bn, khi nim ca game engine khng qu phc tp: n l mt thc th bao gm nhng cng vic lin quan n pht trin game nh v, m phng vt l, cc ngun tng tc vi game nhng nh pht trin (ho s, nh thit k, nh vit kch bn v c nhng nh lp trnh) c th ton tm tp trung vo vic pht trin chi tit ni dung ca game.

JGame - Java game engine for 2D games JGame l mt cng c m ngun m dng xy dng tr chi 2D (Game engine), c th chy trn mi nn tng Java 1.2 + JRE, cng nh J2ME. N cung cp mt framwork bc cao cho php pht trin cc tr chi arcade loi c in. Cc tr chi c s dng JGame c th chy bng rt nhiu cch m khng yu cu bt k thay i no trong cc m: cc ng dng thng thng, webstart, applets, hay MIDlets. ho c can t ng va vi mi kch c mn hnh, t thit b di ng nh nht n ton mn hnh my PC.

- 19 -

TI LIU THAM KHOBi ging Tr tu nhn to thy Nguyn Nht Quanghttp://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html

- 20 -