1ç§éã«113åãããã¯äŒžã³ãããã«åŒã£åŒµããŸãã 確èªãæ¥ãå Žåãã·ã°ãã«-ããã¯åæ¢ããå¯èœæ§ããããåæ¢ããŸããã ããã¯æã䌞ã°ãããããŸã§ã«ãªãæ°ããæ¹æ³ãèŠã€ããŸãã å³èã§å匷ããŸãã äœãããŠããã®ãããããŸãã...
ãžã§ãŒã ãºã»ã³ãªãŒãã·ãã¬ã®ç«ãäžè¬çã«ã匷åãªAIã²ãŒã ã¯ç§ã®åªå
äºé
ã§ã¯ãããŸããã ç¹æ®ãªã²ãŒã ãšã³ãžã³ãšç«¶äºããã®ã¯æãã§ãæ®éçã§ãããã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãšããŠãã©ãŠã¶ã«çµã¿èŸŒãŸããã·ã³ã°ã«ã¹ã¬ããJavaScriptã®ã¿ãæã£ãŠããŸãã ããã«ãè€éãªAIã®å¿
èŠæ§ããŸã£ããçããªãã²ãŒã ãããã€ããããŸãã ããã§ã¯ãããšãã°ãAIå
šäœ
ãæççµè·¯ã
èŠã€ããããšã«ãªãã
ãã®ã²ãŒã ã§ã¯ã¿ã¹ã¯ã¯ã¿ã¹ã¯ã«å®å
šã«å¯Ÿå¿ããŸãã æ®å¿µãªããããã®ãããªã²ãŒã ã¯ã«ãŒã«ãããäŸå€ã§ããå¯èœæ§ãé«ãã§ãã å€ãã®å ŽåãåçŽã«ã°ãããŠãããšã¯æããªãåããããã°ã©ã ãè¡ãããã«äžçæžåœåãå¿
èŠããããŸãã
ç§ã®
ãããžã§ã¯ãã®ç®æšã¯ãããŒãã²ãŒã ãæ®åãããããšã§ãã ããŸãç¥ãããŠããªãããŸãã¯å¿ããããããŒãã²ãŒã ãæ¢ããŠããããã埩掻ãããããšããŠããŸãã ããŸããŸãªã²ãŒã ïŒ2人以äžã®ãã¬ã€ã€ãŒã®ããã®ãå€ä»£ãçŸä»£ãè€éã§éåžžã«åäŸåãã 1人ã®ãã¬ãŒã€ãŒã§ãïŒããºã«ãã²ãŒã ã§ãïŒã åºæºã¯1ã€ã ãã§ã-
ã²ãŒã ã¯é¢çœãã¯ãã§ãïŒ å°ãªããšãç§ã«ã¯ã
ãããžã§ã¯ãéçºã®çŸåšã®æ®µéã§ã¯ããµãŒããŒéšåã¯ãJavaScriptã³ãŒãã䌎ãHTMLããŒãžã®ã»ãããããå°ãªããšãäœããã®åœ¢ã§è€éã«ãªãããšãæå³ããŠããŸããã ã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ããã«ãããŒã«ã«ãå«ãææ°ã®Webãã©ãŠã¶ã§ã²ãŒã ãããŒãããŠåäœããããã ããããçš®é¡ã®ç«¶äºãæ Œä»ãããããŠäººéå士ã®çžäºäœçšã«é¢é£ãããã¹ãŠ-ããã¯ãã¹ãŠç§ã®ãããžã§ã¯ãã«é¢ãããã®ã§ã¯ãããŸããã ãããããããªãã§ãããããè¿ãå°æ¥ã«ã¯ã»ãšãã©ãããŸããã
ãããŠãããã§ããããšãã®å¶åŸ¡ã¢ã«ãŽãªãºã ã®éçºãåé¢ã«åºãŠããŸãã ã€ãŸããã²ãŒã ã®ã«ãŒã«ãæãå®å
šã«å¶åŸ¡ã§ããã€ã³ã¿ã©ã¯ãã£ããªããŒãã¯ç¢ºãã«åªããŠããŸãããã²ãŒã ã«å®å
šã«äžæ
£ããªäººã«èå³ãæãããã«ã¯ã圌ãšéã¶å¿
èŠããããŸãã ãããŠã人ã
å士ã®ã²ãŒã ã¯ãŸã æäŸãããŠããªãããããããã«å¯ŸåŠããå¿
èŠããããŸãã
åºæ¬çãªæ¬èœ
ç§ãèšã£ãããã«ããã·ã³ãæ¬èœã»ã©å€ãã®ç¥æ§ãå¿
èŠãšããªãã²ãŒã ããããŸãã ãããŠãããã¯ã²ãŒã ãæªããšããæå³ã§ã¯ãããŸããïŒ ååãšããŠããã®ãããªã²ãŒã ã¯é察称ã§ãã ããŒãã£ãŒã®1ã€ããåµé çãªã¢ãããŒããå¿
èŠã§ãïŒäººããããè¡ããŸãïŒãå察åŽã®ã²ãŒã ã¯ããæ¥åžžçã§ãã ãã®ãããªã²ãŒã ã®è¯ã
äŸãããã«ãããŸãã
ãã®åŽã«å®å
šãªãã§ã¹ãè»éããããã®ã§ããã§ã¹éšå£«ãšå¥³çã®åããçµã¿åãããŠãããã©ãžã£ã ããæãŸããïŒé£ã¹ãïŒå¿
èŠããããŸãã ããã¯éåžžã«åŒ·åãªäœåã§ããããã¯ã€ããæ£ãããã¬ãŒããã°ãçµæã¯åœç¶ã®çµè«ã§ãã äžæ¹ãé»ã®ããã«éã¶ããšã¯éåžžã«ç°¡åã§ãã
ãããã®å®è£
ã¯ã©ã³ãã ãšå€§å·®
ãããŸããã 圌ã¯æ¬¡ã®ããšãè¡ããŸãã
- å©çšå¯èœãªãã¹ãŠã®åãã®äžã§ãåå©ã«çŽæ¥ã€ãªããåããæ¢ããŸãïŒãã®å Žåãããã¯çžæã®çã®æ»ç¥ã§ãïŒ
- ãã®ãããªåãããªãå Žåã圌ã¯çžæã®é§ã奪ãåããæ±ããå ±åŸ©æ»æã®ä»£ããã«ããã©ãžã£ã䜿ããŸãã
- é©åãªåãããªãå Žå-å®å
šãªåããããŸã
- å®å
šãªåãããªãå Žåãããã³ãå¥ã®ãããã«æž¡ããŸãïŒéåžžã¯ã©ã³ãã ïŒ
å¥åŠãªããšã«ããã®ãããªåçŽãªæŠç¥ã¯å€ãã®ã²ãŒã ã«é©ããŠããŸãã ãããã«ãããæåã®è¿äŒŒã«ã ããã¯ããªããšããŸããã¯ãªãã€ã¯ã«ãŒã«ãæã€ãããª
ã²ãŒã ã§ãã é§ã3æ以äžã®å¯ŸæŠçžæã§è
ããããå ŽåïŒãã§ã¹ã¯ã€ãŒã³ã®èŠåã«åŸã£ãŠïŒãé§ã¯ããã«ããŒãããåé€ãããŸãã
å¥ã®äŸã瀺ããŸãã ã
äžé士 ãã§ã¯ãæç²ã¯æµã®1人ã ãã«ãã£ãŠè¡ãããŸãããåã¿ãŒã³ã«è¡ãããŸãã ä»ã®ãã¬ã€ã€ãŒã®ã¿ã¹ã¯ã¯ããé士ããåãåçŽãŸãã¯æ°Žå¹³ã«ãªãããã«éãããšã§ãã ç®æšãéæããããã©ã¡ãã®åŽã次ã®åããã§ããªãå Žåããé士ããåã¡ãŸãïŒ
ãé士ãã®ããã«éãã§ãããšãã©ã³ãã ãªå®¶ã§ããŸãããããšãã§ããŸãããå¥ã®å®å
šãªåããçšæããŠãã³ã³ãã¥ãŒã¿ã誀ã£ãŠäžŠãã§ããŸãã®ã¯æ®å¿µã§ãã ãããã¯ãã
æ
éã«ãã¬ã€ãã
å¿
èŠããããŸãã ã³ãŒãã¯å¯èœãªéãåçŽã§ãã
ã»ãŒãã©ã³ã®éžæCarefulAi.prototype.getMove = function(ctx) { var result = [];
ãã¡ããããããã¯ããè€éãªã¢ã«ãŽãªãºã ã䜿çšããŠãããã®ã²ãŒã ãããè¯ããã¬ã€ãããšã¯èšããŸããããæãåçŽãªãœãªã¥ãŒã·ã§ã³ã«ã¯ç¬èªã®ã¢ããªã±ãŒã·ã§ã³ããããŸãïŒããšãã°ã
ã©ã³ãã ãã¬ãŒã€ãŒã¯å¿
èŠãªã²ãŒã ã§ãµã€ã³ããæ¯ãããšãã§ããŸãïŒã ããã«ãåçŽãªã¢ã«ãŽãªãºã ã«ã¯1ã€ã®éèŠãªå©ç¹ããããŸãã 圌ãã¯éåžžã«é«éã«åäœããŸãã
äžäººçšã²ãŒã
ããºã«ã®å Žåãã²ãŒã AIã¯ãããªãã®æããæºãããæ¹æ³ã»ã©å¿
èŠã§ã¯ãããŸããã æçµçã«ã¯ããã®äººãèªåã§è§£æ±ºãããšæ³å®ãããŠããŸãïŒ äžæ¹ãã³ã³ãã¥ãŒã¿ãŒãããªãã®å Žæã§ããºã«ã解ãããšããæ§åãééãªãèŠãããšãã§ããŸãã
åçŽãª
æ€çŽ¢ã¢ã«ãŽãªãºã ïŒãã®ã¯ã©ã¹ã®ããºã«ã«ããã»ã©å¹æçãªãã®ã¯ãŸã çºæãããŠããŸããïŒã äœçœ®ãç¹°ãè¿ãããªãããã«ããã«ã¯ã
Zobrist Hashã䜿çšããŸãã ãã®ãããªã§ã¯ãåäžã®æ£æ¹åœ¢ãäºãã«é·ãããŠã¯ã«ãããŠããããšãããããŸãã ããã¯ããããããããã
ç°ãªã圢ç¶ãšèŠãªããŠããããã§ãã ããã¯
ç°¡åã«ä¿®æ£
ã§ããŸãã çŸåšããœãªã¥ãŒã·ã§ã³ã¯ã¯ããã«é«éã§ãã
å人çã«éåžžã«ãããããããã1ã€ã®ãã€ã³ãã¯ãããããããŸã£ããã«ããããæ°ã¹ããããšãã倧äºãªç®æšã«å°éããåã«ãã暪ã«ãã¹ããããåããããã«30åãã€ã¹ãåãããŠããœãªã¥ãŒã·ã§ã³ããããã«é ãã«ç§»åã§ããããšã§ããã ãã®åé¡ã解決ããããã«ã移åãã¢ãã¡ãŒã·ã§ã³åããããã«å²ãåœãŠãããæéã䜿çšããŸããã 人éã«ã¯ã»ãšãã©èŠããªã100ããªç§ã®éãäœçŸãã®äœçœ®ã䞊ã¹æ¿ããããšãã§ããŸãã
åé²ãã var x = []; var queue = [ ctx.board ]; var timestamp = Date.now(); while ((Date.now() - timestamp < this.params.AI_FRAME) && queue.length > 0) { var board = queue.shift(); var moves = cache(x, board); if (board.checkGoals(Dagaz.Model.getDesign(), board.player) != 0) { return { done: true, move: traceMove(ctx, board), ai: "win" }; } for (var i = 1; i < moves.length; i++) { var b = board.apply(moves[i]); var k = getKey(b); if (_.isUndefined(x.cache[k]) && !isLoop(ctx, b)) { queue.push(b); } } } ...
æéãããã°ããããããªåããããã ãã§ãã ç®æšãèŠã€ãã£ããããŸã£ããã«è¡ããŸãïŒ ãã®ãããã®åäœã¯éåžžã«æçœã§ãããåé¡ã解決ããæè¯ã®æ¹æ³ã䜿çšããŠããŸããã 解決çãèŠã€ãã£ãåŸãæåã«ã¢ãã¡ãŒã·ã§ã³ãå®è¡ããããã«ããå€ãã®æéãè²»ããæ¹ãè³¢æã§ãããã ããã¯ãŸãã«ããœãªãã£ã¢ãœãªãã£ã¢ã²ãŒã ã解決ããããã®ããããéçºãããšãã«ãã£ãããšã§ãã
ã©ã€ããããã®äŸã«åŸã£ãŠããã®åé¡ãå察æ¹åã«è§£æ±ºããŸããã€ãŸããããŒãã®äžå€®ã«1ã€ã®ããããç«ãŠãéã®åããå®è¡ããŠãå
ã®ããŒã¹ãäœæããããšããŸãã ãã®è§åºŠãããã¿ã¹ã¯ã¯ãéåžžã®
æ»ãæ€çŽ¢ã«èŠçŽãã
ãŸã ã ãã°ã®äžéšã次ã«ç€ºããŸãã
äžéšã®ããã¹ãç®æšïŒ10,16,17,18,24,31
çŸåšïŒ22.23
çŸåšïŒ22.25.24
çŸåšïŒ22,27,24,26
çŸåšïŒ22,27,38,26,31
çŸåšïŒ24,27,38,26,31,23
çŸåšïŒ22,27,38,24,31,25
çŸåšïŒ22,27,38,26,29,30
çŸåšïŒ22,27,38,26,33,32
çŸåšïŒ22,27,38,26,17,24
çŸåšïŒ22,27,10,26,17
çŸåšïŒ24,27,10,26,17,23
çŸåšïŒ22,27,10,24,17,25
çŸåšïŒ22,27,10,26,15,16
çŸåšïŒ22,27,10,26,19,18
çŸåšïŒ22,27,10,26,31,24
çŸåšïŒ22,39,24,32
çŸåšïŒ22,37,24,32,38
çŸåšïŒ22,23,24,32,38,30
çŸåšïŒ22,37,26,32,38,25
çŸåšïŒ22,37,10,32,38,17
çŸåšïŒ22,37,24,30,38,31
çŸåšïŒ22,37,24,34,38,33
çŸåšïŒ22,37,24,46,38,39
çŸåšïŒ22,37,24,18,38,25
...
6çµã®äœçœ®ã«éããåŸãæ€çŽ¢ãäžæããããšã«æ°ä»ããããããŸããïŒæ±ããããŠãããœãªãã£ã¢ã¯ããã®ãããªæ°ã®æ°åã§æ§æãããŠããŸããïŒã ãã¡ããããããå¯äžã®æé©åã§ã¯ãããŸããã äžèšã®åçŽãªã¢ãããŒãã§ã¯ãäœçœ®ãç¹°ãè¿ãããšãã§ããŸãã ãã€ãã®ããã«ãäœçœ®ã®ç¹°ãè¿ãã«é¢ããŠã¯ãZobrist Hashãå©ãã«ãªããŸãïŒå®éãããã¯ãã£ãšæ©ã圹ç«ã¡ãŸãïŒäœçœ®ãæ¯èŒããåã«ãèŠçŽ ããšã«ããã·ã¥ãæ¯èŒããæ¹ãã¯ããã«å¹ççã§ãïŒã
ã¡ãªã¿ã«ãã®ãããã®ãããã°ã§é¢çœãäºä»¶ããããŸããã ãã®ãããäž»ã«FireFoxã§éçºããã²ãŒã ãèµ·åããChromeãšIEã§ããããæã
ãã§ãã¯ããã ãã§ããã äžåºŠããªãªãŒã¹ãã¢ããããŒããããšãIEãšFireFoxã§ã¯åé¡ãªãåäœããsolitaire-aiããChromeã§ã¯10åé
ããªãããšãå€æããŸããïŒ ããã»ã©éèŠã§ã¯ãããŸããã§ããããéåžžã«å¥åŠã§ãã
ç¶æ³ãæ確ã«ããããã«ããããã¡ã€ã©ãŒã䜿çšããå¿
èŠããããŸããã ãã®çµæãChromeã®ãã¬ãŒãã®åå ã¯ãã®console.logã§ããããšãå€æããŸããã ã³ã³ãœãŒã«èªäœãéããŠããå Žåã§ãã ã³ã³ãœãŒã«åºåãåé€ããåŸããã¹ãŠãã»ãŒåãé床ã§åäœããŸããã ãã®ç©èªã®æèšã¯éåžžã«åçŽã§ãã ïŒããšãã°ãããã°ç®çã§ïŒå€§éã®ããã¹ããåºåããå¿
èŠãããããã®ããã«console.logã䜿çšããå Žåã¯ãããäžåºŠèããŠãã ããã
ããºã«ã§ããããç·Žç¿ããã®ã§ãããã«è€éãªåé¡ã«é²ãããšãã§ããŸãã
䌞ã³ã
ãã§ã¹ããã§ãã«ãŒãªã©ã®ããã»ã©æ·±å»ã§ã¯ãªãã²ãŒã ã®å Žåãäžèšã§èª¬æãããã¹ãŠãããè€éãªAIãå¿
èŠã«ãªãããšã¯æããã§ãã æŠããŠãéžæã¯å°ããïŒMinimaxããã®ã
ã¢ã«ãã¡-ããŒã¿ã¯ãªããã³ã° ãããã³ã
ã¢ã³ãã«ã«ã ãæ³ïŒããã³ãããäž¡æ¹ã®Habrã«é¢ããçŽ æŽãããèšäºããããŸãïŒã ãããã®ã¢ãããŒãã¯ããããæ®éçã§ãã ããããã«é·æãšçæããããŸãã å®å
šãªã¬ãã¥ãŒã§ãããšäž»åŒµããããšãªããé ã«æµ®ãã¶æåã®ãã®ããªã¹ãããŸãã
- ããããã¯ã¹ææ³ã䜿çšããã«ã¯ãäœçœ®ãè©äŸ¡ããé¢æ°ãå®çŸ©ããå¿
èŠããããŸãïŒçµéšã®ããããŒãã²ãŒã ã®éçºè
ãšããŠãäžéšã®ã²ãŒã ã§ã¯ãããéåžžã«é£ããå ŽåããããŸãïŒã
- ã¢ã«ãã¡ããŒã¿ã¯ãªããã³ã°ã¯ãæ·±ãæ€çŽ¢ãŸãã¯çµåæ€çŽ¢ãå®è¡ããå Žåã«ç¹ã«å¹æçã§ãïŒå¹
ãäžå®ã®ä¿èšŒãããæ·±ããããšãã°2ã3移åãŸã§ããã®åŸãæ·±ãã¯Nã¬ãã«ä»¥äžïŒã ããã«ãããã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãéãããŠããç¶æ³ã§ã¯äžé©åã«ãªããæãéèŠãªããšãšããŠãå¿
èŠã«å¿ããŠæå®ãããæéãŸã§ã«åçãåºåããŸãïŒééããå Žåã¯ç¥èã®ãã人ã«èšæ£ããŠããããŸãïŒã
- ã¢ã«ãã¡-ããŒã¿ã¯ãªããã³ã°ã®æå¹æ§ã¯ãåãã®äºåçãªã©ã³ãã³ã°ããã®å質å¥ã«é©çšããããšã§å€§å¹
ã«æ¹åã§ããŸãïŒä»¥äžã§èª¬æããããã«ãã¢ã³ãã«ã«ãæ³ã䜿çšããå Žåããã®ãããªãã¥ãŒãªã¹ãã£ãã¯ã圹ç«ã¡ãŸãïŒã
- ããããã¯ã¹æ³ã䜿çšããå Žåãæ·±ãæ€åºãä»»æã®å Žæã§åæ¢ããããšã¯ã§ããŸããã ãã§ãã«ãŒããã§ã¹ã§é§ãåããªã©ã®åŒ·å¶çãªåããçºèŠãããå Žåããããç©ãããªãäœçœ®ãçãããŸã§æ€çŽ¢ãç¶ç¶ããå¿
èŠããããŸãã
- ã¢ã³ãã«ã«ãæ³ã䜿çšããå Žåãã·ãã¥ã¬ãŒã·ã§ã³ã¯ã¿ãŒããã«ã®äœçœ®ïŒãã¬ã€ã€ãŒã®1人ã®åå©ãŸãã¯åŒãåãã®èªèïŒã«å¯ŸããŠå®è¡ãããŸãã ããŒãã£ãŒæéãé·ãã²ãŒã ã§ã¯ããããåé¡ã«ãªãå¯èœæ§ããããŸãã
ããããã¹ãŠã®èæ
®äºé
ãèæ
®ããŠãããããã¯ã¹æ³ãå®å
šã«èæ
®ããã«ãçŸåšã®å埩ã§ã¯ã
ã¢ã³ãã«ã«ãæ³ã«çŠç¹ãåœãŠãããšã決å®ããŸããïŒãã¡ãããããã«é©ããã¿ã¹ã¯ãéžæããŸãïŒã ã¢ã«ãŽãªãºã ããã¹ãããã²ãŒã ã®1ã€ãšããŠãç§ã¯éåœã®åäŸåãã²ãŒã ã§ããã
4éæ²³éããéžæããŸããã
ããã¯ããã£ããã£ã䜿çšããã·ã³ãã«ãªã²ãŒã ã§ããã®ç®çã¯æµãããã¹ãŠã®ããŒã¹ãŸãã¯ç§»åã®å¯èœæ§ã奪ãããšã§ãã æ²³éã§ã®æç²ã¯ããªãç¬ç¹ã§ãã 察æŠçžæã®é§ãæŸãã«ã¯ããã®é§ã®1ã€ãå¥ã®é§ã«ãžã£ã³ããããŠãçéžãããå¿
èŠããããŸãïŒããã«ãããããŒãã¯åæäœçœ®ã§é§ã§å®å
šã«æºããããŠããã«ãããããããã²ãŒã ãéå§ã§ããŸãïŒã 移åã®1ã€ãèšç®ãããšãã®ãããã°åºåã次ã«ç€ºããŸãïŒå¶éæéã3ç§ïŒïŒ
ãããã°ãã°ãã¬ã€ã€ãŒïŒé»
d2-c2
ç®æšïŒ1; æ·±ãïŒ26; ãã¬ãŒã€ãŒïŒ1; P1ïŒa2; P2ïŒa4ãa3ãb3ãc3ãc2
ç®æšïŒ1; æ·±ãïŒ20; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãb4ãc4ãd4ãb3
ç®æšïŒ1; æ·±ãïŒ16; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãb4ãd4ãa3ãc3ãd3
ç®æšïŒ1; æ·±ãïŒ34; ãã¬ãŒã€ãŒïŒ1; P1ïŒc2; P2ïŒa4ãb4ãd4ãb3
ç®æšïŒ1; æ·±ãïŒ22; ãã¬ãŒã€ãŒïŒ1; P1ïŒc3; P2ïŒa3ãb3ãd3ãb2ãd2
ç®æšïŒ1; æ·±ãïŒ24; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãb4ãc3ãb2ãc2
ç®æšïŒ1; æ·±ãïŒ30; ãã¬ãŒã€ãŒïŒ1; P1ïŒd2; P2ïŒa4ãc4ãb3ãb2
ç®æšïŒ1; æ·±ãïŒ12; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãb4ãc4ãb3ãd3ãd2
ç®æšïŒ1; æ·±ãïŒ34; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãb4ãa3ãc1
ç®æšïŒ1; æ·±ãïŒ60; ãã¬ãŒã€ãŒïŒ1; P1ïŒd2; P2ïŒa4ãb4ãb3ãb1ãc1
ç®æšïŒ1; æ·±ãïŒ34; ãã¬ãŒã€ãŒïŒ1; P1ïŒd2; P2ïŒa3ãc2ãa1ãb1
ç®æšïŒ1; æ·±ãïŒ36; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãd4ãa3ãd3ãc2
ç®æšïŒ1; æ·±ãïŒ32; ãã¬ãŒã€ãŒïŒ1; P1ïŒc1; P2ïŒb4ãa3ãc3ãa2ãc2
ç®æšïŒ1; æ·±ãïŒ24; ãã¬ãŒã€ãŒïŒ1; P1ïŒc2; P2ïŒb3ãb2
ç®æšïŒ1; æ·±ãïŒ70; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒb3ãb2
ç®æšïŒ1; æ·±ãïŒ38; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãb4ãc3ãa2ãb2
ç®æšïŒ1; æ·±ãïŒ28; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãd4ãb3ãc3ãc2
ç®æšïŒ1; æ·±ãïŒ34; ãã¬ãŒã€ãŒïŒ1; P1ïŒb2; P2ïŒa4ãb4ãd4ãa3ãd3
ç®æšïŒ1; æ·±ãïŒ20; ãã¬ãŒã€ãŒïŒ1; P1ïŒc1; P2ïŒa4ãb4ãc4ãd4ãa3ãc3
ç®æšïŒ1; æ·±ãïŒ18; ãã¬ãŒã€ãŒïŒ1; P1ïŒc2; P2ïŒa4ãc4ãa3ãc3ãb2ãd1
ç®æšïŒ1; æ·±ãïŒ28; ãã¬ãŒã€ãŒïŒ1; P1ïŒa2; P2ïŒd4ãc3ãd3ãc2
ç®æšïŒ1; æ·±ãïŒ34; ãã¬ãŒã€ãŒïŒ1; P1ïŒd1; P2ïŒb4ãa3ãb3ãd3ãa2
ç®æšïŒ1; æ·±ãïŒ30; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒa4ãa3ãb3ãc3ãb2ãc2
ç®æšïŒ1; æ·±ãïŒ36; ãã¬ãŒã€ãŒïŒ1; P1ïŒa2; P2ïŒb4ãa3ãb3
ç®æšïŒ1; æ·±ãïŒ24; ãã¬ãŒã€ãŒïŒ1; P1ïŒc1; P2ïŒb4ãa3ãb3ãd3
ç®æšïŒ1; æ·±ãïŒ36; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãc3ãa2ãc2
ç®æšïŒ1; æ·±ãïŒ22; ãã¬ãŒã€ãŒïŒ1; P1ïŒc1; P2ïŒa4ãb4ãc4ãd4ãb2ãc2
ç®æšïŒ1; æ·±ãïŒ38; ãã¬ãŒã€ãŒïŒ1; P1ïŒc3; P2ïŒa4ãd4ãb3ãb2ãc2
ç®æšïŒ1; æ·±ãïŒ46; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãb4ãc4ãb2ãc2
ç®æšïŒ1; æ·±ãïŒ38; ãã¬ãŒã€ãŒïŒ1; P1ïŒa1; P2ïŒa4ãb4ãd3ãc2ãd2
ç®æšïŒ1; æ·±ãïŒ28; ãã¬ãŒã€ãŒïŒ1; P1ïŒb1; P2ïŒb4ãc4ãd4ãc3ãa2
ç®æšïŒ1; æ·±ãïŒ20; ãã¬ãŒã€ãŒïŒ1; P1ïŒd2; P2ïŒa4ãb4ãc4ãb3ãc2
ç®æšïŒ1; æ·±ãïŒ20; ãã¬ãŒã€ãŒïŒ1; P1ïŒc1; P2ïŒa4ãb3ãc3ãb2
ç®æšïŒ1; æ·±ãïŒ48; ãã¬ãŒã€ãŒïŒ1; P1ïŒd1; P2ïŒa3ãa2ãb2
åã¡= 5; ãã¹ãŠ= 11; 移å= d3-c3
åã¡= 6; ãã¹ãŠ= 12; 移å= d3-d2
åã¡= 13; ãã¹ãŠ= 18; 移å= a3-b3
åã¡= 7; ãã¹ãŠ= 13; 移å= c4-c3
åã¡= 3; ãã¹ãŠ= 8; 移å= b4-b3
ãã¬ã€ã€ãŒïŒçœ
a3-b3
ç§ãã¡ã®ç®ã®åã«ãã®ãããªçµè«ããããšãã¢ã«ãŽãªãºã ã®æ£ç¢ºããè©äŸ¡ã§ããŸãã æåã«æ³šæããå¿
èŠãããã®ã¯ãã¢ã«ãŽãªãºã ã«ãã£ãŠèšé²ããããç®æšãããã²ãŒã ã®ã«ãŒã«ã«åŸã£ãŠãã¬ãŒã€ãŒã®ç®æšã«å¯Ÿå¿ããŠãããã©ããã§ãã ãããã°ã®éçšã§ãã¢ã«ãŽãªãºã ãåã«ãnot thatããæ€çŽ¢ããããšããç¶æ³ãããã€ããããŸããã ãã¹ãŠãç®æšãæºãããŠããã°ãåãã®è©äŸ¡ã確èªããŸãïŒWinã¯èšé²ãããåå©ã®æ°ãAllã¯ãã¬ã€ãããã²ãŒã ã®åèšæ°ã§ãïŒã UCTã®ãç®±ããåºããŠãã¯ãååãšããŠæ©èœããŸãããæªãã¯ãããŸããããããã€ãã®å€æŽãè¡ããŸããã
- éå®ãããæ€çŽ¢æ·±åºŠïŒããã©ã«ãã§ã¯100ïŒ
- 移åã®ãã¥ãŒãªã¹ãã£ãã¯ãè¿œå
æ²³éã®å Žåããã¥ãŒãªã¹ãã£ãã¯ã¯æ¬¡ã®ãšããã§ãã Dagaz.AI.heuristic = function(ai, design, board, move) { var r = 1; if (move.actions.length > 0) { var pos = move.actions[0][1][0]; if (board.getPiece(pos) !== null) { r += 9; } } return r; }
ã€ãŸãããã£ããã£ã¯ããµã€ã¬ã³ããã ãŒãããã10åæãŸããã§ãã ããã§ãããããã¯ã¹æ³ãšã¯ç°ãªããã¢ã³ãã«ã«ãã§ã®ãœãŒãã®åãïŒãã¥ãŒãªã¹ãã£ãã¯ã«ããïŒã¯åœ¹ã«ç«ããªãããšã«æ³šæããŠãã ããã åããéžæãã確çããã®çºèŠçæšå®ã«æ¯äŸãããããªæ¹æ³ã§ã¢ã«ãŽãªãºã ãæ§ç¯ããå¿
èŠããããŸãã äž¡æ¹ã®ã€ãããŒã·ã§ã³ã¯ãæ²³éã®ããã«è¡ãããåå©/ã²ãŒã ã®çµ±èšã«å¥œåœ±é¿ãäžããç§ã¯ä»ã®ã²ãŒã ãåãäžããŸããã
ãã®
ã²ãŒã ã«ã¯ãã€ã¯ã¯ãããŸããã åã€ããã«ã¯ããã£ãŒã«ãå
šäœã«ããŒã¹ãåŒããããŒãããããããåé€ããå¿
èŠããããŸãïŒããã¯åããšèŠãªãããŸãïŒã ïŒçŽäº€ç·ã«æ²¿ã£ãŠïŒåæ¹ãå·Šå³ã«ã®ã¿ç§»åã§ããŸãã æµã®é§ã¯åãã«åçŽã«åããééãé²ããŸãã æµã®ããŒã¹ãããã¯ããããšã¯äžå¯èœã§ãïŒ æãããªæ°åããªãç¹ã«ã€ããŠã¯ãã²ãŒã ã¯ããªãæ·±ãã§ãã
ã䜿ãã®ã³ã³ãã¥ãŒã¿ãŒã§åçããŠã¿ãŠ
ãã ãã ã
ãã¥ãŒãªã¹ãã£ãã¯ã¯ããªãæçœã§ã Dagaz.AI.heuristic = function(ai, design, board, move) { var r = 1; for (var i = 0; i < move.actions.length; i++) { if ((move.actions[i][0] !== null) && (move.actions[i][1] !== null)) { var d = move.actions[i][1][0] - move.actions[i][0][0]; if ((board.player == 1) && (d < -1)) { r += 10; } if ((board.player == 2) && (d == 1)) { r += 10; } } if ((move.actions[i][0] !== null) && (move.actions[i][1] === null)) { r += 5; } } return r; }
ããŒã¹ã暪ã«ç§»åããã®ã§ã¯ãªããåæ¹ã«ç§»åããå Žåããã®ç§»åãæãŸãããšèããŸãã
ãããã°ã«é¢ããŠã¯ãã²ãŒã ã¯å€§ããªããŒãäžã®ã¢ã«ãŽãªãºã ã®åäœã«é¢ããæ
å ±ãæäŸããŸããã 移åã®åå©æ°ã®æšå®å€ã¯ãã¹ãŠãå³åº§ã«ãŒãã«ãªã»ãããããŸãã ã¢ã«ãŽãªãºã ã«ã¯ãåäžã®åå©ãèŠã€ããæéããããŸããã§ããããã®çµæã圌ã¯åºäŒã£ãæåã®åããå§ããŸããïŒæé«ã§ã¯ãããŸããïŒã æ€çŽ¢ã®æ·±ããå¢ããããšã¯ããŸãå©ãã«ã¯ãªããŸããã§ãã-ã·ãã¥ã¬ãŒã·ã§ã³æ®µéã§ãã¬ã€ãããã²ãŒã ã®ãã¯ãªãã£ã«ã«ããªè³ªéãèšå®ããã«ã¯ã3ç§ã§ã¯æããã«ååã§ã¯ãããŸããã§ããã 移åãéžæãããšãã¯ããã¥ãŒãªã¹ãã£ãã¯ãèæ
®ããå¿
èŠããããŸããã
UCTã®å€æŽ function UctAi(params) { this.params = params; ... if (_.isUndefined(this.params.UCT_COEFF)) { this.params.UCT_COEFF = Math.sqrt(2); } } UctAi.prototype.getMove = function(ctx) { this.generate(ctx, ctx.board); ... var mx = null; for (var i = 0; i < ctx.childs.length; i++) { var u = 0; if (ctx.childs[i].win > 0) { u = ctx.childs[i].win / ctx.childs[i].all; } var h = this.heuristic(ctx.design, ctx.board, ctx.childs[i].move); var w = this.params.UCT_WEIGHT * u + (1 - this.params.UCT_WEIGHT) * h; if ((mx === null) || (w > mx)) { mx = w; ctx.result = ctx.childs[i].move; } console.log("Weight: " + w + "; Win = " + ctx.childs[i].win + "; All = " + ctx.childs[i].all + "; Move = " + ctx.childs[i].move.toString()); } ... }
ãã¥ãŒãªã¹ãã£ãã¯ãªåãã¯UCTãæäŸãããã®ããã確ãã«æªãã§ãããããã»ã©è€éã§ã¯ãªãã²ãŒã ã§ã¯ãUCTãæ©èœããç¬éãŸã§ã³ã³ãã¥ãŒã¿ãŒããçãæ®ããããšãã§ããŸãã éã¿ã¯ãã¢ã³ãã«ã«ãã¢ã«ãŽãªãºã ãæ©èœããªãå Žåã«ã®ã¿ãã¥ãŒãªã¹ãã£ãã¯ãé¡èãªå¹æãæã€ããã«éžæãããŸãã
次ã®ã²ãŒã ã¯äž
äœæž¡ã§ããã
åã«åœŒå¥³ã«ã€ããŠãã§ã«æžããã ããã¯ãã¢ã³ãã«ã«ãæ³ãããã§éåžžã«ããŸãæ©èœãããšããããšã§ã¯ãããŸããã ããã°ã©ã ã¯éåžžã«é©åãªåããããŸãããç®æšãèšå®ããŠãããããæã¡è² ããããšã¯ãŸã£ããé£ãããããŸããã
äž»ãªçç±ã¯ããã®ã²ãŒã ã®åçŽã§é©åãªãã¥ãŒãªã¹ãã£ãã¯ãæãä»ãããšãã§ããªãã£ãããã§ãã ãã®çµæãããã°ã©ã ã¯ãã®åãããã¿ãããããŸãã ååãªã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãããã°ãããã¯åé¡ã«ãªããŸããïŒå¿µã®ããããã®ã²ãŒã ã«ã¯ã¢ã³ãã«ã«ãã¢ã«ãŽãªãºã ãé©ããŠããŸãïŒãã1ã€ã®ã¹ã¬ããã§3ç§ã®åããèšç®ããããšã¯ãç§ãäœè£ãããæ倧å€ã§ãïŒãšããã§ãUCTã¯éåžžã«è¯ãå ŽåããããŸãè€æ°ã®ã¹ã¬ãããããå Žåã«ã¹ã±ãŒãªã³ã°ããŸãïŒã
ãã¡ãããç§ã«çŸåšå®è£
ãããŠãã圢åŒã®ã¢ã³ãã«ã«ãæ³ã¯ããã¹ãŠã®ã²ãŒã ã«é©ããŠããããã§ã¯ãããŸããã ç§ã¯åœŒã«å€¢äžã«ãªãã€ããã¯ãããŸããã ãã§ã¹ã®ãããªã²ãŒã ã§ã¯ãããããããããã¯ã¹ã®æ¹ãåªããŠããŸãã ç§ã¯ãŸã ãã®åé¡ãæ¢æ±ããæ©äŒããããŸãã ãŸããUCTã®çŸåšã®å®è£
ã®æ¹åã«ã€ããŠãèããŠããŸãã äœãè¯ããªããèŠãŠã¿ãŸãããã