N MN HC
TR 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
Thng 11/2010
-2-
MC LC
CHNG 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-
II. M T BI TON
1. 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-
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:
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.
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<Move> 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 -
- 11 -
Khi bt u tr chi
Mi 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 -
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 -
- 14 -
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 *
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
- 16 -
CHNG V. KT QU
Chng 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 -
II. NETBEAN
Netbeans 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 -
- 19 -
- 20 -